Exemplo n.º 1
0
def test_extrapolate():
    # Arrange
    ## Dataset 1
    nt = 2
    data = [np.zeros([nt, 10, 3])]
    time = list(rrule(freq=DAILY, count=nt, dtstart=datetime(2000, 1, 1)))
    items = [ItemInfo("Foo")]
    ds1 = Dataset(data, time, items)
    assert ds1.data[0].shape == (nt, 10, 3)

    ## Dataset 2 partly overlapping with Dataset 1
    nt = 3
    data = [np.ones([nt, 10, 3])]
    time = list(rrule(freq=HOURLY, count=nt, dtstart=datetime(2000, 1, 2)))
    items = [ItemInfo("Foo")]
    ds2 = Dataset(data, time, items)

    # Act
    ## interp
    dsi = ds1.interp_time(dt=ds2.time, fill_value=1.0)

    # Assert
    assert dsi.time[0] == ds2.time[0]
    assert dsi.time[-1] == ds2.time[-1]
    assert len(dsi.time) == len(ds2.time)
    assert dsi.data[0][0] == pytest.approx(0.0)
    assert dsi.data[0][1] == pytest.approx(1.0)  # filled
    assert dsi.data[0][2] == pytest.approx(1.0)  # filled
Exemplo n.º 2
0
def test_interp_time_to_other_dataset():

    # Arrange
    ## Dataset 1
    nt = 4
    data = [np.zeros([nt, 10, 3])]
    time = list(rrule(freq=DAILY, count=nt, dtstart=datetime(2000, 1, 1)))
    items = [ItemInfo("Foo")]
    ds1 = Dataset(data, time, items)
    assert ds1.data[0].shape == (nt, 10, 3)

    ## Dataset 2
    nt = 12
    data = [np.ones([nt, 10, 3])]
    time = list(rrule(freq=HOURLY, count=nt, dtstart=datetime(2000, 1, 1)))
    items = [ItemInfo("Foo")]
    ds2 = Dataset(data, time, items)

    # Act
    ## interp
    dsi = ds1.interp_time(dt=ds2.time)

    # Assert
    assert dsi.time[0] == ds2.time[0]
    assert dsi.time[-1] == ds2.time[-1]
    assert len(dsi.time) == len(ds2.time)
    assert dsi.data[0].shape[0] == ds2.data[0].shape[0]

    # Accept dataset as argument
    dsi2 = ds1.interp_time(ds2)
    assert dsi2.time[0] == ds2.time[0]
Exemplo n.º 3
0
def test_multidimensional_to_dataframe_no_supported():

    nt = 100
    d1 = np.zeros([nt, 2])

    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset([d1], time, items)

    with pytest.raises(ValueError):
        ds.to_dataframe()
Exemplo n.º 4
0
def test_tail_small_dataset():
    nt = 2
    data = []
    d = np.zeros([nt, 100, 30]) + 1.0
    data.append(d)
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    dstail = ds.tail()

    assert len(dstail.time) == nt
Exemplo n.º 5
0
def test_flipud():

    nt = 2
    d = np.random.random([nt, 100, 30])
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset([d], time, items)

    dsud = ds.copy()
    dsud.flipud()

    assert dsud.shape == ds.shape
    assert dsud["Foo"][0, 0, 0] == ds["Foo"][0, -1, 0]
Exemplo n.º 6
0
def test_thin():

    nt = 100
    data = []
    d = np.zeros([nt, 100, 30]) + 1.0
    data.append(d)
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    dsthin = ds.thin(2)

    assert len(dsthin.time) == 50
