Skip to content

Commit e334dba

Browse files
Added tests
1 parent ae8891b commit e334dba

File tree

4 files changed

+42
-21
lines changed

4 files changed

+42
-21
lines changed

src/ControlledReduction.jl

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ takes single monomial in frobenius and reduces to pole order n, currently only d
275275
if 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

439438
end
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
@@ -683,7 +686,7 @@ end
683686
Implements Costa's algorithm for controlled reduction,
684687
sweeping 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)
731734
end
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
753756
N_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
764767
end
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
775778
end
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

src/ZetaFunction.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ vars_reversed -- reverses the order of basis vectors at various places
155155
>>>if you don't know what this is, ignore it.
156156
157157
"""
158-
function zeta_function(f; verbose=false, givefrobmat=false, algorithm=:costachunks, termorder=:invlex, vars_reversed=true)
158+
function zeta_function(f; verbose=false, givefrobmat=false, algorithm=:costachunks, termorder=:invlex, vars_reversed=true, fastevaluation=false)
159159
p = Int64(characteristic(parent(f)))
160160
q = p
161161
n = nvars(parent(f)) - 1
@@ -243,7 +243,7 @@ function zeta_function(f; verbose=false, givefrobmat=false, algorithm=:costachun
243243
# end
244244
#end
245245
#TODO: check which algorithm we're using
246-
Reductions = reducetransform(FBasis, N_m, S, fLift, pseudo_inverse_mat, p, termorder,algorithm,vars_reversed,verbose=verbose)
246+
Reductions = reducetransform(FBasis, N_m, S, fLift, pseudo_inverse_mat, p, termorder,algorithm,vars_reversed,verbose=verbose,fastevaluation)
247247
if verbose
248248
for i in 1:length(Basis)
249249
basis_elt = Basis[i]

test/Orderings.jl

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,24 @@ function test_naive_algorithm()
6666
f = y^2*z - x^3 - x*z^2 - z^3
6767

6868
zeta_costa = DeRham.zeta_function(f)
69-
zeta_naive = DeRham.zeta_function(f)
69+
zeta_naive = DeRham.zeta_function(f,algorithm=:naive)
7070

7171
@test zeta_costa == zeta_naive
7272
end
73-
73+
74+
function test_fastevaluation()
75+
n = 2
76+
d = 3
77+
78+
p = 7
79+
80+
F = GF(p)
81+
R, (x,y,z) = polynomial_ring(F, ["x$i" for i in 0:n])
82+
83+
f = y^2*z - x^3 - x*z^2 - z^3
84+
85+
zeta = DeRham.zeta_function(f)
86+
zeta_fasteval = DeRham.zeta_function(f,fastevaluation=true)
87+
88+
@test zeta == zeta_fasteval
89+
end

test/runtests.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ end
6060

6161
@testset "Monomial orderings" begin
6262
test_supported_monomial_orderings()
63+
test_naive_algorithm()
64+
test_fastevaluation()
6365

6466
#test_reversing_variables()
6567

0 commit comments

Comments
 (0)