@@ -37,27 +37,27 @@ def example_quantity_da():
37
37
38
38
39
39
class TestQuantifyDataArray :
40
+ def test_attach_units_from_str (self , example_unitless_da ):
41
+ orig = example_unitless_da
42
+ result = orig .pint .quantify ('m' )
43
+ assert_array_equal (result .data .magnitude , orig .data )
44
+ # TODO better comparisons for when you can't access the unit_registry?
45
+ assert str (result .data .units ) == 'meter'
46
+
40
47
def test_attach_units_given_registry (self , example_unitless_da ):
41
48
orig = example_unitless_da
42
49
ureg = UnitRegistry (force_ndarray = True )
43
50
result = orig .pint .quantify ('m' , unit_registry = ureg )
44
51
assert_array_equal (result .data .magnitude , orig .data )
45
52
assert result .data .units == ureg .Unit ('m' )
46
53
47
- def test_attach_units (self , example_unitless_da ):
48
- orig = example_unitless_da
49
- result = orig .pint .quantify ('m' )
50
- assert_array_equal (result .data .magnitude , orig .data )
51
- # TODO better comparisons for when you can't access the unit_registry?
52
- assert str (result .data .units ) == 'meter'
53
-
54
54
def test_attach_units_from_attrs (self , example_unitless_da ):
55
55
orig = example_unitless_da
56
56
result = orig .pint .quantify ()
57
57
assert_array_equal (result .data .magnitude , orig .data )
58
58
assert str (result .data .units ) == 'meter'
59
59
60
- def test_attach_unit_class (self , example_unitless_da ):
60
+ def test_attach_units_given_unit_objs (self , example_unitless_da ):
61
61
orig = example_unitless_da
62
62
ureg = UnitRegistry (force_ndarray = True )
63
63
result = orig .pint .quantify (ureg .Unit ('m' ), unit_registry = ureg )
@@ -103,6 +103,29 @@ def test_roundtrip_data(self, example_unitless_da):
103
103
assert_equal (result , orig )
104
104
105
105
106
+ @pytest .fixture ()
107
+ def example_unitless_ds ():
108
+ users = np .linspace (0 , 10 , 20 )
109
+ funds = np .logspace (0 , 10 , 20 )
110
+ t = np .arange (20 )
111
+ ds = xr .Dataset (data_vars = {'users' : (['t' ], users ),
112
+ 'funds' : (['t' ], funds )},
113
+ coords = {"t" : t })
114
+ ds ['users' ].attrs ['units' ] = ''
115
+ ds ['funds' ].attrs ['units' ] = 'pound'
116
+ return ds
117
+
118
+ @pytest .fixture ()
119
+ def example_quantity_ds ():
120
+ users = np .linspace (0 , 10 , 20 ) * unit_registry .dimensionless
121
+ funds = np .logspace (0 , 10 , 20 ) * unit_registry .pound
122
+ t = np .arange (20 )
123
+ ds = xr .Dataset (data_vars = {'users' : (['t' ], users ),
124
+ 'funds' : (['t' ], funds )},
125
+ coords = {"t" : t })
126
+ return ds
127
+
128
+
106
129
@pytest .mark .skip (reason = "Not yet implemented" )
107
130
class TestPropertiesDataArray :
108
131
def test_units (self ):
@@ -121,16 +144,53 @@ def test_units(self):
121
144
...
122
145
123
146
124
- @pytest .mark .skip (reason = "Not yet implemented" )
125
147
class TestQuantifyDataSet :
126
- def test_attach_units (self ):
127
- ...
148
+ def test_attach_units_from_str (self , example_unitless_ds ):
149
+ orig = example_unitless_ds
150
+ result = orig .pint .quantify ()
151
+ assert_array_equal (result ['users' ].data .magnitude ,
152
+ orig ['users' ].data )
153
+ assert str (result ['users' ].data .units ) == 'dimensionless'
154
+
155
+ def test_attach_units_given_registry (self , example_unitless_ds ):
156
+ orig = example_unitless_ds
157
+ orig ['users' ].attrs .clear ()
158
+ result = orig .pint .quantify ({'users' : 'dimensionless' },
159
+ unit_registry = unit_registry )
160
+ assert_array_equal (result ['users' ].data .magnitude ,
161
+ orig ['users' ].data )
162
+ assert str (result ['users' ].data .units ) == 'dimensionless'
163
+
164
+ def test_attach_units_from_attrs (self , example_unitless_ds ):
165
+ orig = example_unitless_ds
166
+ orig ['users' ].attrs .clear ()
167
+ result = orig .pint .quantify ({'users' : 'dimensionless' })
168
+ assert_array_equal (result ['users' ].data .magnitude ,
169
+ orig ['users' ].data )
170
+ assert str (result ['users' ].data .units ) == 'dimensionless'
171
+
172
+ def test_attach_units_given_unit_objs (self , example_unitless_ds ):
173
+ orig = example_unitless_ds
174
+ orig ['users' ].attrs .clear ()
175
+ dimensionless = unit_registry .Unit ('dimensionless' )
176
+ result = orig .pint .quantify ({'users' : dimensionless })
177
+ assert_array_equal (result ['users' ].data .magnitude ,
178
+ orig ['users' ].data )
179
+ assert str (result ['users' ].data .units ) == 'dimensionless'
180
+
181
+ def test_error_when_already_units (self , example_quantity_ds ):
182
+ with raises_regex (ValueError , "already has units" ):
183
+ example_quantity_ds .pint .quantify ()
128
184
129
- def test_attach_str_units (self ):
130
- ...
185
+ def test_error_on_nonsense_units (self , example_unitless_ds ):
186
+ ds = example_unitless_ds
187
+ with pytest .raises (UndefinedUnitError ):
188
+ ds .pint .quantify (units = {'users' : 'aecjhbav' })
131
189
132
- def test_attach_units_from_registry (self ):
133
- ...
190
+
191
+ @pytest .mark .skip (reason = "Not yet implemented" )
192
+ class TestDequantifyDataSet :
193
+ ...
134
194
135
195
136
196
@pytest .mark .skip (reason = "Not yet implemented" )
0 commit comments