def _convert_to_reltime(time): """Check to determine if the value of the time parameter needs to be converted to a relative value (relative to the time_origin). """ if isinstance(time, np.datetime64) or (hasattr( time, 'calendar') and time.calendar in _get_cftime_calendars()): return True return False
@pytest.mark.parametrize('ydim', [100, 200]) def test_fieldset_from_parcels(xdim, ydim, tmpdir, filename='test_parcels'): """ Simple test for fieldset initialisation from Parcels FieldSet file format. """ filepath = tmpdir.join(filename) data, dimensions = generate_fieldset(xdim, ydim) fieldset_out = FieldSet.from_data(data, dimensions) fieldset_out.write(filepath) fieldset = FieldSet.from_parcels(filepath) assert len(fieldset.U.data.shape) == 3 # Will be 4 once we use depth assert len(fieldset.V.data.shape) == 3 assert np.allclose(fieldset.U.data[0, :], data['U'], rtol=1e-12) assert np.allclose(fieldset.V.data[0, :], data['V'], rtol=1e-12) @pytest.mark.parametrize('calendar, cftime_datetime', zip(_get_cftime_calendars(), _get_cftime_datetimes())) def test_fieldset_nonstandardtime(calendar, cftime_datetime, tmpdir, filename='test_nonstandardtime.nc', xdim=4, ydim=6): filepath = tmpdir.join(filename) dates = [getattr(cftime, cftime_datetime)(1, m, 1) for m in range(1, 13)] da = xr.DataArray(np.random.rand(12, xdim, ydim), coords=[dates, range(xdim), range(ydim)], dims=['time', 'lon', 'lat'], name='U') da.to_netcdf(str(filepath)) dims = {'lon': 'lon', 'lat': 'lat', 'time': 'time'} try: field = Field.from_netcdf(filepath, 'U', dims) except NotImplementedError: field = None
def _convert_to_reltime(time): if isinstance(time, np.datetime64) or (hasattr(time, 'calendar') and time.calendar in _get_cftime_calendars()): return True return False
def test_set_calendar(): for calendar_name, cf_datetime in zip(_get_cftime_calendars(), _get_cftime_datetimes()): date = getattr(cftime, cf_datetime)(1990, 1, 1) assert _set_calendar(date.calendar) == date.calendar assert _set_calendar('np_datetime64') == 'standard'
@pytest.mark.parametrize('ydim', [100, 200]) def test_fieldset_from_parcels(xdim, ydim, tmpdir, filename='test_parcels'): """ Simple test for fieldset initialisation from Parcels FieldSet file format. """ filepath = tmpdir.join(filename) data, dimensions = generate_fieldset(xdim, ydim) fieldset_out = FieldSet.from_data(data, dimensions) fieldset_out.write(filepath) fieldset = FieldSet.from_parcels(filepath) assert len(fieldset.U.data.shape) == 3 # Will be 4 once we use depth assert len(fieldset.V.data.shape) == 3 assert np.allclose(fieldset.U.data[0, :], data['U'], rtol=1e-12) assert np.allclose(fieldset.V.data[0, :], data['V'], rtol=1e-12) @pytest.mark.parametrize('calendar, cftime_datetime', zip(_get_cftime_calendars(), _get_cftime_datetimes())) def test_fieldset_nonstandardtime(calendar, cftime_datetime, tmpdir, filename='test_nonstandardtime.nc', xdim=4, ydim=6): filepath = tmpdir.join(filename) dates = [getattr(cftime, cftime_datetime)(1, m, 1) for m in range(1, 13)] da = xr.DataArray(np.random.rand(12, xdim, ydim), coords=[dates, range(xdim), range(ydim)], dims=['time', 'lon', 'lat'], name='U') da.to_netcdf(str(filepath))