예제 #1
0
def test_unsupported_args(dset):
    with pytest.raises(ValueError):
        esmlab.resample(dset, freq='hr')

    with pytest.raises(ValueError):
        esmlab.climatology(dset, freq='hr')

    with pytest.raises(ValueError):
        esmlab.anomaly(dset, clim_freq='ann')
예제 #2
0
def test_mon_climatology_drop_time_bounds(ds_name, decoded, variables,
                                          time_coord_name, time_bound_name):
    ds = esmlab.datasets.open_dataset(ds_name, decode_times=decoded)
    ds_time_bound = ds[time_coord_name].attrs[time_bound_name]
    ds = ds.drop(ds_time_bound)
    del ds[time_coord_name].attrs[time_bound_name]
    esm = ds.esmlab.set_time(time_coord_name=time_coord_name)
    computed_dset = esmlab.climatology(ds, freq='mon')

    esmlab_res = computed_dset.drop(esm.static_variables).to_dataframe()
    esmlab_res = esmlab_res.groupby('month').mean()[variables]

    df = (esm._ds_time_computed.drop(
        esm.static_variables).to_dataframe().reset_index(
            level=[esm.time_coord_name]))
    df[esm.time_coord_name] = df[esm.time_coord_name].values.astype(
        'datetime64[ns]')
    pd_res = df.groupby(df[esm.time_coord_name].dt.month).mean()
    pd_res.index.name = 'month'
    pd_res = pd_res[variables]

    assert_both_frames_equal(esmlab_res, pd_res)

    assert computed_dset[esm.time_coord_name].dtype == ds[
        esm.time_coord_name].dtype
    for key, value in ds[esm.time_coord_name].attrs.items():
        assert key in computed_dset[esm.time_coord_name].attrs
        assert value == computed_dset[esm.time_coord_name].attrs[key]
예제 #3
0
def test_mon_climatology(ds_name, decoded, variables, time_coord_name):
    ds = esmlab.datasets.open_dataset(ds_name, decode_times=decoded)
    esm = ds.esmlab.set_time(time_coord_name=time_coord_name)
    xr.testing._assert_internal_invariants(esm._ds_time_computed)
    computed_dset = esmlab.climatology(ds, freq='mon')
    esmlab_res = computed_dset.to_dataframe()
    esmlab_res = esmlab_res.groupby('month').mean()[variables]
    df = (esm._ds_time_computed.drop(
        esm.static_variables).to_dataframe().reset_index(
            level=[esm.time_coord_name]))
    df[esm.time_coord_name] = df[esm.time_coord_name].values.astype(
        'datetime64[ns]')
    pd_res = df.groupby(df[esm.time_coord_name].dt.month).mean()
    pd_res.index.name = 'month'
    pd_res = pd_res[variables]

    assert_both_frames_equal(esmlab_res, pd_res)
def compute_clim_mon(ds_in, yr_lo, yr_hi, time_name='time'):
    """compute and return monthly climatology"""

    yyyymmdd_lo = yr_lo + '-01-01'
    yyyymmdd_hi = yr_hi + '-12-31'

    ds_clim = esmlab.climatology(
        ds_in.sel(time=slice(yyyymmdd_lo, yyyymmdd_hi)), freq='mon')

    # set essential time encoding values from ds_in
    # as esmlab.climatology only sets dtype and _FillValue
    for attr_name in ['units', 'calendar']:
        ds_clim[time_name].encoding[attr_name] = ds_in[time_name].encoding[
            attr_name]

    # copy global attributes from ds_in
    ds_clim.attrs.update(ds_in.attrs)

    return ds_clim