Bläddra i källkod

sonic: filter out X^0 terms from t(X, Y) poly

narodnik 5 år sedan
förälder
incheckning
937ce246a0
2 ändrade filer med 25 tillägg och 2 borttagningar
  1. 22 0
      scripts/halo/multipoly.py
  2. 3 2
      scripts/halo/sonic.py

+ 22 - 0
scripts/halo/multipoly.py

@@ -229,6 +229,28 @@ class MultivariatePolynomial:
             p += term.evaluate(variable_map)
         return p
 
+    def _assert_unique_terms(self):
+        for i, term1 in enumerate(self.terms):
+            for q, term2 in enumerate(self.terms):
+                if i == q:
+                    continue
+                assert not term1.matches(term2)
+
+    def filter(self, variables):
+        p = MultivariatePolynomial()
+        for term in self.terms:
+            assert isinstance(term, MultiplyExpression)
+
+            skip = False
+            for variable in variables:
+                symbol = variable.name
+                if symbol in term.symbols:
+                    skip = True
+
+            if not skip:
+                p += term
+        return p
+
     def __str__(self):
         if not self.terms:
             return "0"

+ 3 - 2
scripts/halo/sonic.py

@@ -160,6 +160,7 @@ for q, k_q in enumerate(k, 1):
 r_prime_x_y = r_x_y + s_x_y
 r_x_1 = r_x_y.evaluate({y.name: fp(1)})
 t_x_y = r_x_1 * r_prime_x_y - k_y
-print()
-print(t_x_y)
+t_x_y._assert_unique_terms()
+const_t = t_x_y.filter([x])
+print(const_t)