def test_irregular_initialization_dates(): """Tests that irregularly spaced initializations convert properly.""" inits = np.arange(1990, 2010) inits = np.delete(inits, [3, 5, 8, 12, 15]) da = xr.DataArray(np.random.rand(len(inits)), dims="init", coords=[inits]) new_inits = convert_time_index(da, "init", "") assert (new_inits["init"].to_index().year == inits).all()
def PM_ds_control_1d_ym_cftime(PM_ds_control_1d): """To MPI Perfect-model-framework corresponding control timeseries xr.Dataset with time as cftime.""" PM_ds_control_1d = convert_time_index( PM_ds_control_1d, "time", "PM_ds_control_1d.time", calendar=PM_CALENDAR_STR ) return PM_ds_control_1d
def test_convert_time_index_does_not_overwrite(): """Tests that `convert_time_index` does not overwrite the original index.""" inits = np.arange(1990, 2000) da = xr.DataArray(np.random.rand(len(inits)), dims="init", coords=[inits]) new_inits = convert_time_index(da, "init", "") assert isinstance(da.init.to_index(), pd.Int64Index) assert isinstance(new_inits.init.to_index(), xr.CFTimeIndex)
def reconstruction_ds_1d_cftime(reconstruction_ds_1d): """CESM-FOSI historical reconstruction timeseries with cftime time axis.""" ds = reconstruction_ds_1d ds = convert_time_index(ds, 'time', 'ds.init', calendar=HINDCAST_CALENDAR_STR) return ds
def hind_ds_initialized_1d_cftime(hind_ds_initialized_1d): """CESM-DPLE initialzed hindcast timeseries with cftime initializations.""" ds = hind_ds_initialized_1d ds = convert_time_index(ds, 'init', 'ds.init', calendar=HINDCAST_CALENDAR_STR) ds.lead.attrs['units'] = 'years' return ds
def test_numeric_index_auto_appends_lead_attrs(): """Tests that for numeric inits, lead units are automatically set to 'years'""" lead = np.arange(3) int_inits = np.arange(1990, 2000) float_inits = int_inits * 1.0 int_da = xr.DataArray( np.random.rand(len(int_inits), len(lead)), dims=["init", "lead"], coords=[int_inits, lead], ) float_da = xr.DataArray( np.random.rand(len(float_inits), len(lead)), dims=["init", "lead"], coords=[float_inits, lead], ) new_int_da = convert_time_index(int_da, "init", "") new_float_da = convert_time_index(float_da, "init", "") assert new_int_da.lead.attrs["units"] == "years" assert new_float_da.lead.attrs["units"] == "years"
def PM_ds_initialized_1d_ym_cftime(PM_ds_initialized_1d): """MPI Perfect-model-framework initialized timeseries xr.Dataset with init as cftime.""" PM_ds_initialized_1d = convert_time_index( PM_ds_initialized_1d, 'init', 'PM_ds_initialized_1d.init', calendar=PM_CALENDAR_STR, ) PM_ds_initialized_1d['lead'].attrs['units'] = 'years' return PM_ds_initialized_1d
def PM_ds_initialized_1d_ym_cftime(PM_ds_initialized_1d): """MPI Perfect-model-framework initialized timeseries xr.Dataset with init as cftime.""" PM_ds_initialized_1d = convert_time_index( PM_ds_initialized_1d, "init", "PM_ds_initialized_1d.init", calendar=PM_CALENDAR_STR, ) PM_ds_initialized_1d["lead"].attrs["units"] = "years" return PM_ds_initialized_1d
def test_float64_converted_to_cftime(): """Tests the xr.Float64Index is converted to xr.CFTimeIndex.""" inits = np.arange(1990, 2000) * 1.0 da = xr.DataArray(np.random.rand(len(inits)), dims="init", coords=[inits]) new_inits = convert_time_index(da, "init", "") assert isinstance(new_inits["init"].to_index(), xr.CFTimeIndex)
def test_pandas_datetime_converted_to_cftime(): """Tests that a pd.DatetimeIndex is converted to xr.CFTimeIndex.""" inits = pd.date_range("1990", "2000", freq="YS") da = xr.DataArray(np.random.rand(len(inits)), dims="init", coords=[inits]) new_inits = convert_time_index(da, "init", "") assert isinstance(new_inits["init"].to_index(), xr.CFTimeIndex)
def test_cftime_index_unchanged(): """Tests that a CFTime index going through convert time is unchanged.""" inits = xr.cftime_range("1990", "2000", freq="Y", calendar="noleap") da = xr.DataArray(np.random.rand(len(inits)), dims="init", coords=[inits]) new_inits = convert_time_index(da, "init", "") assert_allclose(new_inits.init, da.init)
def test_int64_converted_to_cftime(): """Tests the xr.Int64Index is converted to xr.CFTimeIndex.""" inits = np.arange(1990, 2000) da = xr.DataArray(np.random.rand(len(inits)), dims='init', coords=[inits]) new_inits = convert_time_index(da, 'init', '') assert isinstance(new_inits['init'].to_index(), xr.CFTimeIndex)
def test_pandas_datetime_converted_to_cftime(): """Tests that a pd.DatetimeIndex is converted to xr.CFTimeIndex.""" inits = pd.date_range('1990', '2000', freq='YS') da = xr.DataArray(np.random.rand(len(inits)), dims='init', coords=[inits]) new_inits = convert_time_index(da, 'init', '') assert isinstance(new_inits['init'].to_index(), xr.CFTimeIndex)
def test_cftime_index_unchanged(): """Tests that a CFTime index going through convert time is unchanged.""" inits = xr.cftime_range('1990', '2000', freq='Y', calendar='noleap') da = xr.DataArray(np.random.rand(len(inits)), dims='init', coords=[inits]) new_inits = convert_time_index(da, 'init', '') assert_allclose(new_inits.init, da.init)