@@ -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
0 commit comments