Annotation of OpenXM/src/asir-contrib/testing/noro/grcrt.rr, Revision 1.1
1.1 ! noro 1: module noro_grcrt$
! 2:
! 3: localf f4_chr, gr_chr_d, f4_chr_d, store_history, read_history, store_bv,
! 4: store_bvn, store_bvn3, nd_f4_p2, nd_gr_recompute_trace_p,
! 5: nd_gr_gentrace_p, comp_by_ht, intdpltoratdpl2, intdptoratdp,
! 6: dp_mulmod, dp_chrem2, monic_gb, dp_monic_mod,
! 7: calcb, sp_sqrt, init_pprocs, nd_gbcheck, gbcheck_p, elimination$
! 8: localf iso_eq_mod, iso_eq_gentrace, iso_eq_mod, elim_top,
! 9: iso_eq_d2, iso_c1eq_mod, iso_c1eq_d2, iso_eq_gentrace2,
! 10: iso_eq_mod2, iso_eq_d2new, iso_sat_gentrace, iso_sat_mod, iso_sat_d2$
! 11:
! 12: static GB_History,GB_B,GB_V,GB_N,GB_H$
! 13: static GB_N1,GB_N2,GB_N3$
! 14: static GB_NZ$
! 15:
! 16: def f4_chr(B,V,O)
! 17: {
! 18: dp_ord(O);
! 19: Proc = getopt(proc);
! 20: NZ = getopt(nz);
! 21: Prev = getopt(prev);
! 22: Homo = getopt(homo);
! 23: Elim = getopt(elim);
! 24: Weight = getopt(weight);
! 25: if ( type(Prev) == -1 ) Prev = 0;
! 26: if ( type(Homo) == -1 ) Homo = 0;
! 27: if ( type(Elim) == -1 ) Elim = -1;
! 28: if ( type(Weight) == -1 ) Weight = 0;
! 29: OldWeight = dp_set_weight();
! 30: dp_set_weight(Weight);
! 31: if ( type(NZ) == -1 )
! 32: NZ = nd_f4(B,V,lprime(0),O|gentrace=1);
! 33: if ( type(Proc) != -1 ) {
! 34: G = f4_chr_d(B,V,O,Proc,NZ,Prev,Homo,Elim,Weight);
! 35: dp_set_weight(OldWeight);
! 36: return G;
! 37: }
! 38: B = map(ptozp,B);
! 39: Remain = 1; /* XXX */
! 40: for ( I = 0, N = 0, Mod = 1; Remain; I++ ) {
! 41: P = lprime(I);
! 42: GM = nd_f4(B,V,P,O|dp=1,trace=NZ);
! 43: if ( !GM ) continue;
! 44: if ( Elim >= 0 ) GM = elimination(GM,Elim);
! 45: if ( !N ) {
! 46: Remain = N = length(GM);
! 47: Stat = vector(N);
! 48: G = vector(N);
! 49: }
! 50: L = monic_gb(GM,V,O,P); GM = L[0];
! 51: T0 = time();
! 52: dp_chrem2(G,Mod,GM,P,Stat);
! 53: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 54: Mod *= P;
! 55: if ( !(I%3) ) {
! 56: T0 = time();
! 57: New = intdpltoratdpl2(G,Mod,Stat);
! 58: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 59: Remain -= New;
! 60: }
! 61: }
! 62: print(["CRT",CRTime,"IR",IRTime,"#P",I]);
! 63: G = vtol(map(dp_dtop,G,V));
! 64: dp_set_weight(OldWeight);
! 65: return G;
! 66: }
! 67:
! 68: /* Prev = [G,Stat,I,Mod] */
! 69:
! 70: def f4_chr_d(B,V,O,Proc,NZ,Prev,Homo,Elim,Weight)
! 71: {
! 72: map(ox_reset,Proc);
! 73: B = map(ptozp,B);
! 74: NProc = length(Proc);
! 75: CRTime = 0; IRTime = 0;
! 76: /* gentrace */
! 77: map(ox_rpc,Proc,"dp_set_weight",Weight);
! 78: map(ox_pop_local,Proc);
! 79: map(ox_rpc,Proc,"noro_grcrt.store_bvn",B,V,NZ,Homo);
! 80: map(ox_pop_local,Proc);
! 81: if ( Prev ) {
! 82: G = Prev[0];
! 83: N = length(N);
! 84: Stat = Prev[1];
! 85: for ( J = 0, Remain = 0; J < N; J++ )
! 86: if ( Stat[J] != 2 ) Remain++;
! 87: I = Prev[2];
! 88: Mod = Prev[3];
! 89: } else {
! 90: I = 0;
! 91: N = 0;
! 92: Remain = 1; /* dummy */
! 93: Mod = 1;
! 94: }
! 95: for ( T = Proc; T != []; T = cdr(T), I++ )
! 96: ox_rpc(car(T),"noro_grcrt.nd_f4_p2",lprime(I),O);
! 97: while ( Remain ) {
! 98: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 99: print(["from",car(T)],2);
! 100: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 101: if ( Elim >= 0 ) GM = elimination(GM,Elim);
! 102: print(" done");
! 103: ox_rpc(car(T),"noro_grcrt.nd_f4_p2",lprime(I),O);
! 104: if ( GM ) {
! 105: L = monic_gb(GM,V,O,P); GM = L[0];
! 106: if ( !N ) {
! 107: Remain = N = length(GM);
! 108: Stat = vector(N);
! 109: G = vector(N);
! 110: }
! 111: T0 = time();
! 112: Fail = dp_chrem2(G,Mod,GM,P,Stat);
! 113: Remain += Fail;
! 114: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 115: Mod *= P;
! 116: }
! 117: }
! 118: T0 = time();
! 119: New = intdpltoratdpl2(G,Mod,Stat);
! 120: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 121: Remain -= New;
! 122: print((N-Remain)/N*100.0,0); print("% done");
! 123: }
! 124: map(ox_reset,Proc);
! 125: print(["Template",TTime,"CRT",CRTime,"IR",IRTime,"#P",I]);
! 126: return vtol(map(dp_dtop,G,V));
! 127: }
! 128:
! 129: def store_history(D)
! 130: {
! 131: GB_History=D;
! 132: return 1;
! 133: }
! 134:
! 135: def read_history(Dname)
! 136: {
! 137: GB_History=bload(Dname);
! 138: return 1;
! 139: }
! 140:
! 141:
! 142: def store_bvn(B,V,N,H)
! 143: {
! 144: GB_B=B;
! 145: GB_V=V;
! 146: if ( type(N) == 7 )
! 147: GB_N = bload(N);
! 148: else
! 149: GB_N=N;
! 150: GB_H=H;
! 151: }
! 152:
! 153: def store_bvn3(B,V,N1,N2,N3)
! 154: {
! 155: GB_B=B;
! 156: GB_V=V;
! 157: GB_N1 = N1;
! 158: GB_N2 = N2;
! 159: GB_N3 = N3;
! 160: }
! 161:
! 162:
! 163: def nd_f4_p2(P,O)
! 164: {
! 165: if ( GB_H )
! 166: return [nd_f4(GB_B,GB_V,P,O|dp=1,trace=GB_N,nora=1),P];
! 167: else
! 168: return [nd_f4(GB_B,GB_V,P,O|dp=1,trace=GB_N),P];
! 169: }
! 170:
! 171:
! 172: def nd_gr_recompute_trace_p(B,V,P,O)
! 173: {
! 174: T0 = time();
! 175: R = nd_gr_recompute_trace(B,V,P,O,GB_History);
! 176: T1 = time();
! 177: Time = (T1[0]-T0[0])+(T1[1]-T0[1]);
! 178: return [nd_gr_recompute_trace(B,V,P,O,GB_History),P,Time];
! 179: }
! 180:
! 181: def nd_gr_gentrace_p(B,V,P,O)
! 182: {
! 183: return [nd_gr(B,V,P,O|gentrace=1),P];
! 184: }
! 185:
! 186: def comp_by_ht(A,B)
! 187: {
! 188: HA = dp_ht(A); HB = dp_ht(B);
! 189: if ( HA > HB )
! 190: return 1;
! 191: else if ( HA < HB )
! 192: return -1;
! 193: else
! 194: return 0;
! 195: }
! 196:
! 197: def intdpltoratdpl2(G,Mod,Stat)
! 198: {
! 199: N = size(G)[0];
! 200: M = calcb(Mod);
! 201: New = 0;
! 202: Den = 1;
! 203: for ( I = 0; I < N; I++ ) {
! 204: if ( Stat[I] == 2 ) continue;
! 205: if ( !I || dp_td(G[I]) != dp_td(G[I-1]) )
! 206: Den = 1;
! 207: T = intdptoratdp(G[I]*Den,Mod,M);
! 208: if ( T ) {
! 209: print([I],2);
! 210: T = dp_ptozp(T);
! 211: Den = ilcm(Den,dp_hc(T));
! 212: G[I] = T; Stat[I] = 2; New++;
! 213: } else {
! 214: print("("+rtostr(I)+")",2);
! 215: }
! 216: }
! 217: print("");
! 218: return New;
! 219: }
! 220:
! 221: def intdptoratdp(F,Mod,M)
! 222: {
! 223: for ( T = F, N = 0; T; T = dp_rest(T), N++ );
! 224: C = newvect(N);
! 225: for ( I = 0, T = F; I < N; T = dp_rest(T), I++ ) {
! 226: L = inttorat(dp_hc(T)%Mod,Mod,M);
! 227: if ( !L )
! 228: return 0;
! 229: else
! 230: C[I] = (L[0]/L[1])*dp_ht(T);
! 231: }
! 232: for ( R = 0, I = N-1; I >= 0; I-- )
! 233: R += C[I];
! 234: return R;
! 235: }
! 236:
! 237: def dp_mulmod(C,F,M)
! 238: {
! 239: L = [];
! 240: for ( T = F; T; T = dp_rest(T) ) {
! 241: A = (dp_hc(T)*C)%M;
! 242: L = cons(A*dp_ht(T),L);
! 243: }
! 244: for ( R = 0; L != []; L = cdr(L) )
! 245: R += car(L);
! 246: return R;
! 247: }
! 248:
! 249: def dp_chrem2(G,Mod,GM,P,Stat)
! 250: {
! 251: N = size(G)[0];
! 252: setmod(P);
! 253: M1 = ptomp(inv(Mod,P),P);
! 254: Fail = 0;
! 255: for ( I = 0; I < N; I++ ) {
! 256: if ( Stat[I] == 2 ) {
! 257: T = dp_mod(G[I],P,[]); T = dp_rat(T/dp_hc(T));
! 258: if ( GM[I] != T ) {
! 259: C = inv(dp_hc(G[I]),Mod);
! 260: G[I] = dp_mulmod(C,G[I],Mod);
! 261: if ( dp_hc(G[I]) != 1 )
! 262: error("");
! 263: Stat[I] = 0;
! 264: Fail++;
! 265: } else continue;
! 266: }
! 267: T = (dp_mod(GM[I],P,[])-dp_mod(G[I],P,[]))*M1;
! 268: G[I] = G[I]+dp_rat(T)*Mod;
! 269: Stat[I] = 1;
! 270: #if 0
! 271: print("|"+rtostr(I),2);
! 272: #endif
! 273: }
! 274: return Fail;
! 275: #if 0
! 276: print("");
! 277: #endif
! 278: }
! 279:
! 280: def monic_gb(D,V,O,P)
! 281: {
! 282: dp_ord(O); setmod(P);
! 283: /* D = map(dp_ptod,G,V); */
! 284: D = map(dp_monic_mod,D,P);
! 285: /* D = vtol(qsort(newvect(length(D),D),comp_by_ht)); */
! 286: return [D,map(dp_ht,D)];
! 287: }
! 288:
! 289: def dp_monic_mod(F,P)
! 290: {
! 291: FP = dp_mod(F,P,[]);
! 292: return dp_rat(FP/dp_hc(FP));
! 293: }
! 294:
! 295: def calcb(M) {
! 296: N = 2*M;
! 297: T = sp_sqrt(N);
! 298: if ( T^2 <= N && N < (T+1)^2 )
! 299: return idiv(T,2);
! 300: else
! 301: error("afo");
! 302: }
! 303:
! 304: def sp_sqrt(A) {
! 305: for ( J = 0, T = A; T >= 2^27; J++ ) {
! 306: T = idiv(T,2^27)+1;
! 307: }
! 308: for ( I = 0; T >= 2; I++ ) {
! 309: S = idiv(T,2);
! 310: if ( T = S+S )
! 311: T = S;
! 312: else
! 313: T = S+1;
! 314: }
! 315: X = (2^27)^idiv(J,2)*2^idiv(I,2);
! 316: while ( 1 ) {
! 317: if ( (Y=X^2) < A )
! 318: X += X;
! 319: else if ( Y == A )
! 320: return X;
! 321: else
! 322: break;
! 323: }
! 324: while ( 1 )
! 325: if ( (Y = X^2) <= A )
! 326: return X;
! 327: else
! 328: X = idiv(A + Y,2*X);
! 329: }
! 330:
! 331: def init_pprocs(L)
! 332: {
! 333: R = [];
! 334: if ( type(NoX=getopt(nox)) == -1 ) NoX = 0;
! 335: for ( T = L; T != []; T = cdr(T) ) {
! 336: Host = car(T)[0]; N = car(T)[1];
! 337: if ( !Host ) {
! 338: for ( I = 0; I < N; I++ ) {
! 339: P = NoX ? ox_launch_nox() : ox_launch();
! 340: R = cons(P,R);
! 341: }
! 342: } else {
! 343: Lib = get_rootdir();
! 344: Client = "ox_asir";
! 345: for ( I = 0; I < N; I++ ) {
! 346: P = NoX ? ox_launch_nox(Host,Lib,Client)
! 347: : ox_launch(Host,Lib,Client);
! 348: R = cons(P,R);
! 349: }
! 350: }
! 351: }
! 352: return reverse(R);
! 353: }
! 354:
! 355: def nd_gbcheck(G,V,P,O)
! 356: {
! 357: Proc = getopt(proc);
! 358: if ( type(Proc) == -1 ) Proc = 0;
! 359: F4 = getopt(f4);
! 360: if ( type(F4) == -1 ) F4 = 0;
! 361: /* XXX */
! 362: S = getopt(splist);
! 363: if ( type(S) == -1 ) {
! 364: if ( type(G) == 7 )
! 365: S = nd_gr(bload(G),V,lprime(0),O|splist=1);
! 366: else
! 367: S = nd_gr(G,V,lprime(0),O|splist=1);
! 368: }
! 369: if ( Proc ) {
! 370: N = length(Proc);
! 371: L = vector(N);
! 372: for ( I = 0; I < N; I++ ) L[I] = [];
! 373: for ( I = 0, T = S; T != []; T = cdr(T), I = (I+1)%N )
! 374: L[I] = cons(car(T),L[I]);
! 375: for ( I = 0; I < N; I++ )
! 376: ox_rpc(Proc[I],"noro_grcrt.gbcheck_p",G,V,P,O,reverse(L[I]),F4);
! 377: for ( I = 0; I < N; I++ )
! 378: if ( !ox_pop_local(Proc[I]) ) return 0;
! 379: return 1;
! 380: } else {
! 381: if ( F4 )
! 382: R = nd_f4(G,V,P,O|check_splist=S);
! 383: else
! 384: R = nd_gr(G,V,P,O|check_splist=S);
! 385: return R;
! 386: }
! 387: }
! 388:
! 389: def gbcheck_p(G,V,P,O,S,F4)
! 390: {
! 391: if ( type(G) == 7 )
! 392: G = bload(G);
! 393: if ( F4 )
! 394: return nd_f4(G,V,P,O|check_splist=S);
! 395: else
! 396: return nd_gr(G,V,P,O|check_splist=S);
! 397: }
! 398:
! 399: def elimination(L,Elim)
! 400: {
! 401: if ( type(Elim) <= 1 ) {
! 402: for ( R = []; L != []; L = cdr(L) ) {
! 403: H = dp_etov(dp_ht(car(L)));
! 404: for ( I = 0; I <= Pos && !H[I]; I++ );
! 405: if ( I > Pos ) R = cons(car(L),R);
! 406: }
! 407: } else {
! 408: for ( R = []; L != []; L = cdr(L) )
! 409: if ( dp_ht(car(L)) <= Elim ) R = cons(car(L),R);
! 410: }
! 411: return reverse(R);
! 412: }
! 413:
! 414: #if 0
! 415: def iso_eq_mod(Mod,UseNZ)
! 416: {
! 417: B = GB_B; V = GB_V;
! 418:
! 419: /* V = [c1,bb,aa,b,a], W = [1,3,2,3,1] */
! 420: W = [1,3,2,3,1];
! 421: dp_set_weight(W);
! 422: G1 = nd_f4(B,V,Mod,[[0,1],[0,4]]);
! 423: V1 = cdr(V);
! 424: G1 = noro_pd.elimination(G1,V1);
! 425: D = res(x,x^3+a*x+b,3*x^2+a);
! 426: G2 = nd_f4(cons(t*D-1,G1),cons(t,V1),Mod,[[0,1],[0,4]]);
! 427: G2 = noro_pd.elimination(G2,V1);
! 428: W1 = cdr(W);
! 429: dp_set_weight(W1);
! 430: if ( UseNZ )
! 431: G3 = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1,trace=GB_NZ);
! 432: else {
! 433: GB_NZ = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1,gentrace=1);
! 434: G3 = GB_NZ[0];
! 435: }
! 436: dp_ord([[0,1],[0,3]]);
! 437: #if 1
! 438: for ( T = []; G3 != []; G3 = cdr(G3) )
! 439: if ( dp_ht(car(G3)) < <<2,0,0,0>> ) T = cons(car(G3),T);
! 440: return [reverse(T),Mod];
! 441: #endif
! 442: return [G3,Mod];
! 443: }
! 444: #else
! 445:
! 446: def iso_eq_gentrace(B,V,Mod)
! 447: {
! 448: W = [1,3,2,3,1];
! 449:
! 450: dp_set_weight(W);
! 451: N1 = nd_f4(B,V,Mod,[[0,1],[0,4]]|dp=1,nora=1,gentrace=1);
! 452: G1 = N1[0];
! 453: G1 = elim_top(G1,<<1,0,0,0,0>>);
! 454: V1 = cdr(V);
! 455: G1 = map(dp_dtop,G1,V);
! 456:
! 457: D = res(x,x^3+a*x+b,3*x^2+a);
! 458: N2 = nd_f4(cons(t*D-1,G1),cons(t,V1),Mod,[[0,1],[0,4]]|dp=1,nora=1,gentrace=1);
! 459: G2 = N2[0];
! 460: G2 = elim_top(G2,<<1,0,0,0,0>>);
! 461: G2 = map(dp_dtop,G2,cons(t,V1));
! 462:
! 463: W1 = cdr(W);
! 464: dp_set_weight(W1);
! 465: N3 = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1,gentrace=1);
! 466: return [N1,N2,N3];
! 467: }
! 468:
! 469: def iso_eq_mod(Mod)
! 470: {
! 471: V = [c1,bb,aa,b,a];
! 472: W = [1,3,2,3,1];
! 473:
! 474: dp_set_weight(W);
! 475: if ( GB_N1 )
! 476: G1 = nd_f4(GB_B,V,Mod,[[0,1],[0,4]]|dp=1,nora=1,trace=GB_N1);
! 477: else
! 478: G1 = nd_f4(GB_B,V,Mod,[[0,1],[0,4]]|dp=1,nora=1);
! 479: G1 = elim_top(G1,<<1,0,0,0,0>>);
! 480: V1 = cdr(V);
! 481: G1 = map(dp_dtop,G1,V);
! 482:
! 483: D = res(x,x^3+a*x+b,3*x^2+a);
! 484: if ( GB_N2 )
! 485: G2 = nd_f4(cons(t*D-1,G1),cons(t,V1),Mod,[[0,1],[0,4]]|dp=1,nora=1,trace=GB_N2);
! 486: else
! 487: G2 = nd_f4(cons(t*D-1,G1),cons(t,V1),Mod,[[0,1],[0,4]]|dp=1,nora=1);
! 488: G2 = elim_top(G2,<<1,0,0,0,0>>);
! 489: G2 = map(dp_dtop,G2,cons(t,V1));
! 490:
! 491: W1 = cdr(W);
! 492: dp_set_weight(W1);
! 493: if ( GB_N3 )
! 494: G3 = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1,trace=GB_N3);
! 495: else
! 496: G3 = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1);
! 497: G3 = elim_top(G3,<<2,0,0,0>>);
! 498: return [G3,Mod];
! 499: }
! 500:
! 501: def elim_top(G,H)
! 502: {
! 503: N = length(dp_etov(dp_ht(G[0])));
! 504: Ord = dp_ord();
! 505: dp_ord([[0,1],[0,N-1]]);
! 506: for ( T = []; G != []; G = cdr(G) )
! 507: if ( dp_ht(car(G)) < H ) T = cons(car(G),T);
! 508: dp_ord(Ord);
! 509: return reverse(T);
! 510: }
! 511: #endif
! 512:
! 513: def iso_eq_d2(L)
! 514: {
! 515: Proc = getopt(proc);
! 516: if ( type(Proc) == -1 ) {
! 517: Proc = [];
! 518: for ( I = 0; I < 10; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 519: } else if ( type(Proc) == 1 ) {
! 520: M = Proc;
! 521: Proc = [];
! 522: for ( I = 0; I < M; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 523: }
! 524: F = generateF(L);
! 525: A = polysys(F);
! 526: A = simpsys(A);
! 527: C = A[0]; B = A[1]; V = A[2]; W = A[3];
! 528:
! 529: map(ox_reset,Proc);
! 530: B = map(ptozp,B);
! 531: NProc = length(Proc);
! 532: CRTime = 0; IRTime = 0;
! 533: /* gentrace */
! 534: L = iso_eq_gentrace(B,V,lprime(0));
! 535: map(ox_rpc,Proc,"noro_grcrt.store_bvn3",B,V,L[0],L[1],L[2]);
! 536: map(ox_pop_local,Proc);
! 537: I = 0;
! 538: N = 0;
! 539: Remain = 1; /* dummy */
! 540: Mod = 1;
! 541: O = [[0,1],[0,3]];
! 542: dp_ord(O);
! 543: dp_set_weight(cdr(W));
! 544: for ( T = Proc; T != []; T = cdr(T), I++ )
! 545: ox_rpc(car(T),"noro_grcrt.iso_eq_mod",lprime(I));
! 546: V1 = cdr(V);
! 547: while ( Remain ) {
! 548: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 549: print(["from",car(T)],2);
! 550: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 551: print(" done");
! 552: ox_rpc(car(T),"noro_grcrt.iso_eq_mod",lprime(I));
! 553: if ( GM ) {
! 554: L = monic_gb(GM,V1,O,P); GM = L[0];
! 555: if ( !N ) {
! 556: Remain = N = length(GM);
! 557: Stat = vector(N);
! 558: G = vector(N);
! 559: }
! 560: T0 = time();
! 561: Fail = dp_chrem2(G,Mod,GM,P,Stat);
! 562: Remain += Fail;
! 563: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 564: Mod *= P;
! 565: }
! 566: }
! 567: T0 = time();
! 568: New = intdpltoratdpl2(G,Mod,Stat);
! 569: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 570: Remain -= New;
! 571: print((N-Remain)/N*100.0,0); print("% done");
! 572: }
! 573: map(ox_reset,Proc);
! 574: print(["Template",TTime,"CRT",CRTime,"IR",IRTime,"#P",I]);
! 575: return [vtol(map(dp_dtop,G,V1)),Proc];
! 576: }
! 577:
! 578: def iso_c1eq_mod(Mod)
! 579: {
! 580: V = [c1,bb,aa,b,a];
! 581: W = [1,3,2,3,1];
! 582:
! 583: dp_set_weight(W);
! 584: if ( GB_N1 )
! 585: G1 = nd_f4(GB_B,V,Mod,[[0,1],[0,4]]|dp=1,nora=1,trace=GB_N1);
! 586: else
! 587: G1 = nd_f4(GB_B,V,Mod,[[0,1],[0,4]]|dp=1,nora=1);
! 588: G1 = elim_top(G1,<<2,0,0,0,0>>);
! 589: return [G1,Mod];
! 590: }
! 591:
! 592: def iso_c1eq_d2(L)
! 593: {
! 594: Proc = getopt(proc);
! 595: if ( type(Proc) == -1 ) {
! 596: Proc = [];
! 597: for ( I = 0; I < 10; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 598: } else if ( type(Proc) == 1 ) {
! 599: M = Proc;
! 600: Proc = [];
! 601: for ( I = 0; I < M; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 602: }
! 603: F = generateF(L);
! 604: A = polysys(F);
! 605: A = simpsys(A);
! 606: C = A[0]; B = A[1]; V = A[2]; W = A[3];
! 607:
! 608: map(ox_reset,Proc);
! 609: B = map(ptozp,B);
! 610: NProc = length(Proc);
! 611: CRTime = 0; IRTime = 0;
! 612: /* gentrace */
! 613: W = [1,3,2,3,1];
! 614: dp_set_weight(W);
! 615: N1 = nd_f4(B,V,lprime(0),[[0,1],[0,4]]|dp=1,nora=1,gentrace=1);
! 616: map(ox_rpc,Proc,"noro_grcrt.store_bvn3",B,V,N1,0,0);
! 617: map(ox_pop_local,Proc);
! 618: I = 0;
! 619: N = 0;
! 620: Remain = 1; /* dummy */
! 621: Mod = 1;
! 622: O = [[0,1],[0,4]];
! 623: dp_ord(O);
! 624: for ( T = Proc; T != []; T = cdr(T), I++ )
! 625: ox_rpc(car(T),"noro_grcrt.iso_c1eq_mod",lprime(I));
! 626: V1 = cdr(V);
! 627: while ( Remain ) {
! 628: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 629: print(["from",car(T)],2);
! 630: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 631: print(" done");
! 632: ox_rpc(car(T),"noro_grcrt.iso_c1eq_mod",lprime(I));
! 633: if ( GM ) {
! 634: L = monic_gb(GM,V1,O,P); GM = L[0];
! 635: if ( !N ) {
! 636: Remain = N = length(GM);
! 637: Stat = vector(N);
! 638: G = vector(N);
! 639: }
! 640: T0 = time();
! 641: Fail = dp_chrem2(G,Mod,GM,P,Stat);
! 642: Remain += Fail;
! 643: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 644: Mod *= P;
! 645: }
! 646: }
! 647: T0 = time();
! 648: New = intdpltoratdpl2(G,Mod,Stat);
! 649: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 650: Remain -= New;
! 651: print((N-Remain)/N*100.0,0); print("% done");
! 652: }
! 653: map(ox_reset,Proc);
! 654: print(["Template",TTime,"CRT",CRTime,"IR",IRTime,"#P",I]);
! 655: return [vtol(map(dp_dtop,G,V)),Proc];
! 656: }
! 657:
! 658: def iso_eq_gentrace2(B,V,Mod)
! 659: {
! 660: Wt = [1,1,3,2,3,1];
! 661: Vt = cons(t,V);
! 662: dp_set_weight(Wt);
! 663: D = res(x,x^3+a*x+b,3*x^2+a);
! 664: N1 = nd_f4(cons(t*D-1,B),Vt,Mod,[[0,1],[0,5]]|dp=1,nora=1,gentrace=1);
! 665: G1 = N1[0];
! 666: G1 = elim_top(G1,<<1,0,0,0,0,0>>);
! 667: G1 = map(dp_dtop,G1,Vt);
! 668:
! 669: W = cdr(Wt);
! 670: dp_set_weight(W);
! 671: N2 = nd_f4(G1,V,Mod,[[0,1],[0,4]]|dp=1,nora=1,gentrace=1);
! 672: G2 = N2[0];
! 673: G2 = elim_top(G2,<<1,0,0,0,0>>);
! 674: G2 = map(dp_dtop,G2,V);
! 675:
! 676: W1 = cdr(W);
! 677: V1 = cdr(V);
! 678: dp_set_weight(W1);
! 679: N3 = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1,gentrace=1);
! 680: return [N1,N2,N3];
! 681: }
! 682:
! 683: def iso_eq_mod2(Mod)
! 684: {
! 685: V = [c1,bb,aa,b,a];
! 686: Vt = cons(t,V);
! 687: Wt = [1,1,3,2,3,1];
! 688: dp_set_weight(Wt);
! 689: D = res(x,x^3+a*x+b,3*x^2+a);
! 690: if ( GB_N1 )
! 691: G1 = nd_f4(cons(t*D-1,GB_B),Vt,Mod,[[0,1],[0,5]]|dp=1,nora=1,trace=GB_N1);
! 692: else
! 693: G1 = nd_f4(cons(t*D-1,GB_B),Vt,Mod,[[0,1],[0,5]]|dp=1,nora=1);
! 694: G1 = elim_top(G1,<<1,0,0,0,0,0>>);
! 695: G1 = map(dp_dtop,G1,Vt);
! 696:
! 697: W = cdr(Wt);
! 698: dp_set_weight(W);
! 699: if ( GB_N2 )
! 700: G2 = nd_f4(G1,V,Mod,[[0,1],[0,4]]|dp=1,nora=1,trace=GB_N2);
! 701: else
! 702: G2 = nd_f4(G1,V,Mod,[[0,1],[0,4]]|dp=1,nora=1);
! 703: G2 = elim_top(G2,<<1,0,0,0,0>>);
! 704: G2 = map(dp_dtop,G2,V);
! 705:
! 706: W1 = cdr(W);
! 707: V1 = cdr(V);
! 708: dp_set_weight(W1);
! 709: if ( GB_N3 )
! 710: G3 = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1,trace=GB_N3);
! 711: else
! 712: G3 = nd_f4(G2,V1,Mod,[[0,1],[0,3]]|dp=1);
! 713: G3 = elim_top(G3,<<2,0,0,0>>);
! 714: return [G3,Mod];
! 715: }
! 716:
! 717: def iso_eq_d2new(L)
! 718: {
! 719: Proc = getopt(proc);
! 720: if ( type(Proc) == -1 ) {
! 721: Proc = [];
! 722: for ( I = 0; I < 10; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 723: } else if ( type(Proc) == 1 ) {
! 724: M = Proc;
! 725: Proc = [];
! 726: for ( I = 0; I < M; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 727: }
! 728: F = generateF(L);
! 729: A = polysys(F);
! 730: A = simpsys(A);
! 731: C = A[0]; B = A[1]; V = A[2]; W = A[3];
! 732:
! 733: map(ox_reset,Proc);
! 734: B = map(ptozp,B);
! 735: NProc = length(Proc);
! 736: CRTime = 0; IRTime = 0;
! 737: /* gentrace */
! 738: L = iso_eq_gentrace2(B,V,lprime(0));
! 739: map(ox_rpc,Proc,"noro_grcrt.store_bvn3",B,V,L[0],L[1],L[2]);
! 740: map(ox_pop_local,Proc);
! 741: I = 0;
! 742: N = 0;
! 743: Remain = 1; /* dummy */
! 744: Mod = 1;
! 745: O = [[0,1],[0,3]];
! 746: dp_ord(O);
! 747: dp_set_weight(cdr(W));
! 748: for ( T = Proc; T != []; T = cdr(T), I++ )
! 749: ox_rpc(car(T),"noro_grcrt.iso_eq_mod2",lprime(I));
! 750: V1 = cdr(V);
! 751: while ( Remain ) {
! 752: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 753: print(["from",car(T)],2);
! 754: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 755: print(" done");
! 756: ox_rpc(car(T),"noro_grcrt.iso_eq_mod2",lprime(I));
! 757: if ( GM ) {
! 758: L = monic_gb(GM,V1,O,P); GM = L[0];
! 759: if ( !N ) {
! 760: Remain = N = length(GM);
! 761: Stat = vector(N);
! 762: G = vector(N);
! 763: }
! 764: T0 = time();
! 765: Fail = dp_chrem2(G,Mod,GM,P,Stat);
! 766: Remain += Fail;
! 767: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 768: Mod *= P;
! 769: }
! 770: }
! 771: T0 = time();
! 772: New = intdpltoratdpl2(G,Mod,Stat);
! 773: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 774: Remain -= New;
! 775: print((N-Remain)/N*100.0,0); print("% done");
! 776: }
! 777: map(ox_reset,Proc);
! 778: print(["Template",TTime,"CRT",CRTime,"IR",IRTime,"#P",I]);
! 779: return [vtol(map(dp_dtop,G,V1)),Proc];
! 780: }
! 781:
! 782: def iso_sat_gentrace(B,V,Mod)
! 783: {
! 784: Wt = [1,1,3,2,3,1];
! 785: Vt = cons(t,V);
! 786: dp_set_weight(Wt);
! 787: D = res(x,x^3+a*x+b,3*x^2+a);
! 788: N1 = nd_f4(cons(t*D-1,B),Vt,Mod,[[0,1],[0,5]]|dp=1,nora=1,gentrace=1);
! 789: return N1;
! 790: }
! 791:
! 792: def iso_sat_mod(Mod)
! 793: {
! 794: V = [c1,bb,aa,b,a];
! 795: Vt = cons(t,V);
! 796: Wt = [1,1,3,2,3,1];
! 797: dp_set_weight(Wt);
! 798: D = res(x,x^3+a*x+b,3*x^2+a);
! 799: if ( GB_N1 )
! 800: G1 = nd_f4(cons(t*D-1,GB_B),Vt,Mod,[[0,1],[0,5]]|dp=1,nora=1,trace=GB_N1);
! 801: else
! 802: G1 = nd_f4(cons(t*D-1,GB_B),Vt,Mod,[[0,1],[0,5]]|dp=1,nora=1);
! 803: G1 = elim_top(G1,<<1,0,0,0,0,0>>);
! 804: return [G1,Mod];
! 805: }
! 806:
! 807: def iso_sat_d2(L)
! 808: {
! 809: Proc = getopt(proc);
! 810: Sys = getopt(sys);
! 811: if ( type(Proc) == -1 ) {
! 812: Proc = [];
! 813: for ( I = 0; I < 10; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 814: } else if ( type(Proc) == 1 ) {
! 815: M = Proc;
! 816: Proc = [];
! 817: for ( I = 0; I < M; I++ ) Proc = cons(ox_launch_nox(),Proc);
! 818: }
! 819: if ( type(Sys) == -1 ) {
! 820: F = generateF(L);
! 821: A = polysys(F);
! 822: A = simpsys(A);
! 823: C = A[0]; B = A[1]; V = A[2]; W = A[3];
! 824: } else {
! 825: C = Sys[0]; B = Sys[1]; V = Sys[2]; W = Sys[3];
! 826: }
! 827:
! 828: map(ox_reset,Proc);
! 829: B = map(ptozp,B);
! 830: NProc = length(Proc);
! 831: CRTime = 0; IRTime = 0;
! 832: /* gentrace */
! 833: NZ = iso_sat_gentrace(B,V,lprime(0));
! 834: map(ox_rpc,Proc,"noro_grcrt.store_bvn3",B,V,NZ,0,0);
! 835: map(ox_pop_local,Proc);
! 836: I = 0;
! 837: N = 0;
! 838: Remain = 1; /* dummy */
! 839: Mod = 1;
! 840: Vt = [t,c1,bb,aa,b,a];
! 841: Wt = [1,1,3,2,3,2,1];
! 842: O = [[0,1],[0,5]];
! 843: dp_ord(O);
! 844: dp_set_weight(Wt);
! 845: for ( T = Proc; T != []; T = cdr(T), I++ )
! 846: ox_rpc(car(T),"noro_grcrt.iso_sat_mod",lprime(I));
! 847: while ( Remain ) {
! 848: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 849: print(["from",car(T)],2);
! 850: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 851: print(" done");
! 852: ox_rpc(car(T),"noro_grcrt.iso_sat_mod",lprime(I));
! 853: if ( GM ) {
! 854: L = monic_gb(GM,Vt,O,P); GM = L[0];
! 855: if ( !N ) {
! 856: Remain = N = length(GM);
! 857: Stat = vector(N);
! 858: G = vector(N);
! 859: }
! 860: T0 = time();
! 861: Fail = dp_chrem2(G,Mod,GM,P,Stat);
! 862: Remain += Fail;
! 863: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 864: Mod *= P;
! 865: }
! 866: }
! 867: T0 = time();
! 868: New = intdpltoratdpl2(G,Mod,Stat);
! 869: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 870: Remain -= New;
! 871: print((N-Remain)/N*100.0,0); print("% done");
! 872: }
! 873: map(ox_reset,Proc);
! 874: print(["Template",TTime,"CRT",CRTime,"IR",IRTime,"#P",I]);
! 875: return [vtol(map(dp_dtop,G,Vt)),Proc];
! 876: }
! 877:
! 878: endmodule$
! 879:
! 880: end$
! 881:
! 882: /* old functions */
! 883:
! 884: def gr_chrem(B,V,O)
! 885: {
! 886: Proc = getopt(proc);
! 887: Dname = getopt(dname);
! 888: if ( type(Proc) != -1 ) {
! 889: if ( type(Dname) != -1 )
! 890: return gr_chr_d(B,V,O,Proc,Dname);
! 891: else
! 892: return gr_chrem_d(B,V,O,Proc);
! 893: }
! 894:
! 895: B = map(ptozp,B);
! 896: Mod = 1;
! 897: D = nd_gr(B,V,lprime(0),O|gentrace=1);
! 898: Remain = N = length(D[0]);
! 899: Stat = vector(N);
! 900: G = vector(N);
! 901: for ( I = 1; Remain; I++ ) {
! 902: P = lprime(I);
! 903: GM = nd_gr_recompute_trace(B,V,P,O,D);
! 904: if ( !GM ) continue;
! 905: L = monic_gb(GM,V,O,P); GM = L[0];
! 906: T0 = time();
! 907: dp_chrem2(G,Mod,GM,P,Stat);
! 908: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 909: Mod *= P;
! 910: if ( !(I%3) ) {
! 911: T0 = time();
! 912: New = intdpltoratdpl2(G,Mod,Stat);
! 913: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 914: Remain -= New;
! 915: }
! 916: }
! 917: print(["CRT",CRTime,"IR",IRTime,"#P",I]);
! 918: return vtol(map(dp_dtop,G,V));
! 919: }
! 920:
! 921: /* NZ = [*,*,NZ,BPE] */
! 922:
! 923: def f4_chrem(B,V,O)
! 924: {
! 925: Proc = getopt(proc);
! 926: NZ = getopt(nz);
! 927: Prev = getopt(prev);
! 928: Homo = getopt(homo);
! 929: Elim = getopt(elim);
! 930: Weight = getopt(weight);
! 931: if ( type(NZ) == -1 ) NZ = 0;
! 932: if ( type(Prev) == -1 ) Prev = 0;
! 933: if ( type(Homo) == -1 ) Homo = 0;
! 934: if ( type(Elim) == -1 ) Elim = -1;
! 935: if ( type(Weight) == -1 ) Weight = 0;
! 936: OldWeight = dp_set_weight();
! 937: dp_set_weight(Weight);
! 938: if ( type(Proc) != -1 ) {
! 939: if ( NZ )
! 940: G = f4_chr_d(B,V,O,Proc,NZ,Prev,Homo,Elim,Weight);
! 941: else
! 942: G = f4_chrem_d(B,V,O,Proc);
! 943: dp_set_weight(OldWeight);
! 944: return G;
! 945: }
! 946: B = map(ptozp,B);
! 947: Remain = 1; /* XXX */
! 948: for ( I = 0, N = 0, Mod = 1; Remain; I++ ) {
! 949: P = lprime(I);
! 950: if ( NZ )
! 951: GM = nd_f4(B,V,P,O|dp=1,trace=NZ);
! 952: else
! 953: GM = nd_f4(B,V,P,O|dp=1);
! 954: if ( !GM ) continue;
! 955: if ( !N ) {
! 956: Remain = N = length(GM);
! 957: Stat = vector(N);
! 958: G = vector(N);
! 959: }
! 960: L = monic_gb(GM,V,O,P); GM = L[0];
! 961: T0 = time();
! 962: dp_chrem2(G,Mod,GM,P,Stat);
! 963: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 964: Mod *= P;
! 965: if ( !(I%3) ) {
! 966: T0 = time();
! 967: New = intdpltoratdpl2(G,Mod,Stat);
! 968: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 969: Remain -= New;
! 970: }
! 971: }
! 972: print(["CRT",CRTime,"IR",IRTime,"#P",I]);
! 973: G = vtol(map(dp_dtop,G,V));
! 974: dp_set_weight(OldWeight);
! 975: return G;
! 976: }
! 977:
! 978: def gr_chrem_d(B,V,O,Proc)
! 979: {
! 980: map(ox_reset,Proc);
! 981: B = map(ptozp,B);
! 982: NProc = length(Proc); D = vector(NProc); H = vector(NProc);
! 983: CRTime = 0; IRTime = 0;
! 984: /* gentrace */
! 985: I = 0;
! 986: T0 = time();
! 987: while ( 1 ) {
! 988: for ( J = 0; J < NProc; J++, I++ )
! 989: ox_rpc(Proc[J],"noro_grcrt.nd_gr_gentrace_p",B,V,lprime(I),O);
! 990: for ( J = 0; J < NProc; J++, I++ ) {
! 991: D[J] = ox_pop_local(Proc[J]);
! 992: H[J] = map(dp_ptod,D[J][0][0],V);
! 993: }
! 994: for ( J = 1; J < NProc; J++ )
! 995: if ( map(dp_ht,H[J]) != map(dp_ht,H[0]) ) break;
! 996: if ( J == NProc ) break;
! 997: }
! 998: T1 = time(); TTime += (T1[3]-T0[3]);
! 999: print(["Template",TTime]);
! 1000: map(ox_rpc,Proc,"noro_grcrt.store_history",D[0][0]); map(ox_pop_local,Proc);
! 1001: for ( J = 0; J < NProc; J++, I++ )
! 1002: ox_rpc(Proc[J],"noro_grcrt.nd_gr_recompute_trace_p",B,V,lprime(I),O);
! 1003:
! 1004: Remain = N = length(D[0][0][0]);
! 1005: Stat = vector(N); G = vector(N);
! 1006: Mod = 1;
! 1007:
! 1008: for ( J = 0; J < NProc; J++ ) {
! 1009: P = D[J][1];
! 1010: L = monic_gb(H[J],V,O,P); GM = L[0];
! 1011: T0 = time();
! 1012: dp_chrem2(G,Mod,GM,P,Stat);
! 1013: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1014: Mod *= P;
! 1015: }
! 1016:
! 1017: while ( Remain ) {
! 1018: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 1019: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 1020: ox_rpc(car(T),"noro_grcrt.nd_gr_recompute_trace_p",B,V,lprime(I),O);
! 1021: if ( GM ) {
! 1022: L = monic_gb(GM,V,O,P); GM = L[0];
! 1023: T0 = time();
! 1024: dp_chrem2(G,Mod,GM,P,Stat);
! 1025: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1026: Mod *= P;
! 1027: }
! 1028: }
! 1029: T0 = time();
! 1030: New = intdpltoratdpl2(G,Mod,Stat);
! 1031: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1032: Remain -= New;
! 1033: print((N-Remain)/N*100.0,0); print("% done");
! 1034: }
! 1035: print(["Template",TTime,"CRT",CRTime,"IR",IRTime,"#P",I-NProc]);
! 1036: return vtol(map(dp_dtop,G,V));
! 1037: }
! 1038:
! 1039: def gr_chr_d(B,V,O,Proc,Dname)
! 1040: {
! 1041: map(ox_reset,Proc);
! 1042: B = map(ptozp,B);
! 1043: NProc = length(Proc); D = vector(NProc); H = vector(NProc);
! 1044: CRTime = 0; IRTime = 0;
! 1045: /* gentrace */
! 1046: map(ox_rpc,Proc,"noro_grcrt.read_history",Dname); map(ox_pop_local,Proc);
! 1047: for ( J = 0; J < NProc; J++, I++ )
! 1048: ox_rpc(Proc[J],"noro_grcrt.nd_gr_recompute_trace_p",B,V,lprime(I),O);
! 1049:
! 1050: Remain = N = length(D[0][0][0]);
! 1051: Stat = vector(N); G = vector(N);
! 1052: Mod = 1;
! 1053:
! 1054: for ( J = 0; J < NProc; J++ ) {
! 1055: P = D[J][1];
! 1056: L = monic_gb(H[J],V,O,P); GM = L[0];
! 1057: T0 = time();
! 1058: dp_chrem2(G,Mod,GM,P,Stat);
! 1059: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1060: Mod *= P;
! 1061: }
! 1062:
! 1063: while ( Remain ) {
! 1064: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 1065: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 1066: ox_rpc(car(T),"noro_grcrt.nd_gr_recompute_trace_p",B,V,lprime(I),O);
! 1067: if ( GM ) {
! 1068: L = monic_gb(GM,V,O,P); GM = L[0];
! 1069: T0 = time();
! 1070: dp_chrem2(G,Mod,GM,P,Stat);
! 1071: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1072: Mod *= P;
! 1073: }
! 1074: }
! 1075: T0 = time();
! 1076: New = intdpltoratdpl2(G,Mod,Stat);
! 1077: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1078: Remain -= New;
! 1079: print((N-Remain)/N*100.0,0); print("% done");
! 1080: }
! 1081: print(["CRT",CRTime,"IR",IRTime,"#P",I-NProc]);
! 1082: return vtol(map(dp_dtop,G,V));
! 1083: }
! 1084:
! 1085: def f4_chrem_d(B,V,O,Proc)
! 1086: {
! 1087: map(ox_reset,Proc);
! 1088: B = map(ptozp,B);
! 1089: NProc = length(Proc); D = vector(NProc); H = vector(NProc);
! 1090: CRTime = 0; IRTime = 0;
! 1091: /* gentrace */
! 1092: I = 0;
! 1093: map(ox_rpc,Proc,"noro_grcrt.store_bv",B,V);
! 1094: map(ox_pop_local,Proc);
! 1095: T0 = time();
! 1096: while ( 1 ) {
! 1097: for ( J = 0; J < NProc; J++, I++ )
! 1098: ox_rpc(Proc[J],"noro_grcrt.nd_f4_p",lprime(I),O);
! 1099: for ( J = 0; J < NProc; J++ ) {
! 1100: D[J] = ox_pop_local(Proc[J]);
! 1101: H[J] = D[J][0];
! 1102: }
! 1103: for ( J = 1; J < NProc; J++ )
! 1104: if ( map(dp_ht,H[J]) != map(dp_ht,H[0]) ) break;
! 1105: if ( J == NProc ) break;
! 1106: }
! 1107: T1 = time(); TTime += (T1[3]-T0[3]);
! 1108: print(["Template",TTime]);
! 1109: for ( J = 0; J < NProc; J++, I++ )
! 1110: ox_rpc(Proc[J],"noro_grcrt.nd_f4_p",lprime(I),O);
! 1111:
! 1112: Remain = N = length(D[0][0]);
! 1113: Stat = vector(N); G = vector(N);
! 1114: Mod = 1;
! 1115:
! 1116: for ( J = 0; J < NProc; J++ ) {
! 1117: P = D[J][1];
! 1118: L = monic_gb(H[J],V,O,P); GM = L[0];
! 1119: T0 = time();
! 1120: dp_chrem2(G,Mod,GM,P,Stat);
! 1121: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1122: Mod *= P;
! 1123: }
! 1124:
! 1125: while ( Remain ) {
! 1126: for ( T = Proc; T != []; T = cdr(T), I++ ) {
! 1127: L = ox_pop_local(car(T)); GM = L[0]; P = L[1];
! 1128: ox_rpc(car(T),"noro_grcrt.nd_f4_p",lprime(I),O);
! 1129: if ( GM ) {
! 1130: L = monic_gb(GM,V,O,P); GM = L[0];
! 1131: T0 = time();
! 1132: dp_chrem2(G,Mod,GM,P,Stat);
! 1133: T1 = time(); CRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1134: Mod *= P;
! 1135: }
! 1136: }
! 1137: T0 = time();
! 1138: New = intdpltoratdpl2(G,Mod,Stat);
! 1139: T1 = time(); IRTime += (T1[0]-T0[0])+(T1[1]-T0[1]);
! 1140: Remain -= New;
! 1141: print((N-Remain)/N*100.0,0); print("% done");
! 1142: }
! 1143: print(["Template",TTime,"CRT",CRTime,"IR",IRTime,"#P",I-NProc]);
! 1144: return vtol(map(dp_dtop,G,V));
! 1145: }
! 1146:
! 1147: def nd_f4_p(P,O)
! 1148: {
! 1149: return [nd_f4(GB_B,GB_V,P,O|dp=1),P];
! 1150: }
! 1151:
! 1152: def store_bv(B,V)
! 1153: {
! 1154: GB_B=B;
! 1155: GB_V=V;
! 1156: }
! 1157:
! 1158:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>