Beispiel #1
0
def test_pickling(fs, tmpdir):
    filename = str(tmpdir.join('pickled_floatset.pkl'))
    fs.to_pickle(filename)
    fs_from_pickle = gen.FloatSet(load_path=filename)

    for key in fs.__dict__.keys():
        assert np.all(fs.__dict__[key] == fs_from_pickle.__dict__[key])
Beispiel #2
0
def hex_masked_grid(request):
    xlim, ylim, dx, dy, _ = request.param
    test = gen.FloatSet(xlim, ylim, dx, dy, model_grid=grid_dict)
    rec_g = np.asarray(test.get_rectmesh())
    hex_g = np.asarray(test.get_hexmesh())
    grids_parm = dict(hex=hex_g, dx=dx, dy=dy)
    return grids_parm
Beispiel #3
0
def test_pickling_3D_with_land(fs_3D_with_land, tmpdir):
    fs = fs_3D_with_land
    filename = str(tmpdir.join('pickled_floatset.pkl'))
    fs.to_pickle(filename)
    fs_from_pickle = gen.FloatSet(load_path=filename)

    for key in fs.__dict__.keys():
        if key is not 'model_grid':
            assert np.all(fs.__dict__[key] == fs_from_pickle.__dict__[key])
        else:
            for sub_key in fs.__dict__[key].keys():
                assert np.all(fs.__dict__[key][sub_key] == fs_from_pickle.__dict__[key][sub_key])
Beispiel #4
0
def fs_big():
    # Nathaniel's funky big domain
    #setup produces N = 16792975, exceeds float32 exact precision
    xlim = (0.0, 102.5)
    ylim = (-80.0,80.0)
    dx = 1/32.
    dy = 1/32.

    #mask grid resolution is five times as coarse as the float set
    Nx = int((xlim[1] - xlim[0]) / dx)/5
    Ny = int((ylim[1] - ylim[0]) / dy)/5
    lon = np.linspace(xlim[0], xlim[1], Nx)
    lat = np.linspace(ylim[0], ylim[1], Ny)

    #set entire domain to ocean
    mask = np.ones((Ny, Nx), dtype='bool')

    #make a small land island
    mask[5:10,5:10] = False

    model_grid = {'lon': lon, 'lat': lat, 'land_mask': mask}
    fs = gen.FloatSet(xlim, ylim, dx, dy, model_grid=model_grid)
    return fs
Beispiel #5
0
    hex_g = np.asarray(test.get_hexmesh())
    grids_parm = dict(hex=hex_g, dx=dx, dy=dy)
    return grids_parm


def test_hex_grid(hex_masked_grid):
    """Make sure we can create masked hexagonal grids correctly."""
    grids_parm = hex_masked_grid
    # Make sure the separation between grid points is constant
    # (i.e identical to dx)
    grid_diff = np.diff(grids_parm['hex'][0, :].reshape(
        grids_parm['dx'], grids_parm['dy']))
    assert np.all(grid_diff == grids_parm['dx'])


if __name__ == "__main__":
    import pylab as plt
    xlim, ylim, dx, dy, _ = domain_geometries[0]

    test = gen.FloatSet(xlim, ylim, dx, dy, model_grid=grid_dict)
    rec_g = np.asarray(test.get_rectmesh())
    hex_g = np.asarray(test.get_hexmesh())
    grids_parm = dict(rec=rec_g, hex=hex_g, dx=dx)

    dhex = grids_parm['hex']
    drec = grids_parm['rec']

    plt.plot(dhex[0, :], dhex[1, :], 'x', label='Hexagonal Grid')
    plt.plot(drec[0, :], drec[1, :], 'or', label='Rectangular Grid')
    plt.legend()
    plt.show()
Beispiel #6
0
def fs_all(request):
    xlim, ylim, dx, dy, model_grid = request.param
    return gen.FloatSet(xlim, ylim, dx, dy, model_grid=model_grid)
Beispiel #7
0
def fs_3D_with_land(request):
    xlim, ylim, dx, dy, model_grid, zvect = request.param
    return gen.FloatSet(xlim, ylim, dx, dy, model_grid=model_grid,zvect=zvect)
