@@ -132,19 +132,34 @@ def test_add_variable_attributes(self):
132132
133133 def test_set_variable_values (self ):
134134 template = DatasetTemplate .from_json (TEMPLATE_JSON )
135- template .variables ['TEMP' ]['values ' ] = self .values10
136- self .assertTrue (all (template .variables ['TEMP' ]['values ' ] == self .values10 ))
135+ template .variables ['TEMP' ]['data ' ] = self .values10
136+ self .assertTrue (all (template .variables ['TEMP' ]['data ' ] == self .values10 ))
137137
138138 def test_create_empty_file (self ):
139139 template = DatasetTemplate ()
140140 template .to_netcdf (self .temp_nc_file )
141141 dataset = Dataset (self .temp_nc_file )
142142
143+ def test_create_empty_variable (self ):
144+ template = DatasetTemplate (dimensions = {'X' : 10 })
145+ template .variables ['X' ] = {'dimensions' : ['X' ], 'type' : 'float32' }
146+ self .assertRaises (ValueError , template .to_netcdf , self .temp_nc_file ) # not providing 'data' is an error
147+
148+ del self ._temp_nc_file # Get a new temp file
149+ template .variables ['X' ]['data' ] = None # This is ok, it's a shortcut for all fill values
150+ template .to_netcdf (self .temp_nc_file )
151+
152+ dataset = Dataset (self .temp_nc_file )
153+ dataset .set_auto_mask (True )
154+ dsx = dataset .variables ['X' ]
155+ self .assertIsInstance (dsx [:], np .ma .MaskedArray )
156+ self .assertTrue (dsx [:].mask .all ())
157+
143158 def test_create_file (self ):
144159 template = DatasetTemplate .from_json (TEMPLATE_JSON )
145- template .variables ['TIME' ]['values ' ] = self .values10
146- template .variables ['DEPTH' ]['values ' ] = self .values1
147- template .variables ['TEMP' ]['values ' ] = self .values10 .reshape ((10 , 1 ))
160+ template .variables ['TIME' ]['data ' ] = self .values10
161+ template .variables ['DEPTH' ]['data ' ] = self .values1
162+ template .variables ['TEMP' ]['data ' ] = self .values10 .reshape ((10 , 1 ))
148163 template .to_netcdf (self .temp_nc_file )
149164
150165 dataset = Dataset (self .temp_nc_file )
@@ -173,6 +188,43 @@ def test_create_file(self):
173188 ds_global_attributes = OrderedDict ((k , dataset .getncattr (k )) for k in dataset .ncattrs ())
174189 self .assertEqual (self .global_attributes , ds_global_attributes )
175190
191+ def test_fill_values (self ):
192+ template = DatasetTemplate (dimensions = {'X' : 10 })
193+ template .variables ['X' ] = {'dimensions' : ['X' ],
194+ 'type' : 'float32' ,
195+ 'attributes' : {'_FillValue' : - 999. }
196+ }
197+ x = np .array ([- 999. , - 999. , - 999. , - 999. , - 999. , 1. , 2. , 3. , 4. , 5 ])
198+ template .variables ['X' ]['data' ] = x
199+ template .to_netcdf (self .temp_nc_file )
200+
201+ dataset = Dataset (self .temp_nc_file )
202+ dataset .set_auto_mask (True )
203+ dsx = dataset .variables ['X' ]
204+ self .assertEqual (- 999. , dsx ._FillValue )
205+ self .assertIsInstance (dsx [:], np .ma .MaskedArray )
206+ self .assertTrue (dsx [:5 ].mask .all ())
207+ self .assertTrue ((dsx [5 :] == x [5 :]).all ())
208+
209+ def test_fill_values_from_masked_array (self ):
210+ template = DatasetTemplate (dimensions = {'X' : 10 })
211+ template .variables ['X' ] = {'dimensions' : ['X' ],
212+ 'type' : 'float32' ,
213+ 'attributes' : {'_FillValue' : - 999. }
214+ }
215+ x = np .array ([- 4 , - 3 , - 2 , - 1 , 0 , 1. , 2. , 3. , 4. , 5 ])
216+ template .variables ['X' ]['data' ] = np .ma .masked_array (x , mask = [True , True , True , True , True ,
217+ False , False , False , False , False ]
218+ )
219+ template .to_netcdf (self .temp_nc_file )
220+
221+ dataset = Dataset (self .temp_nc_file )
222+ dsx = dataset .variables ['X' ]
223+ self .assertEqual (- 999. , dsx ._FillValue )
224+ self .assertIsInstance (dsx [:], np .ma .MaskedArray )
225+ self .assertTrue (dsx [:5 ].mask .all ())
226+ self .assertTrue ((dsx [5 :] == x [5 :]).all ())
227+
176228# TODO: add data from multiple numpy arrays
177229# e.g. template.add_data(TIME=time_values, TEMP=temp_values, PRES=pres_values)
178230# TODO: add data from Pandas dataframe (later...)
0 commit comments