예제 #1
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_data_array_to_dict():
    da = sc.DataArray(
        coords={
            "x": sc.Variable(dims=["x"], values=np.arange(10.)),
            "y": sc.Variable(dims=["y"], values=np.arange(5), unit=sc.units.m),
        },
        masks={
            "amask":
            sc.Variable(dims=["y"], values=[True, True, False, True, False])
        },
        attrs={"attr1": sc.Variable(dims=["x"], values=np.random.random(10))},
        data=sc.Variable(dims=["y", "x"], values=np.random.random([5, 10])))
    da_dict = sc.to_dict(da)
    assert da_dict["data"]["dims"] == da.dims
    assert da_dict["data"]["shape"] == da.shape
    assert np.array_equal(da_dict["data"]["values"], da.values)
    assert np.array_equal(da_dict["data"]["variances"], da.variances)
    assert da_dict["data"]["unit"] == da.unit
    assert da_dict["data"]["dtype"] == da.dtype
    assert sc.is_equal(sc.from_dict(da_dict["coords"]["x"]), da.coords["x"])
    assert sc.is_equal(sc.from_dict(da_dict["coords"]["y"]), da.coords["y"])
    assert sc.is_equal(sc.from_dict(da_dict["masks"]["amask"]),
                       da.masks["amask"])
    assert sc.is_equal(sc.from_dict(da_dict["attrs"]["attr1"]),
                       da.attrs["attr1"])
예제 #2
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_dataset_from_dict():
    ds_dict = {
        "a": {
            "coords": {
                "x": {
                    "dims": ["x"],
                    "values": np.arange(10)
                },
                "y": {
                    "dims": ["y"],
                    "values": np.arange(5),
                    "unit": sc.units.m
                },
            },
            "masks": {
                "amask": {
                    "dims": ["y"],
                    "values": [True, True, False, True, False]
                }
            },
            "data": {
                "dims": ["y", "x"],
                "values": np.random.random([5, 10])
            }
        },
        "b": {
            "coords": {
                "x": {
                    "dims": ["x"],
                    "values": np.arange(10)
                },
                "y": {
                    "dims": ["y"],
                    "values": np.arange(5),
                    "unit": sc.units.m
                },
            },
            "masks": {
                "amask": {
                    "dims": ["y"],
                    "values": [True, True, False, True, False]
                }
            },
            "data": {
                "dims": ["y", "x"],
                "values": np.random.random([5, 10]),
                "variances": np.random.random([5, 10])
            }
        }
    }
    ds = sc.from_dict(ds_dict)
    assert sc.is_equal(ds["a"], sc.from_dict(ds_dict["a"]))
    assert sc.is_equal(ds["b"], sc.from_dict(ds_dict["b"]))
예제 #3
0
 def convert_from_str_unit_and_dtype(d):
     delete_dtype = False
     for k, v in d.items():
         if isinstance(v, dict):
             convert_from_str_unit_and_dtype(v)
             if k not in ("attrs", "masks", "coords"):
                 if {"coords", "data"}.issubset(set(v.keys())):
                     # from_dict does not work with nested DataArrays,
                     # so we have to manually construct DataArrays here.
                     d[k] = sc.DataArray(coords=v["coords"],
                                         data=v["data"],
                                         attrs=v["attrs"])
                 else:
                     try:
                         if any(scipp_container_type in str(v["dtype"]) for
                                scipp_container_type in _scipp_containers):
                             del v["dtype"]
                     except KeyError:
                         pass
                     d[k] = sc.from_dict(v)
         else:
             if k == "dtype":
                 try:
                     d[k] = np.dtype(v)
                 except TypeError:
                     if v == "string":
                         d[k] = sc.DType.string
                     elif any(
                             scipp_container_type in k
                             for scipp_container_type in _scipp_containers):
                         delete_dtype = True
     # Delete now, not while looping through dictionary
     if delete_dtype:
         del d["dtype"]
예제 #4
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_0D_vector_from_dict():
    var_dict = {"value": [1, 2, 3], "dtype": "vector_3_float64"}
    var = sc.from_dict(var_dict)
    assert var.dims == []
    assert var.shape == []
    assert np.array_equal(np.array(var.values), [1, 2, 3])
    assert var.unit == sc.units.one
    assert var.dtype == sc.dtype.vector_3_float64
예제 #5
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_0D_from_dict():
    var_dict = {"value": 17., "variance": 0.2}
    var = sc.from_dict(var_dict)
    assert var.dims == []
    assert var.shape == []
    assert var.value == 17.0
    assert var.variance == 0.2
    assert var.unit == sc.units.one
