diff --git a/src/finam/tools/connect_helper.py b/src/finam/tools/connect_helper.py index 477192ab88d759e8c4a73423c133c9949ecef106..9a6906800d100307ebaebd443ac9d9ffbdc5f385 100644 --- a/src/finam/tools/connect_helper.py +++ b/src/finam/tools/connect_helper.py @@ -529,7 +529,7 @@ class ConnectHelper(Loggable): data_1 = assign_time(data, time) out.push_data(data_1, time) data_2 = assign_time(data, info_time) - out.push_data(copy.copy(data_2), info_time) + out.push_data(data_2.copy(), info_time) else: out.push_data(data, time) out.push_data(copy.copy(data), info_time) diff --git a/tests/core/test_schedule.py b/tests/core/test_schedule.py index d81dab5db6d0e04f952fdc9f612e91891e127566..b71a8fdaae5fdb642d138e1a373ce84bc43ac465 100644 --- a/tests/core/test_schedule.py +++ b/tests/core/test_schedule.py @@ -897,6 +897,118 @@ class TestComposition(unittest.TestCase): self.assertEqual([1, 8, 13], updates["A"]) self.assertEqual([1, 4, 7, 10], updates["B"]) + def test_starting_time_numpy(self): + start_1 = datetime(2000, 1, 2) + start_2 = datetime(2000, 1, 8) + + updates = {"A": [], "B": []} + + def lambda_generator(t): + return t.day + + def lambda_component(inp, t): + return {"Out": np.asarray(1) * fm.UNITS("")} + + def lambda_debugger(name, data, t): + updates[name].append(t.day) + + module1 = CallbackGenerator( + callbacks={"Out": (lambda_generator, fm.Info(time=None, grid=fm.NoGrid()))}, + start=start_2, + step=timedelta(days=5), + ) + module2 = CallbackComponent( + inputs={ + "In": fm.Info(time=None, grid=fm.NoGrid()), + }, + outputs={ + "Out": fm.Info(time=None, grid=fm.NoGrid()), + }, + callback=lambda_component, + start=start_1, + step=timedelta(days=3), + ) + module3 = DebugPushConsumer( + inputs={ + "A": fm.Info(time=None, grid=None), + "B": fm.Info(time=None, grid=None), + }, + callbacks={ + "A": lambda_debugger, + "B": lambda_debugger, + }, + ) + + composition = Composition([module1, module2, module3]) + composition.initialize() + + module1.outputs["Out"] >> Scale(1.0) >> module2.inputs["In"] + module1.outputs["Out"] >> Scale(1.0) >> module3.inputs["A"] + module2.outputs["Out"] >> Scale(1.0) >> module3.inputs["B"] + + composition.connect(datetime(2000, 1, 1)) + + composition.run(end_time=datetime(2000, 1, 10)) + + self.assertEqual([1, 8, 13], updates["A"]) + self.assertEqual([1, 2, 5, 8, 11], updates["B"]) + + def test_starting_time_xarray(self): + start_1 = datetime(2000, 1, 2) + start_2 = datetime(2000, 1, 8) + + updates = {"A": [], "B": []} + + def lambda_generator(t): + return t.day + + def lambda_component(inp, t): + return {"Out": fm.data.assign_time(inp["In"], t)} + + def lambda_debugger(name, data, t): + updates[name].append(t.day) + + module1 = CallbackGenerator( + callbacks={"Out": (lambda_generator, fm.Info(time=None, grid=fm.NoGrid()))}, + start=start_2, + step=timedelta(days=5), + ) + module2 = CallbackComponent( + inputs={ + "In": fm.Info(time=None, grid=fm.NoGrid()), + }, + outputs={ + "Out": fm.Info(time=None, grid=fm.NoGrid()), + }, + callback=lambda_component, + start=start_1, + step=timedelta(days=3), + ) + module3 = DebugPushConsumer( + inputs={ + "A": fm.Info(time=None, grid=None), + "B": fm.Info(time=None, grid=None), + }, + callbacks={ + "A": lambda_debugger, + "B": lambda_debugger, + }, + ) + + composition = Composition([module1, module2, module3]) + composition.initialize() + + module1.outputs["Out"] >> Scale(1.0) >> module2.inputs["In"] + module1.outputs["Out"] >> Scale(1.0) >> module3.inputs["A"] + module2.outputs["Out"] >> Scale(1.0) >> module3.inputs["B"] + + composition.connect(datetime(2000, 1, 1)) + + composition.run(end_time=datetime(2000, 1, 10)) + + self.assertEqual([1, 8, 13], updates["A"]) + self.assertEqual([1, 2, 5, 8, 11], updates["B"]) + if __name__ == "__main__": unittest.main()