[BACK]Return to grcrt.rr CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-contrib / testing / noro

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>