@@ -783,6 +783,13 @@ def multi_point_evaluation(self, p, eval_pts):
783
783
784
784
List of values of `p` at the `eval_pts`.
785
785
786
+ .. TODO::
787
+
788
+ This method currently trivially calls the evaluation function
789
+ repeatedly and should be updated to the recursive algorithm
790
+ from the paper "Fast Operations on Linearized Polynomials
791
+ and their Applications in Coding Theory" by Puchinger, et al.
792
+
786
793
EXAMPLES:
787
794
788
795
sage: k.<t> = GF(5^3)
@@ -792,22 +799,8 @@ def multi_point_evaluation(self, p, eval_pts):
792
799
sage: eval_pts = [1, t, t^2]
793
800
sage: c = S.multi_point_evaluation(a, eval_pts); c
794
801
[t + 1, 3*t^2 + 4*t + 4, 4*t]
795
- sage: [ a(e) for e in eval_pts ]
796
- [t + 1, 3*t^2 + 4*t + 4, 4*t]
797
802
"""
798
- coefficients = p .list ()
799
- sigma = self .twist_map ()
800
- if len (eval_pts ) == 1 :
801
- return [ p (eval_pts [0 ]) ]
802
- else :
803
- t = len (eval_pts )// 2
804
- A = eval_pts [:t ]
805
- B = eval_pts [t :]
806
- M_A = self .minimal_vanishing_polynomial (A )
807
- M_B = self .minimal_vanishing_polynomial (B )
808
- Q_A , R_A = p .right_quo_rem (M_A )
809
- Q_B , R_B = p .right_quo_rem (M_B )
810
- return self .multi_point_evaluation (R_A , A ) + self .multi_point_evaluation (R_B , B )
803
+ return [ p (e ) for e in eval_pts ]
811
804
812
805
def interpolation_polynomial (self , eval_pts , values , check = True ):
813
806
"""
0 commit comments