Exemplo n.º 7
0
def test_create_time():

    t = Dataset.create_time("2018-1-1,2018-1-2", dt=3600)
    assert t[-1].day == 2
    assert len(t) == 25

    t = Dataset.create_time("2018-1-1", end_time="2018-1-2", n_timesteps=25)
    assert t[-1].day == 2
    assert len(t) == 25

    t = Dataset.create_time("2018-1-1", dt=1800, n_timesteps=48)
    assert t[-1].hour == 23
    assert len(t) == 48

    t = Dataset.create_time("2018", dt=7200, end_time="2019")
    assert len(t) == (365 * 12 + 1)

    t = Dataset.create_time(end_time="1970-1-2", n_timesteps=25)
    assert len(t) == 25
    assert t[0].hour == 0

    with pytest.raises(Exception):
        # dt cannot be negative
        t = Dataset.create_time("2018", dt=-7200)

    with pytest.raises(Exception):
        # end must be after start
        t = Dataset.create_time("2018-2-1,2018-1-1")

    with pytest.raises(Exception):
        # All parameters where given, but they do not match
        t = Dataset.create_time("2018",
                                dt=7200,
                                end_time="2019",
                                n_timesteps=25)
Exemplo n.º 8
0
def test_to_dataframe():

    nt = 100
    d1 = np.zeros([nt])
    d2 = np.zeros([nt])

    data = [d1, d2]

    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)
    df = ds.to_dataframe()

    assert list(df.columns) == ["Foo", "Bar"]
    assert isinstance(df.index, pd.DatetimeIndex)
Exemplo n.º 9
0
def test_temporal_subset_fancy():

    nt = (24 * 31) + 1
    d1 = np.zeros([nt, 100, 30]) + 1.5
    d2 = np.zeros([nt, 100, 30]) + 2.0
    data = [d1, d2]

    time = list(rrule(freq=HOURLY, count=nt, dtstart=datetime(2000, 1, 1)))
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    assert ds.time[0].hour == 0
    assert ds.time[-1].hour == 0

    selds = ds["2000-01-01 00:00":"2000-01-02 00:00"]

    assert len(selds) == 2
    assert selds["Foo"].shape == (25, 100, 30)

    selds = ds[:"2000-01-02 00:00"]
    assert selds["Foo"].shape == (25, 100, 30)

    selds = ds["2000-01-31 00:00":]
    assert selds["Foo"].shape == (25, 100, 30)

    selds = ds["2000-01-30":]
    assert selds["Foo"].shape == (49, 100, 30)
Exemplo n.º 10
0
def test_select_subset_isel_multiple_idxs():

    nt = 100
    d1 = np.zeros([nt, 100, 30]) + 1.5
    d2 = np.zeros([nt, 100, 30]) + 2.0

    data = [d1, d2]

    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    selds = ds.isel([10, 15], axis=1)

    assert len(selds.items) == 2
    assert len(selds.data) == 2
    assert selds["Foo"].shape == (100, 2, 30)
Exemplo n.º 11
0
def test_extrapolate_not_allowed():
    ## Dataset 1
    nt = 2
    data = [np.zeros([nt, 10, 3])]
    time = list(rrule(freq=DAILY, count=nt, dtstart=datetime(2000, 1, 1)))
    items = [ItemInfo("Foo")]
    ds1 = Dataset(data, time, items)
    assert ds1.data[0].shape == (nt, 10, 3)

    ## Dataset 2 partly overlapping with Dataset 1
    nt = 3
    data = [np.ones([nt, 10, 3])]
    time = list(rrule(freq=HOURLY, count=nt, dtstart=datetime(2000, 1, 2)))
    items = [ItemInfo("Foo")]
    ds2 = Dataset(data, time, items)

    with pytest.raises(ValueError):
        dsi = ds1.interp_time(dt=ds2.time, fill_value=1.0, extrapolate=False)
Exemplo n.º 12
0
def test_items_data_mismatch():

    nt = 100
    d = np.zeros([nt, 100, 30]) + 1.0
    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]  # Two items is not correct!

    with pytest.raises(ValueError):
        Dataset([d], time, items)
Exemplo n.º 13
0
def test_time_data_mismatch():

    nt = 100
    d = np.zeros([nt, 100, 30]) + 1.0
    time = _get_time(nt + 1)  # 101 timesteps is not correct!
    items = [ItemInfo("Foo")]

    with pytest.raises(ValueError):
        Dataset([d], time, items)
