bptk-py
Advanced tools
@@ -1,4 +0,4 @@ | ||
| Metadata-Version: 2.2 | ||
| Metadata-Version: 2.4 | ||
| Name: bptk-py | ||
| Version: 1.9.5 | ||
| Version: 2.0.0 | ||
| Summary: A python simulation engine for System Dynamics & Agent based models | ||
@@ -29,3 +29,3 @@ Author-email: transentis <support@transentis.com> | ||
| Requires-Dist: cachetools==5.5.0 | ||
| Requires-Dist: requests==2.31.0 | ||
| Requires-Dist: requests==2.32.0 | ||
| Requires-Dist: flask==3.0.3 | ||
@@ -35,2 +35,3 @@ Requires-Dist: jsonpickle==3.0.2 | ||
| Requires-Dist: pytest; extra == "test" | ||
| Dynamic: license-file | ||
@@ -80,2 +81,12 @@ # Business Prototyping Toolkit for Python | ||
| ### 2.0.0 | ||
| * Support for multidimensional sddsl | ||
| ### 1.9.6 | ||
| * Enabled modulo operation for sddsl-elements | ||
| * removed unnecessary code | ||
| * added unittests/pytests | ||
| ### 1.9.5 | ||
@@ -82,0 +93,0 @@ |
@@ -13,3 +13,3 @@ pandas==2.2.3 | ||
| cachetools==5.5.0 | ||
| requests==2.31.0 | ||
| requests==2.32.0 | ||
| flask==3.0.3 | ||
@@ -16,0 +16,0 @@ jsonpickle==3.0.2 |
+37
-13
@@ -141,5 +141,14 @@ # /`- | ||
| else: | ||
| for i in range(dims[0]): | ||
| for j in range(dims[1]): | ||
| self[i][j].equation = equation.clone_with_index([i, j]) | ||
| if(equation.is_named()): | ||
| names = {} | ||
| for i in range(dims[0]): | ||
| name1 = equation.index_to_string(i) | ||
| names[name1] = {} | ||
| for j in range(dims[1]): | ||
| name2 = equation.index_to_string([i,j]) | ||
| self[name1][name2].equation = equation.clone_with_index([name1,name2]) | ||
| else: | ||
| for i in range(dims[0]): | ||
| for j in range(dims[1]): | ||
| self[i][j].equation = equation.clone_with_index([i, j]) | ||
| if isinstance(equation, Operator) and not handled_by_stock: | ||
@@ -166,7 +175,18 @@ if equation.is_any_subelement_arrayed() and equation.index == None: | ||
| else: | ||
| self.setup_matrix(dims) | ||
| for i in range(dims[0]): | ||
| for j in range(dims[1]): | ||
| self[i][j] = equation.clone_with_index([i, j]) | ||
| if(equation.is_named()): | ||
| names = {} | ||
| for i in range(dims[0]): | ||
| name1 = equation.index_to_string(i) | ||
| names[name1] = {} | ||
| for j in range(dims[1]): | ||
| name2 = equation.index_to_string([i,j]) | ||
| names[name1][name2] = equation.clone_with_index([name1,name2]) | ||
| self.setup_named_matrix(names, True) | ||
| else: | ||
| self.setup_matrix(dims) | ||
| for i in range(dims[0]): | ||
| for j in range(dims[1]): | ||
| self[i][j] = equation.clone_with_index([i, j]) | ||
| return arrayed_equation | ||
@@ -311,2 +331,6 @@ | ||
| def __mod__(self, other): | ||
| """Left Modulo with other operators""" | ||
| return ModOperator(self, other) | ||
| def __rmul__(self, other): | ||
@@ -420,7 +444,7 @@ """Right multiply with other operators.""" | ||
| self[name] = None | ||
| self[name].initial_value = values[name] | ||
| self[name].initial_value = float(values[name]) | ||
| else: | ||
| self[name] = values[name] | ||
| def setup_matrix(self, size, default_value=0.0): | ||
| def setup_matrix(self, size, default_value=0.0, set_stack_equation = False): | ||
| """ | ||
@@ -441,3 +465,3 @@ Creates sub-elements for this element. | ||
| self[i] = None | ||
| self[i].setup_vector(size[1], default_value) | ||
| self[i].setup_vector(size[1], default_value, set_stack_equation) | ||
| else: | ||
@@ -450,5 +474,5 @@ if len(default_value) != size[0] or len(default_value[0]) != size[1]: | ||
| self[i] = None | ||
| self[i].setup_vector(size[1], default_value[i]) | ||
| self[i].setup_vector(size[1], default_value[i], set_stack_equation) | ||
| def setup_named_matrix(self, names): | ||
| def setup_named_matrix(self, names, set_stack_equation = False): | ||
| """ | ||
@@ -471,3 +495,3 @@ Creates sub-elements for this element. | ||
| self[name] = None | ||
| self[name].setup_named_vector(names[name]) | ||
| self[name].setup_named_vector(names[name], set_stack_equation) | ||
@@ -474,0 +498,0 @@ |
@@ -576,7 +576,17 @@ # /`- | ||
| def index_to_string(self, index): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| if isinstance(index, int): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| elif self.element_2.named_arrayed: | ||
| return self.element_2._elements.equations[index] | ||
| if isinstance(index,list): | ||
| if self.element_1.named_arrayed: | ||
| name = self.element_1._elements.equations[index[0]] | ||
| return self.element_1._elements._element[name]._elements.equations[index[1]] | ||
| if self.element_2.named_arrayed: | ||
| name = self.element_2._elements.equations[index[0]] | ||
| return self.element_2._elements._element[name]._elements.equations[index[1]] | ||
| def is_named(self): | ||
| return self.element_1.named_arrayed | ||
| return (self.element_1.named_arrayed or self.element_2.named_arrayed) | ||
@@ -645,7 +655,17 @@ def clone_with_index(self, index): | ||
| def index_to_string(self, index): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| if isinstance(index, int): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| elif self.element_2.named_arrayed: | ||
| return self.element_2._elements.equations[index] | ||
| if isinstance(index,list): | ||
| if self.element_1.named_arrayed: | ||
| name = self.element_1._elements.equations[index[0]] | ||
| return self.element_1._elements._element[name]._elements.equations[index[1]] | ||
| if self.element_2.named_arrayed: | ||
| name = self.element_2._elements.equations[index[0]] | ||
| return self.element_2._elements._element[name]._elements.equations[index[1]] | ||
| def is_named(self): | ||
| return self.element_1.named_arrayed | ||
| return (self.element_1.named_arrayed or self.element_2.named_arrayed) | ||
@@ -706,7 +726,17 @@ | ||
| def index_to_string(self, index): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| if isinstance(index, int): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| elif self.element_2.named_arrayed: | ||
| return self.element_2._elements.equations[index] | ||
| if isinstance(index,list): | ||
| if self.element_1.named_arrayed: | ||
| name = self.element_1._elements.equations[index[0]] | ||
| return self.element_1._elements._element[name]._elements.equations[index[1]] | ||
| if self.element_2.named_arrayed: | ||
| name = self.element_2._elements.equations[index[0]] | ||
| return self.element_2._elements._element[name]._elements.equations[index[1]] | ||
| def is_named(self): | ||
| return self.element_1.named_arrayed | ||
| return (self.element_1.named_arrayed or self.element_2.named_arrayed) | ||
@@ -754,12 +784,22 @@ class NumericalMultiplicationOperator(BinaryOperator): | ||
| def index_to_string(self, index): | ||
| if self.el1_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| else: | ||
| return self.element_2._elements.equations[index] | ||
| if isinstance(index, int): | ||
| if isinstance(self.element_1, BPTK_Py.sddsl.element.Element) and self.element_1._elements.vector_size(): | ||
| return self.element_1._elements.equations[index] | ||
| elif isinstance(self.element_2, BPTK_Py.sddsl.element.Element) and self.element_2._elements.vector_size(): | ||
| return self.element_2._elements.equations[index] | ||
| if isinstance(index,list): | ||
| if isinstance(self.element_1, BPTK_Py.sddsl.element.Element) and self.element_1._elements.vector_size(): | ||
| name = self.element_1._elements.equations[index[0]] | ||
| return self.element_1._elements._element[name]._elements.equations[index[1]] | ||
| if self.element_2.named_arrayed: | ||
| name = self.element_2._elements.equations[index[0]] | ||
| return self.element_2._elements._element[name]._elements.equations[index[1]] | ||
| def is_named(self): | ||
| if self.el1_arrayed: | ||
| if isinstance(self.element_1, BPTK_Py.sddsl.element.Element) and self.element_1._elements.vector_size(): | ||
| return self.element_1.named_arrayed | ||
| elif isinstance(self.element_2, BPTK_Py.sddsl.element.Element) and self.element_2._elements.vector_size(): | ||
| return self.element_2.named_arrayed | ||
| else: | ||
| return self.element_2.named_arrayed | ||
| return False | ||
@@ -800,9 +840,17 @@ class MultiplicationOperator(BinaryOperator): | ||
| def index_to_string(self, index): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| elif self.element_2.named_arrayed: | ||
| return self.element_2._elements.equations[index] | ||
| if isinstance(index, int): | ||
| if self.element_1.named_arrayed: | ||
| return self.element_1._elements.equations[index] | ||
| elif self.element_2.named_arrayed: | ||
| return self.element_2._elements.equations[index] | ||
| if isinstance(index,list): | ||
| if self.element_1.named_arrayed: | ||
| name = self.element_1._elements.equations[index[0]] | ||
| return self.element_1._elements._element[name]._elements.equations[index[1]] | ||
| if self.element_2.named_arrayed: | ||
| name = self.element_2._elements.equations[index[0]] | ||
| return self.element_2._elements._element[name]._elements.equations[index[1]] | ||
| def is_named(self): | ||
| return self.element_1.named_arrayed | ||
| return (self.element_1.named_arrayed or self.element_2.named_arrayed) | ||
@@ -947,3 +995,3 @@ def resolve_dimensions(self): | ||
| raise Exception("Invalid index was passed to vector matrix multiplication. Index is {}, resulting vector length is {}!".format( | ||
| self.index[0], dim2[1])) | ||
| index, dim2[1])) | ||
| res = "" | ||
@@ -965,3 +1013,3 @@ for k in range(dim2[0]): | ||
| raise Exception("Invalid index was passed to vector matrix multiplication. Index is {}, resulting vector length is {}!".format( | ||
| self.index[0], dim2[1])) | ||
| index, dim2[1])) | ||
@@ -968,0 +1016,0 @@ res = "" |
+14
-3
@@ -1,4 +0,4 @@ | ||
| Metadata-Version: 2.2 | ||
| Metadata-Version: 2.4 | ||
| Name: bptk-py | ||
| Version: 1.9.5 | ||
| Version: 2.0.0 | ||
| Summary: A python simulation engine for System Dynamics & Agent based models | ||
@@ -29,3 +29,3 @@ Author-email: transentis <support@transentis.com> | ||
| Requires-Dist: cachetools==5.5.0 | ||
| Requires-Dist: requests==2.31.0 | ||
| Requires-Dist: requests==2.32.0 | ||
| Requires-Dist: flask==3.0.3 | ||
@@ -35,2 +35,3 @@ Requires-Dist: jsonpickle==3.0.2 | ||
| Requires-Dist: pytest; extra == "test" | ||
| Dynamic: license-file | ||
@@ -80,2 +81,12 @@ # Business Prototyping Toolkit for Python | ||
| ### 2.0.0 | ||
| * Support for multidimensional sddsl | ||
| ### 1.9.6 | ||
| * Enabled modulo operation for sddsl-elements | ||
| * removed unnecessary code | ||
| * added unittests/pytests | ||
| ### 1.9.5 | ||
@@ -82,0 +93,0 @@ |
+1
-1
@@ -21,3 +21,3 @@ [build-system] | ||
| "cachetools==5.5.0", | ||
| "requests==2.31.0", | ||
| "requests==2.32.0", | ||
| "flask==3.0.3", | ||
@@ -24,0 +24,0 @@ "jsonpickle==3.0.2" |
+10
-0
@@ -44,2 +44,12 @@ # Business Prototyping Toolkit for Python | ||
| ### 2.0.0 | ||
| * Support for multidimensional sddsl | ||
| ### 1.9.6 | ||
| * Enabled modulo operation for sddsl-elements | ||
| * removed unnecessary code | ||
| * added unittests/pytests | ||
| ### 1.9.5 | ||
@@ -46,0 +56,0 @@ |
+1
-1
@@ -15,3 +15,3 @@ from setuptools import setup | ||
| def get_version(): | ||
| return '1.9.5' | ||
| return '2.0.0' | ||
@@ -18,0 +18,0 @@ setup(version=get_version(), |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
809527
1.01%15365
0.93%