Skip to content

Commit 0c2cf92

Browse files
committed
updated compute controlled matrix
1 parent 9b8e453 commit 0c2cf92

File tree

5 files changed

+32
-18
lines changed

5 files changed

+32
-18
lines changed

src/CharPolyFrob.jl

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,13 @@ function apply_newton_identity(n, d, p, prec_vec, cp_coeffs, modulus)
134134
sum = sum - e[k+1-i] * s[i+1]
135135
end
136136
end
137+
#println("sum=$sum")
137138
if k%2 == 0
138-
s[k+1] = sum - k * e[k+1]
139-
#s[k+1] = -(sum + k * e[k+1])
139+
#s[k+1] = sum - k * e[k+1]
140+
s[k+1] = -(sum + k * e[k+1])
140141
else
141-
s[k+1] = -1 * (sum - k * e[k+1])
142-
#s[k+1] = sum + k * e[k+1]
142+
#s[k+1] = -1 * (sum - k * e[k+1])
143+
s[k+1] = sum + k * e[k+1]
143144
end
144145

145146

@@ -153,12 +154,12 @@ function apply_newton_identity(n, d, p, prec_vec, cp_coeffs, modulus)
153154
#println(s[k+1])
154155

155156
if k%2 == 0
156-
e[k+1] = div(sum-s[k+1], k)
157-
#e[k+1] = div(-s[k+1]-sum, k)
157+
#e[k+1] = div(sum-s[k+1], k)
158+
e[k+1] = div(-s[k+1]-sum, k)
158159
cp_coeffs[d+1-k] = e[k+1]
159160
else
160-
e[k+1] = div(sum+s[k+1], k)
161-
#e[k+1] = div(s[k+1]-sum, k)
161+
#e[k+1] = div(sum+s[k+1], k)
162+
e[k+1] = div(s[k+1]-sum, k)
162163
cp_coeffs[d+1-k] = -e[k+1]
163164
end
164165
#println("k=$k")
@@ -195,15 +196,18 @@ function compute_Lpolynomial(n, p, polygon, relative_precision, cp_coeffs, verbo
195196
Lpoly_coeffs[i] = mod(Lpoly_coeffs[i], modulus[i])
196197
end
197198
(1 == verbose) && println("coefficients after moding by prec = $Lpoly_coeffs")
199+
#println("coefficients after moding by prec = $Lpoly_coeffs")
198200

199201
Lpoly_coeffs[d+1] = 1 # set leading coefficient to 1
200202
sign = sign_fe(n, d, p, prec_vec, Lpoly_coeffs) # determine the sign of the functional equation
201203
(1 == verbose) && println("sign of functional equation = $sign")
202204
Lpoly_coeffs[1] = sign * p^(div(d*dimension, 2))
203205
#println(Lpoly_coeffs[1])
206+
#println("prec_vec=$prec_vec")
204207
Lpoly_coeffs = DeRham.apply_symmetry(n,d,p,prec_vec,Lpoly_coeffs,modulus,sign)
205208
(1 == verbose) && println("coefficients after apply symmetry = $Lpoly_coeffs")
206-
#println("modulus=$modulus")
209+
#println("prec_vec=$prec_vec")
210+
#println("coefficients after apply symmetry = $Lpoly_coeffs")
207211
Lpoly_coeffs = DeRham.apply_newton_identity(n,d,p,prec_vec,Lpoly_coeffs,modulus)
208212
(1 == verbose) && println("coeffficients after applying Newton's identity = $Lpoly_coeffs")
209213

src/ControlledReduction.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ function reducechain_costachunks(u,g,m,S,f,pseudoInverseMat,p,Ruvs,explookup,A,B
420420
nend = p
421421
end
422422

423-
matrices = computeRuv(V,S,f,pseudoInverseMat,Ruvs,explookup,params)
423+
matrices = computeRuvS(V,S,f,pseudoInverseMat,Ruvs,explookup,params)
424424

425425
#TODO: the following was changed to use reverse! so
426426
# it doesn't allocate as much, but I realized that
@@ -475,7 +475,7 @@ function reducechain_costachunks(u,g,m,S,f,pseudoInverseMat,p,Ruvs,explookup,A,B
475475
# there's some sort of parity issue between our code and Costa's
476476
#A,B = computeRPoly_LAOneVar(y,rev_tweak(J - (i+1)*V,d*n-n) - y,S,n,d,f,pseudoInverseMat,R,PR,termorder)
477477

478-
matrices1 = computeRuv(y,S,f,pseudoInverseMat,Ruvs,explookup,params)
478+
matrices1 = computeRuvS(y,S,f,pseudoInverseMat,Ruvs,explookup,params)
479479
#println(matrices1)
480480
#error()
481481

src/FindMonomialBasis.jl

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ function compute_controlled_matrix(f, l, S, R, PR, params)
7676
vars = gens(PR)
7777

7878
len_S = length(S)
79+
notS = setdiff(collect(0:n),S)
80+
len_notS = length(notS)
7981

8082
@assert(len_S >= 0 && len_S <= n+1)
8183

@@ -98,20 +100,26 @@ function compute_controlled_matrix(f, l, S, R, PR, params)
98100

99101
partials = [ derivative(f, i) for i in 1:n+1 ]
100102
if params.vars_reversed == true
101-
partials = reverse(partials)
103+
partials = reverse(partials) # one needs to be quite careful with the ordering of partials
104+
notS = reverse(notS)
102105
end
103106

104107
for i in 1:len_S
108+
var = S[i]
105109
for monomial in eachindex(in_set_mons)
106-
M[:, in_set_section * (i-1) + monomial] = polynomial_to_vector(in_set_mons[monomial] * partials[i], n+1, R, PR, params.termorder)
110+
M[:, in_set_section * (i-1) + monomial] = polynomial_to_vector(in_set_mons[monomial] * partials[len_notS+1+var], n+1, R, PR, params.termorder)
111+
#M[:, in_set_section * (i-1) + monomial] = polynomial_to_vector(in_set_mons[monomial] * partials[i], n+1, R, PR, params.termorder)
107112
end
108113
end
109114

110115
for i in (len_S+1):n+1
116+
var = notS[i-len_S]
111117
for monomial in eachindex(not_in_set_mons)
112-
M[:, not_in_set_section * (i-1) + monomial] = polynomial_to_vector(not_in_set_mons[monomial] * vars[i] * partials[i], n+1, R, PR, params.termorder)
118+
M[:, not_in_set_section * (i-1) + monomial] = polynomial_to_vector(not_in_set_mons[monomial] * vars[var+1] * partials[i-len_S], n+1, R, PR, params.termorder)
119+
#M[:, not_in_set_section * (i-1) + monomial] = polynomial_to_vector(not_in_set_mons[monomial] * vars[i] * partials[i], n+1, R, PR, params.termorder)
113120
end
114121
end
122+
println(rank(M))
115123
return M
116124
end
117125

src/SmoothNondegenerate.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,19 @@ function find_Ssmooth_model(f, M, S_target, params)
1616
SLn = special_linear_group(n + 1, GF(q))
1717
d = total_degree(f)
1818
vars = gens(PR)
19-
l = l = d * n - n + d - length(S_target)
19+
l = d * n - n + d - length(S_target)
2020

2121
bool = true
22+
f_transformed = f
2223
while bool
23-
mat = rand(SLn)
24-
new_vars = mat * vars
25-
f_transformed = evaluate(f, new_vars)
2624
try
2725
pseudo_inverse_mat_new = pseudo_inverse_controlled_lifted(f_transformed,S_target,l,M,params)
2826
bool = false
2927
return f_transformed, pseudo_inverse_mat_new
3028
catch e
29+
mat = rand(SLn)
30+
new_vars = matrix(mat) * vars
31+
f_transformed = evaluate(f, new_vars)
3132
end
3233
end
3334

src/ZetaFunction.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ function zeta_function(f; S=[-1], verbose=false, givefrobmat=false, algorithm=:c
294294
(9 < verbose) && println("Basis of cohomology is $Basis")
295295

296296
(hodge_polygon, r_m, N_m, M) = precision_information(f,Basis,verbose)
297+
#print(find_Ssmooth_model(f, M, S, params))
297298
#hodge_polygon = hodgepolygon(Basis, n)
298299
#hodge_numbers = hodge_polygon.slopelengths
299300
#(9 < verbose) && println("Hodge numbers = $hodge_numbers")

0 commit comments

Comments
 (0)