Exemplo n.º 14
0
def test_interp_time():

    data = []
    nt = 4
    d = np.zeros([nt, 10, 3])
    d[1] = 2.0
    d[3] = 4.0
    data.append(d)
    time = list(rrule(freq=DAILY, count=nt, dtstart=datetime(2000, 1, 1)))
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    assert ds.data[0].shape == (nt, 10, 3)

    dsi = ds.interp_time(dt=3600)

    assert ds.time[0] == dsi.time[0]
    assert dsi.data[0].shape == (73, 10, 3)
Exemplo n.º 15
0
def test_head():

    nt = 100
    data = []
    d = np.zeros([nt, 100, 30]) + 1.0
    data.append(d)
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    dshead = ds.head()

    assert len(dshead.time) == 5
    assert ds.time[0] == dshead.time[0]

    dshead10 = ds.head(n=10)

    assert len(dshead10.time) == 10
Exemplo n.º 16
0
def test_select_temporal_subset_by_idx():

    nt = 100
    d1 = np.zeros([nt, 100, 30]) + 1.5
    d2 = np.zeros([nt, 100, 30]) + 2.0

    d1[0, 10, :] = 2.0
    d2[0, 10, :] = 3.0
    data = [d1, d2]

    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    selds = ds.isel([0, 1, 2], axis=0)

    assert len(selds) == 2
    assert selds["Foo"].shape == (3, 100, 30)
Exemplo n.º 17
0
def test_tail():

    nt = 100
    data = []
    d = np.zeros([nt, 100, 30]) + 1.0
    data.append(d)
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    dstail = ds.tail()

    assert len(dstail.time) == 5
    assert ds.time[-1] == dstail.time[-1]

    dstail10 = ds.tail(n=10)

    assert len(dstail10.time) == 10
Exemplo n.º 18
0
def test_get_data_name():

    nt = 100
    data = []
    d = np.zeros([nt, 100, 30]) + 1.0
    data.append(d)
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    assert ds["Foo"].shape == (100, 100, 30)
Exemplo n.º 19
0
def test_get_bad_name():
    nt = 100
    data = []
    d = np.zeros([100, 100, 30]) + 1.0
    data.append(d)
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    with pytest.raises(Exception):
        ds["BAR"]
Exemplo n.º 20
0
def test_init():
    n_elements = 45
    data = n_elements
    time = "2018-01-01"
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    assert ds.n_timesteps == 1
    assert ds.start_time == datetime(2018, 1, 1, 0, 0, 0)
    assert ds.n_elements == n_elements
    assert ds.items[0].name == "Foo"
Exemplo n.º 21
0
def test_dropna():
    nt = 10
    d1 = np.zeros([nt, 100, 30])
    d2 = np.zeros([nt, 100, 30])

    d1[8:] = np.nan
    d2[8:] = np.nan

    data = [d1, d2]

    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    assert len(ds.items) == 2
    assert len(ds.data) == 2

    ds2 = ds.dropna()

    assert ds2.n_timesteps == 8
Exemplo n.º 22
0
def test_create_empty_data():
    ne = 34
    d = Dataset.create_empty_data(n_elements=ne)
    assert len(d) == 1
    assert d[0].shape == (1, ne)

    nt = 100
    d = Dataset.create_empty_data(n_timesteps=nt, shape=(3, 4, 6))
    assert len(d) == 1
    assert d[0].shape == (nt, 3, 4, 6)

    ni = 4
    d = Dataset.create_empty_data(n_items=ni, n_elements=ne)
    assert len(d) == ni
    assert d[-1].shape == (1, ne)

    with pytest.raises(Exception):
        d = Dataset.create_empty_data()

    with pytest.raises(Exception):
        d = Dataset.create_empty_data(n_elements=None, shape=None)
