|
5 | 5 | import numpy as np |
6 | 6 | import openmatrix |
7 | 7 | import pandas as pd |
| 8 | +import pytest |
8 | 9 | import xarray as xr |
9 | 10 | from pytest import approx |
10 | 11 |
|
@@ -133,3 +134,47 @@ def test_deferred_load_to_shared_memory(): |
133 | 134 | xr.testing.assert_equal(d0, d1) |
134 | 135 | d2 = xr.Dataset.shm.from_shared_memory(token) |
135 | 136 | xr.testing.assert_equal(d0, d2) |
| 137 | + |
| 138 | + |
| 139 | +def test_from_named_objects(): |
| 140 | + from sharrow.dataset import from_named_objects |
| 141 | + |
| 142 | + s1 = pd.Series([1, 4, 9, 16], name="Squares") |
| 143 | + s2 = pd.Series([2, 3, 5, 7, 11], name="Primes") |
| 144 | + i1 = pd.Index([1, 4, 9, 16], name="Squares") |
| 145 | + a1 = xr.DataArray([1, 4, 9, 16], name="Squares") |
| 146 | + |
| 147 | + for obj in [s1, i1, a1]: |
| 148 | + ds = from_named_objects(obj, s2) |
| 149 | + assert "Squares" in ds.dims |
| 150 | + assert "Primes" in ds.dims |
| 151 | + assert ds.sizes == {"Squares": 4, "Primes": 5} |
| 152 | + |
| 153 | + with pytest.raises(ValueError): |
| 154 | + from_named_objects([1, 4, 9, 16], s2) |
| 155 | + |
| 156 | + |
| 157 | +def test_dataarray_iloc(): |
| 158 | + arr = xr.DataArray([1, 4, 9, 16, 25, 36], name="Squares", dims="s") |
| 159 | + |
| 160 | + assert arr.iloc[1] == 4 |
| 161 | + xr.testing.assert_equal(arr.iloc[1:], xr.DataArray([4, 9, 16, 25, 36], dims="s")) |
| 162 | + xr.testing.assert_equal(arr.iloc[:2], xr.DataArray([1, 4], dims="s")) |
| 163 | + xr.testing.assert_equal(arr.iloc[2:4], xr.DataArray([9, 16], dims="s")) |
| 164 | + xr.testing.assert_equal(arr.iloc[:-2], xr.DataArray([1, 4, 9, 16], dims="s")) |
| 165 | + xr.testing.assert_equal(arr.iloc[-2:], xr.DataArray([25, 36], dims="s")) |
| 166 | + |
| 167 | + with pytest.raises(TypeError): |
| 168 | + arr.iloc[1] = 5 # assignment not allowed |
| 169 | + |
| 170 | + arr2 = xr.DataArray([2, 3, 5, 7, 11], name="Primes", dims="p") |
| 171 | + arr2d = arr * arr2 |
| 172 | + |
| 173 | + with pytest.raises(TypeError): |
| 174 | + _tmp = arr2d.iloc[1] # not allowed for 2D arrays |
| 175 | + |
| 176 | + assert arr2d.iloc[dict(s=1, p=2)] == 20 |
| 177 | + |
| 178 | + z = arr2d.iloc[dict(s=slice(1, 2), p=slice(2, 4))] |
| 179 | + |
| 180 | + xr.testing.assert_equal(z, xr.DataArray([[20, 28]], dims=["s", "p"])) |
0 commit comments