Skip to content

Commit f5e44d1

Browse files
Added mul implementation
1 parent 2f9c51c commit f5e44d1

File tree

7 files changed

+90
-1
lines changed

7 files changed

+90
-1
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ set(SOURCES
1818
src/fields/input_field.cpp
1919
src/fields/addition.cpp
2020
src/fields/subtraction.cpp
21+
src/fields/multiplication.cpp
2122
src/fields/field_link_definition.cpp
2223
src/fields/obj.cpp
2324
src/fields/type.cpp

include/fields/multiplication.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef MULTIPLICATION_H
2+
#define MULTIPLICATION_H
3+
4+
#include "fields/abstract_function_definition.h"
5+
#include "fields/type.h"
6+
#include "fields/obj.h"
7+
8+
class Multiplication : public AbstractFunctionDefinition {
9+
public:
10+
11+
// Constructor
12+
Multiplication(Type* ref, const std::string& name);
13+
14+
// Overridden method from AbstractFunctionDefinition
15+
double computeUpdate(Obj* obj, FieldLinkDefinition* fl, double u) override;
16+
};
17+
18+
#endif // MULTIPLICATION_H

install_manifest.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/field_link_definition.h
1515
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/obj.h
1616
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/direction.h
17+
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/multiplication.h
1718
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/subtraction.h
1819
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/queue_provider.h
1920
/Users/lukasmolzberger/CLionProjects/aika-cpp/.venv/lib/python3.12/site-packages/aika/include/fields/abstract_function_definition.h
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import unittest
2+
import sys
3+
import os
4+
5+
# Add the project root to Python's module search path
6+
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
7+
8+
import aika
9+
10+
class MultiplicationTestCase(unittest.TestCase):
11+
12+
def testMultiplication(self):
13+
print("Module 'aika' was loaded from:", aika.__file__)
14+
15+
TEST_RELATION_FROM = aika.RelationOne(1, "TEST_FROM")
16+
TEST_RELATION_TO = aika.RelationOne(2, "TEST_TO")
17+
TEST_RELATION_TO.setReversed(TEST_RELATION_FROM)
18+
TEST_RELATION_FROM.setReversed(TEST_RELATION_TO)
19+
20+
registry = aika.TypeRegistry()
21+
22+
typeA = aika.TestType(registry, "A")
23+
typeB = aika.TestType(registry, "B")
24+
25+
a = typeA.inputField("a")
26+
b = typeA.inputField("b")
27+
28+
c = typeB.mul("c")
29+
30+
c.input(TEST_RELATION_FROM, a, 0)
31+
c.input(TEST_RELATION_FROM, b, 1)
32+
33+
registry.flattenTypeHierarchy()
34+
35+
oa = typeA.instantiate()
36+
ob = typeB.instantiate()
37+
38+
aika.TestObj.linkObjects(oa, ob)
39+
ob.initFields()
40+
41+
oa.setFieldValue(a, 5.0)
42+
oa.setFieldValue(b, 4.0)
43+
44+
print("ob.getFieldValue(c):", ob.getFieldValue(c))
45+
46+
self.assertEqual(20.0, ob.getFieldValue(c))
47+
48+
if __name__ == '__main__':
49+
unittest.main()

python-tests/subtraction-test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import aika
1010

11-
class MyTestCase(unittest.TestCase):
11+
class MySubtractionTestCase(unittest.TestCase):
1212

1313
@parameterized.expand([
1414
(0, "linking_pos_0"),

src/fields/multiplication.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include "fields/multiplication.h"
2+
3+
// Constructor
4+
Multiplication::Multiplication(Type* ref, const std::string& name)
5+
: AbstractFunctionDefinition(ref, name, 2, 0.0) {}
6+
7+
// Overridden computeUpdate method
8+
double Multiplication::computeUpdate(Obj* obj, FieldLinkDefinition* fl, double u) {
9+
return u * getInputs()[fl->getArgument() == 0 ? 1 : 0]->getInputValue(obj);
10+
}

src/fields/python_bindings.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "fields/test_object.h"
1313
#include "fields/field.h"
1414
#include "fields/addition.h"
15+
#include "fields/multiplication.h"
1516

1617

1718
// ----------------
@@ -53,6 +54,9 @@ PYBIND11_MODULE(aika, m)
5354
// Bind Addition (inherits from AbstractFunctionDefinition)
5455
py::class_<Addition, AbstractFunctionDefinition>(m, "Addition");
5556

57+
// Bind Multiplication (inherits from AbstractFunctionDefinition)
58+
py::class_<Multiplication, AbstractFunctionDefinition>(m, "Multiplication");
59+
5660
py::class_<InputField, FieldDefinition>(m, "InputField")
5761
.def(py::init<Type*, const std::string &>())
5862
.def("__str__", [](const InputField &f) {
@@ -81,6 +85,12 @@ PYBIND11_MODULE(aika, m)
8185
const_cast<Type*>(&ref),
8286
name
8387
);
88+
}, py::return_value_policy::reference_internal)
89+
.def("mul", [](const Type &ref, const std::string &name) {
90+
return new Multiplication(
91+
const_cast<Type*>(&ref),
92+
name
93+
);
8494
}, py::return_value_policy::reference_internal);
8595

8696
py::class_<Obj>(m, "Obj")

0 commit comments

Comments
 (0)