Exemplo n.º 23
0
def test_select_subset_isel():

    nt = 100
    d1 = np.zeros([nt, 100, 30]) + 1.5
    d2 = np.zeros([nt, 100, 30]) + 2.0

    d1[0, 10, :] = 2.0
    d2[0, 10, :] = 3.0
    data = [d1, d2]

    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    selds = ds.isel(10, axis=1)

    assert len(selds.items) == 2
    assert len(selds.data) == 2
    assert selds["Foo"].shape == (100, 30)
    assert selds["Foo"][0, 0] == 2.0
    assert selds["Bar"][0, 0] == 3.0
Exemplo n.º 24
0
def test_copy():
    nt = 100
    d1 = np.zeros([nt, 100, 30]) + 1.5
    d2 = np.zeros([nt, 100, 30]) + 2.0

    data = [d1, d2]

    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    assert len(ds.items) == 2
    assert len(ds.data) == 2
    assert ds.items[0].name == "Foo"

    ds2 = ds.copy()

    ds2.items[0].name = "New name"

    assert ds2.items[0].name == "New name"
    assert ds.items[0].name == "Foo"
Exemplo n.º 25
0
def test_subset_with_datetime_is_not_supported():
    nt = (24 * 31) + 1
    d1 = np.zeros([nt, 100, 30]) + 1.5
    d2 = np.zeros([nt, 100, 30]) + 2.0
    data = [d1, d2]

    time = list(rrule(freq=HOURLY, count=nt, dtstart=datetime(2000, 1, 1)))
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    with pytest.raises(ValueError):
        ds[datetime(2000, 1, 1)]
Exemplo n.º 26
0
def test_get_names():

    data = []
    nt = 100
    d = np.zeros([nt, 100, 30]) + 1.0
    data.append(d)
    time = _get_time(nt)
    items = [ItemInfo("Foo")]
    ds = Dataset(data, time, items)

    assert ds.items[0].name == "Foo"
    assert ds.items[0].type == EUMType.Undefined
    assert repr(ds.items[0].unit) == "undefined"
Exemplo n.º 27
0
def test_create_infer_name_from_eum():

    nt = 100
    d = np.random.uniform(size=nt)

    ds = Dataset(
        data=[d],
        time=pd.date_range("2000-01-01", freq="H", periods=nt),
        items=[EUMType.Wind_speed],
    )

    assert isinstance(ds.items[0], ItemInfo)
    assert ds.items[0].type == EUMType.Wind_speed
    assert ds.items[0].name == "Wind speed"
Exemplo n.º 28
0
def test_select_item_by_name():
    nt = 100
    d1 = np.zeros([nt, 100, 30]) + 1.5
    d2 = np.zeros([nt, 100, 30]) + 2.0

    d1[0, 10, :] = 2.0
    d2[0, 10, :] = 3.0
    data = [d1, d2]

    time = _get_time(nt)
    items = [ItemInfo("Foo"), ItemInfo("Bar")]
    ds = Dataset(data, time, items)

    foo_data = ds["Foo"]
    assert foo_data[0, 10, 0] == 2.0
Exemplo n.º 29
0
def test_create_undefined():

    nt = 100
    d1 = np.zeros([nt])
    d2 = np.zeros([nt])

    data = [d1, d2]

    time = _get_time(nt)
    items = 2
    ds = Dataset(data, time, items)

    assert len(ds.items) == 2
    assert len(ds.data) == 2
    assert ds.items[0].name == "Item 1"
    assert ds.items[0].type == EUMType.Undefined
Exemplo n.º 30
0
def test_write(tmpdir):

    outfilename = os.path.join(tmpdir.dirname, "simple.dfsu")
    meshfilename = os.path.join("tests", "testdata", "odense_rough.mesh")

    msh = Mesh(meshfilename)

    n_elements = msh.n_elements
    d = np.zeros((1, n_elements))
    data = []
    data.append(d)

    ds = Dataset(data, time=[datetime(2000, 1, 1)], items=[ItemInfo("Zeros")])

    dfs = Dfsu(meshfilename)

    dfs.write(outfilename, ds)

    assert os.path.exists(outfilename)