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

Annotation of OpenXM/src/asir-contrib/testing/noro/gw.rr, Revision 1.1

1.1     ! noro        1: module noro_gw$
        !             2:
        !             3: localf set_order_mat, create_order_mat, inner_product, comp_order$
        !             4: localf in_c12, comp_facet_preorder, compute_df, dp_boundary$
        !             5: localf compute_compat_weight, compute_compat_weight_gmp, compute_last_w$
        !             6: localf highest_w, mat_to_vlist, porder, nf_marked, appear, nf_marked2$
        !             7: localf  nf_marked_rec, comp_second, sort_by_order, generic_walk$
        !             8: localf  generic_walk_mod, gw, gw_mod, tolex_gw$
        !             9:
        !            10: static Cdd_Init, Cdd_Proc$
        !            11: static Cddgmp_Init, Cddgmp_Proc$
        !            12:
        !            13: def set_order_mat(M,S,E,O) {
        !            14:        if ( O == 0 ) {
        !            15:                for ( J = S; J < E; J++ ) M[S][J] = 1;
        !            16:                for ( I = S+1; I < E; I++ ) M[I][E-(I-S)] = -1;
        !            17:        } else if ( O == 1 ) {
        !            18:                for ( J = S; J < E; J++ ) M[S][J] = 1;
        !            19:                for ( I = S+1; I < E; I++ ) M[I][I-1] = 1;
        !            20:        } else if ( O == 2 )
        !            21:                for ( I = S; I < E; I++ ) M[I][I] = 1;
        !            22: }
        !            23:
        !            24: def create_order_mat(N,O)
        !            25: {
        !            26:        M = matrix(N,N);
        !            27:        if ( O <= 2 )
        !            28:                set_order_mat(M,0,N,O);
        !            29:        else {
        !            30:                for ( T = O, S = 0; T != []; T = cdr(T) ) {
        !            31:                        OT = car(T)[0]; ON = car(T)[1];
        !            32:                        set_order_mat(M,S,S+ON,OT);
        !            33:                        S += ON;
        !            34:                }
        !            35:        }
        !            36:        return M;
        !            37: }
        !            38:
        !            39: def inner_product(V1,V2)
        !            40: {
        !            41:        if ( V1 == 0 || V2 == 0 ) return 0;
        !            42:        N = size(V1)[0];
        !            43:        for ( S = 0, I = 0; I < N; I++ )
        !            44:                S += V1[I]*V2[I];
        !            45:        return S;
        !            46: }
        !            47:
        !            48: def comp_order(V1,V2,W)
        !            49: {
        !            50:        N = size(W)[0];
        !            51:        for ( I = 0; I < N; I++ ) {
        !            52:                T1 = inner_product(V1,W[I]);
        !            53:                T2 = inner_product(V2,W[I]);
        !            54:                if ( T1 < T2 ) return -1;
        !            55:                else if ( T1 > T2 ) return 1;
        !            56:        }
        !            57:        return 0;
        !            58: }
        !            59:
        !            60: def in_c12(V,W1,W2)
        !            61: {
        !            62:        T1 = comp_order(V,0,W1);
        !            63:        T2 = comp_order(V,0,W2);
        !            64:        if ( T1 > 0 && T2 < 0 ) return 1;
        !            65:        else return 0;
        !            66: }
        !            67:
        !            68: /* U <= V according to facet preorder */
        !            69:
        !            70: def comp_facet_preorder(U,V,W1,W2)
        !            71: {
        !            72:        /* U = 0 <=> U = -infty, U = 1 <=> U = infty */
        !            73:        if ( U == 0 ) return 1;
        !            74:        if ( U == 1 ) return 0;
        !            75:        N = size(V)[0];
        !            76:        for ( I = 0; I < N; I++ ) {
        !            77:                Left = inner_product(W2[I],U)*V;
        !            78:                Right = inner_product(W2[I],V)*U;
        !            79:                R = comp_order(Left,Right,W1);
        !            80:                if ( R < 0 ) return 1;
        !            81:                else if ( R > 0 ) return 0;
        !            82:        }
        !            83:        return 1;
        !            84: }
        !            85:
        !            86: def compute_df(F,H)
        !            87: {
        !            88:        H = dp_etov(H);
        !            89:        for ( R = [], T = F; T; T = dp_rest(T) )
        !            90:                R = cons(H-dp_etov(T),R);
        !            91:        return reverse(R);
        !            92: }
        !            93:
        !            94: def dp_boundary(F)
        !            95: {
        !            96:        for ( M = [], T = F; T; T = dp_rest(T) )
        !            97:                M = cons(dp_hm(T),M);
        !            98:        M = ltov(M); N = length(M);
        !            99:        for ( I = 0; I < N; I++ ) {
        !           100:                for ( MI = M[I], J = I+1; J < N; J++ ) {
        !           101:                        if ( dp_redble(M[J],MI) ) break;
        !           102:                }
        !           103:                if ( J < N ) M[I] = 0;
        !           104:        }
        !           105:        for ( R = 0, I = 0; I < N; I++ )
        !           106:                R += M[I];
        !           107:        return R;
        !           108: }
        !           109:
        !           110: def compute_compat_weight(F,H)
        !           111: {
        !           112:        D = dp_compute_essential_df(F,H);
        !           113:        C = length(D[0]);
        !           114:        for ( I = 1; I < C; I++ ) {
        !           115:                V = vector(C);
        !           116:                V[I] = 1;
        !           117:                D = cons(vtol(V),D);
        !           118:        }
        !           119:        R = length(D);
        !           120:        if ( !Cdd_Init ) {
        !           121:                Cdd_Proc = ox_launch_nox(0,"ox_cdd");
        !           122:                Cdd_Init = 1;
        !           123:        }
        !           124:        ox_cmo_rpc(Cdd_Proc,"intpt",R,C,D);
        !           125:        Ret = ox_pop_cmo(Cdd_Proc);
        !           126:        V = vector(C-1);
        !           127:        for ( I = 1, D = 1; I < C; I++ ) {
        !           128:                V[I-1] = rint(Ret[I]/Ret[0]*100);
        !           129:        }
        !           130:        return V;
        !           131: }
        !           132:
        !           133: def compute_compat_weight_gmp(F,H)
        !           134: {
        !           135:        D = dp_compute_essential_df(F,H);
        !           136:        C = length(D[0]);
        !           137:        for ( I = 1; I < C; I++ ) {
        !           138:                V = vector(C);
        !           139:                V[I] = 1;
        !           140:                D = cons(vtol(V),D);
        !           141:        }
        !           142:        R = length(D);
        !           143:        if ( !Cddgmp_Init ) {
        !           144:                Cddgmp_Proc = ox_launch_nox(0,"ox_cddgmp");
        !           145:                Cddgmp_Init = 1;
        !           146:        }
        !           147:        ox_cmo_rpc(Cddgmp_Proc,"intpt",R,C,D);
        !           148:        Ret = ox_pop_cmo(Cdd_Procgmp);
        !           149:        V = vector(C-1);
        !           150:        for ( I = 1, D = 1; I < C; I++ ) {
        !           151:                V[I-1] = Ret[I];
        !           152:                D = ilcm(D,dn(Ret[I]));
        !           153:        }
        !           154:        V *= D;
        !           155:        return V;
        !           156: }
        !           157:
        !           158: def compute_last_w(G,GH,W1,W2,W)
        !           159: {
        !           160:        N = length(G);
        !           161:        for ( Dg = [], I = 0; I < N; I++ )
        !           162:                Dg = append(compute_df(G[I],GH[I]),Dg);
        !           163:        for ( V = [], T = Dg; T != []; T = cdr(T) ) {
        !           164:                S = car(T);
        !           165:                if ( in_c12(S,W1,W2) && comp_facet_preorder(W,S,W1,W2) )
        !           166:                        V = cons(S,V);
        !           167:        }
        !           168:        if ( V == [] ) return 1;
        !           169:        for ( T = V; T != []; T = cdr(T) ) {
        !           170:                S = car(T);
        !           171:                for ( U = V; U != []; U = cdr(U) ) {
        !           172:                        if ( !comp_facet_preorder(S,car(U),W1,W2) )
        !           173:                                break;
        !           174:                }
        !           175:                if ( U == [] )
        !           176:                        return S;
        !           177:        }
        !           178:        error("compute_last_w : cannot happen");
        !           179: }
        !           180:
        !           181: def highest_w(G,GH,W1,W2,W)
        !           182: {
        !           183:        N = length(G);
        !           184:        In = vector(N);
        !           185:        for ( I = 0; I < N; I++ ) {
        !           186:                F = G[I];
        !           187:                H = dp_etov(GH[I]);
        !           188:                for ( R = 0, T = F; T; T = dp_rest(T) ) {
        !           189:                        S = H-dp_etov(T);
        !           190:                        if ( comp_facet_preorder(S,W,W1,W2) && comp_facet_preorder(W,S,W1,W2) )
        !           191:                                R += dp_hm(T);
        !           192:                }
        !           193:                In[I] = R;
        !           194:        }
        !           195:        return In;
        !           196: }
        !           197:
        !           198: def mat_to_vlist(M)
        !           199: {
        !           200:        N = size(M)[0];
        !           201:        R = vector(N);
        !           202:        for ( I = 0; I < N; I++ )
        !           203:                R[I] = M[I];
        !           204:        return R;
        !           205: }
        !           206:
        !           207: def porder(F,G)
        !           208: {
        !           209:        while ( 1 ) {
        !           210:                if ( !F ) {
        !           211:                        if ( !G ) return 0;
        !           212:                        else return -1;
        !           213:                } else if ( !G ) return 1;
        !           214:                else {
        !           215:                        HF = dp_ht(F); HG = dp_ht(G);
        !           216:                        if ( HF > HG ) return 1;
        !           217:                        else if ( HF < HG ) return -1;
        !           218:                        F = dp_rest(F); G = dp_rest(G);
        !           219:                }
        !           220:        }
        !           221: }
        !           222:
        !           223: def nf_marked(B,G,PS,HPS)
        !           224: {
        !           225:        M = 1;
        !           226:        for ( D = 0; G; ) {
        !           227:                for ( U = 0, L = B; L != []; L = cdr(L) ) {
        !           228:                        if ( dp_redble(G,H=HPS[car(L)]) > 0 ) {
        !           229:                                R = PS[car(L)];
        !           230:                                GCD = igcd(dp_hc(G),dp_hc(H));
        !           231:                                CG = idiv(dp_hc(H),GCD); CR = idiv(dp_hc(G),GCD);
        !           232:                                U = CG*G-dp_subd(G,H)*CR*R;
        !           233:                                if ( !U )
        !           234:                                        return [D,M];
        !           235:                                D *= CG; M *= CG;
        !           236:                                break;
        !           237:                        }
        !           238:                }
        !           239:                if ( U ) {
        !           240:                        G = U;
        !           241:                } else {
        !           242:                        D += dp_hm(G); G = dp_rest(G);
        !           243:                }
        !           244:        }
        !           245:        return [D,M];
        !           246: }
        !           247:
        !           248: def appear(H,F)
        !           249: {
        !           250:        for ( ; F != []; F = cdr(F) )
        !           251:                if ( car(F) == H ) return 1;
        !           252:        return 0;
        !           253: }
        !           254:
        !           255: def nf_marked2(B,G,PS,HPS)
        !           256: {
        !           257:        M = 1;
        !           258:        Hist = [];
        !           259:        Post = 0;
        !           260:        for ( D = 0; G; ) {
        !           261:                for ( U = 0, Post1 = 0, L = B; L != []; L = cdr(L) ) {
        !           262:                        if ( dp_redble(G,H=HPS[car(L)]) > 0 ) {
        !           263:                                if ( appear(dp_ht(G),Hist) ) {
        !           264:                                        Post1 = dp_hm(G);
        !           265:                                        break;
        !           266:                                }
        !           267:                                R = PS[car(L)];
        !           268:                                Hist = cons(dp_ht(G),Hist);
        !           269:                                GCD = igcd(dp_hc(G),dp_hc(H));
        !           270:                                CG = idiv(dp_hc(H),GCD); CR = idiv(dp_hc(G),GCD);
        !           271:                                U = CG*G-dp_subd(G,H)*CR*R;
        !           272:                                if ( !U )
        !           273:                                        return [D,Post,M];
        !           274:                                D *= CG; M *= CG; Post *= CG;
        !           275:                                break;
        !           276:                        }
        !           277:                }
        !           278:                if ( U ) {
        !           279:                        G = U;
        !           280:                } else if ( Post1 ) {
        !           281:                        Post += Post1; G = dp_rest(G);
        !           282:                } else {
        !           283:                        D += dp_hm(G); G = dp_rest(G);
        !           284:                }
        !           285:        }
        !           286:        return [D,Post,M];
        !           287: }
        !           288:
        !           289: def nf_marked_rec(B,G,PS,HPS)
        !           290: {
        !           291:        D = 0; M = 1;
        !           292:        while ( 1 ) {
        !           293:                L = nf_marked2(B,G,PS,HPS);
        !           294:                D1 = L[0]; P1 = L[1]; M1 = L[2];
        !           295:                /* M1*G = D1+P1 */
        !           296:                D = M1*D+D1;
        !           297:                M *= M1;
        !           298:                if ( !P1 ) return remove_cont([D,M]);
        !           299:                else G = P1;
        !           300:        }
        !           301: }
        !           302:
        !           303: #if 0
        !           304: /* increasing order */
        !           305:
        !           306: def comp_second(A,B)
        !           307: {
        !           308:        if ( A[1] > B[1] ) return 1;
        !           309:        else if ( A[1] < B[1] ) return -1;
        !           310:        else return 0;
        !           311: }
        !           312: #else
        !           313: /* decreasing order */
        !           314:
        !           315: def comp_second(A,B)
        !           316: {
        !           317:        if ( A[1] > B[1] ) return -1;
        !           318:        else if ( A[1] < B[1] ) return 1;
        !           319:        else return 0;
        !           320: }
        !           321: #endif
        !           322:
        !           323: def sort_by_order(G,GH)
        !           324: {
        !           325:        N = length(G);
        !           326:        V = vector(N);
        !           327:        for ( I = 0; I < N; I++ )
        !           328:                V[I] = [G[I],GH[I]];
        !           329:        V1 = qsort(V,comp_second);
        !           330:        for ( I = 0; I < N; I++ ) {
        !           331:                G[I] = V1[I][0]; GH[I] = V1[I][1];
        !           332:        }
        !           333:
        !           334: }
        !           335:
        !           336: def generic_walk(G1,V,M1,M2)
        !           337: {
        !           338:        /* G is always a set of DP w.r.t. order W1 */
        !           339:        NV = length(V);
        !           340:        dp_ord(M1);
        !           341:        W1 = mat_to_vlist(M1);
        !           342:        W2 = mat_to_vlist(M2);
        !           343:        G = ltov(map(dp_ptod,G1,V));
        !           344:        GH = map(dp_hm,G);
        !           345:        dp_ord(M2);
        !           346:        G = ltov(map(dp_ptod,G1,V));
        !           347:
        !           348:        Tw = Tgb = Tcw = Tlift = Tred = 0;
        !           349:        Tnf = Tcont = 0;
        !           350:        W = 0;
        !           351:        Step = 0;
        !           352:
        !           353:        S2 = size(W2); R1 = S2[0]+1;
        !           354:        CW2 = matrix(R1,NV);
        !           355:        for ( I = 1; I < R1; I++ )
        !           356:                for ( J = 0; J < NV; J++ )
        !           357:                        CW2[I][J] = W2[I-1][J];
        !           358:        CW = compute_compat_weight(G,GH);
        !           359:        for ( I = 0; I < NV; I++ )
        !           360:                CW2[0][I] = CW[I];
        !           361:
        !           362:        while ( 1 ) {
        !           363:                print("step ",0); print(Step++);
        !           364: T0 = time()[0];
        !           365:                L = dp_compute_last_w(vtol(G),vtol(GH),W,M1,M2);
        !           366:                if ( !L ) {
        !           367:                        print(["w",Tw,"gb",Tgb,"lift",Tlift,"cw",Tcw,"red",Tred]);
        !           368:                        return vtol(map(dp_dtop,G,V));
        !           369:                }
        !           370:                W = L[0]; In = map(dp_dtop,L[1],V);
        !           371:                dp_ord(CW2); InVec = ltov(map(dp_ptod,In,V));
        !           372: Tw += time()[0]-T0;
        !           373: T0 = time()[0];
        !           374:                H = nd_gr(In,V,0,M2);
        !           375:                N = length(H);
        !           376:                H1 = vector(N);
        !           377:                HH1 = vector(N);
        !           378:
        !           379:                dp_ord(M2);
        !           380:                for ( I = 0; I < N; I++ )
        !           381:                        HH1[I] = dp_hm(dp_ptod(H[I],V));
        !           382:                NG = length(G);
        !           383:                for ( Ind = [], I = 0; I < NG; I++ )
        !           384:                        Ind = cons(I,Ind);
        !           385:                Ind = reverse(Ind);
        !           386: Tgb += time()[0]-T0;
        !           387:
        !           388:                dp_ord(CW2);
        !           389: T0 = time()[0];
        !           390:                G = map(dp_ptod,map(dp_dtop,G,V),V);
        !           391:                for ( I = 0; I < N; I++ ) {
        !           392:                        F = dp_ptod(H[I],V);
        !           393:                        T = dp_true_nf_and_quotient_marked(Ind,F,InVec,GH);
        !           394:                        NF = T[0]; Den = T[1]; Q = T[2];
        !           395:                        for ( J = 0, U = 0; J < NG; J++ )
        !           396:                                U += Q[J]*G[J];
        !           397:                        H1[I] = U;
        !           398:                        HH1[I] = Den*HH1[I];
        !           399:                }
        !           400: T1 = time()[0]; Tlift += T1-T0;
        !           401:
        !           402: T0 = time()[0];
        !           403:                CW = compute_compat_weight(H1,HH1);
        !           404:                for ( I = 0; I < NV; I++ )
        !           405:                        CW2[0][I] = CW[I];
        !           406:                dp_ord(CW2);
        !           407:                H1 = map(dp_ptod,map(dp_dtop,H1,V),V);
        !           408:
        !           409:                sort_by_order(H1,HH1);
        !           410: Tcw += time()[0]-T0;
        !           411:
        !           412: T0 = time()[0];
        !           413:                for ( I = 0; I < N; I++ ) {
        !           414:                        for ( Ind = [], J = 0; J < N; J++ )
        !           415:                                if ( J != I ) Ind = cons(J,Ind);
        !           416:                        Ind = reverse(Ind);
        !           417:                        T = dp_true_nf_marked(Ind,H1[I],H1,HH1);
        !           418:                        HT = dp_ht(HH1[I]);
        !           419:                        for ( S = S0 = T[0]; S; S = dp_rest(S) )
        !           420:                                if ( dp_ht(S) == HT )
        !           421:                                        break;
        !           422:                        if ( !S )
        !           423:                                error("cannot happen");
        !           424:                        H1[I] = S0;
        !           425:                        HH1[I] = dp_hm(S);
        !           426:                }
        !           427: T1 = time()[0]; Tred += T1-T0;
        !           428:                G = H1;
        !           429:                GH = HH1;
        !           430:        }
        !           431: }
        !           432:
        !           433: def generic_walk_mod(G1,V,M1,M2,Mod)
        !           434: {
        !           435:        /* G is always a set of DP w.r.t. order W1 */
        !           436:        setmod(Mod);
        !           437:        NV = length(V);
        !           438:        dp_ord(M1);
        !           439:        W1 = mat_to_vlist(M1);
        !           440:        W2 = mat_to_vlist(M2);
        !           441:        G = ltov(map(dp_mod,map(dp_ptod,G1,V),Mod,[]));
        !           442:        GH = map(dp_hm,G);
        !           443:        dp_ord(M2);
        !           444:        G = ltov(map(dp_mod,map(dp_ptod,G1,V),Mod,[]));
        !           445:
        !           446:        Tw = Tgb = Tlift = Tred = 0;
        !           447:        Tnf = Tcont = 0;
        !           448:        W = 0;
        !           449:        Step = 0;
        !           450:
        !           451:        S2 = size(W2); R1 = S2[0]+1;
        !           452:        CW2 = matrix(R1,NV);
        !           453:        for ( I = 1; I < R1; I++ )
        !           454:                for ( J = 0; J < NV; J++ )
        !           455:                        CW2[I][J] = W2[I-1][J];
        !           456:        CW = compute_compat_weight(G,GH);
        !           457:        for ( I = 0; I < NV; I++ )
        !           458:                CW2[0][I] = CW[I];
        !           459:
        !           460:        while ( 1 ) {
        !           461:                print("step ",0); print(Step++);
        !           462: T0 = time()[0];
        !           463:                L = dp_compute_last_w(vtol(G),vtol(GH),W,M1,M2);
        !           464:                if ( !L ) {
        !           465:                         print(["w",Tw,"gb",Tgb,"lift",Tlift,"cw",Tcw,"red",Tred]);
        !           466:                        return vtol(map(dp_dtop,G,V));
        !           467:                }
        !           468:                W = L[0]; In = map(dp_dtop,L[1],V);
        !           469:                dp_ord(CW2); InVec = ltov(map(dp_mod,map(dp_ptod,In,V),Mod,[]));
        !           470: Tw += time()[0]-T0;
        !           471: T0 = time()[0];
        !           472:                H = nd_gr(In,V,Mod,M2);
        !           473:                N = length(H);
        !           474:                H1 = vector(N);
        !           475:                HH1 = vector(N);
        !           476:
        !           477:                dp_ord(M2);
        !           478:                for ( I = 0; I < N; I++ )
        !           479:                        HH1[I] = dp_hm(dp_mod(dp_ptod(H[I],V),Mod,[]));
        !           480:                NG = length(G);
        !           481:                for ( Ind = [], I = 0; I < NG; I++ )
        !           482:                        Ind = cons(I,Ind);
        !           483:                Ind = reverse(Ind);
        !           484: Tgb += time()[0]-T0;
        !           485:
        !           486:                dp_ord(CW2);
        !           487: T0 = time()[0];
        !           488:                G = map(dp_mod,map(dp_ptod,map(dp_dtop,G,V),V),Mod,[]);
        !           489:                for ( I = 0; I < N; I++ ) {
        !           490:                        F = dp_mod(dp_ptod(H[I],V),Mod,[]);
        !           491:                        T = dp_true_nf_and_quotient_marked_mod(Ind,F,InVec,GH,Mod);
        !           492:                        NF = T[0]; Den = T[1]; Q = T[2];
        !           493:                        for ( J = 0, U = 0; J < NG; J++ )
        !           494:                                U += Q[J]*G[J];
        !           495:                        H1[I] = U;
        !           496:                        HH1[I] = Den*HH1[I];
        !           497:                }
        !           498: T1 = time()[0]; Tlift += T1-T0;
        !           499:
        !           500: T0 = time()[0];
        !           501: CW = compute_compat_weight(H1,HH1);
        !           502:                for ( I = 0; I < NV; I++ )
        !           503:                        CW2[0][I] = CW[I];
        !           504:                dp_ord(CW2);
        !           505:
        !           506:        H1 = map(dp_mod,map(dp_ptod,map(dp_dtop,H1,V),V),Mod,[]);
        !           507:        sort_by_order(H1,HH1);
        !           508: Tcw += time()[0]-T0;
        !           509:
        !           510: T0 = time()[0];
        !           511:                for ( I = 0; I < N; I++ ) {
        !           512:                        for ( Ind = [], J = 0; J < N; J++ )
        !           513:                                if ( J != I ) Ind = cons(J,Ind);
        !           514:                        Ind = reverse(Ind);
        !           515:                        T = dp_true_nf_marked_mod(Ind,H1[I],H1,HH1,Mod);
        !           516:                        HT = dp_ht(HH1[I]);
        !           517:                        for ( S = S0 = T[0]; S; S = dp_rest(S) )
        !           518:                                if ( dp_ht(S) == HT )
        !           519:                                        break;
        !           520:                        if ( !S )
        !           521:                                error("cannot happen");
        !           522:                        H1[I] = S0;
        !           523:                        HH1[I] = dp_hm(S);
        !           524:                }
        !           525: T1 = time()[0]; Tred += T1-T0;
        !           526:                G = H1;
        !           527:                GH = HH1;
        !           528:        }
        !           529: }
        !           530:
        !           531: def gw(G,V,O1,O2)
        !           532: {
        !           533:        N = length(V);
        !           534:        W1 = create_order_mat(N,O1);
        !           535:        W2 = create_order_mat(N,O2);
        !           536:        R = generic_walk(G,V,W1,W2);
        !           537:        return R;
        !           538: }
        !           539:
        !           540: def gw_mod(G,V,O1,O2,Mod)
        !           541: {
        !           542:        N = length(V);
        !           543:        W1 = create_order_mat(N,O1);
        !           544:        W2 = create_order_mat(N,O2);
        !           545:        R = generic_walk_mod(G,V,W1,W2,Mod);
        !           546:        return R;
        !           547: }
        !           548:
        !           549: def tolex_gw(G,V,O1)
        !           550: {
        !           551:
        !           552:        dp_ord(O1);
        !           553:        D1 = ltov(map(dp_ptod,G,V));
        !           554:        H1 = map(dp_ht,D1);
        !           555:        W1 = compute_compat_weight_gmp(D1,H1);
        !           556:
        !           557:        if ( zero_dim(G,V,O1) )
        !           558:                G2M = tolexm(G,V,O1,V,31991);
        !           559:        else {
        !           560:                GH = map(homogenize,G,V,hhh);
        !           561:                VH = append(V,[hhh]);
        !           562:                G2M = nd_gr(GH,VH,31991,1);
        !           563:                G2M = map(subst,G2M,hhh,1);
        !           564:                G2M = nd_gr_postproc(G2M,V,31991,2,0);
        !           565:        }
        !           566:        dp_ord(2);
        !           567:        D2 = ltov(map(dp_ptod,G2M,V));
        !           568:        H2 = map(dp_ht,D2);
        !           569:        W2 = compute_compat_weight_gmp(D2,H2);
        !           570:
        !           571:        N = length(V);
        !           572:        M1 = create_order_mat(N,0);
        !           573:        for ( I = 0; I < N; I++ ) M1[0][I] = W1[I];
        !           574:        M2 = create_order_mat(N,0);
        !           575:        for ( I = 0; I < N; I++ ) M2[0][I] = W2[I];
        !           576:        dp_set_top_weight(0);
        !           577:        R = generic_walk(G,V,M1,M2);
        !           578:        dp_set_top_weight(0);
        !           579:        return R;
        !           580: }
        !           581: endmodule$
        !           582:
        !           583: end$
        !           584:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>