7
7
8
8
import pytest
9
9
from mpas_analysis .test import TestCase , loaddatadir
10
- from mpas_analysis .shared .mpas_xarray import mpas_xarray
10
+ from mpas_analysis .shared .MpasXarray import MpasXarray
11
11
import xarray as xr
12
12
import pandas as pd
13
13
14
14
15
15
@pytest .mark .usefixtures ("loaddatadir" )
16
- class TestNamelist (TestCase ):
16
+ class TestMpasXarray (TestCase ):
17
17
18
18
def test_subset_variables (self ):
19
19
fileName = str (self .datadir .join ('example_jan.nc' ))
@@ -22,35 +22,31 @@ def test_subset_variables(self):
22
22
23
23
# first, test loading the whole data set and then calling
24
24
# subset_variables explicitly
25
- ds = xr .open_mfdataset (
26
- fileName ,
27
- preprocess = lambda x : mpas_xarray .preprocess_mpas (x ,
28
- timestr = timestr ,
29
- yearoffset = 1850 ))
30
- ds = mpas_xarray .subset_variables (ds , varList )
25
+ mpasXarray = MpasXarray .MpasXarray ()
26
+ ds = mpasXarray .openMultifileDataSet (fileName ,
27
+ timeVariableName = timestr ,
28
+ yearOffset = 1850 )
29
+ ds = MpasXarray .subsetVariables (ds , varList )
31
30
self .assertEqual (sorted (ds .data_vars .keys ()), sorted (varList ))
32
31
self .assertEqual (pd .Timestamp (ds .Time .values [0 ]),
33
32
pd .Timestamp ('1855-01-16 12:22:30' ))
34
33
35
34
# next, test the same with the onlyvars argument
36
- ds = xr .open_mfdataset (
37
- fileName ,
38
- preprocess = lambda x : mpas_xarray .preprocess_mpas (x ,
39
- timestr = timestr ,
40
- onlyvars = varList ,
41
- yearoffset = 1850 ))
35
+ mpasXarray = MpasXarray .MpasXarray ()
36
+ ds = mpasXarray .openMultifileDataSet (fileName ,
37
+ timeVariableName = timestr ,
38
+ variableList = varList ,
39
+ yearOffset = 1850 )
42
40
self .assertEqual (ds .data_vars .keys (), varList )
43
41
44
- with self .assertRaisesRegexp (AssertionError ,
42
+ with self .assertRaisesRegexp (ValueError ,
45
43
'Empty dataset is returned.' ):
46
44
missingvars = ['foo' , 'bar' ]
47
- ds = xr .open_mfdataset (
48
- fileName ,
49
- preprocess = lambda x :
50
- mpas_xarray .preprocess_mpas (x ,
51
- timestr = timestr ,
52
- onlyvars = missingvars ,
53
- yearoffset = 1850 ))
45
+ mpasXarray = MpasXarray .MpasXarray ()
46
+ ds = mpasXarray .openMultifileDataSet (fileName ,
47
+ timeVariableName = timestr ,
48
+ variableList = missingvars ,
49
+ yearOffset = 1850 )
54
50
55
51
def test_iselvals (self ):
56
52
fileName = str (self .datadir .join ('example_jan.nc' ))
@@ -60,13 +56,13 @@ def test_iselvals(self):
60
56
'refBottomDepth' ]
61
57
62
58
iselvals = {'nVertLevels' : slice (0 , 3 )}
63
- ds = xr . open_mfdataset (
64
- fileName ,
65
- preprocess = lambda x : mpas_xarray . preprocess_mpas ( x ,
66
- timestr = timestr ,
67
- onlyvars = varList ,
68
- iselvals = iselvals ,
69
- yearoffset = 1850 ))
59
+ mpasXarray = MpasXarray . MpasXarray ()
60
+ ds = mpasXarray . openMultifileDataSet ( fileName ,
61
+ timeVariableName = timestr ,
62
+ variableList = varList ,
63
+ selectCoordIndices = iselvals ,
64
+ yearOffset = 1850 )
65
+
70
66
self .assertEqual (sorted (ds .data_vars .keys ()), sorted (varList ))
71
67
self .assertEqual (ds [varList [0 ]].shape , (1 , 7 , 3 ))
72
68
self .assertEqual (ds ['refBottomDepth' ].shape , (3 ,))
@@ -84,12 +80,11 @@ def test_no_units(self):
84
80
['time_avg_avgValueWithinOceanLayerRegion_avgLayerTemperature' ,
85
81
'refBottomDepth' ]
86
82
87
- ds = xr .open_mfdataset (
88
- fileName ,
89
- preprocess = lambda x : mpas_xarray .preprocess_mpas (x ,
90
- timestr = timestr ,
91
- onlyvars = varList ,
92
- yearoffset = 1850 ))
83
+ mpasXarray = MpasXarray .MpasXarray ()
84
+ ds = mpasXarray .openMultifileDataSet (fileName ,
85
+ timeVariableName = timestr ,
86
+ variableList = varList ,
87
+ yearOffset = 1850 )
93
88
self .assertEqual (sorted (ds .data_vars .keys ()), sorted (varList ))
94
89
date = pd .Timestamp (ds .Time .values [0 ])
95
90
# round to nearest second
@@ -107,14 +102,12 @@ def test_bad_selvals(self):
107
102
with self .assertRaisesRegexp (AssertionError ,
108
103
'not a dimension in the dataset that '
109
104
'can be used for selection' ):
110
- ds = xr .open_mfdataset (
111
- fileName ,
112
- preprocess = lambda x :
113
- mpas_xarray .preprocess_mpas (x ,
114
- timestr = timestr ,
115
- onlyvars = varList ,
116
- selvals = selvals ,
117
- yearoffset = 1850 ))
105
+ mpasXarray = MpasXarray .MpasXarray ()
106
+ mpasXarray .openMultifileDataSet (fileName ,
107
+ timeVariableName = timestr ,
108
+ variableList = varList ,
109
+ selectCoordValues = selvals ,
110
+ yearOffset = 1850 )
118
111
119
112
def test_selvals (self ):
120
113
fileName = str (self .datadir .join ('example_jan.nc' ))
@@ -123,23 +116,22 @@ def test_selvals(self):
123
116
['time_avg_avgValueWithinOceanLayerRegion_avgLayerTemperature' ,
124
117
'refBottomDepth' ]
125
118
126
- dsRef = xr .open_mfdataset (
127
- fileName ,
128
- preprocess = lambda x : mpas_xarray .preprocess_mpas (x ,
129
- timestr = timestr ,
130
- onlyvars = varList ,
131
- selvals = None ,
132
- yearoffset = 1850 ))
119
+ mpasXarray = MpasXarray .MpasXarray ()
120
+ dsRef = mpasXarray .openMultifileDataSet (fileName ,
121
+ timeVariableName = timestr ,
122
+ variableList = varList ,
123
+ selectCoordValues = None ,
124
+ yearOffset = 1850 )
133
125
134
126
for vertIndex in range (0 , 11 ):
135
127
selvals = {'nVertLevels' : vertIndex }
136
- ds = xr . open_mfdataset (
137
- fileName ,
138
- preprocess = lambda x : mpas_xarray . preprocess_mpas ( x ,
139
- timestr = timestr ,
140
- onlyvars = varList ,
141
- selvals = selvals ,
142
- yearoffset = 1850 ))
128
+ mpasXarray = MpasXarray . MpasXarray ()
129
+ ds = mpasXarray . openMultifileDataSet ( fileName ,
130
+ timeVariableName = timestr ,
131
+ variableList = varList ,
132
+ selectCoordValues = selvals ,
133
+ yearOffset = 1850 )
134
+
143
135
self .assertEqual (ds .data_vars .keys (), varList )
144
136
self .assertEqual (ds [varList [0 ]].shape , (1 , 7 ))
145
137
self .assertEqual (ds ['refBottomDepth' ],
@@ -150,52 +142,16 @@ def test_remove_repeated_time_index(self):
150
142
timestr = ['xtime_start' , 'xtime_end' ]
151
143
varList = ['time_avg_avgValueWithinOceanRegion_avgSurfaceTemperature' ]
152
144
153
- ds = xr . open_mfdataset (
154
- fileName ,
155
- preprocess = lambda x : mpas_xarray . preprocess_mpas ( x ,
156
- timestr = timestr ,
157
- onlyvars = varList ,
158
- yearoffset = 1850 ) )
145
+ mpasXarray = MpasXarray . MpasXarray ()
146
+ # repeat time indices are removed in openMultifileDataSet
147
+ ds = mpasXarray . openMultifileDataSet ( fileName ,
148
+ timeVariableName = timestr ,
149
+ variableList = varList ,
150
+ yearOffset = 1850 )
159
151
160
152
self .assertEqual (sorted (ds .data_vars .keys ()), sorted (varList ))
161
- self .assertEqual (len (ds .Time .values ), 3 )
162
-
163
- ds = mpas_xarray .remove_repeated_time_index (ds )
153
+ # There would be 3 time indices if repeat indices had not been removed.
154
+ # Make sure there are 2.
164
155
self .assertEqual (len (ds .Time .values ), 2 )
165
156
166
- def test_variable_map (self ):
167
- fileName = str (self .datadir .join ('example_jan.nc' ))
168
- varMap = {
169
- 'avgSurfaceTemperature' :
170
- ['time_avg_avgValueWithinOceanRegion_avgSurfaceTemperature' ,
171
- 'other_string' ,
172
- 'yet_another_string' ],
173
- 'daysSinceStartOfSim' :
174
- ['time_avg_daysSinceStartOfSim' ,
175
- 'xtime' ,
176
- 'something_else' ],
177
- 'avgLayerTemperature' :
178
- ['time_avg_avgValueWithinOceanLayerRegion_avgLayerTemperature' ,
179
- 'test1' ,
180
- 'test2' ],
181
- 'Time' : [['xtime_start' , 'xtime_end' ],
182
- 'time_avg_daysSinceStartOfSim' ]}
183
-
184
- varList = ['avgSurfaceTemperature' , 'avgLayerTemperature' ,
185
- 'refBottomDepth' , 'daysSinceStartOfSim' ]
186
-
187
- # preprocess_mpas will use varMap to map the variable names from their
188
- # values in the file to the desired values in varList
189
- ds = xr .open_mfdataset (
190
- fileName ,
191
- preprocess = lambda x : mpas_xarray .preprocess_mpas (
192
- x ,
193
- timestr = 'Time' ,
194
- onlyvars = varList ,
195
- yearoffset = 1850 ,
196
- varmap = varMap ))
197
-
198
- # make sure the remapping happened as expected
199
- self .assertEqual (sorted (ds .data_vars .keys ()), sorted (varList ))
200
-
201
157
# vim: foldmethod=marker ai ts=4 sts=4 et sw=4 ft=python
0 commit comments