@@ -275,7 +275,7 @@ takes single monomial in frobenius and reduces to pole order n, currently only d
275275if the reduction hits the end, returns u as the "true" value, otherwise returns it in Costa's format
276276(i.e. entries will be multiplies of p in Costa's format)
277277"""
278- function reducechain_costachunks (u,g,m,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed;verbose= false )
278+ function reducechain_costachunks (u,g,m,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed;verbose= false ,fastevaluation )
279279 # p = Int64(characteristic(parent(f)))
280280 n = nvars (parent (f)) - 1
281281 d = degree (f,1 )
@@ -329,7 +329,6 @@ function reducechain_costachunks(u,g,m,S,f,pseudoInverseMat,p,Ruvs,termorder,var
329329
330330 # verbose && println("Before reduction chunk: $gMat")
331331 # verbose && println("Before reduction chunk, I is $I")
332- fastevaluation = false
333332 if fastevaluation
334333 gMat = finitediff_prodeval_linear (B,A,0 ,nend- (d* n- n)- 1 ,gMat)
335334 i = nend- (d* n- n) + 1
@@ -438,7 +437,7 @@ function reducechain_costachunks(u,g,m,S,f,pseudoInverseMat,p,Ruvs,termorder,var
438437
439438end
440439
441- function reducechain_naive (u,g,m,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed,verbose= false )
440+ function reducechain_naive (u,g,m,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed,verbose= false ,fastevaluation )
442441 n = nvars (parent (f)) - 1
443442 d = degree (f,1 )
444443 PR = parent (f)
@@ -470,9 +469,13 @@ function reducechain_naive(u,g,m,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reve
470469 matrices = computeRuv (V,S,f,pseudoInverseMat,Ruvs,termorder,vars_reversed)
471470 B,A = computeRPoly_LAOneVar2 (matrices,reverse (mins),reverse (V),R)
472471 i = 1
473- while i <= K
474- gMat = (A+ B* (K- i))* gMat
475- i = i+ 1
472+ if fastevaluation == false
473+ while i <= K
474+ gMat = (A+ B* (K- i))* gMat
475+ i = i+ 1
476+ end
477+ else
478+ gMat = finitediff_prodeval_linear (B,A,0 ,K- 1 ,gMat)
476479 end
477480 J = J - K* V
478481 m = m - K
683686Implements Costa's algorithm for controlled reduction,
684687sweeping down the terms of the series expansion by the pole order.
685688"""
686- function reducepoly_costachunks (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed; verbose= false )
689+ function reducepoly_costachunks (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed; verbose= false , fastevaluation )
687690 # p = Int64(characteristic(parent(f)))
688691 n = nvars (parent (f)) - 1
689692 d = degree (f,1 )
@@ -719,7 +722,7 @@ function reducepoly_costachunks(pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_r
719722 for i in eachindex (ω)
720723 # ω[i] = reducechain...
721724 # verbose && println("u is type $(typeof(ω[i][1]))")
722- ω[i] = reducechain_costachunks (ω[i]. .. ,poleorder,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed,verbose= verbose)
725+ ω[i] = reducechain_costachunks (ω[i]. .. ,poleorder,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed,verbose= verbose,fastevaluation )
723726 end
724727
725728 poleorder = poleorder - p
@@ -730,7 +733,7 @@ function reducepoly_costachunks(pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_r
730733 return poly_of_end_costadatas (ω,PR,p,d,n,S,termorder)
731734end
732735
733- function reducepoly_naive (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed)
736+ function reducepoly_naive (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed,fastevaluation )
734737 n = nvars (parent (f)) - 1
735738 d = degree (f,1 )
736739 PR = parent (f)
@@ -739,7 +742,7 @@ function reducepoly_naive(pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reverse
739742 for term in pol
740743 terms = termsoforder (pol,term[2 ])
741744 for t in terms
742- push! (result,reducechain_naive (costadata_of_initial_term (t,n,d,p,termorder)... ,t[2 ],S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed))
745+ push! (result,reducechain_naive (costadata_of_initial_term (t,n,d,p,termorder)... ,t[2 ],S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed,fastevaluation ))
743746 end
744747 end
745748 return poly_of_end_costadatas (result,PR,p,d,n,S,termorder)
@@ -752,33 +755,33 @@ trying to emulate Costa's controlled reduction, changes the order that polynomia
752755
753756N_m - the precision
754757"""
755- function reducetransform_costachunks (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed; verbose= false )
758+ function reducetransform_costachunks (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed; verbose= false , fastevaluation )
756759 MS1 = matrix_space (coefficient_ring (parent (f)), binomial (d* n,d* n- n), binomial (d* n,d* n- n))
757760 Ruvs = Dict {Vector{Int64}, Vector{typeof(MS1())}} ()
758761 result = []
759762 for pol in FT
760- reduction = reducepoly_costachunks (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed, verbose= verbose)
763+ reduction = reducepoly_costachunks (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed, verbose= verbose, fastevaluation )
761764 push! (result, reduction)
762765 end
763766 return result
764767end
765768
766- function reducetransform_naive (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed)
769+ function reducetransform_naive (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed,fastevaluation )
767770 MS1 = matrix_space (coefficient_ring (parent (f)), binomial (d* n,d* n- n), binomial (d* n,d* n- n))
768771 Ruvs = Dict {Vector{Int64}, Vector{typeof(MS1())}} ()
769772 result = []
770773 for pol in FT
771- reduction = reducepoly_naive (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed)
774+ reduction = reducepoly_naive (pol,S,f,pseudoInverseMat,p,Ruvs,termorder,vars_reversed,fastevaluation )
772775 push! (result, reduction)
773776 end
774777 return result
775778end
776779
777- function reducetransform (FT,N_m,S,f,pseudoInverseMat,p,termorder,algorithm,vars_reversed;verbose= false )
780+ function reducetransform (FT,N_m,S,f,pseudoInverseMat,p,termorder,algorithm,vars_reversed;verbose= false ,fastevaluation )
778781 if algorithm == :costachunks
779- reducetransform_costachunks (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed,verbose= verbose)
782+ reducetransform_costachunks (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed,verbose= verbose,fastevaluation )
780783 elseif algorithm == :naive
781- reducetransform_naive (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed)
784+ reducetransform_naive (FT,N_m,S,f,pseudoInverseMat,p,termorder,vars_reversed,fastevaluation )
782785 else
783786 throw (ArgumentError (" Unsupported Algorithm: $algorithm " ))
784787 end
0 commit comments