summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Schneeberger <michael.schneeberger@fhnw.ch>2022-08-04 15:23:02 +0200
committerMichael Schneeberger <michael.schneeberger@fhnw.ch>2022-08-04 15:23:02 +0200
commitde0f75c08b6d18b52dd5e595d82eecff15e02895 (patch)
treec06c731f6a9cd8ca7013e8f24c66a8e4c182ea02
parentadd max_degree, max and filter operator (diff)
downloadpolymatrix-de0f75c08b6d18b52dd5e595d82eecff15e02895.tar.gz
polymatrix-de0f75c08b6d18b52dd5e595d82eecff15e02895.zip
clean up and restructurings
Diffstat (limited to '')
-rw-r--r--README.md51
-rw-r--r--polymatrix/__init__.py86
-rw-r--r--polymatrix/expression/derivativekey.py4
-rw-r--r--polymatrix/expression/expressionstate.py4
-rw-r--r--polymatrix/expression/fromarrayexpr.py4
-rw-r--r--polymatrix/expression/fromsympyexpr.py4
-rw-r--r--polymatrix/expression/impl/derivativekeyimpl.py8
-rw-r--r--polymatrix/expression/impl/fromarrayexprimpl.py8
-rw-r--r--polymatrix/expression/impl/fromsympyexprimpl.py7
-rw-r--r--polymatrix/expression/impl/quadraticmonomialsexprimpl.py (renamed from polymatrix/expression/impl/sosmonomialsexprimpl.py)2
-rw-r--r--polymatrix/expression/init/initderivativekey.py11
-rw-r--r--polymatrix/expression/init/initfromsympyexpr.py (renamed from polymatrix/expression/init/initfromarrayexpr.py)10
-rw-r--r--polymatrix/expression/init/initfromtermsexpr.py2
-rw-r--r--polymatrix/expression/init/initquadraticmonomialsexpr.py (renamed from polymatrix/expression/init/initsosmonomialsexpr.py)6
-rw-r--r--polymatrix/expression/init/initvstackexpr.py4
-rw-r--r--polymatrix/expression/mixins/additionexprmixin.py8
-rw-r--r--polymatrix/expression/mixins/assertdegreeexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/blockdiagexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/cacheexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/combinationsexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/derivativeexprmixin.py116
-rw-r--r--polymatrix/expression/mixins/derivativekeymixin.py13
-rw-r--r--polymatrix/expression/mixins/determinantexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/divergenceexprmixin.py9
-rw-r--r--polymatrix/expression/mixins/divisionexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/elemmultexprmixin.py8
-rw-r--r--polymatrix/expression/mixins/evalexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/expressionbasemixin.py9
-rw-r--r--polymatrix/expression/mixins/expressionmixin.py22
-rw-r--r--polymatrix/expression/mixins/eyeexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/filterexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/filterlinearpartexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/fromsympyexprmixin.py (renamed from polymatrix/expression/mixins/fromarrayexprmixin.py)9
-rw-r--r--polymatrix/expression/mixins/fromtermsexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/getitemexprmixin.py8
-rw-r--r--polymatrix/expression/mixins/linearinexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/linearinmutipleexprmixin.py77
-rw-r--r--polymatrix/expression/mixins/linearmatrixinexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/linearmonomialsexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/matrixmultexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/maxdegreeexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/maxexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/parametrizeexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/polymatrixasdictmixin.py2
-rw-r--r--polymatrix/expression/mixins/quadraticinexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/quadraticmonomialsexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/repmatexprmixin.py4
-rw-r--r--polymatrix/expression/mixins/reshapeexprmixin.py4
-rw-r--r--polymatrix/expression/mixins/setelementatexprmixin.py8
-rw-r--r--polymatrix/expression/mixins/squeezeexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/substituteexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/subtractmonomialsexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/sumexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/symmetricexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/toconstantexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/toquadraticexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/transposeexprmixin.py8
-rw-r--r--polymatrix/expression/mixins/truncateexprmixin.py6
-rw-r--r--polymatrix/expression/mixins/vstackexprmixin.py6
-rw-r--r--polymatrix/expression/utils/getderivativemonomials.py10
-rw-r--r--polymatrix/expression/utils/monomialtoindex.py7
-rw-r--r--polymatrix/expressionstate/__init__.py0
-rw-r--r--polymatrix/expressionstate/expressionstate.py4
-rw-r--r--polymatrix/expressionstate/impl/__init__.py0
-rw-r--r--polymatrix/expressionstate/impl/expressionstateimpl.py (renamed from polymatrix/expression/impl/expressionstateimpl.py)2
-rw-r--r--polymatrix/expressionstate/init/__init__.py0
-rw-r--r--polymatrix/expressionstate/init/initexpressionstate.py (renamed from polymatrix/expression/init/initexpressionstate.py)2
-rw-r--r--polymatrix/expressionstate/mixins/__init__.py0
-rw-r--r--polymatrix/expressionstate/mixins/expressionstatemixin.py (renamed from polymatrix/expression/mixins/expressionstatemixin.py)0
-rw-r--r--polymatrix/polymatrix/__init__.py0
-rw-r--r--polymatrix/polymatrix/impl/__init__.py0
-rw-r--r--polymatrix/polymatrix/impl/polymatriximpl.py (renamed from polymatrix/expression/impl/polymatriximpl.py)2
-rw-r--r--polymatrix/polymatrix/init/__init__.py0
-rw-r--r--polymatrix/polymatrix/init/initpolymatrix.py (renamed from polymatrix/expression/init/initpolymatrix.py)2
-rw-r--r--polymatrix/polymatrix/mixins/__init__.py0
-rw-r--r--polymatrix/polymatrix/mixins/polymatrixmixin.py (renamed from polymatrix/expression/mixins/polymatrixmixin.py)0
-rw-r--r--polymatrix/polymatrix/polymatrix.py (renamed from polymatrix/expression/polymatrix.py)0
-rw-r--r--polymatrix/polysolver.py401
-rw-r--r--polymatrix/sympyutils.py87
-rw-r--r--polymatrix/utils.py43
-rw-r--r--setup.py27
-rw-r--r--test_polymatrix/test_expression/test_addition.py2
-rw-r--r--test_polymatrix/test_expression/test_blockdiag.py2
-rw-r--r--test_polymatrix/test_expression/test_derivative.py2
-rw-r--r--test_polymatrix/test_expression/test_divergence.py2
-rw-r--r--test_polymatrix/test_expression/test_eval.py2
-rw-r--r--test_polymatrix/test_expression/test_linearin.py2
-rw-r--r--test_polymatrix/test_expression/test_matrixmult.py2
-rw-r--r--test_polymatrix/test_expression/test_quadraticin.py2
-rw-r--r--test_polymatrix/test_expression/test_substitude.py2
-rw-r--r--test_polymatrix/test_expression/test_subtractmonomials.py2
-rw-r--r--test_polymatrix/test_expression/test_sum.py2
-rw-r--r--test_polymatrix/test_expression/test_symmetric.py2
-rw-r--r--test_polymatrix/test_expression/test_toconstant.py2
-rw-r--r--test_polymatrix/test_expression/test_truncate.py2
-rw-r--r--test_polymatrix/test_expression/test_vstack.py2
-rw-r--r--test_polymatrix/test_tomatrixrepr.py2
97 files changed, 312 insertions, 997 deletions
diff --git a/README.md b/README.md
index 3ba3ae5..98ba196 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,50 @@
-# Polynomial matrix library
+# Multivariate polynomial library
+
+`polymatrix` is a library to represent and operate on multivariate polynomials.
+
+It is currently mainly used to define Sum Of Squares optimization problems.
+
+Some aspects of the library
+
+* it has a lazy behavior:
+ * the library implements operators to build polynomial expression
+ * the actual polynomial representation is created by calling the `apply(state)` method on the polynomial expression
+* a `sympy` expression can be converted to a polynomial expression using the `polymatrix.from_sympy` function
+* multiple polynomial expressions are combined using functions like `polymatrix.v_stack` or `polymatrix.block_diag`.
+* polynomial expressions are manipulated using bounded functions like `diff`, `reshape`, `substitute`, `sum` or `to_constant` (see `polymatrix/expression/mixins/expressionmixin.py`)
+* an expression can be converted to matrix representation using `polymatrix.to_matrix_repr`. Again, to get the actual representation the `apply(state)` method needs to be called.
+
+## Example
+
+``` python
+import sympy
+import polymatrix
+
+state = polymatrix.init_expression_state()
+
+x1, x2 = sympy.symbols('x1, x2')
+x = polymatrix.from_((x1, x2))
+
+f1 = polymatrix.from_(x1 + x2)
+f2 = polymatrix.from_(x1 + x1*x2)
+
+expr = f1 + f2
+
+# prints the data structure of the expression
+# ExpressionImpl(underlying=AdditionExprImpl(left=FromSympyExprImpl(data=((x1 + x2,),)), right=FromSympyExprImpl(data=((x1*x2 + x1,),))))
+print(expr)
+
+state, poly_matrix = expr.apply(state)
+
+# prints the data structure of the polynomial matrix
+# PolyMatrixImpl(terms={(0, 0): {((0, 1), (1, 1)): 1, ((0, 1),): 2, ((1, 1),): 1}}, shape=(1, 1))
+print(poly_matrix)
+
+state, matrix_repr = polymatrix.to_matrix_repr((expr,), x).apply(state)
+
+# prints the numpy matrix representations of the polynomial matrix
+# array([[2., 1.]])
+# array([[0. , 0.5, 0.5, 0. ]])
+print(matrix_repr.data[0][1])
+print(matrix_repr.data[0][2].toarray())
+```
diff --git a/polymatrix/__init__.py b/polymatrix/__init__.py
index 58729d2..4df9a81 100644
--- a/polymatrix/__init__.py
+++ b/polymatrix/__init__.py
@@ -4,31 +4,41 @@ import itertools
import typing
import numpy as np
import scipy.sparse
-# import polymatrix.statemonad
from polymatrix.expression.expression import Expression
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.init.initblockdiagexpr import init_block_diag_expr
from polymatrix.expression.init.initexpression import init_expression
from polymatrix.expression.init.initeyeexpr import init_eye_expr
-from polymatrix.expression.init.initfromarrayexpr import init_from_array_expr
+from polymatrix.expression.init.initfromsympyexpr import init_from_sympy_expr
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initvstackexpr import init_v_stack_expr
-from polymatrix.expression.polymatrix import PolyMatrix
+from polymatrix.polymatrix.polymatrix import PolyMatrix
from polymatrix.expression.utils.getvariableindices import get_variable_indices
from polymatrix.statemonad.init.initstatemonad import init_state_monad
from polymatrix.statemonad.mixins.statemonadmixin import StateMonadMixin
-from polymatrix.utils import monomial_to_index
+from polymatrix.expression.utils.monomialtoindex import monomial_to_index
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state as original_init_expression_state
-def from_(
+def init_expression_state():
+ return original_init_expression_state()
+
+
+def from_sympy(
data: tuple[tuple[float]],
):
return init_expression(
- init_from_array_expr(data)
+ init_from_sympy_expr(data)
)
+def from_(
+ data: tuple[tuple[float]],
+):
+ return from_sympy(data)
+
+
def from_polymatrix(
polymatrix: PolyMatrix,
):
@@ -37,32 +47,6 @@ def from_polymatrix(
)
-# def accumulate(
-# expr,
-# func,
-# initial = None,
-# ):
-# def lifted_func(acc, polymat: PolyMatrix):
-
-# # # print(f'{terms=}')
-# # print(f'{terms=}')
-
-# lifeted_val = init_expression(
-# underlying=init_from_terms_expr(
-# terms=polymat.terms,
-# shape=polymat.shape,
-# ),
-# )
-# return func(acc, lifeted_val)
-
-# return init_expression(
-# underlying=init_accumulate_expr(
-# underlying=expr.underlying,
-# acc_func=lifted_func,
-# initial=initial,
-# ),
-# )
-
def v_stack(
expressions: tuple[Expression],
):
@@ -326,22 +310,22 @@ class MatrixBuffer:
@dataclasses.dataclass
-class MatrixEquations:
- matrix_equations: tuple[MatrixBuffer, ...]
- auxillary_matrix_equations: typing.Optional[MatrixBuffer]
- variable_index: tuple[int, ...]
+class MatrixRepresentations:
+ data: tuple[MatrixBuffer, ...]
+ aux_data: typing.Optional[MatrixBuffer]
+ variable_mapping: tuple[int, ...]
state: ExpressionState
def merge_matrix_equations(self):
def gen_matrices(index: int):
- for equations in self.matrix_equations:
+ for equations in self.data:
if index < len(equations):
yield equations[index]
- if index < len(self.auxillary_matrix_equations):
- yield self.auxillary_matrix_equations[index]
+ if index < len(self.aux_data):
+ yield self.aux_data[index]
- indices = set(key for equations in self.matrix_equations + (self.auxillary_matrix_equations,) for key in equations.keys())
+ indices = set(key for equations in self.data + (self.aux_data,) for key in equations.keys())
def gen_matrices():
for index in indices:
@@ -358,9 +342,9 @@ class MatrixEquations:
def gen_value_index():
for variable_index in variable_indices:
try:
- yield self.variable_index.index(variable_index)
+ yield self.variable_mapping.index(variable_index)
except ValueError:
- raise ValueError(f'{variable_index} not found in {self.variable_index}')
+ raise ValueError(f'{variable_index} not found in {self.variable_mapping}')
value_index = list(gen_value_index())
@@ -368,13 +352,13 @@ class MatrixEquations:
def set_value(self, variable, value):
variable_indices = get_variable_indices(self.state, variable)[1]
- value_index = list(self.variable_index.index(variable_index) for variable_index in variable_indices)
- vec = np.zeros(len(self.variable_index))
+ value_index = list(self.variable_mapping.index(variable_index) for variable_index in variable_indices)
+ vec = np.zeros(len(self.variable_mapping))
vec[value_index] = value
return vec
def get_func(self, eq_idx: int):
- equations = self.matrix_equations[eq_idx].data
+ equations = self.data[eq_idx].data
max_idx = max(equations.keys())
if 2 <= max_idx:
@@ -416,7 +400,7 @@ class MatrixEquations:
return func
-def to_matrix_equations(
+def to_matrix_repr(
expressions: tuple[Expression],
variables: Expression,
) -> StateMonadMixin[ExpressionState, tuple[tuple[tuple[np.ndarray, ...], ...], tuple[int, ...]]]:
@@ -547,10 +531,10 @@ def to_matrix_equations(
auxillary_matrix_equations = buffer
- result = MatrixEquations(
- matrix_equations=underlying_matrices,
- auxillary_matrix_equations=auxillary_matrix_equations,
- variable_index=ordered_variable_index,
+ result = MatrixRepresentations(
+ data=underlying_matrices,
+ aux_data=auxillary_matrix_equations,
+ variable_mapping=ordered_variable_index,
state=state,
)
diff --git a/polymatrix/expression/derivativekey.py b/polymatrix/expression/derivativekey.py
deleted file mode 100644
index 6d1fff8..0000000
--- a/polymatrix/expression/derivativekey.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from polymatrix.expression.mixins.derivativekeymixin import DerivativeKeyMixin
-
-class DerivativeKey(DerivativeKeyMixin):
- pass
diff --git a/polymatrix/expression/expressionstate.py b/polymatrix/expression/expressionstate.py
deleted file mode 100644
index e4b97aa..0000000
--- a/polymatrix/expression/expressionstate.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-
-class ExpressionState(ExpressionStateMixin):
- pass
diff --git a/polymatrix/expression/fromarrayexpr.py b/polymatrix/expression/fromarrayexpr.py
deleted file mode 100644
index b22792b..0000000
--- a/polymatrix/expression/fromarrayexpr.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from polymatrix.expression.mixins.fromarrayexprmixin import FromArrayExprMixin
-
-class FromArrayExpr(FromArrayExprMixin):
- pass
diff --git a/polymatrix/expression/fromsympyexpr.py b/polymatrix/expression/fromsympyexpr.py
new file mode 100644
index 0000000..b1e723a
--- /dev/null
+++ b/polymatrix/expression/fromsympyexpr.py
@@ -0,0 +1,4 @@
+from polymatrix.expression.mixins.fromsympyexprmixin import FromSympyExprMixin
+
+class FromSympyExpr(FromSympyExprMixin):
+ pass
diff --git a/polymatrix/expression/impl/derivativekeyimpl.py b/polymatrix/expression/impl/derivativekeyimpl.py
deleted file mode 100644
index 675503a..0000000
--- a/polymatrix/expression/impl/derivativekeyimpl.py
+++ /dev/null
@@ -1,8 +0,0 @@
-import dataclass_abc
-from polymatrix.expression.derivativekey import DerivativeKey
-
-
-@dataclass_abc.dataclass_abc(frozen=True)
-class DerivativeKeyImpl(DerivativeKey):
- variable: int
- with_respect_to: int
diff --git a/polymatrix/expression/impl/fromarrayexprimpl.py b/polymatrix/expression/impl/fromarrayexprimpl.py
deleted file mode 100644
index 7d7c45e..0000000
--- a/polymatrix/expression/impl/fromarrayexprimpl.py
+++ /dev/null
@@ -1,8 +0,0 @@
-import dataclass_abc
-from polymatrix.expression.fromarrayexpr import FromArrayExpr
-
-from numpy import array
-
-@dataclass_abc.dataclass_abc(frozen=True)
-class FromArrayExprImpl(FromArrayExpr):
- data: tuple[tuple[float]]
diff --git a/polymatrix/expression/impl/fromsympyexprimpl.py b/polymatrix/expression/impl/fromsympyexprimpl.py
new file mode 100644
index 0000000..986612b
--- /dev/null
+++ b/polymatrix/expression/impl/fromsympyexprimpl.py
@@ -0,0 +1,7 @@
+import dataclass_abc
+from polymatrix.expression.fromsympyexpr import FromSympyExpr
+
+
+@dataclass_abc.dataclass_abc(frozen=True)
+class FromSympyExprImpl(FromSympyExpr):
+ data: tuple[tuple[float]]
diff --git a/polymatrix/expression/impl/sosmonomialsexprimpl.py b/polymatrix/expression/impl/quadraticmonomialsexprimpl.py
index 400c2ae..5930764 100644
--- a/polymatrix/expression/impl/sosmonomialsexprimpl.py
+++ b/polymatrix/expression/impl/quadraticmonomialsexprimpl.py
@@ -4,6 +4,6 @@ from polymatrix.expression.quadraticmonomialsexpr import QuadraticMonomialsExpr
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
@dataclass_abc.dataclass_abc(frozen=True)
-class SOSMonomialsExprImpl(QuadraticMonomialsExpr):
+class QuadraticMonomialsExprImpl(QuadraticMonomialsExpr):
underlying: ExpressionBaseMixin
variables: tuple
diff --git a/polymatrix/expression/init/initderivativekey.py b/polymatrix/expression/init/initderivativekey.py
deleted file mode 100644
index db249ec..0000000
--- a/polymatrix/expression/init/initderivativekey.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from polymatrix.expression.impl.derivativekeyimpl import DerivativeKeyImpl
-
-
-def init_derivative_key(
- variable: int,
- with_respect_to: int
-):
- return DerivativeKeyImpl(
- variable=variable,
- with_respect_to=with_respect_to,
-)
diff --git a/polymatrix/expression/init/initfromarrayexpr.py b/polymatrix/expression/init/initfromsympyexpr.py
index e6f57c8..08a6a04 100644
--- a/polymatrix/expression/init/initfromarrayexpr.py
+++ b/polymatrix/expression/init/initfromsympyexpr.py
@@ -1,10 +1,11 @@
import typing
import numpy as np
+import sympy
-from polymatrix.expression.impl.fromarrayexprimpl import FromArrayExprImpl
+from polymatrix.expression.impl.fromsympyexprimpl import FromSympyExprImpl
-def init_from_array_expr(
+def init_from_sympy_expr(
data: typing.Union[np.ndarray, tuple[tuple[float]]],
):
@@ -12,6 +13,9 @@ def init_from_array_expr(
case np.ndarray():
data = tuple(tuple(i for i in row) for row in data)
+ case sympy.Matrix():
+ data = tuple(tuple(i for i in data.row(row)) for row in range(data.rows))
+
case tuple():
match data[0]:
@@ -26,6 +30,6 @@ def init_from_array_expr(
case _:
data = ((data,),)
- return FromArrayExprImpl(
+ return FromSympyExprImpl(
data=data,
)
diff --git a/polymatrix/expression/init/initfromtermsexpr.py b/polymatrix/expression/init/initfromtermsexpr.py
index 1abac12..f338c92 100644
--- a/polymatrix/expression/init/initfromtermsexpr.py
+++ b/polymatrix/expression/init/initfromtermsexpr.py
@@ -1,6 +1,6 @@
import typing
from polymatrix.expression.impl.fromtermsexprimpl import FromTermsExprImpl
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
def init_from_terms_expr(
diff --git a/polymatrix/expression/init/initsosmonomialsexpr.py b/polymatrix/expression/init/initquadraticmonomialsexpr.py
index 0f5d034..8e46c62 100644
--- a/polymatrix/expression/init/initsosmonomialsexpr.py
+++ b/polymatrix/expression/init/initquadraticmonomialsexpr.py
@@ -1,12 +1,12 @@
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.impl.sosmonomialsexprimpl import SOSMonomialsExprImpl
+from polymatrix.expression.impl.quadraticmonomialsexprimpl import QuadraticMonomialsExprImpl
-def init_sos_monomials_expr(
+def init_quadratic_monomials_expr(
underlying: ExpressionBaseMixin,
variables: tuple,
):
- return SOSMonomialsExprImpl(
+ return QuadraticMonomialsExprImpl(
underlying=underlying,
variables=variables,
)
diff --git a/polymatrix/expression/init/initvstackexpr.py b/polymatrix/expression/init/initvstackexpr.py
index 70764ef..1edc716 100644
--- a/polymatrix/expression/init/initvstackexpr.py
+++ b/polymatrix/expression/init/initvstackexpr.py
@@ -1,5 +1,5 @@
from polymatrix.expression.impl.vstackexprimpl import VStackExprImpl
-from polymatrix.expression.init.initfromarrayexpr import init_from_array_expr
+from polymatrix.expression.init.initfromsympyexpr import init_from_sympy_expr
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
@@ -13,7 +13,7 @@ def init_v_stack_expr(
if isinstance(e, ExpressionBaseMixin):
yield e
else:
- yield init_from_array_expr(e)
+ yield init_from_sympy_expr(e)
return VStackExprImpl(
underlying=tuple(gen_underlying()),
diff --git a/polymatrix/expression/mixins/additionexprmixin.py b/polymatrix/expression/mixins/additionexprmixin.py
index 2c7a652..3d2d15b 100644
--- a/polymatrix/expression/mixins/additionexprmixin.py
+++ b/polymatrix/expression/mixins/additionexprmixin.py
@@ -3,11 +3,11 @@ import abc
import typing
import dataclass_abc
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class AdditionExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/assertdegreeexprmixin.py b/polymatrix/expression/mixins/assertdegreeexprmixin.py
index af0a3e6..a41e6ba 100644
--- a/polymatrix/expression/mixins/assertdegreeexprmixin.py
+++ b/polymatrix/expression/mixins/assertdegreeexprmixin.py
@@ -2,11 +2,11 @@
import abc
import itertools
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class AssertDegreeExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/blockdiagexprmixin.py b/polymatrix/expression/mixins/blockdiagexprmixin.py
index b0006e3..8775fde 100644
--- a/polymatrix/expression/mixins/blockdiagexprmixin.py
+++ b/polymatrix/expression/mixins/blockdiagexprmixin.py
@@ -2,11 +2,11 @@
import abc
import itertools
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class BlockDiagExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/cacheexprmixin.py b/polymatrix/expression/mixins/cacheexprmixin.py
index ba9a612..ef99644 100644
--- a/polymatrix/expression/mixins/cacheexprmixin.py
+++ b/polymatrix/expression/mixins/cacheexprmixin.py
@@ -2,10 +2,10 @@
import abc
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class CacheExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/combinationsexprmixin.py b/polymatrix/expression/mixins/combinationsexprmixin.py
index 824ebf1..4841e8e 100644
--- a/polymatrix/expression/mixins/combinationsexprmixin.py
+++ b/polymatrix/expression/mixins/combinationsexprmixin.py
@@ -3,10 +3,10 @@ import abc
import itertools
import math
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getmonomialindices import get_monomial_indices
from polymatrix.expression.utils.mergemonomialindices import merge_monomial_indices
from polymatrix.expression.utils.sortmonomials import sort_monomials
diff --git a/polymatrix/expression/mixins/derivativeexprmixin.py b/polymatrix/expression/mixins/derivativeexprmixin.py
index 4fc48a5..32823e5 100644
--- a/polymatrix/expression/mixins/derivativeexprmixin.py
+++ b/polymatrix/expression/mixins/derivativeexprmixin.py
@@ -4,12 +4,11 @@ import collections
import dataclasses
import itertools
import typing
-from polymatrix.expression.init.initderivativekey import init_derivative_key
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getderivativemonomials import get_derivative_monomials
from polymatrix.expression.utils.getvariableindices import get_variable_indices
@@ -42,115 +41,6 @@ class DerivativeExprMixin(ExpressionBaseMixin):
state, diff_wrt_variables = get_variable_indices(state, self.variables)
- # def get_derivative_terms(
- # monomial_terms,
- # diff_wrt_variable: int,
- # state: ExpressionState,
- # considered_variables: set,
- # ):
-
- # if self.introduce_derivatives:
-
- # raise Exception('not implemented')
-
- # def gen_new_variables():
- # for monomial in monomial_terms.keys():
- # for var in monomial:
- # if var not in diff_wrt_variables and var not in considered_variables:
- # yield var
-
- # new_variables = set(gen_new_variables())
-
- # new_considered_variables = considered_variables | new_variables
-
- # def acc_state_candidates(acc, new_variable):
- # state, candidates = acc
-
- # key = init_derivative_key(
- # variable=new_variable,
- # with_respect_to=diff_wrt_variable,
- # )
- # state = state.register(key=key, n_param=1)
-
- # state, auxillary_derivation_terms = get_derivative_terms(
- # monomial_terms=state.auxillary_equations[new_variable],
- # diff_wrt_variable=diff_wrt_variable,
- # state=state,
- # considered_variables=new_considered_variables,
- # )
-
- # if 1 < len(auxillary_derivation_terms):
- # derivation_variable = state.offset_dict[key][0]
-
- # state = dataclasses.replace(
- # state,
- # auxillary_equations=state.auxillary_equations | {derivation_variable: auxillary_derivation_terms},
- # )
-
- # return state, candidates + (new_variable,)
-
- # else:
- # return state, candidates
-
- # *_, (state, confirmed_variables) = itertools.accumulate(
- # new_variables,
- # acc_state_candidates,
- # initial=(state, tuple()),
- # )
-
- # else:
- # confirmed_variables = tuple()
-
- # derivation_terms = collections.defaultdict(float)
-
- # for monomial, value in monomial_terms.items():
-
- # # # count powers for each variable
- # # monomial_cnt = dict(collections.Counter(monomial))
- # monomial_cnt = dict(monomial)
-
- # def differentiate_monomial(dependent_variable, derivation_variable=None):
- # def gen_diff_monomial():
- # for current_variable, current_count in monomial:
-
- # if current_variable is dependent_variable:
- # sel_counter = current_count - 1
-
- # else:
- # sel_counter = current_count
-
- # # for _ in range(sel_counter):
- # # yield current_variable
- # yield current_variable, sel_counter
-
- # if derivation_variable is not None:
- # yield derivation_variable
-
- # diff_monomial = tuple(sorted(gen_diff_monomial()))
-
- # return diff_monomial, value * monomial_cnt[dependent_variable]
-
- # if diff_wrt_variable in monomial_cnt:
- # diff_monomial, value = differentiate_monomial(diff_wrt_variable)
- # derivation_terms[diff_monomial] += value
-
- # # only used if introduce_derivatives == True
- # for candidate_variable in monomial_cnt.keys():
- # if candidate_variable in considered_variables or candidate_variable in confirmed_variables:
- # key = init_derivative_key(
- # variable=candidate_variable,
- # with_respect_to=diff_wrt_variable,
- # )
- # derivation_variable = state.offset_dict[key][0]
-
- # diff_monomial, value = differentiate_monomial(
- # dependent_variable=candidate_variable,
- # derivation_variable=derivation_variable,
- # )
- # derivation_terms[diff_monomial] += value
-
- # return state, dict(derivation_terms)
-
terms = {}
for row in range(underlying.shape[0]):
diff --git a/polymatrix/expression/mixins/derivativekeymixin.py b/polymatrix/expression/mixins/derivativekeymixin.py
deleted file mode 100644
index db4951a..0000000
--- a/polymatrix/expression/mixins/derivativekeymixin.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import abc
-
-# move this class
-class DerivativeKeyMixin(abc.ABC):
- @property
- @abc.abstractmethod
- def variable(self) -> int:
- ...
-
- @property
- @abc.abstractmethod
- def with_respect_to(self) -> int:
- ...
diff --git a/polymatrix/expression/mixins/determinantexprmixin.py b/polymatrix/expression/mixins/determinantexprmixin.py
index 8d41e3d..79defa9 100644
--- a/polymatrix/expression/mixins/determinantexprmixin.py
+++ b/polymatrix/expression/mixins/determinantexprmixin.py
@@ -4,10 +4,10 @@ import collections
import dataclasses
from numpy import var
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class DeterminantExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/divergenceexprmixin.py b/polymatrix/expression/mixins/divergenceexprmixin.py
index b523b2d..391a221 100644
--- a/polymatrix/expression/mixins/divergenceexprmixin.py
+++ b/polymatrix/expression/mixins/divergenceexprmixin.py
@@ -1,15 +1,12 @@
import abc
import collections
-import dataclasses
-import itertools
import typing
-from polymatrix.expression.init.initderivativekey import init_derivative_key
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getderivativemonomials import get_derivative_monomials
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/divisionexprmixin.py b/polymatrix/expression/mixins/divisionexprmixin.py
index 7551cda..ee9b2ff 100644
--- a/polymatrix/expression/mixins/divisionexprmixin.py
+++ b/polymatrix/expression/mixins/divisionexprmixin.py
@@ -2,10 +2,10 @@
import abc
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class DivisionExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/elemmultexprmixin.py b/polymatrix/expression/mixins/elemmultexprmixin.py
index 7e0bc8c..24e91fc 100644
--- a/polymatrix/expression/mixins/elemmultexprmixin.py
+++ b/polymatrix/expression/mixins/elemmultexprmixin.py
@@ -4,11 +4,11 @@ import itertools
import typing
import dataclass_abc
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.mergemonomialindices import merge_monomial_indices
diff --git a/polymatrix/expression/mixins/evalexprmixin.py b/polymatrix/expression/mixins/evalexprmixin.py
index 0541e3d..ca1cf7d 100644
--- a/polymatrix/expression/mixins/evalexprmixin.py
+++ b/polymatrix/expression/mixins/evalexprmixin.py
@@ -3,10 +3,10 @@ import abc
import itertools
import math
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/expressionbasemixin.py b/polymatrix/expression/mixins/expressionbasemixin.py
index a4d7dc2..f2f8507 100644
--- a/polymatrix/expression/mixins/expressionbasemixin.py
+++ b/polymatrix/expression/mixins/expressionbasemixin.py
@@ -1,6 +1,6 @@
import abc
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class ExpressionBaseMixin(
@@ -10,8 +10,3 @@ class ExpressionBaseMixin(
@abc.abstractmethod
def apply(self, state: ExpressionStateMixin) -> tuple[ExpressionStateMixin, PolyMatrixMixin]:
...
-
- # def apply(self, state: ExpressionStateMixin) -> tuple[ExpressionStateMixin, PolyMatrixMixin]:
- # assert isinstance(state, ExpressionStateMixin), f'{state} is not of type {ExpressionStateMixin.__name__}'
-
- # return self._apply(state)
diff --git a/polymatrix/expression/mixins/expressionmixin.py b/polymatrix/expression/mixins/expressionmixin.py
index ff2a146..a5acff1 100644
--- a/polymatrix/expression/mixins/expressionmixin.py
+++ b/polymatrix/expression/mixins/expressionmixin.py
@@ -16,7 +16,7 @@ from polymatrix.expression.init.initevalexpr import init_eval_expr
from polymatrix.expression.init.initfilterexpr import init_filter_expr
from polymatrix.expression.init.initlinearinexpr import init_linear_in_expr
from polymatrix.expression.init.initlinearinmonomialsinexpr import init_linear_in_monomials_in
-from polymatrix.expression.init.initfromarrayexpr import init_from_array_expr
+from polymatrix.expression.init.initfromsympyexpr import init_from_sympy_expr
from polymatrix.expression.init.initgetitemexpr import init_get_item_expr
from polymatrix.expression.init.initlinearmatrixinexpr import init_linear_matrix_in_expr
from polymatrix.expression.init.initlinearmonomialsexpr import init_linear_monomials_expr
@@ -28,7 +28,7 @@ from polymatrix.expression.init.initquadraticinexpr import init_quadratic_in_exp
from polymatrix.expression.init.initrepmatexpr import init_rep_mat_expr
from polymatrix.expression.init.initreshapeexpr import init_reshape_expr
from polymatrix.expression.init.initsetelementatexpr import init_set_element_at_expr
-from polymatrix.expression.init.initsosmonomialsexpr import init_sos_monomials_expr
+from polymatrix.expression.init.initquadraticmonomialsexpr import init_quadratic_monomials_expr
from polymatrix.expression.init.initsubtractmonomialsexpr import init_subtract_monomials_expr
from polymatrix.expression.init.initsumexpr import init_sum_expr
from polymatrix.expression.init.initsymmetricexpr import init_symmetric_expr
@@ -38,8 +38,8 @@ from polymatrix.expression.init.inittransposeexpr import init_transpose_expr
from polymatrix.expression.init.inittruncateexpr import init_truncate_expr
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class ExpressionMixin(
@@ -64,7 +64,7 @@ class ExpressionMixin(
case ExpressionBaseMixin():
right = other.underlying
case _:
- right = init_from_array_expr(other)
+ right = init_from_sympy_expr(other)
return dataclasses.replace(
self,
@@ -99,7 +99,7 @@ class ExpressionMixin(
case ExpressionBaseMixin():
right = other.underlying
case _:
- right = init_from_array_expr(other)
+ right = init_from_sympy_expr(other)
return dataclasses.replace(
self,
@@ -120,7 +120,7 @@ class ExpressionMixin(
case ExpressionBaseMixin():
right = other.underlying
case _:
- right = init_from_array_expr(other)
+ right = init_from_sympy_expr(other)
return dataclasses.replace(
self,
@@ -131,7 +131,7 @@ class ExpressionMixin(
)
def __rmatmul__(self, other):
- other = init_from_array_expr(other)
+ other = init_from_sympy_expr(other)
return other @ self
@@ -140,7 +140,7 @@ class ExpressionMixin(
case ExpressionBaseMixin():
right = other.underlying
case _:
- right = init_from_array_expr(other)
+ right = init_from_sympy_expr(other)
return dataclasses.replace(
self,
@@ -337,7 +337,7 @@ class ExpressionMixin(
) -> 'ExpressionMixin':
return dataclasses.replace(
self,
- underlying=init_sos_monomials_expr(
+ underlying=init_quadratic_monomials_expr(
underlying=self.underlying,
variables=variables,
),
@@ -378,7 +378,7 @@ class ExpressionMixin(
if isinstance(value, ExpressionMixin):
value = value.underlying
else:
- value = init_from_array_expr(value)
+ value = init_from_sympy_expr(value)
return dataclasses.replace(
self,
diff --git a/polymatrix/expression/mixins/eyeexprmixin.py b/polymatrix/expression/mixins/eyeexprmixin.py
index fde2017..f904feb 100644
--- a/polymatrix/expression/mixins/eyeexprmixin.py
+++ b/polymatrix/expression/mixins/eyeexprmixin.py
@@ -2,11 +2,11 @@
import abc
import itertools
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class EyeExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/filterexprmixin.py b/polymatrix/expression/mixins/filterexprmixin.py
index ad1253a..ad13814 100644
--- a/polymatrix/expression/mixins/filterexprmixin.py
+++ b/polymatrix/expression/mixins/filterexprmixin.py
@@ -5,10 +5,10 @@ import math
import typing
import dataclass_abc
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class FilterExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/filterlinearpartexprmixin.py b/polymatrix/expression/mixins/filterlinearpartexprmixin.py
index c8e66ef..5670b79 100644
--- a/polymatrix/expression/mixins/filterlinearpartexprmixin.py
+++ b/polymatrix/expression/mixins/filterlinearpartexprmixin.py
@@ -3,10 +3,10 @@ import abc
import collections
from numpy import var
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/fromarrayexprmixin.py b/polymatrix/expression/mixins/fromsympyexprmixin.py
index 2b066d4..f6953e1 100644
--- a/polymatrix/expression/mixins/fromarrayexprmixin.py
+++ b/polymatrix/expression/mixins/fromsympyexprmixin.py
@@ -1,16 +1,15 @@
import abc
import math
-from numpy import poly
import sympy
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
-class FromArrayExprMixin(ExpressionBaseMixin):
+class FromSympyExprMixin(ExpressionBaseMixin):
@property
@abc.abstractmethod
def data(self) -> tuple[tuple[float]]:
diff --git a/polymatrix/expression/mixins/fromtermsexprmixin.py b/polymatrix/expression/mixins/fromtermsexprmixin.py
index 4ada8ec..8fd9be6 100644
--- a/polymatrix/expression/mixins/fromtermsexprmixin.py
+++ b/polymatrix/expression/mixins/fromtermsexprmixin.py
@@ -3,10 +3,10 @@ import abc
from numpy import poly
import sympy
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class FromTermsExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/getitemexprmixin.py b/polymatrix/expression/mixins/getitemexprmixin.py
index fa7edb1..1d0586f 100644
--- a/polymatrix/expression/mixins/getitemexprmixin.py
+++ b/polymatrix/expression/mixins/getitemexprmixin.py
@@ -3,12 +3,12 @@ import abc
import dataclasses
import typing
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class GetItemExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/linearinexprmixin.py b/polymatrix/expression/mixins/linearinexprmixin.py
index 369467a..7f10b1c 100644
--- a/polymatrix/expression/mixins/linearinexprmixin.py
+++ b/polymatrix/expression/mixins/linearinexprmixin.py
@@ -3,10 +3,10 @@ import abc
import collections
from numpy import var
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getmonomialindices import get_monomial_indices
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/linearinmutipleexprmixin.py b/polymatrix/expression/mixins/linearinmutipleexprmixin.py
index 7d4f00e..b80f562 100644
--- a/polymatrix/expression/mixins/linearinmutipleexprmixin.py
+++ b/polymatrix/expression/mixins/linearinmutipleexprmixin.py
@@ -2,10 +2,10 @@
import abc
import collections
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getvariableindices import get_variable_indices
@@ -71,74 +71,3 @@ class LinearInMultipleExprMixin(ExpressionBaseMixin):
)
return state, poly_matrix
-
- # state, variable_indices = get_variable_indices(state, self.variables)
-
- # underlying_terms = underlying.get_terms()
-
- # def gen_variable_terms():
- # for _, monomial_term in underlying_terms:
- # for monomial in monomial_term.keys():
-
- # x_monomial = tuple(var_idx for var_idx in monomial if var_idx in variable_indices)
- # yield x_monomial
-
- # variable_terms = tuple(set(gen_variable_terms()))
-
- # terms = {}
-
- # for (row, _), monomial_term in underlying.get_terms():
-
- # x_monomial_terms = collections.defaultdict(lambda: collections.defaultdict(float))
-
- # for monomial, value in monomial_term.items():
-
- # x_monomial = tuple(var_idx for var_idx in monomial if var_idx in variable_indices)
- # p_monomial = tuple(var_idx for var_idx in monomial if var_idx not in variable_indices)
-
- # assert tuple(sorted(x_monomial)) == x_monomial, f'{x_monomial} is not sorted'
-
- # x_monomial_terms[x_monomial][p_monomial] += value
-
- # for x_monomial, data in x_monomial_terms.items():
- # terms[row, variable_terms.index(x_monomial)] = dict(data)
-
- # poly_matrix = init_poly_matrix(
- # terms=terms,
- # shape=(underlying.shape[0], len(variable_terms)),
- # )
-
- # return state, poly_matrix
-
- # terms = {}
- # idx_row = 0
-
- # for row in range(underlying.shape[0]):
- # for col in range(underlying.shape[1]):
-
- # try:
- # underlying_terms = underlying.get_poly(row, col)
- # except KeyError:
- # continue
-
- # x_monomial_terms = collections.defaultdict(lambda: collections.defaultdict(float))
-
- # for monomial, value in underlying_terms.items():
-
- # x_monomial = tuple(var_idx for var_idx in monomial if var_idx in variable_indices)
- # p_monomial = tuple(var_idx for var_idx in monomial if var_idx not in variable_indices)
-
- # assert tuple(sorted(x_monomial)) == x_monomial, f'{x_monomial} is not sorted'
-
- # x_monomial_terms[x_monomial][p_monomial] += value
-
- # for data in x_monomial_terms.values():
- # terms[idx_row, 0] = dict(data)
- # idx_row += 1
-
- # poly_matrix = init_poly_matrix(
- # terms=terms,
- # shape=(idx_row, 1),
- # )
-
- # return state, poly_matrix
diff --git a/polymatrix/expression/mixins/linearmatrixinexprmixin.py b/polymatrix/expression/mixins/linearmatrixinexprmixin.py
index 956b01a..1358e1e 100644
--- a/polymatrix/expression/mixins/linearmatrixinexprmixin.py
+++ b/polymatrix/expression/mixins/linearmatrixinexprmixin.py
@@ -3,10 +3,10 @@ import abc
import collections
from numpy import var
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/linearmonomialsexprmixin.py b/polymatrix/expression/mixins/linearmonomialsexprmixin.py
index 42a5b95..64ba66d 100644
--- a/polymatrix/expression/mixins/linearmonomialsexprmixin.py
+++ b/polymatrix/expression/mixins/linearmonomialsexprmixin.py
@@ -2,10 +2,10 @@
import abc
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.quadraticinexprmixin import QuadraticInExprMixin
from polymatrix.expression.utils.getvariableindices import get_variable_indices
from polymatrix.expression.utils.sortmonomials import sort_monomials
diff --git a/polymatrix/expression/mixins/matrixmultexprmixin.py b/polymatrix/expression/mixins/matrixmultexprmixin.py
index 029f700..d023f1e 100644
--- a/polymatrix/expression/mixins/matrixmultexprmixin.py
+++ b/polymatrix/expression/mixins/matrixmultexprmixin.py
@@ -3,10 +3,10 @@ import abc
import itertools
import math
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.mergemonomialindices import merge_monomial_indices
from polymatrix.expression.utils.multiplypolynomial import multiply_polynomial
diff --git a/polymatrix/expression/mixins/maxdegreeexprmixin.py b/polymatrix/expression/mixins/maxdegreeexprmixin.py
index a1c9b1e..7502cbb 100644
--- a/polymatrix/expression/mixins/maxdegreeexprmixin.py
+++ b/polymatrix/expression/mixins/maxdegreeexprmixin.py
@@ -1,10 +1,10 @@
import abc
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class MaxDegreeExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/maxexprmixin.py b/polymatrix/expression/mixins/maxexprmixin.py
index 6070f73..21fd6da 100644
--- a/polymatrix/expression/mixins/maxexprmixin.py
+++ b/polymatrix/expression/mixins/maxexprmixin.py
@@ -1,10 +1,10 @@
import abc
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class MaxExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/parametrizeexprmixin.py b/polymatrix/expression/mixins/parametrizeexprmixin.py
index 11a767f..b9673e4 100644
--- a/polymatrix/expression/mixins/parametrizeexprmixin.py
+++ b/polymatrix/expression/mixins/parametrizeexprmixin.py
@@ -2,10 +2,10 @@
import abc
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class ParametrizeExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/polymatrixasdictmixin.py b/polymatrix/expression/mixins/polymatrixasdictmixin.py
index 4a366de..69c59ac 100644
--- a/polymatrix/expression/mixins/polymatrixasdictmixin.py
+++ b/polymatrix/expression/mixins/polymatrixasdictmixin.py
@@ -1,6 +1,6 @@
import abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class PolyMatrixAsDictMixin(
diff --git a/polymatrix/expression/mixins/quadraticinexprmixin.py b/polymatrix/expression/mixins/quadraticinexprmixin.py
index 7e08d7c..8c1a531 100644
--- a/polymatrix/expression/mixins/quadraticinexprmixin.py
+++ b/polymatrix/expression/mixins/quadraticinexprmixin.py
@@ -2,10 +2,10 @@
import abc
import collections
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getmonomialindices import get_monomial_indices
from polymatrix.expression.utils.getvariableindices import get_variable_indices
from polymatrix.expression.utils.splitmonomialindices import split_monomial_indices
diff --git a/polymatrix/expression/mixins/quadraticmonomialsexprmixin.py b/polymatrix/expression/mixins/quadraticmonomialsexprmixin.py
index b953d17..dbc401b 100644
--- a/polymatrix/expression/mixins/quadraticmonomialsexprmixin.py
+++ b/polymatrix/expression/mixins/quadraticmonomialsexprmixin.py
@@ -2,10 +2,10 @@
import abc
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.quadraticinexprmixin import QuadraticInExprMixin
from polymatrix.expression.utils.getvariableindices import get_variable_indices
from polymatrix.expression.utils.splitmonomialindices import split_monomial_indices
diff --git a/polymatrix/expression/mixins/repmatexprmixin.py b/polymatrix/expression/mixins/repmatexprmixin.py
index 90c6a66..d45cca2 100644
--- a/polymatrix/expression/mixins/repmatexprmixin.py
+++ b/polymatrix/expression/mixins/repmatexprmixin.py
@@ -2,8 +2,8 @@ import abc
import dataclass_abc
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class RepMatExprMixin(ExpressionBaseMixin):
@property
diff --git a/polymatrix/expression/mixins/reshapeexprmixin.py b/polymatrix/expression/mixins/reshapeexprmixin.py
index ad2a5a6..a73c00e 100644
--- a/polymatrix/expression/mixins/reshapeexprmixin.py
+++ b/polymatrix/expression/mixins/reshapeexprmixin.py
@@ -5,8 +5,8 @@ import dataclass_abc
import numpy as np
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class ReshapeExprMixin(ExpressionBaseMixin):
@property
diff --git a/polymatrix/expression/mixins/setelementatexprmixin.py b/polymatrix/expression/mixins/setelementatexprmixin.py
index 5714631..9d552bc 100644
--- a/polymatrix/expression/mixins/setelementatexprmixin.py
+++ b/polymatrix/expression/mixins/setelementatexprmixin.py
@@ -3,12 +3,12 @@ import abc
import dataclasses
import typing
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class SetElementAtExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/squeezeexprmixin.py b/polymatrix/expression/mixins/squeezeexprmixin.py
index 62fe7de..2f46e23 100644
--- a/polymatrix/expression/mixins/squeezeexprmixin.py
+++ b/polymatrix/expression/mixins/squeezeexprmixin.py
@@ -4,10 +4,10 @@ import collections
import typing
import dataclass_abc
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
# remove?
diff --git a/polymatrix/expression/mixins/substituteexprmixin.py b/polymatrix/expression/mixins/substituteexprmixin.py
index fc71f73..1ba8a1a 100644
--- a/polymatrix/expression/mixins/substituteexprmixin.py
+++ b/polymatrix/expression/mixins/substituteexprmixin.py
@@ -4,10 +4,10 @@ import collections
import itertools
import math
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getvariableindices import get_variable_indices
from polymatrix.expression.utils.multiplypolynomial import multiply_polynomial
diff --git a/polymatrix/expression/mixins/subtractmonomialsexprmixin.py b/polymatrix/expression/mixins/subtractmonomialsexprmixin.py
index 45ef444..33dfc97 100644
--- a/polymatrix/expression/mixins/subtractmonomialsexprmixin.py
+++ b/polymatrix/expression/mixins/subtractmonomialsexprmixin.py
@@ -2,10 +2,10 @@
import abc
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.quadraticinexprmixin import QuadraticInExprMixin
from polymatrix.expression.utils.getmonomialindices import get_monomial_indices
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/sumexprmixin.py b/polymatrix/expression/mixins/sumexprmixin.py
index b3afd51..75124d9 100644
--- a/polymatrix/expression/mixins/sumexprmixin.py
+++ b/polymatrix/expression/mixins/sumexprmixin.py
@@ -3,10 +3,10 @@ import abc
import collections
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.mixins.expressionstatemixin import ExpressionStateMixin
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
class SumExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/symmetricexprmixin.py b/polymatrix/expression/mixins/symmetricexprmixin.py
index da07715..989cb0e 100644
--- a/polymatrix/expression/mixins/symmetricexprmixin.py
+++ b/polymatrix/expression/mixins/symmetricexprmixin.py
@@ -3,11 +3,11 @@ import abc
import collections
import itertools
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class SymmetricExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/toconstantexprmixin.py b/polymatrix/expression/mixins/toconstantexprmixin.py
index 1276251..e585d3c 100644
--- a/polymatrix/expression/mixins/toconstantexprmixin.py
+++ b/polymatrix/expression/mixins/toconstantexprmixin.py
@@ -3,10 +3,10 @@ import abc
import collections
from numpy import var
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/toquadraticexprmixin.py b/polymatrix/expression/mixins/toquadraticexprmixin.py
index 02e366d..bbb0cbf 100644
--- a/polymatrix/expression/mixins/toquadraticexprmixin.py
+++ b/polymatrix/expression/mixins/toquadraticexprmixin.py
@@ -3,10 +3,10 @@ import abc
import collections
import dataclasses
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
# to be deleted?
diff --git a/polymatrix/expression/mixins/transposeexprmixin.py b/polymatrix/expression/mixins/transposeexprmixin.py
index da1c288..4153518 100644
--- a/polymatrix/expression/mixins/transposeexprmixin.py
+++ b/polymatrix/expression/mixins/transposeexprmixin.py
@@ -3,12 +3,12 @@ import abc
import dataclasses
import typing
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class TransposeExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/mixins/truncateexprmixin.py b/polymatrix/expression/mixins/truncateexprmixin.py
index badc01e..3f23652 100644
--- a/polymatrix/expression/mixins/truncateexprmixin.py
+++ b/polymatrix/expression/mixins/truncateexprmixin.py
@@ -3,10 +3,10 @@ import abc
import collections
from numpy import var
-from polymatrix.expression.init.initpolymatrix import init_poly_matrix
+from polymatrix.polymatrix.init.initpolymatrix import init_poly_matrix
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
from polymatrix.expression.utils.getvariableindices import get_variable_indices
diff --git a/polymatrix/expression/mixins/vstackexprmixin.py b/polymatrix/expression/mixins/vstackexprmixin.py
index 2929f7a..8d6c25d 100644
--- a/polymatrix/expression/mixins/vstackexprmixin.py
+++ b/polymatrix/expression/mixins/vstackexprmixin.py
@@ -2,11 +2,11 @@
import abc
import itertools
import dataclass_abc
-from polymatrix.expression.mixins.polymatrixmixin import PolyMatrixMixin
+from polymatrix.polymatrix.mixins.polymatrixmixin import PolyMatrixMixin
from polymatrix.expression.mixins.expressionbasemixin import ExpressionBaseMixin
-from polymatrix.expression.polymatrix import PolyMatrix
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.polymatrix.polymatrix import PolyMatrix
+from polymatrix.expressionstate.expressionstate import ExpressionState
class VStackExprMixin(ExpressionBaseMixin):
diff --git a/polymatrix/expression/utils/getderivativemonomials.py b/polymatrix/expression/utils/getderivativemonomials.py
index 9c5ac98..cec2d81 100644
--- a/polymatrix/expression/utils/getderivativemonomials.py
+++ b/polymatrix/expression/utils/getderivativemonomials.py
@@ -1,5 +1,6 @@
import collections
-from polymatrix.expression.expressionstate import ExpressionState
+
+from polymatrix.expressionstate.expressionstate import ExpressionState
def get_derivative_monomials(
@@ -27,7 +28,12 @@ def get_derivative_monomials(
# def acc_state_candidates(acc, new_variable):
# state, candidates = acc
- # key = init_derivative_key(
+ # @dataclasses.dataclass
+ # class DerivativeKey:
+ # variable: int
+ # with_respect_to: int
+
+ # key = DerivativeKey(
# variable=new_variable,
# with_respect_to=diff_wrt_variable,
# )
diff --git a/polymatrix/expression/utils/monomialtoindex.py b/polymatrix/expression/utils/monomialtoindex.py
new file mode 100644
index 0000000..bb1e570
--- /dev/null
+++ b/polymatrix/expression/utils/monomialtoindex.py
@@ -0,0 +1,7 @@
+import itertools
+
+
+def monomial_to_index(n_var, monomial):
+ monomial_perm = itertools.permutations(monomial)
+
+ return set(sum(idx*(n_var**level) for level, idx in enumerate(monomial)) for monomial in monomial_perm)
diff --git a/polymatrix/expressionstate/__init__.py b/polymatrix/expressionstate/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/expressionstate/__init__.py
diff --git a/polymatrix/expressionstate/expressionstate.py b/polymatrix/expressionstate/expressionstate.py
new file mode 100644
index 0000000..342432a
--- /dev/null
+++ b/polymatrix/expressionstate/expressionstate.py
@@ -0,0 +1,4 @@
+from polymatrix.expressionstate.mixins.expressionstatemixin import ExpressionStateMixin
+
+class ExpressionState(ExpressionStateMixin):
+ pass
diff --git a/polymatrix/expressionstate/impl/__init__.py b/polymatrix/expressionstate/impl/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/expressionstate/impl/__init__.py
diff --git a/polymatrix/expression/impl/expressionstateimpl.py b/polymatrix/expressionstate/impl/expressionstateimpl.py
index 5459eb7..31710fb 100644
--- a/polymatrix/expression/impl/expressionstateimpl.py
+++ b/polymatrix/expressionstate/impl/expressionstateimpl.py
@@ -1,6 +1,6 @@
from functools import cached_property
import dataclass_abc
-from polymatrix.expression.expressionstate import ExpressionState
+from polymatrix.expressionstate.expressionstate import ExpressionState
from typing import Optional
diff --git a/polymatrix/expressionstate/init/__init__.py b/polymatrix/expressionstate/init/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/expressionstate/init/__init__.py
diff --git a/polymatrix/expression/init/initexpressionstate.py b/polymatrix/expressionstate/init/initexpressionstate.py
index be2e4f1..7e868da 100644
--- a/polymatrix/expression/init/initexpressionstate.py
+++ b/polymatrix/expressionstate/init/initexpressionstate.py
@@ -1,4 +1,4 @@
-from polymatrix.expression.impl.expressionstateimpl import ExpressionStateImpl
+from polymatrix.expressionstate.impl.expressionstateimpl import ExpressionStateImpl
def init_expression_state(
diff --git a/polymatrix/expressionstate/mixins/__init__.py b/polymatrix/expressionstate/mixins/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/expressionstate/mixins/__init__.py
diff --git a/polymatrix/expression/mixins/expressionstatemixin.py b/polymatrix/expressionstate/mixins/expressionstatemixin.py
index 523d2b7..523d2b7 100644
--- a/polymatrix/expression/mixins/expressionstatemixin.py
+++ b/polymatrix/expressionstate/mixins/expressionstatemixin.py
diff --git a/polymatrix/polymatrix/__init__.py b/polymatrix/polymatrix/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/polymatrix/__init__.py
diff --git a/polymatrix/polymatrix/impl/__init__.py b/polymatrix/polymatrix/impl/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/polymatrix/impl/__init__.py
diff --git a/polymatrix/expression/impl/polymatriximpl.py b/polymatrix/polymatrix/impl/polymatriximpl.py
index 63f577a..0c269ca 100644
--- a/polymatrix/expression/impl/polymatriximpl.py
+++ b/polymatrix/polymatrix/impl/polymatriximpl.py
@@ -1,5 +1,5 @@
import dataclass_abc
-from polymatrix.expression.polymatrix import PolyMatrix
+from polymatrix.polymatrix.polymatrix import PolyMatrix
@dataclass_abc.dataclass_abc(frozen=True)
diff --git a/polymatrix/polymatrix/init/__init__.py b/polymatrix/polymatrix/init/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/polymatrix/init/__init__.py
diff --git a/polymatrix/expression/init/initpolymatrix.py b/polymatrix/polymatrix/init/initpolymatrix.py
index d0c9577..412adfb 100644
--- a/polymatrix/expression/init/initpolymatrix.py
+++ b/polymatrix/polymatrix/init/initpolymatrix.py
@@ -1,4 +1,4 @@
-from polymatrix.expression.impl.polymatriximpl import PolyMatrixImpl
+from polymatrix.polymatrix.impl.polymatriximpl import PolyMatrixImpl
def init_poly_matrix(
diff --git a/polymatrix/polymatrix/mixins/__init__.py b/polymatrix/polymatrix/mixins/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/polymatrix/polymatrix/mixins/__init__.py
diff --git a/polymatrix/expression/mixins/polymatrixmixin.py b/polymatrix/polymatrix/mixins/polymatrixmixin.py
index bea80de..bea80de 100644
--- a/polymatrix/expression/mixins/polymatrixmixin.py
+++ b/polymatrix/polymatrix/mixins/polymatrixmixin.py
diff --git a/polymatrix/expression/polymatrix.py b/polymatrix/polymatrix/polymatrix.py
index c044081..c044081 100644
--- a/polymatrix/expression/polymatrix.py
+++ b/polymatrix/polymatrix/polymatrix.py
diff --git a/polymatrix/polysolver.py b/polymatrix/polysolver.py
deleted file mode 100644
index 8c055f8..0000000
--- a/polymatrix/polysolver.py
+++ /dev/null
@@ -1,401 +0,0 @@
-import numpy as np
-import sympy
-import itertools
-import scipy.linalg
-import scipy.sparse.linalg
-import collections
-from scipy.special import binom
-import more_itertools
-import time
-
-
-def convert_to_complex_equations(raw_data):
- n = raw_data[0].shape[0]
-
- data = {}
- data[0] = np.vstack((raw_data[0], np.zeros((n, 1))))
- data[1] = np.kron(np.eye(2), raw_data[1])
-
- def get_tuple(n, idx):
- row = idx % n
- col = int((idx-row) / n)
- return (row, col)
-
- def get_index(n, tple):
- return sum(idx*(n**level) for level, idx in enumerate(tple))
-
- csr_data = raw_data[2].tocsr()
-
- def gen_complex_data():
- for row in range(csr_data.shape[0]):
-
- pt = slice(csr_data.indptr[row], csr_data.indptr[row+1])
-
- for col, value in zip(csr_data.indices[pt], csr_data.data[pt]):
-
- left, right = get_tuple(n, col)
-
- yield row, get_index(2*n, (left, right)), value
- yield row, get_index(2*n, (left+n, right+n)), -value
-
- yield row+n, get_index(2*n, (left, right+n)), value
- yield row+n, get_index(2*n, (left+n, right)), value
-
- row, col, idata = list(zip(*gen_complex_data()))
-
- data[2] = scipy.sparse.coo_array(
- (idata, (row, col)),
- shape=(2*n, (2*n)**2),
- )
-
- return data
-
-
-def substitude_x_add_a(data, a):
-
- def kron_eye_and_a(n, data, a, indices):
- # permutations = more_itertools.distinct_permutations(indices)
- permutations = set(itertools.permutations(indices))
-
- if not scipy.sparse.issparse(data):
- ops = (np.eye(n), np.reshape(a, (-1, 1)))
-
- def acc_kron(perm):
- *_, last = itertools.accumulate((ops[idx] for idx in perm), lambda acc, v: np.kron(acc, v))
- return last
-
- return sum(data @ acc_kron(perm) for perm in permutations)
-
- else:
- # csr_data = data
- csr_data = data.tocsr()
-
- n_eye = sum(1 for idx in indices if idx == 0)
- n_col = n**n_eye
- n_index = n_col * n**(len(indices) - n_eye)
-
- def gen_array_per_permuatation():
-
- def gen_coord(perm):
- n_row = csr_data.shape[0]
-
- def acc_col_idx_and_value(acc, v):
- relindex, relrow, col, val = acc
-
- n_relrow = relrow / n
- grp_index = int(relindex / n_relrow)
- n_relindex = int(relindex - grp_index * n_relrow)
-
- if v == 1:
- n_col = col
- n_val = val * a[grp_index]
-
- else:
- n_col = n * col + grp_index
- n_val = val
-
- return n_relindex, n_relrow, n_col, n_val
-
- for row in range(n_row):
-
- pt = slice(csr_data.indptr[row], csr_data.indptr[row+1])
-
- for inner_idx, array_val in zip(csr_data.indices[pt], csr_data.data[pt]):
-
- *_, last = itertools.accumulate(
- perm,
- acc_col_idx_and_value,
- initial=(inner_idx, n_index, 0, array_val),
- )
- _, _, col, val = last
-
- yield col, val
-
- for perm in permutations:
-
- col, data = list(zip(*gen_coord(perm)))
-
- yield scipy.sparse.csr_array((data, col, csr_data.indptr), shape=(csr_data.shape[0], n_col))
-
- return sum(gen_array_per_permuatation())
-
- n = data[1].shape[0]
-
- subs_data = {key: val.copy() for key, val in data.items()}
-
- for degree, d_data in data.items():
- for i_degree in range(degree):
- indices = i_degree*(0,) + (degree - i_degree)*(1,)
- update = kron_eye_and_a(n, d_data, a, indices)
- subs_data[i_degree] += update
-
- first = -1/np.squeeze(subs_data[0])
- def gen_subs_data():
- for key, d_data in subs_data.items():
- if scipy.sparse.issparse(d_data):
-
- csr_data = d_data.tocsr()
- for row, scale in enumerate(first):
- csr_data.data[csr_data.indptr[row] : csr_data.indptr[row + 1]] *= scale
- yield key, csr_data
-
- else:
- d_data *= first[:, None]
- yield key, d_data
- return dict(gen_subs_data())
-
- # return subs_data
-
-
-def solve_poly_system(data, m):
- if isinstance(data[1], np.ndarray):
- b_num_inv = np.linalg.inv(data[1])
- else:
- b_num_inv = scipy.sparse.linalg.inv(data[1])
-
- n_var = b_num_inv.shape[0]
- p0 = b_num_inv @ np.ones((n_var, 1))
-
- assert (data[0] + np.ones((n_var, 1)) < 0.01).all(), f'{data[0]=}, {data[0] + np.ones((n_var, 1))=}'
- assert (data[0] + np.ones((n_var, 1)) < 0.01).all(), f'data[0] is not one'
-
- def func(acc, _):
- """
- acc: a nxk matrix whose ith column represent the ith parameter of the power series for each of the n variables
- """
-
- p = acc
- k = p.shape[1]
-
- def gen_indices(n, d):
- """
- n=2,d=1 = [(0,2), (1,1)]
- n=3,d=1 = [(0,3), (1,2)]
- n=2,d=2 = [(0,0,2), (0,1,1)]
- """
-
- if d==0:
- yield (n,)
-
- else:
- for idx in range(int(n/(d+1))+1):
- yield from ((idx,)+tuple(i+idx*(d-1) for i in indices) for indices in gen_indices(
- n - (2*d-1)*idx,
- d-1,
- ))
-
- def gen_p():
- for degree, d_data in data.items():
- if 1 < degree and degree-1 <= k:
- indices_list = list(gen_indices(k-degree+1, degree-1))
- permutations = lambda: (perm for indices in indices_list for perm in more_itertools.distinct_permutations(indices))
-
- if not scipy.sparse.issparse(d_data):
-
- def acc_kron(perm):
- *_, last = itertools.accumulate(((p[:,idx:idx+1] for idx in perm)), lambda acc, v: np.kron(acc, v))
- return last
-
- yield from (d_data @ acc_kron(perm) for perm in permutations())
-
- else:
-
- csr_data = d_data.tocsr()
-
- n_row = csr_data.shape[0]
- n_col = csr_data.shape[1]
-
- def gen_row_values():
-
- def acc_kron_operation(acc, v):
- relindex, relrow, val = acc
-
- n_relrow = relrow / n_var
- grp_index = int(relindex / n_relrow)
- n_relindex = int(relindex - grp_index * n_relrow)
- n_val = val * float(p[grp_index, v:v+1])
-
- return n_relindex, n_relrow, n_val
-
- for row in range(n_row):
-
- pt = slice(csr_data.indptr[row], csr_data.indptr[row+1])
-
- def gen_row_multiplication():
- for col_idx, col_val in zip(csr_data.indices[pt], csr_data.data[pt]):
- for perm in permutations():
-
- *_, (_, _, val) = itertools.accumulate(
- perm,
- acc_kron_operation,
- initial=(col_idx, n_col, col_val),
- )
-
- yield val
-
- yield sum(gen_row_multiplication())
-
- # for perm in permutations:
-
- row_values = tuple(gen_row_values())
-
- assert len(row_values) == n_row
-
- yield scipy.sparse.coo_array(
- (row_values, (range(n_row), np.zeros(n_row))),
- shape=(n_row, 1),
- )
-
- return np.concatenate((p, -b_num_inv @ sum(gen_p())), axis=1)
-
- *_, sol_subs = itertools.accumulate(range(m-1), func, initial=p0)
-
- return sum(np.asarray(sol_subs).T)
-
-
-def inner_smart_solve(data, irange=None, idegree=None, a_init=None):
-
- if irange is None:
- irange = np.geomspace(20, 1.1, 8)
-
- if idegree is None:
- idegree = 4
-
- if a_init is None:
- a_init = np.zeros(data[0].shape[0])
-
- def acc_func(acc, v):
- a, prev_err = acc
- scale = v
-
- # print(f'iter: {index}')
-
- # print('substitude...')
- subs_data = substitude_x_add_a(data, a)
-
- # print('modify scaling...')
- def gen_data():
- for degree, d_data in subs_data.items():
- if 1 == degree:
- yield degree, d_data * scale
- else:
- yield degree, d_data
- scaled_data = dict(gen_data())
-
- # print('solve...')
- try:
- sol = solve_poly_system(scaled_data, idegree)
- except:
- # return a, prev_err
- raise
-
- err = np.max(np.abs(eval_solution(scaled_data, sol)))
-
- a = sol + a
-
- return a, err
-
- a, err = tuple(zip(*itertools.accumulate(
- irange,
- acc_func,
- initial=(a_init, 0),
- )))
-
- return a, err
-
-
-def outer_smart_solve(data, a_init=None, n_iter=10, a_max=1.0, irange=None, idegree=None):
- n = data[1].shape[0]
-
- if a_init is None:
- a_init = np.zeros(n)
-
- def gen_a_err():
- for _ in range(n_iter):
- a_subs = a_init + a_max * (2 * np.random.rand(n) - 1)
-
- try:
- a, err = inner_smart_solve(data, irange=irange, idegree=idegree, a_init=a_subs)
-
- # subs_data = substitude_x_add_a(data, a[-1])
- # sol = solve_poly_system(subs_data, 6)
-
- # error_index = np.max(np.abs(eval_solution(data, a[-1] + sol))) + max(a[-1])
- # error_index = np.max(np.abs(eval_solution(data, a[-1] + sol)))
- # error_index = np.max(np.abs(eval_solution(subs_data, sol))) + max(a[-1])
- # error_index = np.max(np.abs(eval_solution(subs_data, sol)))
-
- except:
- print(f'nan error, continue')
- continue
-
- # print(f'{error_index=}')
-
- yield a, err
-
- a, err = tuple(zip(*gen_a_err()))
-
- return a, err
-
-
-def eval_solution(data, x=None):
- # if x is None:
- # x = sum(sol.T)
-
- x = np.reshape(x, (-1, 1))
-
- def gen_sum():
- n = data[1].shape[0]
-
- for degree, d_data in data.items():
- if 0 < degree:
- # *_, last = itertools.accumulate(degree*(x,), lambda acc, v: np.kron(acc, v))
- # yield d_data @ last
-
- if not scipy.sparse.issparse(d_data):
-
- *_, last = itertools.accumulate(degree*(x,), lambda acc, v: np.kron(acc, v))
- yield d_data @ last
-
- else:
- csr_data = d_data.tocsr()
-
- def gen_coord():
- n_row = csr_data.shape[0]
- n_index = n**degree
-
- def acc_col_idx_and_value(acc, v):
- relindex, relrow, val = acc
-
- n_relrow = relrow / n
- grp_index = int(relindex / n_relrow)
- n_relindex = int(relindex - grp_index * n_relrow)
-
- n_val = val * x[grp_index, 0]
-
- return n_relindex, n_relrow, n_val
-
- for row in range(n_row):
-
- pt = slice(csr_data.indptr[row], csr_data.indptr[row+1])
-
- for inner_idx, array_val in zip(csr_data.indices[pt], csr_data.data[pt]):
-
- *_, last = itertools.accumulate(
- range(degree),
- acc_col_idx_and_value,
- initial=(inner_idx, n_index, array_val),
- )
- _, _, val = last
-
- yield val
-
- array_values = list(gen_coord())
-
- yield scipy.sparse.csr_array((array_values, np.zeros(len(array_values)), csr_data.indptr), shape=(csr_data.shape[0], 1))
-
- else:
- yield d_data
-
- val = np.ravel(sum(gen_sum()).T)
- return val
diff --git a/polymatrix/sympyutils.py b/polymatrix/sympyutils.py
deleted file mode 100644
index 8fd74b2..0000000
--- a/polymatrix/sympyutils.py
+++ /dev/null
@@ -1,87 +0,0 @@
-import collections
-import itertools
-import numpy as np
-import scipy.sparse
-import sympy
-
-
-def poly_to_data_coord(poly_list, x, degree = None):
- """
- poly_list = [
- poly(x1*x3**2, x)
- ]
- power: up to which power
- """
-
- sympy_poly_list = tuple(tuple(sympy.poly(p, x) for p in inner_poly_list) for inner_poly_list in poly_list)
-
- if degree is None:
- degree = max(sum(monom) for inner_poly_list in sympy_poly_list for poly in inner_poly_list for monom in poly.monoms())
-
- n = len(x)
-
- def gen_power_mat():
-
- # for all powers generate a matrix
- for i_degree in range(degree + 1):
-
- def gen_value_index():
-
- # each polynomial defines a row in the matrix
- for poly_row, inner_poly_list in enumerate(sympy_poly_list):
-
- for poly_col, p in enumerate(inner_poly_list):
-
- # a5 x1 x3**2 -> c=a5, m=(1, 0, 2)
- for c, m in zip(p.coeffs(), p.monoms()):
-
- if sum(m) == i_degree:
-
- indices = (idx for idx, p in enumerate(m) for _ in range(p))
- index = sum(idx*(n**level) for level, idx in enumerate(indices))
-
- yield (poly_row, poly_col, index), c
-
- data = dict(gen_value_index()) | collections.defaultdict(float)
-
- if len(data) > 0:
- yield i_degree, data
-
- return dict(gen_power_mat())
-
-
-def poly_to_matrix(poly_list, x, power = None):
- data_coord_dict = poly_to_data_coord(poly_list, x, power)
-
- n_var = len(x)
- n_poly = len(poly_list)
- n_eq = sum((1 for row_eq in poly_list for e in row_eq))
-
- def gen_power_mat():
- if 0 not in data_coord_dict:
- yield 0, np.zeros((n_var, 1))
-
- # for all powers generate a matrix
- for degree, data_coord in data_coord_dict.items():
-
- # empty matrix
- shape = (n_eq, n_var**degree)
-
- # fill matrix
- if len(data_coord) == 0:
- yield np.zeros((len(poly_list), n_var**degree))
-
- else:
- def gen_row_col_coord():
- for (p_row, p_col, index), value in data_coord.items():
- yield p_row + p_col * n_poly, index, value
-
- rows, cols, data = list(zip(*gen_row_col_coord()))
- sparse_array = scipy.sparse.coo_matrix((data, (rows, cols)), dtype=np.double, shape=shape)
-
- if degree <= 1:
- yield degree, sparse_array.toarray()
- else:
- yield degree, sparse_array.tocsr()
-
- return dict(gen_power_mat())
diff --git a/polymatrix/utils.py b/polymatrix/utils.py
deleted file mode 100644
index 2234e4a..0000000
--- a/polymatrix/utils.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import itertools
-import scipy.special
-
-
-def monomial_to_index(n_var, monomial):
- # return sum(idx*(n_var**level) for level, idx in enumerate(monomial))
-
- monomial_perm = itertools.permutations(monomial)
-
- return set(sum(idx*(n_var**level) for level, idx in enumerate(monomial)) for monomial in monomial_perm)
-
-
-# def variable_to_index(n_var, combination):
-# """
-# example:
-# expr = x1 * x3**2
-# n_var = 3
-# combination = (2, 2, 0)
-
-# returns 5
-# """
-
-# def gen_index_sum():
-# for k, x in enumerate(combination):
-# yield scipy.special.binom(n_var+k-1, k+1) - scipy.special.binom(n_var+k-1-x, k+1)
-
-# return int(sum(gen_index_sum()))
-
-
-# def variable_powers_to_index(powers):
-# """
-# example:
-# expr = x1 * x3**2
-# powers = (1, 0, 2)
-
-# returns 5
-# """
-
-# n_var = len(powers)
-
-# indices = sorted((idx for idx, p in enumerate(powers) for _ in range(p)), reverse=True)
-
-# return variable_to_index(n_var, indices) \ No newline at end of file
diff --git a/setup.py b/setup.py
index e2da6c2..3188bd3 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,28 @@
-from setuptools import setup
+from setuptools import setup, find_packages
+from os import path
+
+
+here = path.abspath(path.dirname(__file__))
+
+# Get the long description from the README file
+with open(path.join(here, 'README.md'), encoding='utf-8') as f:
+ long_description = f.read()
setup(
- name='polymatrix'
+ name='polymatrix',
+ version='0.0.1a1',
+ install_requires=['dataclass-abc'],
+ description='A library to represent and manipulate multivariate polynomials',
+ long_description=long_description,
+ long_description_content_type='text/markdown',
+ url='https://gitlab.nccr-automation.ch/michael.schneeberger/polysolver',
+ author='Michael Schneeberger',
+ author_email='michael.schneeberger@fhnw.com',
+ classifiers=[
+ 'License :: OSI Approved :: MIT License',
+ 'Programming Language :: Python :: 3.10',
+ ],
+ keywords=['multivariate polynomial'],
+ packages=find_packages(include=['polymatrix', 'polymatrix.*']),
+ python_requires='>=3.10',
) \ No newline at end of file
diff --git a/test_polymatrix/test_expression/test_addition.py b/test_polymatrix/test_expression/test_addition.py
index 623b13f..6c8a9a2 100644
--- a/test_polymatrix/test_expression/test_addition.py
+++ b/test_polymatrix/test_expression/test_addition.py
@@ -1,7 +1,7 @@
import unittest
from polymatrix.expression.init.initadditionexpr import init_addition_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
diff --git a/test_polymatrix/test_expression/test_blockdiag.py b/test_polymatrix/test_expression/test_blockdiag.py
index 69141a4..a66935e 100644
--- a/test_polymatrix/test_expression/test_blockdiag.py
+++ b/test_polymatrix/test_expression/test_blockdiag.py
@@ -1,7 +1,7 @@
import unittest
from polymatrix.expression.init.initblockdiagexpr import init_block_diag_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
diff --git a/test_polymatrix/test_expression/test_derivative.py b/test_polymatrix/test_expression/test_derivative.py
index a4fc6f6..93c98f4 100644
--- a/test_polymatrix/test_expression/test_derivative.py
+++ b/test_polymatrix/test_expression/test_derivative.py
@@ -2,7 +2,7 @@ import unittest
from polymatrix.expression.init.initderivativeexpr import init_derivative_expr
from polymatrix.expression.init.initdivergenceexpr import init_divergence_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initlinearinexpr import init_linear_in_expr
diff --git a/test_polymatrix/test_expression/test_divergence.py b/test_polymatrix/test_expression/test_divergence.py
index 412dcca..ad25577 100644
--- a/test_polymatrix/test_expression/test_divergence.py
+++ b/test_polymatrix/test_expression/test_divergence.py
@@ -1,7 +1,7 @@
import unittest
from polymatrix.expression.init.initdivergenceexpr import init_divergence_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initlinearinexpr import init_linear_in_expr
diff --git a/test_polymatrix/test_expression/test_eval.py b/test_polymatrix/test_expression/test_eval.py
index 662322a..9b9454f 100644
--- a/test_polymatrix/test_expression/test_eval.py
+++ b/test_polymatrix/test_expression/test_eval.py
@@ -1,7 +1,7 @@
import unittest
from polymatrix.expression.init.initevalexpr import init_eval_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
diff --git a/test_polymatrix/test_expression/test_linearin.py b/test_polymatrix/test_expression/test_linearin.py
index 67f2c3d..53d324a 100644
--- a/test_polymatrix/test_expression/test_linearin.py
+++ b/test_polymatrix/test_expression/test_linearin.py
@@ -1,6 +1,6 @@
import unittest
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initlinearinexpr import init_linear_in_expr
diff --git a/test_polymatrix/test_expression/test_matrixmult.py b/test_polymatrix/test_expression/test_matrixmult.py
index 6facb48..12d0584 100644
--- a/test_polymatrix/test_expression/test_matrixmult.py
+++ b/test_polymatrix/test_expression/test_matrixmult.py
@@ -1,6 +1,6 @@
import unittest
from polymatrix.expression.init.initadditionexpr import init_addition_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initmatrixmultexpr import init_matrix_mult_expr
diff --git a/test_polymatrix/test_expression/test_quadraticin.py b/test_polymatrix/test_expression/test_quadraticin.py
index c340d7f..f25d8be 100644
--- a/test_polymatrix/test_expression/test_quadraticin.py
+++ b/test_polymatrix/test_expression/test_quadraticin.py
@@ -1,6 +1,6 @@
import unittest
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initquadraticinexpr import init_quadratic_in_expr
diff --git a/test_polymatrix/test_expression/test_substitude.py b/test_polymatrix/test_expression/test_substitude.py
index 9a6e875..21a8ab5 100644
--- a/test_polymatrix/test_expression/test_substitude.py
+++ b/test_polymatrix/test_expression/test_substitude.py
@@ -1,6 +1,6 @@
import unittest
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initsubstituteexpr import init_substitute_expr
diff --git a/test_polymatrix/test_expression/test_subtractmonomials.py b/test_polymatrix/test_expression/test_subtractmonomials.py
index f80f76a..8cd8585 100644
--- a/test_polymatrix/test_expression/test_subtractmonomials.py
+++ b/test_polymatrix/test_expression/test_subtractmonomials.py
@@ -2,7 +2,7 @@ import unittest
from polymatrix.expression.init.initderivativeexpr import init_derivative_expr
from polymatrix.expression.init.initdivergenceexpr import init_divergence_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initlinearinexpr import init_linear_in_expr
from polymatrix.expression.init.initsubtractmonomialsexpr import init_subtract_monomials_expr
diff --git a/test_polymatrix/test_expression/test_sum.py b/test_polymatrix/test_expression/test_sum.py
index 48ae073..053e428 100644
--- a/test_polymatrix/test_expression/test_sum.py
+++ b/test_polymatrix/test_expression/test_sum.py
@@ -1,7 +1,7 @@
import unittest
from polymatrix.expression.init.initevalexpr import init_eval_expr
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initsumexpr import init_sum_expr
diff --git a/test_polymatrix/test_expression/test_symmetric.py b/test_polymatrix/test_expression/test_symmetric.py
index ac5eba6..a93d975 100644
--- a/test_polymatrix/test_expression/test_symmetric.py
+++ b/test_polymatrix/test_expression/test_symmetric.py
@@ -1,6 +1,6 @@
import unittest
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initquadraticinexpr import init_quadratic_in_expr
from polymatrix.expression.init.initsymmetricexpr import init_symmetric_expr
diff --git a/test_polymatrix/test_expression/test_toconstant.py b/test_polymatrix/test_expression/test_toconstant.py
index 784aeec..f3a0643 100644
--- a/test_polymatrix/test_expression/test_toconstant.py
+++ b/test_polymatrix/test_expression/test_toconstant.py
@@ -1,6 +1,6 @@
import unittest
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initquadraticinexpr import init_quadratic_in_expr
from polymatrix.expression.init.initsymmetricexpr import init_symmetric_expr
diff --git a/test_polymatrix/test_expression/test_truncate.py b/test_polymatrix/test_expression/test_truncate.py
index e944229..910bd37 100644
--- a/test_polymatrix/test_expression/test_truncate.py
+++ b/test_polymatrix/test_expression/test_truncate.py
@@ -1,6 +1,6 @@
import unittest
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initquadraticinexpr import init_quadratic_in_expr
from polymatrix.expression.init.initsymmetricexpr import init_symmetric_expr
diff --git a/test_polymatrix/test_expression/test_vstack.py b/test_polymatrix/test_expression/test_vstack.py
index a50267f..8778f8a 100644
--- a/test_polymatrix/test_expression/test_vstack.py
+++ b/test_polymatrix/test_expression/test_vstack.py
@@ -1,6 +1,6 @@
import unittest
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initvstackexpr import init_v_stack_expr
diff --git a/test_polymatrix/test_tomatrixrepr.py b/test_polymatrix/test_tomatrixrepr.py
index 7486c8e..181f6fa 100644
--- a/test_polymatrix/test_tomatrixrepr.py
+++ b/test_polymatrix/test_tomatrixrepr.py
@@ -1,7 +1,7 @@
import unittest
import polymatrix
-from polymatrix.expression.init.initexpressionstate import init_expression_state
+from polymatrix.expressionstate.init.initexpressionstate import init_expression_state
from polymatrix.expression.init.initfromtermsexpr import init_from_terms_expr
from polymatrix.expression.init.initlinearinexpr import init_linear_in_expr