Skip to content

Commit c41941b

Browse files
Added new computeRuv for S 012
1 parent 2f2209d commit c41941b

File tree

2 files changed

+144
-8
lines changed

2 files changed

+144
-8
lines changed

src/ControlledReduction.jl

Lines changed: 141 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,7 @@ function computeRuv(V,S,f,pseudoInverseMat,Ruvs,explookup,termorder,vars_reverse
10361036
ev1 = gen_exp_vec(n+1,n*d-n,termorder)
10371037
ev2 = gen_exp_vec(n+1,n*d-n+d-length(S),termorder)
10381038
ev3 = gen_exp_vec(n+1,n*d-n-length(S)+1,termorder)
1039+
temp = Vector{Int64}(undef, n+1)
10391040
MS2 = matrix_space(R, length(ev2),1)
10401041
result = Vector{typeof(MS1())}(undef, n+2)
10411042
for i in 1:n+2
@@ -1064,15 +1065,15 @@ function computeRuv(V,S,f,pseudoInverseMat,Ruvs,explookup,termorder,vars_reverse
10641065
for k in 1:length(ev3)
10651066
for m in 1:(n+1)
10661067
if m == n+1-j+1
1067-
ev3[k][m] = ev3[k][m] + Stilda[m] - 1
1068+
temp[m] = ev3[k][m] + Stilda[m] - 1
10681069
else
1069-
ev3[k][m] = ev3[k][m] + Stilda[m]
1070+
temp[m] = ev3[k][m] + Stilda[m]
10701071
end
10711072
end
10721073
#print("ev1[l]: $((ev1[l],typeof(ev1[l])));")
10731074
#print("ev3[k]: $((ev3[k],typeof(ev3[k])));")
10741075
#println(" $(ev1[l] == ev3[k])")
1075-
l = get(explookup,ev3[k],0)
1076+
l = get(explookup,temp,0)
10761077
#result[j+1][l,i] = gJS[Int((j-1)*(length(gJS)/(n+1))+1):Int(j*(length(gJS)/(n+1))),:][k]
10771078
#result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[Int((j-1)*(length(gJS)/(n+1))+1):Int(j*(length(gJS)/(n+1))),:][k]
10781079
if vars_reversed == true
@@ -1083,13 +1084,148 @@ function computeRuv(V,S,f,pseudoInverseMat,Ruvs,explookup,termorder,vars_reverse
10831084
result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[Int((n+1-j)*(length(gJS)/(n+1))+1)+k-1,1]
10841085
end
10851086
#println("$(result[j+1][l,i]) in $(j+1) && $(result[1][l,i]) in $(1)")
1087+
end
1088+
end
1089+
end
1090+
get!(Ruvs, V, result)
1091+
return result
1092+
end
1093+
1094+
function computeRuvS012(V,S,f,pseudoInverseMat,Ruvs,explookup,termorder,vars_reversed)
1095+
n = nvars(parent(f)) - 1
1096+
d = total_degree(f)
1097+
R = coefficient_ring(parent(f))
1098+
MS1 = matrix_space(R, binomial(n*d,n*d-n), binomial(n*d,n*d-n))
1099+
if haskey(Ruvs, V)
1100+
return get(Ruvs, V, 0)
1101+
else
1102+
println("New key: $V")
1103+
end
1104+
ev1 = gen_exp_vec(n+1,n*d-n,termorder)
1105+
ev2 = gen_exp_vec(n+1,n*d-n+d-length(S),termorder)
1106+
ev3 = gen_exp_vec(n+1,n*d-n-length(S)+1,termorder)
1107+
temp = Vector{Int64}(undef, n+1)
1108+
MS2 = matrix_space(R, length(ev2),1)
1109+
result = Vector{typeof(MS1())}(undef, n+2)
1110+
for i in 1:n+2
1111+
result[i] = MS1(0)
1112+
end
1113+
Stilda = zeros(Int, n+1)
1114+
for i in 1:3
1115+
Stilda[n+1-i] = 1
1116+
end
1117+
distances = Vector{Int64}(undef, n+1)
1118+
for i in 1:(n+1)
1119+
if Stilda[i] == 1
1120+
distances[i] = binomial(d*n-n-2,n)
1121+
else
1122+
distances[i] = binomial(d*n-n-3,n)
1123+
end
1124+
end
1125+
distance = 0
1126+
for i in 1:length(ev1)
1127+
mon = Vector{Int64}(undef, n+1)
1128+
for m in 1:(n+1)
1129+
mon[m] = ev1[i][m] + V[m] - Stilda[m]
1130+
end
1131+
gVec = MS2()
1132+
for j in 1:length(ev2)
1133+
if ev2[j] == mon
1134+
gVec[j] = R(1)
1135+
else
1136+
gVec[j] = R(0)
1137+
end
1138+
end
1139+
gJS = pseudoInverseMat*gVec
1140+
#println("After LingAlg problem: $gJS")
1141+
for j in 1:(n+1)
1142+
distance = 0
1143+
for k in 1:length(ev3)
10861144
for m in 1:(n+1)
10871145
if m == n+1-j+1
1088-
ev3[k][m] = ev3[k][m] - Stilda[m] + 1
1146+
temp[m] = ev3[k][m] + Stilda[m] - 1
10891147
else
1090-
ev3[k][m] = ev3[k][m] - Stilda[m]
1148+
temp[m] = ev3[k][m] + Stilda[m]
10911149
end
10921150
end
1151+
#print("ev1[l]: $((ev1[l],typeof(ev1[l])));")
1152+
#print("ev3[k]: $((ev3[k],typeof(ev3[k])));")
1153+
#println(" $(ev1[l] == ev3[k])")
1154+
l = get(explookup,temp,0)
1155+
#result[j+1][l,i] = gJS[Int((j-1)*(length(gJS)/(n+1))+1):Int(j*(length(gJS)/(n+1))),:][k]
1156+
#result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[Int((j-1)*(length(gJS)/(n+1))+1):Int(j*(length(gJS)/(n+1))),:][k]
1157+
result[j+1][l,i] = result[j+1][l,i] + gJS[distance+k-1,1]
1158+
if Stilda[n+1-j+1] == 1
1159+
result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[distance+k-1,1]
1160+
else
1161+
result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[distance+k-1,1] + gJS[distance+k-1,1]
1162+
end
1163+
#println("$(result[j+1][l,i]) in $(j+1) && $(result[1][l,i]) in $(1)")
1164+
end
1165+
end
1166+
distance = distance + distances[n+1-j+1]
1167+
end
1168+
get!(Ruvs, V, result)
1169+
return result
1170+
end
1171+
1172+
function computeRuvNoSTilda(V,S,f,pseudoInverseMat,Ruvs,explookup,termorder,vars_reversed)
1173+
n = nvars(parent(f)) - 1
1174+
d = total_degree(f)
1175+
R = coefficient_ring(parent(f))
1176+
MS1 = matrix_space(R, binomial(n*d,n*d-n), binomial(n*d,n*d-n))
1177+
if haskey(Ruvs, V)
1178+
return get(Ruvs, V, 0)
1179+
else
1180+
println("New key: $V")
1181+
end
1182+
ev1 = gen_exp_vec(n+1,n*d-n,termorder)
1183+
ev2 = gen_exp_vec(n+1,n*d-n+d-length(S),termorder)
1184+
ev3 = gen_exp_vec(n+1,n*d-n-length(S)+1,termorder)
1185+
temp = Vector{Int64}(undef, n+1)
1186+
MS2 = matrix_space(R, length(ev2),1)
1187+
result = Vector{typeof(MS1())}(undef, n+2)
1188+
for i in 1:n+2
1189+
result[i] = MS1(0)
1190+
end
1191+
for i in 1:length(ev1)
1192+
mon = Vector{Int64}(undef, n+1)
1193+
for m in 1:(n+1)
1194+
mon[m] = ev1[i][m] + V[m] - 1
1195+
end
1196+
gVec = MS2()
1197+
for j in 1:length(ev2)
1198+
if ev2[j] == mon
1199+
gVec[j] = R(1)
1200+
else
1201+
gVec[j] = R(0)
1202+
end
1203+
end
1204+
gJS = pseudoInverseMat*gVec
1205+
#println("After LingAlg problem: $gJS")
1206+
for j in 1:(n+1)
1207+
for k in 1:length(ev3)
1208+
for m in 1:(n+1)
1209+
if m == n+1-j+1
1210+
temp[m] = ev3[k][m]
1211+
else
1212+
temp[m] = ev3[k][m] + 1
1213+
end
1214+
end
1215+
#print("ev1[l]: $((ev1[l],typeof(ev1[l])));")
1216+
#print("ev3[k]: $((ev3[k],typeof(ev3[k])));")
1217+
#println(" $(ev1[l] == ev3[k])")
1218+
l = get(explookup,temp,0)
1219+
#result[j+1][l,i] = gJS[Int((j-1)*(length(gJS)/(n+1))+1):Int(j*(length(gJS)/(n+1))),:][k]
1220+
#result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[Int((j-1)*(length(gJS)/(n+1))+1):Int(j*(length(gJS)/(n+1))),:][k]
1221+
if vars_reversed == true
1222+
result[j+1][l,i] = gJS[Int((j-1)*(length(gJS)/(n+1))+1)+k-1,1]
1223+
result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[Int((j-1)*(length(gJS)/(n+1))+1)+k-1,1]
1224+
else
1225+
result[j+1][l,i] = gJS[Int((n+1-j)*(length(gJS)/(n+1))+1)+k-1,1]
1226+
result[1][l,i] = result[1][l,i] + (ev3[k][n+1-j+1])*gJS[Int((n+1-j)*(length(gJS)/(n+1))+1)+k-1,1]
1227+
end
1228+
#println("$(result[j+1][l,i]) in $(j+1) && $(result[1][l,i]) in $(1)")
10931229
end
10941230
end
10951231
end

src/ZetaFunction.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -473,11 +473,11 @@ include("Frobenius.jl")
473473
include("FinalReduction.jl")
474474
include("ZetaFunction.jl")
475475
verbose = false
476-
n = 2
476+
n = 4
477477
p = 13
478478
F = GF(p)
479-
R, (x1,x2,x3) = polynomial_ring(F, ["x$i" for i in 0:n])
479+
R, (x1,x2,x3,x4,x5) = polynomial_ring(F, ["x$i" for i in 0:n])
480480
481-
f = 12*x1^3 + 12*x1*x3^2 + x2^2*x3 + 12*x3^3
481+
f = x1^3 + x2^3 + x3^3 + x4^3 + x5^3
482482
@time DeRham.zeta_function(f,algorithm=:naive,fastevaluation=true)
483483
=#

0 commit comments

Comments
 (0)