예제 #6
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_dataset_to_dict():
    ds = sc.Dataset()
    ds.coords["x"] = sc.Variable(dims=["x"], values=np.arange(10))
    ds.coords["y"] = sc.Variable(dims=["y"],
                                 values=np.arange(5),
                                 unit=sc.units.m)
    ds["a"] = sc.Variable(dims=["y", "x"], values=np.random.random([5, 10]))
    ds["b"] = sc.Variable(dims=["y", "x"],
                          values=np.random.random([5, 10]),
                          variances=np.random.random([5, 10]),
                          unit=sc.units.s)
    ds["a"].masks["amask"] = sc.Variable(
        dims=["y"], values=[True, True, False, True, False])
    # Note that attributes complicate things here, as they are duplicated in
    # each entry during the conversion to dict. So for now, we leave attributes
    # out.
    ds_dict = sc.to_dict(ds)
    assert sc.is_equal(sc.from_dict(ds_dict["a"]), ds["a"])
    assert sc.is_equal(sc.from_dict(ds_dict["b"]), ds["b"])
예제 #7
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_0D_matrix_from_dict():
    var_dict = {
        "value": np.arange(9).reshape(3, 3),
        "dtype": "matrix_3_float64"
    }
    var = sc.from_dict(var_dict)
    assert var.dims == []
    assert var.shape == []
    assert np.array_equal(np.array(var.value), var_dict["value"])
    assert var.unit == sc.units.one
    assert var.dtype == sc.dtype.matrix_3_float64
예제 #8
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_matrix_from_dict():
    var_dict = {
        "dims": ['x'],
        "values": np.arange(18).reshape(2, 3, 3),
        "dtype": "matrix_3_float64"
    }
    var = sc.from_dict(var_dict)
    assert var.dims == var_dict["dims"]
    assert var.shape == [2]
    assert np.array_equal(np.array(var.values), var_dict["values"])
    assert var.unit == sc.units.one
    assert var.dtype == sc.dtype.matrix_3_float64
예제 #9
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_vector_from_dict():
    var_dict = {
        "dims": ['x'],
        "values": np.arange(6).reshape(2, 3),
        "dtype": "vector_3_float64"
    }
    var = sc.from_dict(var_dict)
    assert var.dims == var_dict["dims"]
    assert var.shape == [2]
    assert np.array_equal(np.array(var.values), [[0, 1, 2], [3, 4, 5]])
    assert var.unit == sc.units.one
    assert var.dtype == sc.dtype.vector_3_float64
예제 #10
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_matrix_round_trip():
    data = np.array([
        np.arange(9.0).reshape(3, 3),
        np.arange(5.0, 14.0).reshape(3, 3),
        np.arange(1.0, 10.0).reshape(3, 3),
        np.arange(2.0, 11.0).reshape(3, 3)
    ])
    var = sc.Variable(['x'],
                      values=data,
                      unit=sc.units.m,
                      dtype=sc.dtype.matrix_3_float64)
    assert sc.is_equal(var, sc.from_dict(sc.to_dict(var)))
예제 #11
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_from_dict():
    var_dict = {
        "dims": ['x'],
        "values": np.random.random(10),
        "variances": np.random.random(10)
    }
    var = sc.from_dict(var_dict)
    assert var.dims == var_dict["dims"]
    assert var.shape == [10]
    assert np.array_equal(var.values, var_dict["values"])
    assert np.array_equal(var.variances, var_dict["variances"])
    assert var.unit == sc.units.one
예제 #12
0
파일: test_dict.py 프로젝트: TC5027/scipp
def test_data_array_unaligned_to_dict():
    N = 50
    values = 10 * np.random.rand(N)
    da = sc.DataArray(data=sc.Variable(dims=['position'],
                                       unit=sc.units.counts,
                                       values=values,
                                       variances=values),
                      coords={
                          'position':
                          sc.Variable(
                              dims=['position'],
                              values=['site-{}'.format(i) for i in range(N)]),
                          'x':
                          sc.Variable(dims=['position'],
                                      unit=sc.units.m,
                                      values=np.random.rand(N)),
                          'y':
                          sc.Variable(dims=['position'],
                                      unit=sc.units.m,
                                      values=np.random.rand(N))
                      })
    xbins = sc.Variable(dims=['x'], unit=sc.units.m, values=[0.1, 0.5, 0.9])
    ybins = sc.Variable(dims=['y'],
                        unit=sc.units.m,
                        values=[0.1, 0.3, 0.5, 0.7, 0.9])
    realigned = sc.realign(da, {'y': ybins, 'x': xbins})

    da_dict = sc.to_dict(realigned)
    assert "unaligned" in da_dict
    assert "data" not in da_dict
    assert sc.from_dict(da_dict["coords"]["x"]) == xbins
    assert sc.from_dict(da_dict["coords"]["y"]) == ybins
    assert sc.from_dict(
        da_dict["unaligned"]["coords"]["x"]) == realigned.unaligned.coords["x"]
    assert sc.from_dict(
        da_dict["unaligned"]["coords"]["y"]) == realigned.unaligned.coords["y"]
예제 #13
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_data_array_round_trip():
    da = sc.DataArray(coords={
        "x":
        sc.Variable(dims=["x"], values=np.arange(10.)),
        "y":
        sc.Variable(dims=["y"], values=np.arange(5), unit=sc.units.m),
    },
                      masks={
                          "amask":
                          sc.Variable(dims=["y"],
                                      values=[True, True, False, True, False])
                      },
                      data=sc.Variable(dims=["y", "x"],
                                       values=np.random.random([5, 10])))
    assert sc.is_equal(da, sc.from_dict(sc.to_dict(da)))