Beispiel #8
0
def fs_3D(request):
    xlim, ylim, dx, dy,_ , zvect= request.param
    return gen.FloatSet(xlim, ylim, dx, dy,zvect=zvect)
Beispiel #9
0
def fs(request):
    xlim, ylim, dx, dy, _ = request.param
    return gen.FloatSet(xlim, ylim, dx, dy)
Beispiel #10
0
def test_npart_to_2D_array():
    # floatsets
    lon = np.arange(0, 9, dtype=np.float32)
    lat = np.arange(-4, 5, dtype=np.float32)
    land_mask = np.full(81, True, dtype=bool)
    land_mask.shape = (len(lat), len(lon))
    land_mask[:,0:2] = False
    model_grid = {'lon': lon, 'lat': lat, 'land_mask': land_mask}
    fs_none = gen.FloatSet(xlim=(0, 9), ylim=(-4, 5))
    fs_mask = gen.FloatSet(xlim=(0, 9), ylim=(-4, 5), model_grid=model_grid)
    fs_mask.get_rectmesh()
    # dataarray/dataset
    var_list = ['test_01', 'test_02', 'test_03']
    values_list_none = []
    values_list_mask = []
    data_vars_none = {}
    data_vars_mask = {}
    len_none = 81
    len_mask = list(fs_mask.ocean_bools).count(True)
    for var in var_list:
        values_none = np.random.random(len_none)
        values_none.shape = (1, 1, len_none)
        values_mask = np.random.random(len_mask)
        values_mask.shape = (1, 1, len_mask)
        values_list_none.append(values_none)
        values_list_mask.append(values_mask)
        data_vars_none.update({var: (['date', 'loc', 'npart'], values_none)})
        data_vars_mask.update({var: (['date', 'loc', 'npart'], values_mask)})
    npart_none = np.arange(1, len_none+1, dtype=np.int32)
    npart_mask = np.arange(1, len_mask+1, dtype=np.int32)
    coords_none = {'date': (['date'], np.array([np.datetime64('2000-01-01')])),
                   'loc': (['loc'], np.array(['New York'])),
                   'npart': (['npart'], npart_none)}
    coords_mask = {'date': (['date'], np.array([np.datetime64('2000-01-01')])),
                   'loc': (['loc'], np.array(['New York'])),
                   'npart': (['npart'], npart_mask)}
    ds1d_none = xr.Dataset(data_vars=data_vars_none, coords=coords_none)
    ds1d_mask = xr.Dataset(data_vars=data_vars_mask, coords=coords_mask)
    da1d_none = ds1d_none['test_01']
    da1d_mask = ds1d_mask['test_01']
    # starts testing
    test_none = (fs_none, da1d_none, ds1d_none, values_list_none)
    test_mask = (fs_mask, da1d_mask, ds1d_mask, values_list_mask)
    test_list = [test_none, test_mask]
    for fs, da1d, ds1d, values_list in test_list:
        # method test
        da2d = fs.npart_to_2D_array(da1d)
        ds2d = fs.npart_to_2D_array(ds1d)
        # shape test
        assert da2d.to_array().values.shape == (1, 1, 1, fs.Ny, fs.Nx)
        assert ds2d.to_array().values.shape == (3, 1, 1, fs.Ny, fs.Nx)
        # dimension test
        assert da2d.dims == {'date': 1, 'loc': 1, 'y0': 9, 'x0': 9}
        assert ds2d.dims == {'date': 1, 'loc': 1, 'y0': 9, 'x0': 9}
        # coordinates test
        np.testing.assert_allclose(da2d.x0.values, fs.x)
        np.testing.assert_allclose(da2d.y0.values, fs.y)
        np.testing.assert_allclose(ds2d.x0.values, fs.x)
        np.testing.assert_allclose(ds2d.y0.values, fs.y)
        # values test
        da1d_values = values_list[0][0][0]
        da2d_values_full = da2d.to_array().values[0].ravel()
        da2d_values = da2d_values_full[~np.isnan(da2d_values_full)]
        np.testing.assert_allclose(da2d_values, da1d_values)
        for i in range(3):
            ds1d_values = values_list[i][0][0]
            ds2d_values_full = ds2d.to_array().values[i].ravel()
            ds2d_values = ds2d_values_full[~np.isnan(ds2d_values_full)]
            np.testing.assert_allclose(ds2d_values, ds1d_values)
        # mask test
        if fs.model_grid is not None:
            mask1d = fs.ocean_bools
            mask2d_da = (np.isnan(da2d.to_array().values[0])==False).ravel()
            np.testing.assert_allclose(mask2d_da, mask1d)
            for i in range(3):
                mask2d_ds = (np.isnan(ds2d.to_array().values[i])==False).ravel()
                np.testing.assert_allclose(mask2d_ds, mask1d)
