diff --git a/aidge_backend_cpu/unit_tests/test_recipies.py b/aidge_backend_cpu/unit_tests/test_recipies.py index 60949adf245f4f4a7ed316879fb307131f70739a..841c15590e9dac7596958b8392c99948978723c5 100644 --- a/aidge_backend_cpu/unit_tests/test_recipies.py +++ b/aidge_backend_cpu/unit_tests/test_recipies.py @@ -49,24 +49,24 @@ class test_recipies(unittest.TestCase): np_shift = np.array([0.05]).astype(np.float32) np_mean = np.array([0.05]).astype(np.float32) np_var = np.array([0.05]).astype(np.float32) - conv.input(1)[0].get_operator().set_output_tensor(aidge_core.Tensor(np_weights)) - conv.input(2)[0].get_operator().set_output_tensor(aidge_core.Tensor(np_bias)) - bn.input(1)[0].get_operator().set_output_tensor(aidge_core.Tensor(np_scale)) - bn.input(2)[0].get_operator().set_output_tensor(aidge_core.Tensor(np_shift)) - bn.input(3)[0].get_operator().set_output_tensor(aidge_core.Tensor(np_mean)) - bn.input(4)[0].get_operator().set_output_tensor(aidge_core.Tensor(np_var)) + conv.input(1)[0].get_operator().set_output(0, aidge_core.Tensor(np_weights)) + conv.input(2)[0].get_operator().set_output(0, aidge_core.Tensor(np_bias)) + bn.input(1)[0].get_operator().set_output(0, aidge_core.Tensor(np_scale)) + bn.input(2)[0].get_operator().set_output(0, aidge_core.Tensor(np_shift)) + bn.input(3)[0].get_operator().set_output(0, aidge_core.Tensor(np_mean)) + bn.input(4)[0].get_operator().set_output(0, aidge_core.Tensor(np_var)) scheduler0 = aidge_core.SequentialScheduler(graph_view) scheduler0.forward() for outNode in graph_view.get_output_nodes(): - output_aidge0 = outNode.get_operator().output(0) + output_aidge0 = outNode.get_operator().get_output(0) aidge_core.fuse_batchnorm(graph_view) scheduler1 = aidge_core.SequentialScheduler(graph_view) scheduler1.forward() for outNode in graph_view.get_output_nodes(): - output_aidge1 = outNode.get_operator().output(0) + output_aidge1 = outNode.get_operator().get_output(0) self.assertTrue(aidge_core.approx_eq(output_aidge0, output_aidge1, 0.000001, 0.0001)) diff --git a/aidge_backend_cpu/unit_tests/test_scheduler.py b/aidge_backend_cpu/unit_tests/test_scheduler.py index 3449ff513ef618e24788419c835b7277a1e751f1..2f174efed32fc814010ff61cd42c1bae1105674e 100644 --- a/aidge_backend_cpu/unit_tests/test_scheduler.py +++ b/aidge_backend_cpu/unit_tests/test_scheduler.py @@ -22,30 +22,30 @@ class test_scheduler(unittest.TestCase): gv.add(relu) gv.add(input_node) + input_node.add_child(relu) + gv.set_datatype(aidge_core.DataType.Int32) gv.set_backend("cpu") - input_node.add_child(relu) - scheduler = aidge_core.SequentialScheduler(gv) scheduler.forward() - out_tensor = relu.get_operator().output(0) + out_tensor = relu.get_operator().get_output(0) expected_out = [0,0,0,0,1,2] for i in range(len(expected_out)): self.assertEqual(expected_out[i], out_tensor[i]) def test_sequential_scheduling(self): - input_data = np.array([]).astype(np.float32) + input_data = np.array([0]).astype(np.float32) input_tensor = aidge_core.Tensor(input_data) input_node = aidge_core.Producer(input_tensor, "X") graph_view = aidge_core.sequential([ - aidge_core.FC(50, name='0'), - aidge_core.FC(50, name='1'), - aidge_core.FC(10, name='2'), + aidge_core.FC(1, 50, name='0'), + aidge_core.FC(50, 50, name='1'), + aidge_core.FC(50, 10, name='2'), ]) EXPECTED_SCHEDULE = ['0', '1', '2'] @@ -64,14 +64,14 @@ class test_scheduler(unittest.TestCase): def test_parallel_scheduling(self): - input_data = np.array([]).astype(np.float32) + input_data = np.array([0]).astype(np.float32) input_tensor = aidge_core.Tensor(input_data) input_node = aidge_core.Producer(input_tensor, "X") graph_view = aidge_core.sequential([ - aidge_core.FC(50, name='0'), - aidge_core.parallel([aidge_core.FC(50, name='1'), aidge_core.FC(50, name='3')]), - aidge_core.Add(name='2'), + aidge_core.FC(1, 50, name='0'), + aidge_core.parallel([aidge_core.FC(50, 50, name='1'), aidge_core.FC(50, 50, name='3')]), + aidge_core.Add(2, name='2'), ]) EXPECTED_SCHEDULE = [['0', '1', '3', '2'], ['0', '3', '1', '2']] # Both scheduling are valid ! diff --git a/unit_tests/scheduler/Test_Scheduler.cpp b/unit_tests/scheduler/Test_Scheduler.cpp index 1f6c489e53d9bfbb69fbce7795912cc4e333adc5..8ea8e726f286035a1059a317471b893ce4639251 100644 --- a/unit_tests/scheduler/Test_Scheduler.cpp +++ b/unit_tests/scheduler/Test_Scheduler.cpp @@ -50,13 +50,11 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(forward)") { Conv(1, 3, {3, 3}, "conv1"), Conv(3, 4, {1, 1}, "conv2"), Conv(4, 3, {1, 1}, "conv3"), - FC(5, false, "fc")}); - g->setDataType(Aidge::DataType::Int32); - g->setBackend("cpu"); + FC(27, 5, false, "fc")}); - g->getNode("conv1")->getOperator()->input(0) = *inputTensor; - g->getNode("conv1")->getOperator()->input(1) = *weight1; - g->getNode("conv1")->getOperator()->input(2) = *bias1; + g->getNode("conv1")->getOperator()->setInput(0, inputTensor); + g->getNode("conv1")->getOperator()->setInput(1, weight1); + g->getNode("conv1")->getOperator()->setInput(2, bias1); std::shared_ptr<Tensor> weight2 = std::make_shared<Tensor>(Array4D<int, 4, 3, 1, 1>{{{{{1}}, {{2}}, {{3}}}, @@ -64,8 +62,8 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(forward)") { {{{7}}, {{8}}, {{9}}}, {{{10}}, {{11}}, {{12}}}}}); std::shared_ptr<Tensor> bias2 = std::make_shared<Tensor>(Array1D<int, 4>{{1, 2, 3, 4}}); - g->getNode("conv2")->getOperator()->input(1) = *weight2; - g->getNode("conv2")->getOperator()->input(2) = *bias2; + g->getNode("conv2")->getOperator()->setInput(1, weight2); + g->getNode("conv2")->getOperator()->setInput(2, bias2); // *(g->getNode("conv2")->getOperator()->input(1, weight2); std::shared_ptr<Tensor> weight3 = std::make_shared<Tensor>( @@ -73,8 +71,8 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(forward)") { {{{5}}, {{6}}, {{7}}, {{8}}}, {{{9}}, {{10}}, {{11}}, {{12}}}}}); std::shared_ptr<Tensor> bias3 = std::make_shared<Tensor>(Array1D<int, 3>{{1, 2, 3}}); - g->getNode("conv3")->getOperator()->input(1) = *weight3; - g->getNode("conv3")->getOperator()->input(2) = *bias3; + g->getNode("conv3")->getOperator()->setInput(1, weight3); + g->getNode("conv3")->getOperator()->setInput(2, bias3); std::shared_ptr<Tensor> weightfc = std::make_shared<Tensor>( Array2D<int, 5, 27>{{{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, @@ -88,10 +86,12 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(forward)") { {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}}}); std::shared_ptr<Tensor> biasfc = std::make_shared<Tensor>(Array1D<int, 5>{{1, 2, 3, 4, 5}}); - g->getNode("fc")->getOperator()->input(1) = *weightfc; - g->getNode("fc")->getOperator()->input(2) = *biasfc; + g->getNode("fc")->getOperator()->setInput(1, weightfc); + g->getNode("fc")->getOperator()->setInput(2, biasfc); // input->addChild(g); + g->setDataType(Aidge::DataType::Int32); + g->setBackend("cpu"); g->forwardDims(); SequentialScheduler scheduler(g); REQUIRE_NOTHROW(scheduler.forward()); @@ -126,17 +126,17 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(forward)") { Tensor expectedOutput4 = Array2D<int, 2, 5>{ {{205050376, 198925904, 181355097, 196978090, 238868348}, {598467376, 561797804, 560823897, 593043790, 698672948}}}; - Tensor other1 = g->getNode("conv1")->getOperator()->output(0); - bool equal1 = (other1 == *expectedOutput1); + std::shared_ptr<Tensor> other1 = std::static_pointer_cast<OperatorTensor>(g->getNode("conv1")->getOperator())->getOutput(0); + bool equal1 = (*other1 == *expectedOutput1); REQUIRE(equal1); - Tensor other2 = g->getNode("conv2")->getOperator()->output(0); - bool equal2 = (other2 == *expectedOutput2); + std::shared_ptr<Tensor> other2 = std::static_pointer_cast<OperatorTensor>(g->getNode("conv2")->getOperator())->getOutput(0); + bool equal2 = (*other2 == *expectedOutput2); REQUIRE(equal2); - Tensor other3 = g->getNode("conv3")->getOperator()->output(0); - bool equal3 = (other3 == *expectedOutput3); + std::shared_ptr<Tensor> other3 = std::static_pointer_cast<OperatorTensor>(g->getNode("conv3")->getOperator())->getOutput(0); + bool equal3 = (*other3 == *expectedOutput3); REQUIRE(equal3); - Tensor other4 = g->getNode("fc")->getOperator()->output(0); - bool equal4 = (other4 == expectedOutput4); + std::shared_ptr<Tensor> other4 = std::static_pointer_cast<OperatorTensor>(g->getNode("fc")->getOperator())->getOutput(0); + bool equal4 = (*other4 == expectedOutput4); REQUIRE(equal4); } @@ -149,34 +149,32 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(forward)") { Conv(3, 3, {1, 1}, "conv1.3")}), Add(3, "add1"), Conv(3, 2, {1, 1}, "conv2"), - FC(5, false, "out")}); - g->setBackend("cpu"); - g->setDataType(Aidge::DataType::Int32); + FC(18, 5, false, "out")}); - g->getNode("inputConv")->getOperator()->input(0) = *inputTensor; - g->getNode("inputConv")->getOperator()->input(1) = *weight1; - g->getNode("inputConv")->getOperator()->input(2) = *bias1; + g->getNode("inputConv")->getOperator()->setInput(0, inputTensor); + g->getNode("inputConv")->getOperator()->setInput(1, weight1); + g->getNode("inputConv")->getOperator()->setInput(2, bias1); std::shared_ptr<Tensor> conv11Weight = std::make_shared<Tensor>(Array4D<int, 3, 3, 1, 1>{ {{{{1}}, {{2}}, {{3}}}, {{{4}}, {{5}}, {{6}}}, {{{7}}, {{8}}, {{9}}}}}); - g->getNode("conv1.1")->getOperator()->input(1) = *conv11Weight; - g->getNode("conv1.1")->getOperator()->input(2) = *bias1; + g->getNode("conv1.1")->getOperator()->setInput(1, conv11Weight); + g->getNode("conv1.1")->getOperator()->setInput(2, bias1); std::shared_ptr<Tensor> conv12Weight = std::make_shared<Tensor>(Array4D<int, 3, 3, 1, 1>{ {{{{11}}, {{12}}, {{13}}}, {{{14}}, {{15}}, {{16}}}, {{{17}}, {{18}}, {{19}}}}}); - g->getNode("conv1.2")->getOperator()->input(1) = *conv12Weight; - g->getNode("conv1.2")->getOperator()->input(2) = *bias1; + g->getNode("conv1.2")->getOperator()->setInput(1, conv12Weight); + g->getNode("conv1.2")->getOperator()->setInput(2, bias1); std::shared_ptr<Tensor> conv13Weight = std::make_shared<Tensor>(Array4D<int, 3, 3, 1, 1>{ {{{{21}}, {{22}}, {{23}}}, {{{24}}, {{25}}, {{26}}}, {{{27}}, {{28}}, {{29}}}}}); - g->getNode("conv1.3")->getOperator()->input(1) = *conv13Weight; - g->getNode("conv1.3")->getOperator()->input(2) = *bias1; + g->getNode("conv1.3")->getOperator()->setInput(1, conv13Weight); + g->getNode("conv1.3")->getOperator()->setInput(2, bias1); std::shared_ptr<Tensor> conv2Weight = std::make_shared<Tensor>( Array4D<int, 2, 3, 1, 1>{{{{{1}}, {{2}}, {{3}}}, {{{4}}, {{5}}, {{6}}}}}); std::shared_ptr<Tensor> bias2 = std::make_shared<Tensor>(Array1D<int, 2>{{1, 2}}); - g->getNode("conv2")->getOperator()->input(1) = *conv2Weight; - g->getNode("conv2")->getOperator()->input(2) = *bias2; + g->getNode("conv2")->getOperator()->setInput(1, conv2Weight); + g->getNode("conv2")->getOperator()->setInput(2, bias2); std::shared_ptr<Tensor> fcWeight = std::make_shared<Tensor>( Array2D<int, 5, 18>{{{1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3}, @@ -185,19 +183,21 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(forward)") { {5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2}, {3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5}}}); std::shared_ptr<Tensor> fcBias = std::make_shared<Tensor>(Array1D<int, 5>{{1, 2, 3, 4, 5}}); - g->getNode("out")->getOperator()->input(1) = *fcWeight; - g->getNode("out")->getOperator()->input(2) = *fcBias; + g->getNode("out")->getOperator()->setInput(1, fcWeight); + g->getNode("out")->getOperator()->setInput(2, fcBias); std::shared_ptr<Tensor> expectedOutput = std::make_shared<Tensor>( Array2D<int, 2, 5>{{{124324368, 130692907, 133325056, 125044620, 142843879}, {369195468, 394615207, 382643056, 379441320, 416291779}}}); + g->setBackend("cpu"); + g->setDataType(Aidge::DataType::Int32); g->forwardDims(); SequentialScheduler scheduler(g); REQUIRE_NOTHROW(scheduler.forward()); scheduler.saveSchedulingDiagram("schedulingSequential"); std::shared_ptr<Tensor> result = - std::static_pointer_cast<Tensor>(g->getNode("out")->getOperator()->getOutput(0)); + std::static_pointer_cast<Tensor>(g->getNode("out")->getOperator()->getRawOutput(0)); bool equal = (*result == *expectedOutput); REQUIRE(equal); }