예제 #14
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_dataset_round_trip():
    ds = sc.Dataset()
    ds.coords["x"] = sc.Variable(dims=["x"], values=np.arange(10))
    ds.coords["y"] = sc.Variable(dims=["y"],
                                 values=np.arange(5),
                                 unit=sc.units.m)
    ds["a"] = sc.Variable(dims=["y", "x"], values=np.random.random([5, 10]))
    ds["b"] = sc.Variable(dims=["y", "x"],
                          values=np.random.random([5, 10]),
                          variances=np.random.random([5, 10]),
                          unit=sc.units.s)
    ds["a"].masks["amask"] = sc.Variable(
        dims=["y"], values=[True, True, False, True, False])
    # Note that round trip would not work if attrs are present, since they get
    # become a per-item attribute during the conversion to dict.
    assert sc.is_equal(ds, sc.from_dict(sc.to_dict(ds)))
예제 #15
0
파일: test_dict.py 프로젝트: TC5027/scipp
def test_variable_event_from_dict():
    var_dict = {
        'dims': ['x'],
        'dtype':
        'event_list_float64',
        'values':
        np.array([
            np.array([1., 1., 1.]),
            np.array([42.]),
            np.array([]),
            np.array([1., 1., 1., 1., 1., 1.])
        ])
    }
    var = sc.from_dict(var_dict)
    assert var.dims == ['x']
    assert var.shape == [4]
    assert np.array_equal(var['x', 0].values, [1., 1., 1.])
    assert np.array_equal(var['x', 1].values, [42.])
    assert len(var['x', 2].values) == 0
    assert np.array_equal(var['x', 3].values, [1., 1., 1., 1., 1., 1.])
    assert var.unit == sc.units.one
    assert var.dtype == sc.dtype.event_list_float64
예제 #16
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_data_array_from_dict():
    da_dict = {
        "coords": {
            "x": {
                "dims": ["x"],
                "values": np.arange(10)
            },
            "y": {
                "dims": ["y"],
                "values": np.arange(5),
                "unit": sc.units.m
            },
        },
        "masks": {
            "amask": {
                "dims": ["y"],
                "values": [True, True, False, True, False]
            }
        },
        "attrs": {
            "attr1": {
                "dims": ["x"],
                "values": np.random.random(10)
            }
        },
        "data": {
            "dims": ["y", "x"],
            "values": np.random.random([5, 10])
        }
    }
    da = sc.from_dict(da_dict)
    assert sc.is_equal(da.coords["x"], sc.from_dict(da_dict["coords"]["x"]))
    assert sc.is_equal(da.coords["y"], sc.from_dict(da_dict["coords"]["y"]))
    assert sc.is_equal(da.masks["amask"],
                       sc.from_dict(da_dict["masks"]["amask"]))
    assert sc.is_equal(da.attrs["attr1"],
                       sc.from_dict(da_dict["attrs"]["attr1"]))
    assert sc.is_equal(da.data, sc.from_dict(da_dict["data"]))
예제 #17
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_round_trip():
    var = sc.Variable(dims=["x"],
                      values=np.arange(10.),
                      variances=np.random.random(10),
                      unit=sc.units.m)
    assert sc.is_equal(var, sc.from_dict(sc.to_dict(var)))
예제 #18
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_0D_round_trip():
    var = 12.0 * sc.units.one
    print(sc.to_dict(var))
    assert sc.is_equal(var, sc.from_dict(sc.to_dict(var)))
예제 #19
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_vector_round_trip():
    var = sc.Variable(['x'],
                      values=np.random.random([10, 3]),
                      dtype=sc.dtype.vector_3_float64)
    assert sc.is_equal(var, sc.from_dict(sc.to_dict(var)))
예제 #20
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_0D_matrix_round_trip():
    var = sc.Variable(value=np.arange(1, 10).reshape(3, 3),
                      dtype=sc.dtype.matrix_3_float64)
    assert sc.is_equal(var, sc.from_dict(sc.to_dict(var)))
예제 #21
0
파일: test_dict.py 프로젝트: TC5027/scipp
def test_variable_event_round_trip():
    var = sc.Variable(dims=['x'], shape=[4], dtype=sc.dtype.event_list_float64)
    var['x', 1].values.append(42)
    var['x', 0].values.extend(np.ones(3))
    var['x', 3].values = np.ones(6)
    assert sc.is_equal(var, sc.from_dict(sc.to_dict(var)))
예제 #22
0
파일: test_dict.py 프로젝트: arm61/scipp
def test_variable_0D_vector_round_trip():
    var = sc.Variable(value=[1, 2, 3], dtype=sc.dtype.vector_3_float64)
    assert sc.is_equal(var, sc.from_dict(sc.to_dict(var)))