Beispiel #11
0
def test_npart_to_2D_array():
    # floatsets
    lon = np.linspace(0, 8, 9, dtype=np.float32)
    lat = np.linspace(-4, 4, 9, dtype=np.float32)
    land_mask = np.zeros(81, dtype=bool) == False
    land_mask.shape = (len(lat), len(lon))
    land_mask[:, 0:2] = False
    model_grid = {'lon': lon, 'lat': lat, 'land_mask': land_mask}
    fs_none = gen.FloatSet(xlim=(0, 9), ylim=(-4, 5), dx=1, dy=1)
    fs_mask = gen.FloatSet(xlim=(0, 9),
                           ylim=(-4, 5),
                           dx=1,
                           dy=1,
                           model_grid=model_grid)
    # dataarray/dataset
    var_list = ['test_01', 'test_02', 'test_03']
    values_list_none = []
    values_list_mask = []
    data_vars_none = {}
    data_vars_mask = {}
    for var in var_list:
        values_none = np.random.random(81)
        values_mask = np.random.random(69)
        values_list_none.append(values_none)
        values_list_mask.append(values_mask)
        data_vars_none.update({var: (['npart'], values_none)})
        data_vars_mask.update({var: (['npart'], values_mask)})
    npart_none = np.linspace(1, 81, 81, dtype=np.int32)
    npart_mask = np.linspace(1, 69, 69, dtype=np.int32)
    coords_none = {'npart': (['npart'], npart_none)}
    coords_mask = {'npart': (['npart'], npart_mask)}
    ds1d_none = xr.Dataset(data_vars=data_vars_none, coords=coords_none)
    ds1d_mask = xr.Dataset(data_vars=data_vars_mask, coords=coords_mask)
    da1d_none = ds1d_none['test_01']
    da1d_mask = ds1d_mask['test_01']
    # starts testing
    test_none = (fs_none, da1d_none, ds1d_none, values_list_none)
    test_mask = (fs_mask, da1d_mask, ds1d_mask, values_list_mask)
    test_list = [test_none, test_mask]
    for fs, da1d, ds1d, values_list in test_list:
        fs.get_rectmesh()
        # method test
        da2d = fs.npart_to_2D_array(da1d)
        ds2d = fs.npart_to_2D_array(ds1d)
        # shape test
        assert da2d.to_array().values.shape == (1, fs.Ny, fs.Nx)
        assert ds2d.to_array().values.shape == (3, fs.Ny, fs.Nx)
        # coordinates test
        np.testing.assert_allclose(da2d.lon.values, fs.x)
        np.testing.assert_allclose(da2d.lat.values, fs.y)
        np.testing.assert_allclose(ds2d.lon.values, fs.x)
        np.testing.assert_allclose(ds2d.lat.values, fs.y)
        # values test
        da1d_values = values_list[0]
        da2d_values_full = da2d.to_array().values[0].ravel()
        da2d_values = da2d_values_full[~np.isnan(da2d_values_full)]
        np.testing.assert_allclose(da2d_values, da1d_values)
        for i in range(3):
            ds1d_values = values_list[i]
            ds2d_values_full = ds2d.to_array().values[i].ravel()
            ds2d_values = ds2d_values_full[~np.isnan(ds2d_values_full)]
            np.testing.assert_allclose(ds2d_values, ds1d_values)
        # mask test
        if fs.model_grid is not None:
            mask1d = fs.ocean_bools
            mask2d_da = (np.isnan(da2d.to_array().values[0]) == False).ravel()
            np.testing.assert_allclose(mask2d_da, mask1d)
            for i in range(3):
                mask2d_ds = (np.isnan(
                    ds2d.to_array().values[i]) == False).ravel()
                np.testing.assert_allclose(mask2d_ds, mask1d)