Skip to content

Commit

Permalink
netCDF4: set_auto_mask to False everywhere (#107)
Browse files Browse the repository at this point in the history
  • Loading branch information
fmaussion committed Jul 6, 2018
1 parent 0c53866 commit 430b9c2
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 70 deletions.
1 change: 1 addition & 0 deletions salem/datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ def __init__(self, file, grid=None, time=None, monthbegin=False):
"""

self._nc = netCDF4.Dataset(file)
self._nc.set_auto_mask(False)
self.variables = self._nc.variables
if grid is None:
grid = sio.grid_from_dataset(self._nc)
Expand Down
1 change: 1 addition & 0 deletions salem/sio.py
Original file line number Diff line number Diff line change
Expand Up @@ -949,6 +949,7 @@ def open_wrf_dataset(file, **kwargs):
"""

nc = netCDF4.Dataset(file)
nc.set_auto_mask(False)

# Change staggered variables to unstaggered ones
for vn, v in nc.variables.items():
Expand Down
120 changes: 62 additions & 58 deletions salem/tests/test_datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,26 +244,27 @@ def test_eraint(self):

stat_lon = 91.1
stat_lat = 31.1
nc = netCDF4.Dataset(f)
flon = nc.variables['longitude'][:]
flat = nc.variables['latitude'][:]
alon = np.argmin(np.abs(flon - stat_lon))
alat = np.argmin(np.abs(flat - stat_lat))

d.set_subset(corners=((stat_lon, stat_lat), (stat_lon, stat_lat)))
slon, slat = d.grid.ll_coordinates
assert_array_equal(flon[alon], slon)
assert_allclose(flat[alat], slat)
# Exotic subset
assert_array_equal(flon[alon], d.get_vardata('longitude'))
assert_allclose(flat[alat], d.get_vardata('latitude'))

assert_allclose(nc.variables['t2m'][:, alat, alon],
np.squeeze(d.get_vardata('t2m')))

d.set_period(t0='2012-06-01 06:00:00', t1='2012-06-01 12:00:00')
assert_allclose(nc.variables['t2m'][1:3, alat, alon],
np.squeeze(d.get_vardata('t2m')))
with netCDF4.Dataset(f) as nc:
nc.set_auto_mask(False)
flon = nc.variables['longitude'][:]
flat = nc.variables['latitude'][:]
alon = np.argmin(np.abs(flon - stat_lon))
alat = np.argmin(np.abs(flat - stat_lat))

d.set_subset(corners=((stat_lon, stat_lat), (stat_lon, stat_lat)))
slon, slat = d.grid.ll_coordinates
assert_array_equal(flon[alon], slon)
assert_allclose(flat[alat], slat)
# Exotic subset
assert_array_equal(flon[alon], d.get_vardata('longitude'))
assert_allclose(flat[alat], d.get_vardata('latitude'))

assert_allclose(nc.variables['t2m'][:, alat, alon],
np.squeeze(d.get_vardata('t2m')))

d.set_period(t0='2012-06-01 06:00:00', t1='2012-06-01 12:00:00')
assert_allclose(nc.variables['t2m'][1:3, alat, alon],
np.squeeze(d.get_vardata('t2m')))

@requires_xarray
def test_as_xarray(self):
Expand Down Expand Up @@ -524,37 +525,38 @@ class TestWRF(unittest.TestCase):
def test_unstagger(self):

wf = get_demo_file('wrf_cropped.nc')
nc = netCDF4.Dataset(wf)

ref = nc['PH'][:]
ref = 0.5 * (ref[:, :-1, ...] + ref[:, 1:, ...])

# Own constructor
v = wrftools.Unstaggerer(nc['PH'])
assert_allclose(v[:], ref)
assert_allclose(v[0:2, 2:12, ...],
ref[0:2, 2:12, ...])
assert_allclose(v[:, 2:12, ...],
ref[:, 2:12, ...])
assert_allclose(v[0:2, 2:12, 5:10, 15:17],
ref[0:2, 2:12, 5:10, 15:17])
assert_allclose(v[1:2, 2:, 5:10, 15:17],
ref[1:2, 2:, 5:10, 15:17])
assert_allclose(v[1:2, :-2, 5:10, 15:17],
ref[1:2, :-2, 5:10, 15:17])
assert_allclose(v[1:2, 2:-4, 5:10, 15:17],
ref[1:2, 2:-4, 5:10, 15:17])
assert_allclose(v[[0, 2], ...],
ref[[0, 2], ...])
assert_allclose(v[..., [0, 2]],
ref[..., [0, 2]])
assert_allclose(v[0, ...], ref[0, ...])

# Under WRF
nc = WRF(wf)
assert_allclose(nc.get_vardata('PH'), ref)
nc.set_period(1, 2)
assert_allclose(nc.get_vardata('PH'), ref[1:3, ...])
with netCDF4.Dataset(wf) as nc:
nc.set_auto_mask(False)

ref = nc['PH'][:]
ref = 0.5 * (ref[:, :-1, ...] + ref[:, 1:, ...])

# Own constructor
v = wrftools.Unstaggerer(nc['PH'])
assert_allclose(v[:], ref)
assert_allclose(v[0:2, 2:12, ...],
ref[0:2, 2:12, ...])
assert_allclose(v[:, 2:12, ...],
ref[:, 2:12, ...])
assert_allclose(v[0:2, 2:12, 5:10, 15:17],
ref[0:2, 2:12, 5:10, 15:17])
assert_allclose(v[1:2, 2:, 5:10, 15:17],
ref[1:2, 2:, 5:10, 15:17])
assert_allclose(v[1:2, :-2, 5:10, 15:17],
ref[1:2, :-2, 5:10, 15:17])
assert_allclose(v[1:2, 2:-4, 5:10, 15:17],
ref[1:2, 2:-4, 5:10, 15:17])
assert_allclose(v[[0, 2], ...],
ref[[0, 2], ...])
assert_allclose(v[..., [0, 2]],
ref[..., [0, 2]])
assert_allclose(v[0, ...], ref[0, ...])

# Under WRF
nc = WRF(wf)
assert_allclose(nc.get_vardata('PH'), ref)
nc.set_period(1, 2)
assert_allclose(nc.get_vardata('PH'), ref[1:3, ...])

@requires_xarray
def test_ncl_diagvars(self):
Expand All @@ -564,14 +566,16 @@ def test_ncl_diagvars(self):

w = WRF(wf)

nc = netCDF4.Dataset(ncl_out)
ref = nc.variables['TK'][:]
tot = w.get_vardata('TK')
assert_allclose(ref, tot, rtol=1e-6)
with netCDF4.Dataset(ncl_out) as nc:
nc.set_auto_mask(False)

ref = nc.variables['TK'][:]
tot = w.get_vardata('TK')
assert_allclose(ref, tot, rtol=1e-6)

ref = nc.variables['SLP'][:]
tot = w.get_vardata('SLP')
assert_allclose(ref, tot, rtol=1e-6)
ref = nc.variables['SLP'][:]
tot = w.get_vardata('SLP')
assert_allclose(ref, tot, rtol=1e-6)

@requires_pandas
def test_staggeredcoords(self):
Expand Down
1 change: 1 addition & 0 deletions salem/tests/test_gis.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class SimpleNcDataSet():

def __init__(self, file):
self.nc = netCDF4.Dataset(file)
self.nc.set_auto_mask(False)
proj = gis.check_crs(str(self.nc.proj4_str))
x = self.nc.variables['x']
y = self.nc.variables['y']
Expand Down
27 changes: 15 additions & 12 deletions salem/tests/test_misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -963,10 +963,11 @@ def test_lambert(self):

for i in [1, 2, 3]:
fg = get_demo_file('geo_em_d0{}_lambert.nc'.format(i))
ds = netCDF4.Dataset(fg)
lon, lat = g[i-1].ll_coordinates
assert_allclose(lon, ds['XLONG_M'][0, ...], atol=1e-4)
assert_allclose(lat, ds['XLAT_M'][0, ...], atol=1e-4)
with netCDF4.Dataset(fg) as nc:
nc.set_auto_mask(False)
lon, lat = g[i-1].ll_coordinates
assert_allclose(lon, nc['XLONG_M'][0, ...], atol=1e-4)
assert_allclose(lat, nc['XLAT_M'][0, ...], atol=1e-4)

@requires_geopandas
def test_mercator(self):
Expand All @@ -979,10 +980,11 @@ def test_mercator(self):

for i in [1, 2, 3, 4]:
fg = get_demo_file('geo_em_d0{}_mercator.nc'.format(i))
ds = netCDF4.Dataset(fg)
lon, lat = g[i-1].ll_coordinates
assert_allclose(lon, ds['XLONG_M'][0, ...], atol=1e-4)
assert_allclose(lat, ds['XLAT_M'][0, ...], atol=1e-4)
with netCDF4.Dataset(fg) as nc:
nc.set_auto_mask(False)
lon, lat = g[i-1].ll_coordinates
assert_allclose(lon, nc['XLONG_M'][0, ...], atol=1e-4)
assert_allclose(lat, nc['XLAT_M'][0, ...], atol=1e-4)

@requires_geopandas
def test_polar(self):
Expand All @@ -995,7 +997,8 @@ def test_polar(self):

for i in [1, 2]:
fg = get_demo_file('geo_em_d0{}_polarstereo.nc'.format(i))
ds = netCDF4.Dataset(fg)
lon, lat = g[i-1].ll_coordinates
assert_allclose(lon, ds['XLONG_M'][0, ...], atol=5e-3)
assert_allclose(lat, ds['XLAT_M'][0, ...], atol=5e-3)
with netCDF4.Dataset(fg) as nc:
nc.set_auto_mask(False)
lon, lat = g[i-1].ll_coordinates
assert_allclose(lon, nc['XLONG_M'][0, ...], atol=5e-3)
assert_allclose(lat, nc['XLAT_M'][0, ...], atol=5e-3)

0 comments on commit 430b9c2

Please sign in to comment.