def PM_ds_control3d():
    ds = open_dataset('MPI-control-3D')
    ds = ds.isel(x=slice(0, 5), y=slice(145, 150))
    t = list(np.arange(ds.time.size))
    ds = ds.isel(time=t * 6)
    ds['time'] = np.arange(3000, 3000 + ds.time.size)
    return ds
def PM_da_control3d():
    da = open_dataset('MPI-control-3D')
    da = da.isel(x=slice(0, 5), y=slice(145, 150))
    # fix to span 300yr control
    t = list(np.arange(da.time.size))
    da = da.isel(time=t * 6)
    da['time'] = np.arange(3000, 3000 + da.time.size)
    return da['tos']
def PM_ds_control1d():
    ds = open_dataset('MPI-control-1D')
    return ds
def PM_ds_ds1d():
    ds = open_dataset('MPI-PM-DP-1D')
    return ds
def PM_da_control1d():
    da = open_dataset('MPI-control-1D')
    da = da['tos']
    return da
def PM_da_ds1d():
    da = open_dataset('MPI-PM-DP-1D')
    da = da['tos']
    return da
def PM_ds_ds3d():
    ds = open_dataset('MPI-PM-DP-3D')
    ds = ds.isel(x=slice(0, 5), y=slice(145, 150))
    return ds
def PM_da_ds3d():
    da = open_dataset('MPI-PM-DP-3D')
    # Box in South Atlantic with no NaNs.
    da = da.isel(x=slice(0, 5), y=slice(145, 150))
    return da['tos']
def uninitialized():
    da = open_dataset('CESM-LE')['SST']
    # create fake ensemble data (i.e., multiple members)
    da = xr.concat([da] * 10, 'member')
    da['member'] = np.arange(10)
    return da
def reconstruction():
    da = open_dataset('FOSI-SST')
    # same timeframe as DPLE
    da = da.sel(time=slice(1955, 2015))
    da = da['SST']
    return da
def observations():
    da = open_dataset('ERSST')
    return da
def initialized():
    da = open_dataset('CESM-DP-SST')
    da = da.sel(init=slice(1955, 2015))
    return da