Skip to content
Snippets Groups Projects
Commit 44d53cb3 authored by Martin Lange's avatar Martin Lange
Browse files

fix copying of xarray data in connector, add tests

parent 2238c353
No related branches found
No related tags found
1 merge request!217Ensure data is a copy in outputs
Pipeline #132929 passed with stages
in 10 minutes and 34 seconds
......@@ -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)
......
......@@ -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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment