summaryrefslogtreecommitdiffstats
path: root/sumofsquares/sosexprbase/mixins/sosexprbasemixin.py
diff options
context:
space:
mode:
Diffstat (limited to 'sumofsquares/sosexprbase/mixins/sosexprbasemixin.py')
-rw-r--r--sumofsquares/sosexprbase/mixins/sosexprbasemixin.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/sumofsquares/sosexprbase/mixins/sosexprbasemixin.py b/sumofsquares/sosexprbase/mixins/sosexprbasemixin.py
new file mode 100644
index 0000000..c8cee19
--- /dev/null
+++ b/sumofsquares/sosexprbase/mixins/sosexprbasemixin.py
@@ -0,0 +1,23 @@
+import functools
+import polymatrix
+
+from sumofsquares.sosexprbase.mixins.exprbasemixin import ExprBaseMixin
+
+
+class SOSExprBaseMixin(ExprBaseMixin):
+ @functools.cached_property
+ def sos_monom(self) -> polymatrix.Expression:
+ return self.expr.quadratic_monomials(self.variables).cache()
+
+ @functools.cached_property
+ def sos_matrix(self) -> polymatrix.Expression:
+ sos_matrix = self.expr.quadratic_in(
+ variables=self.variables,
+ monomials=self.sos_monom,
+ ).symmetric().cache()
+
+ return sos_matrix
+
+ @property
+ def sos_matrix_as_vector(self) -> polymatrix.Expression:
+ return self.sos_matrix.reshape(-1, 1)