diff --git a/benchmarks/data/test_tools.py b/benchmarks/data/test_tools.py index 58177e2634078b17471001a1d7a73988b1886ef4..b6cfbb48d66f4195572e898cd18011ef51898132 100644 --- a/benchmarks/data/test_tools.py +++ b/benchmarks/data/test_tools.py @@ -266,3 +266,53 @@ class TestUnitsTools(unittest.TestCase): info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m") xdata = full(0.0, info) _result = self.benchmark(get_magnitude, xdata=xdata) + + @pytest.mark.benchmark(group="data-tools-slow") + def test_set_units_mul_01_512x256(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m") + xdata = full(0.0, info).magnitude + _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m")) + + @pytest.mark.benchmark(group="data-tools-slow") + def test_set_units_mul_02_1024x512(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((1024, 512)), units="m") + xdata = full(0.0, info).magnitude + _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m")) + + @pytest.mark.benchmark(group="data-tools-slow") + def test_set_units_mul_03_2048x1024(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m") + xdata = full(0.0, info).magnitude + _result = self.benchmark(set_units_mul, data=xdata, units=fm.UNITS.Unit("m")) + + @pytest.mark.benchmark(group="data-tools-slow") + def test_set_units_quant_01_512x256(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((512, 256)), units="m") + xdata = full(0.0, info).magnitude + _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m")) + + @pytest.mark.benchmark(group="data-tools-slow") + def test_set_units_quant_02_1024x512(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((1024, 512)), units="m") + xdata = full(0.0, info).magnitude + _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m")) + + @pytest.mark.benchmark(group="data-tools-slow") + def test_set_units_quant_03_2048x1024(self): + time = dt.datetime(2000, 1, 1) + info = fm.Info(time=time, grid=fm.UniformGrid((2048, 1024)), units="m") + xdata = full(0.0, info).magnitude + _result = self.benchmark(set_units_qua, data=xdata, units=fm.UNITS.Unit("m")) + + +def set_units_mul(data, units): + return data * units + + +def set_units_qua(data, units): + return fm.UNITS.Quantity(data, units) diff --git a/benchmarks/profiling/mem_huge_memory.py b/benchmarks/profiling/mem_huge_memory.py index cbed59fc0dfacb192d1b45bf25fe1c04f85a675b..5d7d18b55fb9736234f8ac5cb756a621d06cc890 100644 --- a/benchmarks/profiling/mem_huge_memory.py +++ b/benchmarks/profiling/mem_huge_memory.py @@ -13,11 +13,9 @@ if __name__ == "__main__": info1 = fm.Info(time=None, grid=fm.UniformGrid(size), units="m") data = fm.data.to_xarray(fm.data.full(0.0, info1), info1) - def gen_data(t): return np.copy(data) - source = fm.modules.CallbackGenerator( callbacks={"Out": (gen_data, info1.copy())}, start=start_time, diff --git a/src/finam/data/tools.py b/src/finam/data/tools.py index 35cb8c34a58e15a1b093ca5dbaf362ee6413517b..7617c4ca0a22a05dee04fbfa5088b72ff4da0de4 100644 --- a/src/finam/data/tools.py +++ b/src/finam/data/tools.py @@ -66,9 +66,15 @@ def prepare(data, info, time_entries=1, force_copy=False): data = data.copy() else: if isinstance(data, np.ndarray): - data = data * units + if force_copy: + data = data * units + else: + data = UNITS.Quantity(data, units) else: - data = np.asarray(data) * units + if force_copy: + data = np.asarray(data) * units + else: + data = UNITS.Quantity(np.asarray(data), units) data = _check_input_shape(data, info, time_entries) return data