Changeset 9936d6 in git
- Timestamp:
- Feb 12, 2013, 6:46:45 PM (10 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
- Children:
- 31a08c219875a2199e6c67adcf1eef18ba4a3a4f
- Parents:
- 13a431151fe0f14cbbed84bbf95df65eff7bc567
- git-author:
- Oleksandr Motsak <motsak@mathematik.uni-kl.de>2013-02-12 18:46:45+01:00
- git-committer:
- Oleksandr Motsak <motsak@mathematik.uni-kl.de>2014-05-07 04:41:47+02:00
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/schreyer.lib
r13a431 r9936d6 194 194 { 195 195 transpose( transpose(M) * transpose(MRES) ); 196 " transpose( transpose(M) * transpose(MRES) ) != 0!!!";197 $196 "ERROR: transpose( transpose(M) * transpose(MRES) ) != 0!!!"; 197 m2_end(666); 198 198 } 199 199 } … … 329 329 "RANKS: ", @RANK; 330 330 331 " transpose( transpose(N) * transpose(MRES) ) != 0!!!";331 "ERROR: transpose( transpose(N) * transpose(MRES) ) != 0!!!"; 332 332 transpose( transpose(N) * transpose(MRES) ); 333 333 … … 335 335 transpose(N) * transpose(MRES); 336 336 DetailedPrint(module(_), 2); 337 $337 m2_end(666); 338 338 } 339 339 } … … 539 539 540 540 "ERROR: MySort: wrong sorting in 'MySort': @N != @M!!!"; 541 $541 m2_end(666); 542 542 } 543 543 } … … 556 556 static proc SSinit(def M) 557 557 { 558 rtimer, "***TIMESNAP0 for SSinit: on level: [",-1,"] :: t: ", timer, ", r: ", rtimer; 558 559 if( (typeof(M) != "module") && (typeof(M) != "ideal") ) 559 560 { … … 650 651 651 652 "ERROR: wrong sorting (in SSnit): @N != M!!!"; 652 $653 m2_end(666); 653 654 } 654 655 … … 662 663 663 664 "ERROR: wrong sorting (in SSnit): @LEAD != LEAD!!!"; 664 $665 m2_end(666); 665 666 } 666 667 … … 738 739 transpose( transpose(M) * transpose(MRES) ); 739 740 "ERROR: transpose( transpose(M) * transpose(MRES) ) != 0!!!"; 740 $741 m2_end(666); 741 742 } 742 743 } … … 782 783 attrib(S, "KERCHECK", @KERCHECK); 783 784 attrib(S, "IGNORETAILS", @IGNORETAILS); 785 786 attrib(S, "SYZNUMBER", 0); 784 787 785 788 if( @DEBUG ) … … 796 799 export LRES; 797 800 export TRES; 801 802 rtimer, "***TIMESNAP1 for SSinit: on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 803 798 804 return (S); 799 805 } … … 909 915 if( (size(S) + size(SS)) > 0 ) 910 916 { 911 if( size(module(matrix(S) - matrix(SS))) > 0 )912 {917 if( size(module(matrix(S) - matrix(SS))) > 0 ) 918 { 913 919 "ERROR: SSComputeLeadingSyzygyTerms: S != SS "; 914 920 … … 925 931 // DetailedPrint(_, 2); 926 932 print(matrix(S) - matrix(SS)); 927 $928 }933 m2_end(666); 934 } 929 935 } 930 936 } … … 993 999 transpose( transpose(SS) * transpose(L) ); 994 1000 "ERROR: transpose( transpose(SS) * transpose(L) ) != 0!!!"; 995 $1001 m2_end(666); 996 1002 } 997 1003 } … … 1077 1083 transpose( transpose(S) * transpose(L) ); 1078 1084 "ERROR: transpose( transpose(S) * transpose(L) ) != 0!!!"; 1079 $1085 m2_end(666); 1080 1086 } 1081 1087 } … … 1092 1098 "SS: "; SS; 1093 1099 // DetailedPrint(SS, 2); 1094 $1100 m2_end(666); 1095 1101 } 1096 1102 … … 1113 1119 module(matrix(lead(S)) - matrix(lead(SS))); 1114 1120 // DetailedPrint(_ , 4); 1115 $1121 m2_end(666); 1116 1122 } 1117 1123 … … 1135 1141 // DetailedPrint(_, 4); 1136 1142 print( matrix(Tail(S)) - matrix(Tail(SS)) ); 1137 $1143 m2_end(666); 1138 1144 } 1139 1145 } … … 1152 1158 type(S2); 1153 1159 L; 1154 $1160 m2_end(666); 1155 1161 } 1156 1162 } … … 1220 1226 "product: ", product, ", @@product: ", @@product; 1221 1227 "ERROR: 'syzterm' results in wrong product !!!???"; 1222 $1228 m2_end(666); 1223 1229 } 1224 1230 } … … 1287 1293 { 1288 1294 "ERROR in FindReducer => ", my, " != nf: ", nf; 1289 $;1295 m2_end(666); 1290 1296 } 1291 1297 } … … 1353 1359 "@@m: ", @@m, ", @@t: ", @@t; 1354 1360 "ERROR: 'syzterm' results in wrong m * t !!!"; 1355 $1361 m2_end(666); 1356 1362 } 1357 1363 } … … 1392 1398 "syzterm: ", syzterm; 1393 1399 L; T; #; 1394 $;1400 m2_end(666); 1395 1401 } 1396 1402 } … … 1467 1473 "@tail: ", @tail; 1468 1474 L; T; #; 1469 $;1475 m2_end(666); 1470 1476 } 1471 1477 } … … 1552 1558 1553 1559 L; T; #; 1554 $;1560 m2_end(666); 1555 1561 } 1556 1562 } … … 1572 1578 proc SSComputeSyzygy(def L, def T) 1573 1579 { 1574 if( typeof( attrib(basering, "DEBUG") ) == "int" ) 1575 { 1576 int @DEBUG = attrib(basering, "DEBUG"); 1577 } else 1578 { 1579 int @DEBUG = !system("with", "ndebug"); 1580 } 1581 1582 if( typeof( attrib(basering, "KERCHECK") ) == "int" ) 1583 { 1584 int @KERCHECK = attrib(basering, "KERCHECK"); 1585 } else 1586 { 1587 int @KERCHECK = @DEBUG; 1588 } 1580 rtimer, "***TIMESNAP0 for ComputeSyzygy(L,T): on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1581 int @DEBUG = attrib(basering, "DEBUG"); 1582 int @KERCHECK = attrib(basering, "KERCHECK"); 1589 1583 1590 1584 if( @DEBUG ) … … 1598 1592 "L: "; L; 1599 1593 "T: "; T; 1600 } 1601 1602 list @res = ComputeSyzygy(L, T); 1594 } 1595 1596 option(prot); 1597 rtimer, "***TIME for ComputeSyzygy(L,T): on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1598 list @res=ComputeSyzygy(L,T); 1599 rtimer, "***TIME for ComputeSyzygy(L,T): on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1600 option(noprot); // TODO: restore! 1601 1603 1602 1604 1603 module @LL = @res[1]; module @TT = @res[2]; … … 1709 1708 { 1710 1709 "ERROR in SSComputeSyzygy: could not find the 2nd syzygy term during the hybrid NF!!!"; 1711 $1710 m2_end(666); 1712 1711 } 1713 1712 } … … 1730 1729 type(LL); 1731 1730 type(@LL); 1732 $1731 m2_end(666); 1733 1732 } 1734 1733 … … 1744 1743 type(TT); 1745 1744 type(@TT); 1746 $1745 m2_end(666); 1747 1746 } 1748 1747 … … 1755 1754 type(LL); 1756 1755 type(@LL); 1757 $1756 m2_end(666); 1758 1757 } 1759 1758 … … 1769 1768 type(LL); 1770 1769 type(@LL); 1771 $1770 m2_end(666); 1772 1771 } 1773 1772 … … 1790 1789 } 1791 1790 1791 rtimer, "***TIMESNAP1 for ComputeSyzygy(L,T): on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1792 1792 return (@SYZ, @LL, @TT); 1793 1793 } … … 1796 1796 static proc SSstep() 1797 1797 { 1798 if( typeof( attrib(basering, "DEBUG") ) == "int" ) 1799 { 1800 int @DEBUG = attrib(basering, "DEBUG"); 1801 } else 1802 { 1803 int @DEBUG = !system("with", "ndebug"); 1804 } 1805 1806 1807 if( typeof( attrib(basering, "SYZCHECK") ) == "int" ) 1808 { 1809 int @SYZCHECK = attrib(basering, "SYZCHECK"); 1810 } else 1811 { 1812 int @SYZCHECK = @DEBUG; 1813 } 1798 rtimer, "***TIMESNAP0 for SSstep(): on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1799 1800 int @DEBUG = attrib(basering, "DEBUG"); 1801 int @SYZCHECK = attrib(basering, "SYZCHECK"); 1814 1802 1815 1803 if( @DEBUG ) … … 1871 1859 1872 1860 // TODO: N = SYZ( M )!!! 1873 module N, LL, TT; 1874 (N, LL, TT) = SSComputeSyzygy(/*M, */L, T/*, @RANK*/); 1861 module N, LL, TT; (N, LL, TT) = SSComputeSyzygy(/*M, */L, T/*, @RANK*/); 1875 1862 1876 1863 // shift syz.comp by @RANK: … … 1903 1890 transpose(N) * transpose(MRES); 1904 1891 // DetailedPrint(module(_), 2); 1905 $1892 m2_end(666); 1906 1893 } 1907 1894 } … … 1934 1921 } 1935 1922 1923 int ss = attrib(basering, "SYZNUMBER"); 1924 attrib(basering, "SYZNUMBER", ss + 1 ); 1925 1926 rtimer, "***TIMESNAP1 for SSstep(): on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1936 1927 } 1937 1928 … … 1945 1936 " 1946 1937 { 1938 rtimer, "***TIMESNAP0 for SScontinue: on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1947 1939 1948 1940 /// TODO! … … 1957 1949 SSstep(); 1958 1950 } 1951 1952 rtimer, "***TIMESNAP1 for SScontinue: on level: [",attrib(basering,"SYZNUMBER"),"] :: t: ", timer, ", r: ", rtimer; 1953 1959 1954 } 1960 1955 example … … 2047 2042 ERROR("Sorry: need an ideal or a module for input"); 2048 2043 } 2049 2044 "KERCHECK: ", attrib(SSinit, "KERCHECK"); 2045 "SYZCHECK: ", attrib(SSinit, "SYZCHECK"); 2046 "DEBUG: ", attrib(SSinit, "DEBUG"); 2047 "HYBRIDNF: ", attrib(SSinit, "HYBRIDNF"); 2048 "TAILREDSYZ: ", attrib(SSinit, "TAILREDSYZ"); 2049 "LEAD2SYZ: ", attrib(SSinit, "LEAD2SYZ"); 2050 2051 2050 2052 def SS = SSinit(M); setring SS; 2053 "KERCHECK: ", attrib(SS, "KERCHECK"); 2054 "SYZCHECK: ", attrib(SS, "SYZCHECK"); 2055 "DEBUG: ", attrib(SS, "DEBUG"); 2056 "HYBRIDNF: ", attrib(SS, "HYBRIDNF"); 2057 "TAILREDSYZ: ", attrib(SS, "TAILREDSYZ"); 2058 "LEAD2SYZ: ", attrib(SS, "LEAD2SYZ"); 2059 ""; 2060 "IGNORETAILS: ", attrib(SS, "IGNORETAILS"); 2061 "SYZNUMBER: ", attrib(SS, "SYZNUMBER"); 2051 2062 2052 2063 if (l == 0) 2053 2064 { 2054 l = nvars(basering) + 1; // not really an estimate...?!2065 l = nvars(basering) + 2; // not really an estimate...?! 2055 2066 } 2056 2067 … … 2059 2070 SScontinue(l); 2060 2071 2072 "KERCHECK: ", attrib(SS, "KERCHECK"); 2073 "SYZCHECK: ", attrib(SS, "SYZCHECK"); 2074 "DEBUG: ", attrib(SS, "DEBUG"); 2075 "HYBRIDNF: ", attrib(SS, "HYBRIDNF"); 2076 "TAILREDSYZ: ", attrib(SS, "TAILREDSYZ"); 2077 "LEAD2SYZ: ", attrib(SS, "LEAD2SYZ"); 2078 ""; 2079 "IGNORETAILS: ", attrib(SS, "IGNORETAILS"); 2080 "SYZNUMBER: ", attrib(SS, "SYZNUMBER"); 2081 2061 2082 return (SS); 2062 2083 } … … 2250 2271 } 2251 2272 2252 proc TestSSres(def M) 2253 { 2254 "/ ----------------------------------- : ", "options: ", attrib(SSinit, "LEAD2SYZ"), attrib(SSinit, "TAILREDSYZ"), attrib(SSinit, "HYBRIDNF"), "..."; 2255 int t = timer; 2256 def S = SSres(M, 0); 2257 int tt = timer; 2258 /* 2259 setring S; 2260 2273 /*static*/ proc StartResTesting(list #) 2274 { 2275 if( defined(@save_res_list) ) 2276 { ERROR("Sorry: existing global variable @save_res_list - run StopAddResTesting before another Start!!!"); } 2277 2278 ">>>>>>>>> {{{{{{{{{ STARTING TESTING ('" + string(#) + "') :::::::::::: "; 2279 2280 list @save_res_list = list(); 2281 export @save_res_list; 2282 } 2283 2284 /*static*/ proc StopResTesting(list #) 2285 { 2286 if( defined(@save_opts) || defined(@save_method) || defined(@save_desc) ) 2287 { ERROR("Sorry: existing global variables - run StopAddResTest before another Start!!!"); } 2288 2289 if( !defined(@save_res_list) ) 2290 { ERROR("Sorry: no global variable - run StartResTesting beforehand!!!"); } 2291 2292 int i, j; 2293 int f = 0; 2294 def m; 2295 2296 for (i = size(@save_res_list); i > 0; i--) 2297 { 2298 "Total Time: ", @save_res_list[i][5], ", Res: ", @save_res_list[i][6], ", Minimal Betti: ", @save_res_list[i][5] - @save_res_list[i][6], ", ", @save_res_list[i][1], " :with: ", @save_res_list[i][2]; 2299 } 2300 2301 for (i = size(@save_res_list); i > 1; i--) 2302 { 2303 m = @save_res_list[i][4]; 2304 2305 for (j = i-1; j > 0; j--) 2306 { 2307 if( m != @save_res_list[j][4] ) 2308 { 2309 "ERROR: Betti[j: ", j, "] != Betti[i: ", i, "]:"; 2310 "j: ", j; 2311 print( @save_res_list[j][4], "betti"); 2312 print(@save_res_list[j]); 2313 2314 "i: ", i; 2315 print( @save_res_list[i][4], "betti"); 2316 print(@save_res_list[i]); 2317 2318 f = 1; 2319 }; 2320 2321 }; 2322 2323 }; 2324 if( f ) 2325 { 2326 print(@save_res_list); 2327 "<<<<<<<<< }}}}}}}}} STOP TESTING (", string(#), ") !!!!!!!!!!!! "; 2328 2329 "ERROR: There were some wrong betti numbers... "; 2330 m2_end(666); 2331 } else 2332 { 2333 "BETTI: "; print( @save_res_list[1][4], "betti"); 2334 } 2335 2336 kill @save_res_list; 2337 2338 "<<<<<<<<< }}}}}}}}} STOP TESTING (", string(#), ") !!!!!!!!!!!! "; 2339 } 2340 2341 /*static*/ proc StartAddResTest(string method, string desc) 2342 { 2343 if( !defined(@save_res_list) ) 2344 { ERROR("Sorry: no global variable - run StartResTesting beforehand!!!"); } 2345 2346 if( defined(@save_opts) || defined(@save_method) || defined(@save_desc) ) 2347 { ERROR("Sorry: existing global variables - run StopAddResTest before another Start!!!"); } 2348 2349 2350 def @save_opts = option(get); export @save_opts; 2351 def @save_method = method; export @save_method; 2352 def @save_desc = desc; export @save_desc; 2353 2354 "< START RES TEST{{{ ", @save_method, ", with:", @save_desc, " ... "; 2355 } 2356 2357 2358 /*static*/ proc StopAddResTest(def RR, intmat S, int @t, int @m) 2359 { 2360 if( !(defined(@save_opts) && defined(@save_method) && defined(@save_desc)) ) 2361 { ERROR("Sorry: no global variables - run StartAddResTest beforehand!!!"); } 2362 2363 list @l = list(@save_method, @save_desc, option(get), S, @t, @m); 2364 2365 // RR, 2366 // print(S, "betti"); 2367 2368 "> -STOP RES TEST}}} ", @save_method, ", with:", @save_desc, ", Timer:", @t; option(); 2369 2370 option(set, @save_opts); kill @save_opts; 2371 2372 kill @save_method; kill @save_desc; 2373 2374 @save_res_list[1 + size(@save_res_list)] = @l; 2375 } 2376 2377 2378 /*static*/ proc SCheck(def S) 2379 { 2380 setring S; // for checking... 2381 2382 module M = MRES; 2383 if( ncols(M) < nrows(M) ) 2384 { 2385 M[nrows(M)] = 0; 2386 } else 2387 { 2388 M = transpose(M); 2389 if( ncols(M) < nrows(M) ) 2390 { 2391 M[nrows(M)] = 0; 2392 } 2393 M = transpose(M); 2394 } 2395 2396 if( nrows(M) != ncols(M) ) 2397 { 2398 "ERROR: non-square M!!!"; 2399 m2_end(666); 2400 } 2401 2402 if( size(module( M*M )) > 0 ) 2403 { 2404 "ERROR: module( M*M ) != 0!!!"; 2405 module( M*M ); 2406 2407 "MRES': "; M; print(M); 2408 2409 m2_end(666); 2410 } 2411 // "MRES': "; M; print(M); 2412 2413 if( size(RES[1]) != 0 ) 2414 { 2415 "ERROR: wrong starting zero module!!!"; 2416 m2_end(666); 2417 } 2418 2419 // RES; 2420 /* 2261 2421 MRES; 2262 2422 RES; … … 2266 2426 TRES; 2267 2427 */ 2268 kill S; 2269 " ", "options: ", attrib(SSinit, "LEAD2SYZ"), attrib(SSinit, "TAILREDSYZ"), attrib(SSinit, "HYBRIDNF"), ": ", "Time [sec]: ", tt - t; 2270 } 2271 2272 2273 proc TestSres(def M) 2274 { 2275 def opts = option(get); 2428 } 2429 //// TODO: SSres(0) fails..!!!?? 2430 proc TestSSres(def I) 2431 { 2432 def save = basering; 2433 int @t,@m,r,rr,i; 2434 StartAddResTest( 2435 "SSres", 2436 "minres + betti(,1) + mods: " + 2437 "{LEAD2SYZ:" +string(attrib(SSinit,"LEAD2SYZ")) + 2438 ";TAILREDSYZ:"+string(attrib(SSinit,"TAILREDSYZ")) + 2439 ";HYBRIDNF:" +string(attrib(SSinit,"HYBRIDNF")) + "}" 2440 ); 2441 option(redSB); option(redTail); 2442 rtimer=0;def R=SSres(I,0);@m=rtimer;setring R;module M;list @l=list();@l[size(RES)-1]=list();r=nrows(RES[1]);for(i=2;i<=size(RES);i++){M=RES[i];rr=nrows(M);if((r>0)&&(size(M)>0)&&(r<rr)){M=transpose(M);M=M[(r+1)..ncols(M)];M=transpose(M);RES[i]=M;};r=rr;@l[i-1] = M;};resolution RR=@l;RR=minres(RR);def S=betti(RR,1);@t=rtimer; 2443 SCheck(R); 2444 StopAddResTest(RR, S, @t,@m); 2445 kill S, RR; setring save; kill R; 2446 } 2447 2448 2449 proc TestSres(def I) 2450 { 2451 def save = basering; 2452 int @t,r,rr,i,@m; 2453 StartAddResTest( 2454 "Sres", 2455 "minres + betti(,1)" 2456 ); 2457 option(redSB); option(redTail); 2458 rtimer=0;def R=Sres(I,0);@m=rtimer;setring R;module M;list @l=list();@l[size(RES)-1]=list();r=nrows(RES[1]);for(i=2;i<=size(RES);i++){M=RES[i];rr=nrows(M);if((r>0)&&(size(M)>0)&&(r<rr)){M=transpose(M);M=M[(r+1)..ncols(M)];M=transpose(M);RES[i]=M;};r=rr;@l[i-1] = M;};resolution RR=@l;RR=minres(RR);def S=betti(RR,1);@t=rtimer; 2459 SCheck(R); 2460 StopAddResTest(RR, S, @t,@m); 2461 kill S, RR; setring save; kill R; 2462 } 2463 2464 2465 proc Testsres(def M) 2466 { 2467 int @t,@m; 2468 StartAddResTest("sres", "no minres + betti(,1)"); 2469 option(redSB);option(redTail); 2470 rtimer=0;def RR=sres(groebner(M),0);@m=rtimer;def S=betti(RR,1);@t=rtimer; 2471 StopAddResTest(RR, S, @t,@m); kill S, RR; 2472 } 2473 2474 proc Testlres(def M) 2475 { 2476 int @t,@m; 2477 StartAddResTest("lres", "no minres + betti(,1)"); 2478 option(redSB);option(redTail); 2479 rtimer=0;def RR=lres(M,0);@m=rtimer;def S=betti(RR,1);@t=rtimer; 2480 StopAddResTest(RR, S, @t,@m); kill S, RR; 2481 2482 StartAddResTest("lres", "minres + betti()"); 2483 option(redSB);option(redTail); 2484 rtimer=0;def RR=lres(M,0);@m=rtimer;def S=betti(minres(RR));@t=rtimer; 2485 StopAddResTest(RR, S, @t,@m); 2486 kill S, RR; 2487 } 2488 2489 2490 proc Testnres(def M) 2491 { 2492 int @t,@m; 2493 StartAddResTest("nres", "no minres + betti(,1)"); 2494 2276 2495 option(redSB); option(redTail); 2277 "/ ----------------------------------- : Sres ..."; 2278 int t = timer; 2279 def S = Sres(M, 0); 2280 int tt = timer; 2281 /* 2282 setring S; 2283 2284 MRES; 2285 RES; 2286 ""; 2287 LRES; 2288 ""; 2289 TRES; 2290 */ 2291 kill S; 2292 " Sres ", "Time [sec]: ", tt - t; 2293 option(set, opts); 2294 kill opts; 2295 } 2296 2297 2298 proc Testsres(def M) 2299 { 2300 def opts = option(get); 2301 option(redSB); option(redTail); 2302 "/ ----------------------------------- : sres ..."; 2303 int t = timer; 2304 def S = list(sres(groebner(M), 0)); 2305 int tt = timer; 2306 /* 2307 setring S; 2308 2309 MRES; 2310 RES; 2311 ""; 2312 LRES; 2313 ""; 2314 TRES; 2315 */ 2316 kill S; 2317 " sres ", "Time [sec]: ", tt - t; 2318 option(set, opts); 2319 kill opts; 2320 } 2321 2322 2323 proc Testlres(def M) 2324 { 2325 def opts = option(get); 2326 option(redSB); option(redTail); 2327 "/ ----------------------------------- : lres ..."; 2328 int t = timer; 2329 def S = list(lres(M, 0)); 2330 int tt = timer; 2331 kill S; 2332 " lres ", "Time [sec]: ", tt - t; 2333 option(set, opts); 2334 kill opts; 2335 } 2336 2337 2338 proc Testnres(def M) 2339 { 2340 def opts = option(get); 2341 option(redSB); option(redTail); 2342 "/ ----------------------------------- : nres ..."; 2343 int t = timer; 2344 def S = list(nres(M, 0)); 2345 int tt = timer; 2346 kill S; 2347 " nres ", "Time [sec]: ", tt - t; 2348 option(set, opts); 2349 kill opts; 2350 } 2351 2352 2353 proc TestSSresAttribs(def M) 2354 { 2496 rtimer=0;def RR=nres(M,0);@m=rtimer;def S=betti(RR,1);@t=rtimer; 2497 2498 StopAddResTest(RR, S, @t,@m); kill S, RR; 2499 } 2500 2501 proc TestSSresAttribs(def M, list #) 2502 { 2503 StartResTesting(#); 2504 // simple tests... 2355 2505 // M = groebner(M); "groebner: "; M; ""; 2356 2506 2357 2358 // the following 2 setups are bad for AGR@101n3d002s004%1:(((2359 2360 ////////// attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M);2361 ////////// attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M);2362 2363 attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M);2364 attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M);2365 2366 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M);2367 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M);2368 2369 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M);2370 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M);2371 }2372 2373 2374 proc TestSSresAttribs2tr(def M)2375 {2376 attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M);2377 attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M);2378 2379 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M);2380 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M);2381 2382 2383 2507 Testlres(M); 2384 2508 Testnres(M); 2385 2509 // Testsres(M); 2386 2510 // TestSres(M); // too long for the last medium test :( 2511 2512 2513 // attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M); 2514 // attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M); 2515 2516 // attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M); 2517 // attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M); 2518 2519 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M); 2520 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M); 2521 2522 2523 // the following 2 setups are bad for AGR@101n3d002s004%1:((( 2524 // attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M); 2525 // attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 0); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M); 2526 2527 StopResTesting(#); 2528 2529 } 2530 2531 2532 proc TestSSresAttribs2tr(def M, list #) 2533 { 2534 StartResTesting(#); 2535 2536 attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M); 2537 attrib(SSinit, "LEAD2SYZ", 0); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M); 2538 2539 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 0); TestSSres(M); 2540 attrib(SSinit, "LEAD2SYZ", 1); attrib(SSinit, "TAILREDSYZ", 1); attrib(SSinit, "HYBRIDNF", 1); TestSSres(M); 2541 2542 2543 Testlres(M); 2544 Testnres(M); 2545 // Testsres(M); 2546 // TestSres(M); // too long for the last medium test :( 2547 2548 StopResTesting(#); 2387 2549 } 2388 2550 … … 2390 2552 proc testSimple(list #) 2391 2553 { 2392 def DEBUG = 0;2554 def DEBUG = 1; 2393 2555 if(size(#) > 0) { DEBUG = #[1]; } 2394 2556 2395 system("--min-time", "1.0"); 2396 system("--ticks-per-sec", 1); 2557 system("--min-time", "0.01"); 2558 system("--ticks-per-sec", 100); 2559 2560 // option(prot); 2397 2561 2398 2562 // TODO: only for now!! 2399 2563 attrib(SSinit, "DEBUG", (DEBUG > 0)); 2400 attrib(SSinit, "SYZCHECK", 1);2564 attrib(SSinit, "SYZCHECK", (DEBUG > 0)); 2401 2565 attrib(SSinit, "KERCHECK", 1); 2402 2566 2403 2567 ring r; r; ideal M = maxideal(1); M; 2404 TestSSresAttribs(M );2568 TestSSresAttribs(M, "<" + string(M) + "> in " + string(basering)); 2405 2569 kill r; 2406 2570 2407 2571 ring r = 0, (a, b, c, d), lp; r; ideal M = maxideal(1); M; 2408 TestSSresAttribs(M );2572 TestSSresAttribs(M, "<" + string(M) + "> in " + string(basering)); 2409 2573 kill r; 2410 2574 2411 2575 ring R = 0, (w, x, y, z), dp; R; 2412 2576 ideal M = w^2 - x*z, w*x - y*z, x^2 - w*y, x*y - z^2, y^2 - w*z; M; 2413 TestSSresAttribs(M );2577 TestSSresAttribs(M, "<" + string(M) + "> in " + string(basering)); 2414 2578 kill R; 2415 2579 2416 2580 2417 2581 ring r = 0, (a, b, c, d, e, f), dp; r; ideal M = maxideal(1); M; 2418 TestSSresAttribs(M );2582 TestSSresAttribs(M, "<" + string(M) + "> in " + string(basering)); 2419 2583 kill r; 2420 2584 … … 2423 2587 ideal M = c*d, b*d, a*d, c^2-d^2, b*c, a*c, b^2-d^2, a*b, a^2-d^2; 2424 2588 M; 2425 TestSSresAttribs(M );2589 TestSSresAttribs(M, "simple: AGR@101n3d002s004%1"); 2426 2590 2427 2591 // medium: AGR@101n3d004s009%1; 2428 2592 M = a*b+7*a*c-16*b*c-27*a*d+37*b*d-2*c*d, d^3, c*d^2, b*d^2, a*d^2, c^2*d, b*c*d, a*c*d, b^2*d, a^2*d, c^3, b*c^2, a*c^2, b^2*c, a^2*c, b^3, a^3; 2429 2593 M; 2430 TestSSresAttribs(M); 2431 } 2432 2433 proc testAGR() 2434 { 2435 system("--min-time", "1.0"); 2436 system("--ticks-per-sec", 1); 2594 TestSSresAttribs(M, "medium: AGR@101n3d004s009%1"); 2595 } 2596 2597 proc testAGR(list #) 2598 { 2599 def DEBUG = 0; 2600 if(size(#) > 0) { DEBUG = #[1]; } 2601 2602 system("--min-time", "0.01"); 2603 system("--ticks-per-sec", 100); 2437 2604 2438 2605 attrib(SSinit, "DEBUG", 0); 2439 attrib(SSinit, "SYZCHECK", 1);2606 attrib(SSinit, "SYZCHECK", (DEBUG > 0)); 2440 2607 attrib(SSinit, "KERCHECK", 0); 2608 2609 // option(prot); 2441 2610 2442 2611 ring AGR = (101), (a, b, c, d), dp; AGR; … … 2444 2613 ideal M = c^4*d^2+4*a^3*d^3+29*a^2*b*d^3-2*a*b^2*d^3+2*b^3*d^3-21*a^2*c*d^3+46*a*b*c*d^3+2*b^2*c*d^3-13*a*c^2*d^3+32*b*c^2*d^3+46*c^3*d^3-28*a^2*d^4+4*a*b*d^4+29*b^2*d^4-8*a*c*d^4+33*b*c*d^4-16*c^2*d^4+17*a*d^5-3*b*d^5-42*c*d^5+47*d^6,b*c^3*d^2+35*a^3*d^3+24*a^2*b*d^3+46*a*b^2*d^3-22*b^3*d^3-48*a^2*c*d^3+20*a*b*c*d^3-28*b^2*c*d^3-40*a*c^2*d^3-4*b*c^2*d^3+35*c^3*d^3-21*a^2*d^4+3*a*b*d^4+8*b^2*d^4-2*a*c*d^4-22*b*c*d^4+24*c^2*d^4+44*a*d^5+33*b*d^5+31*c*d^5+26*d^6,a*c^3*d^2-42*a^3*d^3+34*a^2*b*d^3-10*a*b^2*d^3+30*b^3*d^3-6*a^2*c*d^3-30*a*b*c*d^3-34*b^2*c*d^3+29*a*c^2*d^3+35*b*c^2*d^3+13*c^3*d^3+8*a^2*d^4+23*a*b*d^4-29*b^2*d^4+12*a*c*d^4-22*b*c*d^4-50*c^2*d^4-4*b*d^5+9*c*d^5+13*d^6,b^2*c^2*d^2+a^3*d^3-49*a^2*b*d^3+26*a*b^2*d^3+20*b^3*d^3+24*a^2*c*d^3-2*a*b*c*d^3+31*b^2*c*d^3-30*a*c^2*d^3+21*b*c^2*d^3-24*c^3*d^3-38*a^2*d^4-14*a*b*d^4-14*b^2*d^4+6*a*c*d^4+3*b*c*d^4+13*c^2*d^4-11*a*d^5-38*b*d^5+22*c*d^5+48*d^6,a*b*c^2*d^2+18*a^3*d^3-29*a^2*b*d^3-21*a*b^2*d^3-2*b^3*d^3-25*a^2*c*d^3+37*a*b*c*d^3-14*b^2*c*d^3-47*a*c^2*d^3-6*b*c^2*d^3-34*c^3*d^3+43*a^2*d^4+22*a*b*d^4-39*b^2*d^4-41*a*c*d^4-17*b*c*d^4-13*c^2*d^4-43*a*d^5+28*b*d^5-42*c*d^5-49*d^6,a^2*c^2*d^2-33*a^3*d^3+30*a^2*b*d^3-13*a*b^2*d^3+18*b^3*d^3-8*a^2*c*d^3-18*a*b*c*d^3-15*b^2*c*d^3-21*a*c^2*d^3+45*b*c^2*d^3-35*c^3*d^3-4*a^2*d^4-4*a*b*d^4+10*b^2*d^4-19*a*c*d^4-18*b*c*d^4-22*c^2*d^4-27*a*d^5+20*b*d^5-14*c*d^5+24*d^6,b^3*c*d^2-10*a^3*d^3+37*a*b^2*d^3-43*b^3*d^3-10*a^2*c*d^3-9*a*b*c*d^3+47*a*c^2*d^3-24*b*c^2*d^3+12*c^3*d^3+7*a^2*d^4+19*a*b*d^4-27*b^2*d^4-2*a*c*d^4-35*b*c*d^4+45*c^2*d^4-44*a*d^5-43*b*d^5+24*c*d^5+16*d^6,a*b^2*c*d^2+2*a^3*d^3-14*a^2*b*d^3+2*a*b^2*d^3+18*b^3*d^3-48*a^2*c*d^3+43*a*b*c*d^3-25*b^2*c*d^3+15*a*c^2*d^3-7*b*c^2*d^3+42*c^3*d^3-16*a^2*d^4+7*b^2*d^4-23*a*c*d^4+24*b*c*d^4+25*c^2*d^4-17*a*d^5-16*b*d^5-32*c*d^5-50*d^6,a^2*b*c*d^2-16*a^3*d^3+7*a^2*b*d^3-20*a*b^2*d^3+11*b^3*d^3+16*a^2*c*d^3+6*a*b*c*d^3-25*b^2*c*d^3+42*a*c^2*d^3-39*b*c^2*d^3-15*c^3*d^3-25*a^2*d^4+46*a*b*d^4-3*b^2*d^4+5*a*c*d^4+28*b*c*d^4+6*c^2*d^4-20*a*d^5-15*b*d^5-30*c*d^5+17*d^6,a^3*c*d^2+39*a^3*d^3+22*a^2*b*d^3-21*a*b^2*d^3+10*b^3*d^3+40*a^2*c*d^3-37*a*b*c*d^3+11*b^2*c*d^3+43*a*c^2*d^3+28*b*c^2*d^3-10*c^3*d^3+30*a^2*d^4+36*a*b*d^4-45*b^2*d^4-40*a*c*d^4-31*b*c*d^4+28*c^2*d^4+35*a*d^5+6*b*d^5+14*c*d^5+25*d^6,b^4*d^2+50*a^3*d^3+12*a^2*b*d^3+29*a*b^2*d^3-38*b^3*d^3-44*a^2*c*d^3+28*a*b*c*d^3+18*b^2*c*d^3-31*a*c^2*d^3+16*b*c^2*d^3-18*c^3*d^3+5*a^2*d^4-43*a*b*d^4+16*b^2*d^4+9*a*c*d^4-30*b*c*d^4+50*c^2*d^4+3*a*d^5+33*b*d^5+3*c*d^5-48*d^6,a*b^3*d^2+13*a^3*d^3-28*a^2*b*d^3-33*a*b^2*d^3-25*b^3*d^3-41*a^2*c*d^3+a*b*c*d^3+19*b^2*c*d^3+41*a*c^2*d^3-17*b*c^2*d^3+34*c^3*d^3-10*a^2*d^4+30*a*b*d^4+34*b^2*d^4+13*a*c*d^4+b*c*d^4-35*c^2*d^4-34*a*d^5+23*b*d^5-7*c*d^5+6*d^6,a^2*b^2*d^2+22*a^3*d^3-32*a^2*b*d^3+29*a*b^2*d^3+21*b^3*d^3-30*a^2*c*d^3-47*a*b*c*d^3-11*b^2*c*d^3-16*a*c^2*d^3-14*b*c^2*d^3+49*c^3*d^3+47*a^2*d^4-11*a*b*d^4+4*b^2*d^4+13*a*c*d^4+7*b*c*d^4-30*c^2*d^4+31*a*d^5+10*b*d^5-8*c*d^5-27*d^6,a^3*b*d^2-43*a^3*d^3-2*a^2*b*d^3+15*a*b^2*d^3+42*b^3*d^3+25*a^2*c*d^3+22*a*b*c*d^3-4*b^2*c*d^3-29*a*c^2*d^3-31*b*c^2*d^3-3*c^3*d^3+33*a^2*d^4+20*a*b*d^4-34*b^2*d^4+8*a*c*d^4+48*b*c*d^4-29*c^2*d^4-46*a*d^5+27*b*d^5+29*c*d^5+33*d^6,a^4*d^2+30*a^3*d^3-42*a*b^2*d^3-16*b^3*d^3-33*a^2*c*d^3+13*a*b*c*d^3+7*b^2*c*d^3-23*a*c^2*d^3+28*b*c^2*d^3-37*c^3*d^3+3*a^2*d^4-34*a*b*d^4+16*b^2*d^4-21*a*c*d^4-39*b*c*d^4+5*c^2*d^4+35*a*d^5+39*b*d^5-26*c*d^5-47*d^6,c^5*d+48*a^3*d^3-37*a^2*b*d^3+31*a*b^2*d^3-19*b^3*d^3+49*a^2*c*d^3-5*a*b*c*d^3+45*b^2*c*d^3+24*a*c^2*d^3-26*b*c^2*d^3-10*c^3*d^3-a^2*d^4+43*a*b*d^4-26*b^2*d^4+45*a*c*d^4-3*b*c*d^4+38*c^2*d^4+10*a*d^5-5*b*d^5-34*c*d^5+22*d^6,b*c^4*d+30*a^3*d^3-40*a^2*b*d^3-39*a*b^2*d^3+33*b^3*d^3+31*a^2*c*d^3-17*a*b*c*d^3-44*b^2*c*d^3+24*a*c^2*d^3+22*b*c^2*d^3-44*c^3*d^3-29*a^2*d^4+4*a*b*d^4-4*b^2*d^4+8*a*c*d^4-42*b*c*d^4+15*c^2*d^4-42*a*d^5+15*b*d^5-41*c*d^5-46*d^6,a*c^4*d-11*a^3*d^3-5*a^2*b*d^3+33*a*b^2*d^3+7*b^3*d^3-31*a^2*c*d^3-47*a*b*c*d^3-50*b^2*c*d^3-50*a*c^2*d^3-39*b*c^2*d^3+25*c^3*d^3+5*a^2*d^4+35*a*b*d^4-34*b^2*d^4+42*a*c*d^4-44*b*c*d^4-17*c^2*d^4+11*a*d^5+b*d^5+31*c*d^5+45*d^6,b^2*c^3*d+12*a^3*d^3-41*a^2*b*d^3+29*a*b^2*d^3-42*b^3*d^3-32*a^2*c*d^3+47*a*b*c*d^3-13*b^2*c*d^3-20*a*c^2*d^3+45*b*c^2*d^3-49*c^3*d^3-34*a^2*d^4+16*a*b*d^4+11*b^2*d^4-49*a*c*d^4-27*b*c*d^4-31*c^2*d^4+29*a*d^5-23*b*d^5+13*c*d^5+42*d^6,a*b*c^3*d-16*a^3*d^3-35*a^2*b*d^3+12*a*b^2*d^3-39*b^3*d^3-32*a*b*c*d^3-4*b^2*c*d^3+31*a*c^2*d^3+43*b*c^2*d^3-42*c^3*d^3+36*a^2*d^4-5*a*b*d^4-4*b^2*d^4+5*a*c*d^4+20*b*c*d^4+31*c^2*d^4+15*a*d^5+25*b*d^5-16*c*d^5-28*d^6,a^2*c^3*d-16*a^3*d^3+8*a^2*b*d^3+30*a*b^2*d^3-16*b^3*d^3+20*a^2*c*d^3-11*b^2*c*d^3-48*a*c^2*d^3+11*b*c^2*d^3-20*c^3*d^3-24*a^2*d^4-23*a*b*d^4+9*b^2*d^4+13*a*c*d^4-42*b*c*d^4+22*c^2*d^4-29*a*d^5-28*b*d^5-7*c*d^5-2*d^6,b^3*c^2*d+42*a^3*d^3-11*a^2*b*d^3+18*a*b^2*d^3-13*b^3*d^3+22*a^2*c*d^3-10*a*b*c*d^3-25*b^2*c*d^3-17*a*c^2*d^3-23*b*c^2*d^3-37*c^3*d^3-3*a^2*d^4-33*a*b*d^4+44*b^2*d^4-41*a*c*d^4+6*b*c*d^4-36*c^2*d^4-43*a*d^5+b*d^5+25*c*d^5+48*d^6,a*b^2*c^2*d+21*a^3*d^3+5*a^2*b*d^3+38*a*b^2*d^3+25*b^3*d^3-12*a^2*c*d^3+7*a*b*c*d^3+28*b^2*c*d^3+a*c^2*d^3+33*b*c^2*d^3+22*c^3*d^3+10*a^2*d^4-7*a*b*d^4-5*b^2*d^4+50*a*c*d^4-23*b*c*d^4+22*c^2*d^4-4*a*d^5+45*b*d^5-42*c*d^5+d^6,a^2*b*c^2*d-45*a^3*d^3+2*a^2*b*d^3+44*a*b^2*d^3-5*b^3*d^3-19*a^2*c*d^3-3*a*b*c*d^3+18*b^2*c*d^3-22*a*c^2*d^3+46*b*c^2*d^3+41*c^3*d^3-26*a^2*d^4-a*b*d^4-42*b^2*d^4-40*a*c*d^4+39*b*c*d^4+24*c^2*d^4-6*a*d^5-6*b*d^5+13*c*d^5-28*d^6,a^3*c^2*d+4*a^3*d^3+31*a^2*b*d^3+21*a*b^2*d^3+39*b^3*d^3-8*a^2*c*d^3+49*a*b*c*d^3-48*b^2*c*d^3-16*a*c^2*d^3-33*b*c^2*d^3+35*c^3*d^3+41*a^2*d^4+18*a*b*d^4+47*b^2*d^4-3*a*c*d^4+12*b*c*d^4+13*c^2*d^4+32*a*d^5-40*b*d^5+50*c*d^5-2*d^6,b^4*c*d+23*a^3*d^3+47*a^2*b*d^3-10*a*b^2*d^3-43*b^3*d^3+49*a^2*c*d^3+7*a*b*c*d^3+34*b^2*c*d^3-40*a*c^2*d^3-37*b*c^2*d^3-6*c^3*d^3+30*a^2*d^4-34*a*b*d^4-6*b^2*d^4+21*a*c*d^4+41*b*c*d^4-33*c^2*d^4-9*a*d^5+2*b*d^5+8*c*d^5+7*d^6,a*b^3*c*d-5*a^3*d^3-42*a^2*b*d^3+22*a*b^2*d^3-35*b^3*d^3+a^2*c*d^3+20*a*b*c*d^3-10*b^2*c*d^3+23*a*c^2*d^3-17*b*c^2*d^3+30*c^3*d^3+24*a^2*d^4+32*a*b*d^4-7*b^2*d^4-48*a*c*d^4-25*b*c*d^4-6*c^2*d^4-33*a*d^5+29*b*d^5+12*c*d^5+26*d^6,a^2*b^2*c*d+6*a^3*d^3-46*a^2*b*d^3-30*a*b^2*d^3+b^3*d^3-35*a^2*c*d^3+41*a*b*c*d^3-4*b^2*c*d^3-42*a*c^2*d^3+16*b*c^2*d^3+19*c^3*d^3-13*a^2*d^4-16*a*b*d^4+45*b^2*d^4-25*a*c*d^4-48*b*c*d^4+35*c^2*d^4+50*a*d^5+31*b*d^5-25*c*d^5+6*d^6,a^3*b*c*d+3*a^3*d^3-39*a^2*b*d^3+14*a*b^2*d^3-4*b^3*d^3-36*a^2*c*d^3+47*a*b*c*d^3+27*b^2*c*d^3+50*a*c^2*d^3-45*b*c^2*d^3+49*c^3*d^3-18*a^2*d^4+20*a*b*d^4+17*b^2*d^4+a*c*d^4+33*b*c*d^4+42*c^2*d^4+19*a*d^5+18*b*d^5+33*c*d^5+15*d^6,a^4*c*d-14*a^3*d^3-8*a^2*b*d^3-a*b^2*d^3-34*b^3*d^3-27*a^2*c*d^3-15*a*b*c*d^3-14*b^2*c*d^3+33*a*c^2*d^3-34*b*c^2*d^3-4*c^3*d^3+47*a^2*d^4+50*a*b*d^4-6*b^2*d^4+16*a*c*d^4+26*c^2*d^4-27*a*d^5+2*b*d^5-31*c*d^5+47*d^6,b^5*d+3*a^3*d^3-9*a^2*b*d^3+46*a*b^2*d^3+b^3*d^3-2*a^2*c*d^3-39*a*b*c*d^3-31*b^2*c*d^3-30*a*c^2*d^3+23*b*c^2*d^3+25*c^3*d^3+9*a^2*d^4-15*a*b*d^4-2*b^2*d^4-12*a*c*d^4+11*b*c*d^4+9*c^2*d^4+3*a*d^5+9*b*d^5+41*c*d^5-38*d^6,a*b^4*d-48*a^3*d^3+42*a^2*b*d^3+27*a*b^2*d^3+32*b^3*d^3+21*a^2*c*d^3-5*a*b*c*d^3-39*b^2*c*d^3+6*a*c^2*d^3-20*b*c^2*d^3+45*c^3*d^3-48*a^2*d^4+44*a*b*d^4+25*b^2*d^4-29*a*c*d^4+4*b*c*d^4+50*c^2*d^4-6*a*d^5-40*b*d^5-11*c*d^5-28*d^6,a^2*b^3*d-41*a^3*d^3+21*a^2*b*d^3+39*a*b^2*d^3-2*b^3*d^3+24*a*b*c*d^3-10*b^2*c*d^3+31*a*c^2*d^3-34*b*c^2*d^3-31*c^3*d^3+20*a^2*d^4+41*a*b*d^4-10*b^2*d^4-40*a*c*d^4+5*b*c*d^4+31*c^2*d^4+6*a*d^5+26*b*d^5+29*c*d^5-5*d^6,a^3*b^2*d-11*a^3*d^3-39*a^2*b*d^3+2*a*b^2*d^3-44*b^3*d^3-23*a^2*c*d^3+21*a*b*c*d^3-44*b^2*c*d^3-7*a*c^2*d^3+49*b*c^2*d^3+46*c^3*d^3+17*a^2*d^4+49*a*b*d^4-14*b^2*d^4+29*a*c*d^4-20*b*c*d^4-49*c^2*d^4-13*a*d^5-41*b*d^5-18*c*d^5+50*d^6,a^4*b*d+9*a^3*d^3+50*a^2*b*d^3+46*a*b^2*d^3-48*b^3*d^3+43*a^2*c*d^3-45*a*b*c*d^3+24*b^2*c*d^3-4*a*c^2*d^3-b*c^2*d^3-34*c^3*d^3+33*a^2*d^4+14*a*b*d^4-37*b^2*d^4-13*a*c*d^4+48*b*c*d^4-31*c^2*d^4-22*a*d^5+42*b*d^5+49*c*d^5-43*d^6,a^5*d+33*a^3*d^3-23*a^2*b*d^3+30*a*b^2*d^3+5*b^3*d^3-26*a^2*c*d^3-35*a*b*c*d^3-50*b^2*c*d^3-21*a*c^2*d^3+4*b*c^2*d^3+10*c^3*d^3+39*a^2*d^4-2*a*b*d^4+23*b^2*d^4+17*a*c*d^4-50*b*c*d^4-8*c^2*d^4-39*a*d^5+36*b*d^5-43*c*d^5-39*d^6,c^6+20*a^3*d^3-41*a*b^2*d^3+39*b^3*d^3+26*a^2*c*d^3-8*a*b*c*d^3-49*b^2*c*d^3+25*a*c^2*d^3+32*b*c^2*d^3-32*c^3*d^3-2*a^2*d^4-38*a*b*d^4-38*b^2*d^4+17*a*c*d^4+22*b*c*d^4-36*c^2*d^4-41*a*d^5+37*b*d^5-49*c*d^5-19*d^6,b*c^5-36*a^3*d^3+32*a^2*b*d^3-14*a*b^2*d^3-31*b^3*d^3-2*a^2*c*d^3-8*a*b*c*d^3-39*b^2*c*d^3-46*a*c^2*d^3+10*b*c^2*d^3+27*c^3*d^3+25*a^2*d^4-30*a*b*d^4+3*b^2*d^4-36*a*c*d^4+44*b*c*d^4+17*c^2*d^4-46*a*d^5-37*b*d^5-2*c*d^5-47*d^6,a*c^5-49*a^3*d^3+11*a^2*b*d^3-21*a*b^2*d^3-14*b^3*d^3+26*a^2*c*d^3-a*b*c*d^3+24*b^2*c*d^3-46*a*c^2*d^3+23*b*c^2*d^3+33*c^3*d^3-11*a^2*d^4-a*b*d^4+49*b^2*d^4-17*a*c*d^4+49*b*c*d^4+36*c^2*d^4+10*a*d^5-19*b*d^5+26*c*d^5-32*d^6,b^2*c^4-14*a^3*d^3+9*a^2*b*d^3-5*a*b^2*d^3+17*b^3*d^3+2*a^2*c*d^3+12*a*b*c*d^3-37*b^2*c*d^3-43*a*c^2*d^3+5*b*c^2*d^3-9*c^3*d^3-27*a^2*d^4+14*a*b*d^4-19*b^2*d^4+29*a*c*d^4+32*b*c*d^4-15*c^2*d^4-26*a*d^5-31*b*d^5+46*c*d^5-22*d^6,a*b*c^4+33*a^3*d^3-22*a^2*b*d^3-14*a*b^2*d^3-30*b^3*d^3-48*a^2*c*d^3+34*a*b*c*d^3-8*b^2*c*d^3-44*a*c^2*d^3-4*b*c^2*d^3+3*c^3*d^3+26*a^2*d^4+4*a*b*d^4+7*b^2*d^4-28*a*c*d^4-22*b*c*d^4-35*c^2*d^4-50*a*d^5-43*b*d^5+46*c*d^5-49*d^6,a^2*c^4-9*a^3*d^3+3*a^2*b*d^3+34*a*b^2*d^3+4*b^3*d^3+5*a^2*c*d^3-17*a*b*c*d^3-48*b^2*c*d^3+10*a*c^2*d^3+2*b*c^2*d^3-12*c^3*d^3-7*a^2*d^4-6*a*b*d^4+37*b^2*d^4-16*a*c*d^4+47*b*c*d^4+6*c^2*d^4-35*a*d^5-45*b*d^5-12*c*d^5-30*d^6,b^3*c^3-21*a^3*d^3-6*a^2*b*d^3-26*a*b^2*d^3-22*b^3*d^3-29*a*b*c*d^3-26*b^2*c*d^3+50*a*c^2*d^3-41*b*c^2*d^3+22*c^3*d^3-41*a^2*d^4+25*a*b*d^4+16*b^2*d^4+11*a*c*d^4+34*b*c*d^4+19*c^2*d^4-38*a*d^5-8*b*d^5-42*c*d^5-6*d^6,a*b^2*c^3+3*a^3*d^3-45*a^2*b*d^3+39*a*b^2*d^3+22*b^3*d^3+48*a^2*c*d^3-7*a*b*c*d^3-46*b^2*c*d^3-22*a*c^2*d^3-17*b*c^2*d^3-27*c^3*d^3-35*a^2*d^4+47*a*b*d^4+6*b^2*d^4-5*a*c*d^4-30*b*c*d^4+25*c^2*d^4-10*a*d^5+46*b*d^5+5*c*d^5-18*d^6,a^2*b*c^3-36*a^3*d^3+33*a^2*b*d^3+47*a*b^2*d^3-16*b^3*d^3-41*a^2*c*d^3+42*a*b*c*d^3-29*b^2*c*d^3+39*a*c^2*d^3-12*b*c^2*d^3-25*c^3*d^3-11*a^2*d^4-37*a*b*d^4+29*b^2*d^4-18*a*c*d^4+43*b*c*d^4+12*c^2*d^4-37*a*d^5+7*b*d^5+7*c*d^5-5*d^6,a^3*c^3+25*a^3*d^3+34*a^2*b*d^3+29*a*b^2*d^3-34*b^3*d^3-46*a^2*c*d^3-17*a*b*c*d^3+49*b^2*c*d^3-35*a*c^2*d^3-21*b*c^2*d^3-45*c^3*d^3+43*a^2*d^4+29*a*b*d^4+36*b^2*d^4+37*a*c*d^4+12*b*c*d^4-17*c^2*d^4+12*a*d^5+47*c*d^5-23*d^6,b^4*c^2-10*a^3*d^3+38*a^2*b*d^3+33*a*b^2*d^3+9*b^3*d^3-25*a^2*c*d^3+38*a*b*c*d^3-19*b^2*c*d^3-33*a*c^2*d^3-49*b*c^2*d^3-16*c^3*d^3-14*a^2*d^4-3*a*b*d^4-30*b^2*d^4-32*a*c*d^4+28*b*c*d^4-3*c^2*d^4-16*a*d^5+31*b*d^5-49*c*d^5-3*d^6,a*b^3*c^2+25*a^3*d^3-47*a^2*b*d^3+47*b^3*d^3+13*a^2*c*d^3-17*a*b*c*d^3+26*b^2*c*d^3-43*a*c^2*d^3+39*b*c^2*d^3-4*c^3*d^3+20*a^2*d^4+6*a*b*d^4+49*b^2*d^4+14*a*c*d^4-17*b*c*d^4+38*c^2*d^4+21*a*d^5-9*b*d^5-26*c*d^5+47*d^6,a^2*b^2*c^2+12*a^3*d^3+10*a^2*b*d^3-40*a*b^2*d^3+14*b^3*d^3+36*a^2*c*d^3-9*a*b*c*d^3+9*b^2*c*d^3+7*a*c^2*d^3+12*b*c^2*d^3-37*c^3*d^3-44*a^2*d^4-48*a*b*d^4+11*b^2*d^4-13*a*c*d^4+31*b*c*d^4+47*c^2*d^4+28*a*d^5+39*b*d^5+27*c*d^5-d^6,a^3*b*c^2-28*a^3*d^3-22*a^2*b*d^3-8*a*b^2*d^3+40*b^3*d^3-13*a^2*c*d^3+35*a*b*c*d^3-4*b^2*c*d^3+28*a*c^2*d^3+30*b*c^2*d^3-13*c^3*d^3+16*a^2*d^4+48*a*b*d^4-42*b^2*d^4+10*a*c*d^4-b*c*d^4+37*c^2*d^4-17*a*d^5-15*b*d^5+40*c*d^5+27*d^6,a^4*c^2+17*a^3*d^3+45*a^2*b*d^3+42*a*b^2*d^3-20*b^3*d^3-39*a^2*c*d^3-20*a*b*c*d^3-44*b^2*c*d^3+33*a*c^2*d^3+39*b*c^2*d^3-37*c^3*d^3+39*a^2*d^4+39*a*b*d^4-44*b^2*d^4+8*a*c*d^4-34*b*c*d^4+36*c^2*d^4-47*a*d^5+38*b*d^5-46*c*d^5+23*d^6,b^5*c+24*a^3*d^3+17*a^2*b*d^3-22*a*b^2*d^3-27*b^3*d^3+27*a^2*c*d^3+48*a*b*c*d^3+4*b^2*c*d^3+a*c^2*d^3-21*b*c^2*d^3-14*c^3*d^3+3*a^2*d^4+15*a*b*d^4+41*b^2*d^4-27*a*c*d^4+4*b*c*d^4+3*c^2*d^4-46*a*d^5+28*b*d^5+6*c*d^5+36*d^6,a*b^4*c-29*a^3*d^3+30*a^2*b*d^3+31*a*b^2*d^3+44*b^3*d^3-12*a^2*c*d^3-27*a*b*c*d^3+48*b^2*c*d^3+4*a*c^2*d^3+2*b*c^2*d^3-17*c^3*d^3-7*a^2*d^4+25*a*b*d^4-45*b^2*d^4-17*a*c*d^4-14*b*c*d^4-11*c^2*d^4-45*a*d^5-36*b*d^5-12*c*d^5-44*d^6,a^2*b^3*c-10*a^3*d^3-30*a^2*b*d^3-22*a*b^2*d^3-35*b^3*d^3+37*a^2*c*d^3-35*a*b*c*d^3-12*b^2*c*d^3-16*b*c^2*d^3+49*c^3*d^3+38*a^2*d^4-21*a*b*d^4-20*b^2*d^4-6*a*c*d^4+41*b*c*d^4+49*c^2*d^4+13*a*d^5-38*b*d^5-32*c*d^5-12*d^6,a^3*b^2*c+5*a^2*b*d^3-40*a*b^2*d^3+14*b^3*d^3-4*a^2*c*d^3-13*a*b*c*d^3+47*b^2*c*d^3+28*a*c^2*d^3+15*b*c^2*d^3+47*c^3*d^3-8*a^2*d^4-20*a*b*d^4+3*b^2*d^4+42*a*c*d^4+18*b*c*d^4-23*c^2*d^4-48*a*d^5+12*b*d^5-25*c*d^5-39*d^6,a^4*b*c+29*a^3*d^3+21*a^2*b*d^3-32*a*b^2*d^3+48*b^3*d^3-44*a^2*c*d^3-3*a*b*c*d^3-27*b^2*c*d^3+27*a*c^2*d^3+43*b*c^2*d^3-30*c^3*d^3+4*a^2*d^4+16*a*b*d^4+33*b^2*d^4+37*a*c*d^4-32*b*c*d^4+14*c^2*d^4+50*a*d^5-49*c*d^5-33*d^6,a^5*c-26*a^3*d^3-50*a^2*b*d^3+2*a*b^2*d^3+3*b^3*d^3-15*a^2*c*d^3-32*a*b*c*d^3-4*b^2*c*d^3-13*a*c^2*d^3-13*b*c^2*d^3+3*c^3*d^3+32*a^2*d^4-32*a*b*d^4-47*b^2*d^4-39*a*c*d^4-34*b*c*d^4-9*c^2*d^4-7*a*d^5-22*b*d^5+16*c*d^5+44*d^6,b^6+45*a^3*d^3-42*a^2*b*d^3-35*a*b^2*d^3+13*b^3*d^3+28*a^2*c*d^3-2*a*b*c*d^3-37*b^2*c*d^3-9*a*c^2*d^3+44*b*c^2*d^3-24*c^3*d^3+36*a^2*d^4+42*a*b*d^4-38*b^2*d^4-34*a*c*d^4-46*b*c*d^4+23*c^2*d^4-9*a*d^5-28*b*d^5+37*c*d^5+26*d^6,a*b^5-14*a^3*d^3+38*a^2*b*d^3-37*a*b^2*d^3-33*b^3*d^3-24*a^2*c*d^3+15*a*b*c*d^3+44*b^2*c*d^3-45*a*c^2*d^3+3*b*c^2*d^3-41*c^3*d^3-48*a^2*d^4-36*a*b*d^4+39*b^2*d^4+46*a*c*d^4-3*b*c*d^4+21*c^2*d^4-36*a*d^5-20*b*d^5+24*c*d^5-33*d^6,a^2*b^4-27*a^3*d^3-10*a^2*b*d^3-5*a*b^2*d^3+8*b^3*d^3+21*a^2*c*d^3+31*a*b*c*d^3-44*b^2*c*d^3+41*a*c^2*d^3+17*b*c^2*d^3-8*c^3*d^3+19*a^2*d^4+25*a*b*d^4+b^2*d^4+3*a*c*d^4+2*b*c*d^4-40*c^2*d^4+31*a*d^5-19*b*d^5+35*c*d^5-28*d^6,a^3*b^3-12*a^3*d^3-25*a^2*b*d^3+37*a*b^2*d^3-37*b^3*d^3+46*a^2*c*d^3+43*a*b*c*d^3+b^2*c*d^3-41*a*c^2*d^3-38*b*c^2*d^3-36*c^3*d^3-11*a*b*d^4+20*b^2*d^4-a*c*d^4-26*b*c*d^4+14*c^2*d^4-48*a*d^5+17*b*d^5+9*c*d^5+30*d^6,a^4*b^2+36*a^3*d^3+9*a^2*b*d^3-31*b^3*d^3+50*a^2*c*d^3+41*a*b*c*d^3+40*b^2*c*d^3+48*a*c^2*d^3-41*b*c^2*d^3-17*c^3*d^3+33*a^2*d^4+47*a*b*d^4+22*b^2*d^4+2*a*c*d^4+23*b*c*d^4-47*c^2*d^4+34*a*d^5-15*b*d^5-33*c*d^5-38*d^6,a^5*b-12*a^3*d^3-38*a^2*b*d^3+46*a*b^2*d^3-32*b^3*d^3-41*a^2*c*d^3+14*a*b*c*d^3-34*b^2*c*d^3+7*a*c^2*d^3-6*b*c^2*d^3+31*c^3*d^3+30*a^2*d^4+12*a*b*d^4-17*b^2*d^4-7*a*c*d^4-45*b*c*d^4+10*c^2*d^4+29*a*d^5-28*b*d^5+34*c*d^5-15*d^6,a^6-33*a^3*d^3-45*a^2*b*d^3+19*a*b^2*d^3+39*b^3*d^3-5*a^2*c*d^3-46*a*b*c*d^3+9*b^2*c*d^3+15*a*c^2*d^3-21*b*c^2*d^3+46*c^3*d^3-39*a^2*d^4-9*a*b*d^4+50*b^2*d^4-45*a*c*d^4-39*b*c*d^4-18*c^2*d^4-4*a*d^5-19*b*d^5+12*c*d^5+39*d^6,d^7,c*d^6,b*d^6,a*d^6,c^2*d^5,b*c*d^5,a*c*d^5,b^2*d^5,a*b*d^5,a^2*d^5,c^3*d^4,b*c^2*d^4,a*c^2*d^4,b^2*c*d^4,a*b*c*d^4,a^2*c*d^4,b^3*d^4,a*b^2*d^4,a^2*b*d^4,a^3*d^4; 2445 2614 M; 2446 TestSSresAttribs2tr(M );2615 TestSSresAttribs2tr(M, "lengthy: AGR@101n3d008s058%3"); 2447 2616 2448 2617 // AGR@101n3d010s010%3, a bit slower... 2449 2618 M = a^2*b^5-50*a*b^6-26*a^6*c+15*a^5*b*c-42*a^4*b^2*c-2*a^3*b^3*c+40*a^2*b^4*c-20*a*b^5*c+11*b^6*c-17*a^5*c^2-4*a^4*b*c^2+13*a^3*b^2*c^2-7*a^2*b^3*c^2+13*a*b^4*c^2-46*b^5*c^2+38*a^4*c^3+32*a^3*b*c^3-49*a^2*b^2*c^3-41*a*b^3*c^3+9*b^4*c^3+17*a^3*c^4-23*a^2*b*c^4+46*a*b^2*c^4+9*b^3*c^4-20*a^2*c^5-34*a*b*c^5-46*b^2*c^5-3*a*c^6+11*b*c^6-22*a^6*d-5*a^5*b*d-21*a^4*b^2*d-43*a^3*b^3*d-29*a^2*b^4*d+43*a*b^5*d-2*b^6*d+24*a^5*c*d-9*a^4*b*c*d+3*a^3*b^2*c*d+20*a^2*b^3*c*d+47*a*b^4*c*d-41*b^5*c*d+11*a^4*c^2*d-14*a^3*b*c^2*d+13*a^2*b^2*c^2*d-19*a*b^3*c^2*d-12*b^4*c^2*d+41*a^3*c^3*d-49*a^2*b*c^3*d-10*a*b^2*c^3*d+19*b^3*c^3*d-13*a^2*c^4*d+10*a*b*c^4*d-49*b^2*c^4*d-3*a*c^5*d-10*b*c^5*d+31*c^6*d-16*a^5*d^2+24*a^4*b*d^2-43*a^3*b^2*d^2+36*a^2*b^3*d^2-36*a^4*c*d^2-36*a^3*b*c*d^2-16*a^2*b^2*c*d^2+35*a*b^3*c*d^2+29*b^4*c*d^2+40*a^3*c^2*d^2-24*a^2*b*c^2*d^2-24*a*b^2*c^2*d^2+7*b^3*c^2*d^2+28*a^2*c^3*d^2+49*a*b*c^3*d^2+49*b^2*c^3*d^2+7*a*c^4*d^2-9*b*c^4*d^2+21*c^5*d^2-28*a^4*d^3+24*a^3*b*d^3-24*a^2*b^2*d^3+23*a*b^3*d^3+24*b^4*d^3+24*a^3*c*d^3-25*a^2*b*c*d^3-9*a*b^2*c*d^3-43*b^3*c*d^3+15*a^2*c^2*d^3+49*a*b*c^2*d^3+24*b^2*c^2*d^3-20*a*c^3*d^3-30*b*c^3*d^3-20*c^4*d^3+13*a^3*d^4+34*a^2*b*d^4-45*a*b^2*d^4+9*b^3*d^4+9*a^2*c*d^4-31*a*b*c*d^4-6*b^2*c*d^4-16*a*c^2*d^4+9*b*c^2*d^4+24*c^3*d^4+38*a^2*d^5-23*a*b*d^5-35*b^2*d^5+22*a*c*d^5-22*b*c*d^5+46*c^2*d^5+12*a*d^6+21*b*d^6-23*c*d^6-2*d^7,a^3*b^4+34*a^6*c+14*a^5*b*c+34*a^4*b^2*c+43*a^3*b^3*c-26*a^2*b^4*c+13*a*b^5*c+10*b^6*c-43*a^5*c^2+50*a^4*b*c^2-23*a^3*b^2*c^2-a^2*b^3*c^2+39*a*b^4*c^2+50*b^5*c^2+16*a^4*c^3+31*a^3*b*c^3-49*a^2*b^2*c^3+26*a*b^3*c^3-b^4*c^3-5*a^3*c^4+3*a^2*b*c^4-26*a*b^2*c^4-b^3*c^4-24*a^2*c^5-39*a*b*c^5+50*b^2*c^5-13*a*c^6+10*b*c^6-39*a^6*d+35*a^5*b*d+44*a^4*b^2*d-39*a^3*b^3*d-26*a^2*b^4*d-47*a*b^5*d-42*b^6*d+34*a^5*c*d-43*a^4*b*c*d-39*a^3*b^2*c*d+41*a^2*b^3*c*d+32*a*b^4*c*d-10*b^5*c*d+43*a^4*c^2*d+12*a^3*b*c^2*d-43*a^2*b^2*c^2*d+23*a*b^3*c^2*d-46*b^4*c^2*d+12*a^3*c^3*d-10*a^2*b*c^3*d+13*a*b^2*c^3*d-15*b^3*c^3*d-a^2*c^4*d+17*a*b*c^4*d-47*b^2*c^4*d+49*a*c^5*d-31*b*c^5*d-22*c^6*d-28*a^5*d^2-39*a^4*b*d^2+33*a^3*b^2*d^2-40*a^2*b^3*d^2+31*a*b^4*d^2+5*b^5*d^2+42*a^4*c*d^2-a^3*b*c*d^2+37*a^2*b^2*c*d^2-13*a*b^3*c*d^2+b^4*c*d^2+35*a^3*c^2*d^2-9*a^2*b*c^2*d^2+46*a*b^2*c^2*d^2-2*b^3*c^2*d^2+15*a^2*c^3*d^2-48*a*b*c^3*d^2+38*b^2*c^3*d^2-37*a*c^4*d^2-40*b*c^4*d^2+25*c^5*d^2+5*a^4*d^3-4*a^3*b*d^3+30*a^2*b^2*d^3-42*a*b^3*d^3+11*b^4*d^3+10*a^3*c*d^3+34*a^2*b*c*d^3-48*a*b^2*c*d^3+17*b^3*c*d^3-33*a^2*c^2*d^3-12*a*b*c^2*d^3-44*b^2*c^2*d^3-6*a*c^3*d^3+6*b*c^3*d^3-45*c^4*d^3+6*a^3*d^4+8*a^2*b*d^4-22*a*b^2*d^4+23*b^3*d^4-22*a^2*c*d^4-38*a*b*c*d^4+44*b^2*c*d^4-13*a*c^2*d^4-50*b*c^2*d^4+30*c^3*d^4-6*a^2*d^5-46*a*b*d^5+17*b^2*d^5-23*a*c*d^5-10*b*c*d^5+32*c^2*d^5-47*a*d^6+2*b*d^6+20*c*d^6-46*d^7,a^4*b^3+30*a*b^6-49*a^6*c+18*a^5*b*c+37*a^4*b^2*c+44*a^3*b^3*c-27*a^2*b^4*c-a*b^5*c-35*b^6*c-20*a^5*c^2+32*a^4*b*c^2+28*a^3*b^2*c^2-13*a^2*b^3*c^2-32*a*b^4*c^2+27*b^5*c^2-4*a^4*c^3+25*a^3*b*c^3+22*a^2*b^2*c^3-23*a*b^3*c^3-47*b^4*c^3+41*a^3*c^4-25*a^2*b*c^4-34*a*b^2*c^4-47*b^3*c^4-33*a^2*c^5-43*a*b*c^5+27*b^2*c^5-31*a*c^6-35*b*c^6-49*a^6*d+30*a^5*b*d-4*a^4*b^2*d+11*a^3*b^3*d-12*a^2*b^4*d-38*a*b^5*d+45*b^6*d+5*a^5*c*d-45*a^4*b*c*d-42*a^3*b^2*c*d-11*a^2*b^3*c*d+21*a*b^4*c*d+18*b^5*c*d-50*a^4*c^2*d-25*a^3*b*c^2*d+35*a^2*b^2*c^2*d-a*b^3*c^2*d+30*b^4*c^2*d+28*a^3*c^3*d-46*a^2*b*c^3*d-4*a*b^2*c^3*d+32*b^3*c^3*d+21*a^2*c^4*d-34*a*b*c^4*d+27*b^2*c^4*d+11*a*c^5*d-45*b*c^5*d+4*c^6*d+2*a^5*d^2-43*a^4*b*d^2-36*a^3*b^2*d^2+14*a^2*b^3*d^2+35*a*b^4*d^2+8*b^5*d^2+34*a^4*c*d^2-12*a^3*b*c*d^2-a^2*b^2*c*d^2-5*a*b^3*c*d^2+43*b^4*c*d^2+45*a^3*c^2*d^2-34*a^2*b*c^2*d^2+26*a*b^2*c^2*d^2+10*b^3*c^2*d^2-19*a^2*c^3*d^2+5*a*b*c^3*d^2-47*b^2*c^3*d^2+40*a*c^4*d^2+8*b*c^4*d^2+30*c^5*d^2+42*a^4*d^3+27*a^3*b*d^3+31*a^2*b^2*d^3-6*a*b^3*d^3+36*b^4*d^3+37*a^2*b*c*d^3+34*a*b^2*c*d^3-13*b^3*c*d^3+a^2*c^2*d^3+29*a*b*c^2*d^3-b^2*c^2*d^3-11*a*c^3*d^3-21*b*c^3*d^3+32*c^4*d^3+9*a^3*d^4-21*a^2*b*d^4+26*a*b^2*d^4+43*b^3*d^4-42*a^2*c*d^4-2*a*b*c*d^4-34*b^2*c*d^4+10*a*c^2*d^4-26*b*c^2*d^4-50*c^3*d^4+23*a^2*d^5+49*a*b*d^5+28*b^2*d^5-48*a*c*d^5-18*b*c*d^5-2*c^2*d^5-2*a*d^6-30*b*d^6+36*c*d^6-21*d^7,a^5*b^2+9*a*b^6+6*a^6*c+34*a^5*b*c-14*a^4*b^2*c-43*a^3*b^3*c-27*a^2*b^4*c+14*a*b^5*c+9*b^6*c-28*a^5*c^2-10*a^4*b*c^2+39*a^3*b^2*c^2-49*a^2*b^3*c^2-38*a*b^4*c^2+45*b^5*c^2+4*a^4*c^3+5*a^3*b*c^3+15*a^2*b^2*c^3-11*a*b^3*c^3-11*b^4*c^3+24*a^3*c^4-32*a^2*b*c^4-2*a*b^2*c^4-11*b^3*c^4+32*a^2*c^5-38*a*b*c^5+45*b^2*c^5-4*a*c^6+9*b*c^6+23*a^6*d-13*a^5*b*d+8*a^4*b^2*d-46*a^3*b^3*d-9*a^2*b^4*d-8*a*b^5*d+17*b^6*d+a^5*c*d+5*a^4*b*c*d-50*a^3*b^2*c*d+22*a^2*b^3*c*d-34*a*b^4*c*d-49*b^5*c*d+44*a^4*c^2*d+41*a^3*b*c^2*d-44*a^2*b^2*c^2*d-49*a*b^3*c^2*d+37*b^4*c^2*d+45*a^3*c^3*d+12*a^2*b*c^3*d-23*a*b^2*c^3*d-32*b^3*c^3*d-14*a^2*c^4*d+5*a*b*c^4*d+48*b^2*c^4*d+5*a*c^5*d-20*b*c^5*d-c^6*d+5*a^5*d^2-45*a^4*b*d^2+42*a^3*b^2*d^2+50*a^2*b^3*d^2-8*a*b^4*d^2-49*b^5*d^2-35*a^4*c*d^2-25*a^3*b*c*d^2-4*a^2*b^2*c*d^2-26*a*b^3*c*d^2-28*b^4*c*d^2+46*a^3*c^2*d^2+22*a^2*b*c^2*d^2+43*a*b^2*c^2*d^2-4*b^3*c^2*d^2-25*a^2*c^3*d^2+31*a*b*c^3*d^2-31*b^2*c^3*d^2-30*a*c^4*d^2-18*b*c^4*d^2-12*c^5*d^2-33*a^4*d^3-48*a^3*b*d^3-36*a^2*b^2*d^3-6*a*b^3*d^3+8*b^4*d^3+3*a^3*c*d^3-43*a^2*b*c*d^3+34*a*b^2*c*d^3+19*b^3*c*d^3+19*a^2*c^2*d^3-49*a*b*c^2*d^3-2*b^2*c^2*d^3+12*a*c^3*d^3-29*b*c^3*d^3-16*c^4*d^3+27*a^3*d^4+22*a^2*b*d^4+22*a*b^2*d^4-12*b^3*d^4+34*a^2*c*d^4+8*a*b*c*d^4+50*b^2*c*d^4+40*a*c^2*d^4+27*b*c^2*d^4-35*c^3*d^4-30*a^2*d^5+24*a*b*d^5+7*b^2*d^5+16*a*c*d^5+17*b*c*d^5-40*c^2*d^5-47*a*d^6-12*b*d^6+16*c*d^6+6*d^7,a^6*b-45*a*b^6-30*a^6*c-5*a^5*b*c-39*a^4*b^2*c-37*a^3*b^3*c+a^2*b^4*c-14*a*b^5*c-37*b^6*c+49*a^5*c^2+28*a^4*b*c^2+7*a^3*b^2*c^2-10*a^2*b^3*c^2+10*a*b^4*c^2+17*b^5*c^2-34*a^4*c^3+24*a^3*b*c^3-36*a^2*b^2*c^3-13*a*b^3*c^3+34*b^4*c^3-20*a^3*c^4-38*a^2*b*c^4+32*a*b^2*c^4+34*b^3*c^4-13*a^2*c^5+44*a*b*c^5+17*b^2*c^5+20*a*c^6-37*b*c^6+10*a^6*d+26*a^5*b*d+15*a^4*b^2*d+23*a^3*b^3*d+16*a^2*b^4*d+48*a*b^5*d-30*b^6*d-9*a^5*c*d-20*a^4*b*c*d+49*a^3*b^2*c*d-48*a^2*b^3*c*d-36*a*b^4*c*d-21*b^5*c*d+9*a^4*c^2*d-24*a^3*b*c^2*d+42*a^2*b^2*c^2*d+26*a*b^3*c^2*d-46*b^4*c^2*d-50*a^3*c^3*d-11*a^2*b*c^3*d-34*a*b^2*c^3*d+32*b^3*c^3*d-16*a^2*c^4*d-25*a*b*c^4*d+6*b^2*c^4*d+18*a*c^5*d-40*b*c^5*d+41*c^6*d-8*a^5*d^2-27*a^4*b*d^2-48*a^3*b^2*d^2-a^2*b^3*d^2+50*a*b^4*d^2+21*b^5*d^2-48*a^4*c*d^2+4*a^3*b*c*d^2-28*a^2*b^2*c*d^2-4*a*b^3*c*d^2+16*b^4*c*d^2+50*a^3*c^2*d^2+40*a^2*b*c^2*d^2+35*a*b^2*c^2*d^2+29*b^3*c^2*d^2-34*a^2*c^3*d^2-21*a*b*c^3*d^2-b^2*c^3*d^2-9*a*c^4*d^2-29*b*c^4*d^2+6*c^5*d^2+16*a^4*d^3-34*a^3*b*d^3+3*a^2*b^2*d^3+21*a*b^3*d^3+39*b^4*d^3+21*a^3*c*d^3-44*a^2*b*c*d^3-16*a*b^2*c*d^3+b^3*c*d^3-38*a^2*c^2*d^3+18*a*b*c^2*d^3+37*b^2*c^2*d^3-46*a*c^3*d^3+25*b*c^3*d^3-50*c^4*d^3-8*a^3*d^4-24*a^2*b*d^4-2*a*b^2*d^4+6*b^3*d^4+9*a^2*c*d^4+12*a*b*c*d^4+33*b^2*c*d^4-44*a*c^2*d^4+23*b*c^2*d^4-4*c^3*d^4-9*a^2*d^5-2*a*b*d^5-14*b^2*d^5+21*a*c*d^5-16*b*c*d^5-19*c^2*d^5+17*a*d^6-20*b*d^6+11*c*d^6-41*d^7,a^7-10*a*b^6-6*a^6*c-48*a^5*b*c-14*a^4*b^2*c-16*a^3*b^3*c-4*a^2*b^4*c+24*a*b^5*c-10*b^6*c-2*a^5*c^2+23*a^3*b^2*c^2+26*a^2*b^3*c^2+22*a*b^4*c^2-50*b^5*c^2+14*a^4*c^3-7*a^3*b*c^3+a^2*b^2*c^3-49*a*b^3*c^3+b^4*c^3-46*a^3*c^4+9*a^2*b*c^4+10*a*b^2*c^4+b^3*c^4+38*a^2*c^5-26*a*b*c^5-50*b^2*c^5+28*a*c^6-10*b*c^6-7*a^6*d+24*a^5*b*d-8*a^4*b^2*d+23*a^3*b^3*d+9*a^2*b^4*d+28*a*b^5*d-23*b^6*d-42*a^4*b*c*d+24*a^3*b^2*c*d-30*a^2*b^3*c*d-42*a*b^4*c*d-43*b^5*c*d-42*a^4*c^2*d+11*a^3*b*c^2*d+9*a^2*b^2*c^2*d-8*a*b^3*c^2*d+4*b^4*c^2*d+10*a^3*c^3*d+43*a^2*b*c^3*d+3*a*b^2*c^3*d-14*b^3*c^3*d-5*a^2*c^4*d+25*a*b*c^4*d-50*b^2*c^4*d-17*a*c^5*d+35*b*c^5*d+47*c^6*d-4*a^5*d^2-43*a^4*b*d^2+35*a^3*b^2*d^2+19*a^2*b^3*d^2+48*a*b^4*d^2+45*b^5*d^2+3*a^4*c*d^2-46*a^3*b*c*d^2+8*a^2*b^2*c*d^2-35*a*b^3*c*d^2-27*b^4*c*d^2-49*a^3*c^2*d^2+37*a^2*b*c^2*d^2-43*a*b^2*c^2*d^2+32*b^3*c^2*d^2+48*a^2*c^3*d^2+9*a*b*c^3*d^2+b^2*c^3*d^2-31*a*c^4*d^2-23*b*c^4*d^2-21*c^5*d^2+34*a^4*d^3+38*a^3*b*d^3+41*a^2*b^2*d^3-24*a*b^3*d^3+28*b^4*d^3+47*a^3*c*d^3-6*a^2*b*c*d^3+27*a*b^2*c*d^3-43*b^3*c*d^3-24*a^2*c^2*d^3-19*a*b*c^2*d^3-50*b^2*c^2*d^3+31*a*c^3*d^3+40*b*c^3*d^3+19*c^4*d^3+4*a^3*d^4-36*a^2*b*d^4+43*a*b^2*d^4+27*b^3*d^4+49*a^2*c*d^4-27*a*b*c*d^4-39*b^2*c*d^4+46*a*c^2*d^4+40*b*c^2*d^4+5*c^3*d^4-12*a^2*d^5-5*a*b*d^5+16*b^2*d^5-26*a*c*d^5-31*b*c*d^5-38*c^2*d^5+17*a*d^6-11*b*d^6-7*c*d^6-39*d^7,b*c*d^6-21*c^2*d^6+36*a*d^7-34*b*d^7-40*c*d^7-11*d^8,a*c*d^6-24*c^2*d^6+5*a*d^7-7*b*d^7+21*c*d^7-43*d^8,b^2*d^6+20*c^2*d^6+6*a*d^7-30*b*d^7+25*c*d^7+4*d^8,a*b*d^6+23*c^2*d^6-43*a*d^7+47*b*d^7+42*c*d^7+29*d^8,a^2*d^6+49*c^2*d^6+6*a*d^7-35*b*d^7+19*c*d^7-11*d^8,c^3*d^5-38*c^2*d^6+47*a*d^7+35*b*d^7+46*c*d^7+21*d^8,b*c^2*d^5+41*c^2*d^6-8*a*d^7+8*b*d^7+46*c*d^7+42*d^8,a*c^2*d^5+44*c^2*d^6+10*a*d^7-36*b*d^7-21*c*d^7+28*d^8,b^2*c*d^5+9*c^2*d^6+35*a*d^7+20*b*d^7+49*c*d^7-47*d^8,a*b*c*d^5+44*c^2*d^6+24*a*d^7-12*b*d^7+24*c*d^7-5*d^8,a^2*c*d^5-9*c^2*d^6-34*a*d^7+27*b*d^7-49*c*d^7+d^8,b^3*d^5+21*c^2*d^6-37*a*d^7-13*b*d^7-48*c*d^7+25*d^8,a*b^2*d^5+4*c^2*d^6-8*a*d^7-42*b*d^7-31*c*d^7+21*d^8,a^2*b*d^5+26*c^2*d^6-47*a*d^7-37*b*d^7+24*c*d^7+6*d^8,a^3*d^5-32*c^2*d^6-31*a*d^7+26*b*d^7-35*c*d^7-39*d^8,c^4*d^4+25*c^2*d^6+35*a*d^7+24*b*d^7+32*c*d^7-46*d^8,b*c^3*d^4+10*c^2*d^6-9*a*d^7-27*b*d^7-17*c*d^7+11*d^8,a*c^3*d^4-41*c^2*d^6+5*a*d^7-18*b*d^7-43*c*d^7-25*d^8,b^2*c^2*d^4-9*c^2*d^6+15*a*d^7-7*b*d^7-27*c*d^7-40*d^8,a*b*c^2*d^4-4*c^2*d^6+25*a*d^7-9*b*d^7-41*c*d^7-11*d^8,a^2*c^2*d^4+15*c^2*d^6-5*a*d^7-34*b*d^7-11*c*d^7-29*d^8,b^3*c*d^4+49*c^2*d^6-24*a*d^7-8*b*d^7+7*c*d^7-46*d^8,a*b^2*c*d^4-20*c^2*d^6-4*a*d^7+32*b*d^7-42*c*d^7-d^8,a^2*b*c*d^4+15*c^2*d^6+31*a*d^7+16*b*d^7-25*c*d^7+29*d^8,a^3*c*d^4-48*c^2*d^6-36*a*d^7-10*b*d^7+4*c*d^7+27*d^8,b^4*d^4+26*c^2*d^6-25*a*d^7-3*b*d^7-45*c*d^7-26*d^8,a*b^3*d^4+c^2*d^6-21*a*d^7-13*b*d^7-20*c*d^7+16*d^8,a^2*b^2*d^4+22*c^2*d^6-27*a*d^7-23*b*d^7-5*c*d^7-27*d^8,a^3*b*d^4+2*c^2*d^6-29*a*d^7-6*b*d^7+26*c*d^7-46*d^8,a^4*d^4-40*c^2*d^6-9*a*d^7-24*b*d^7+2*c*d^7-37*d^8,c^5*d^3+14*c^2*d^6+40*a*d^7+21*b*d^7+50*c*d^7+31*d^8,b*c^4*d^3-21*c^2*d^6-2*a*d^7-9*b*d^7-28*c*d^7+20*d^8,a*c^4*d^3-39*c^2*d^6+38*a*d^7-24*b*d^7-42*c*d^7-30*d^8,b^2*c^3*d^3+19*c^2*d^6-50*a*d^7-33*b*d^7+16*c*d^7-45*d^8,a*b*c^3*d^3-6*c^2*d^6-38*a*d^7+35*b*d^7+32*c*d^7-12*d^8,a^2*c^3*d^3+44*c^2*d^6+35*a*d^7+42*b*d^7-10*c*d^7-48*d^8,b^3*c^2*d^3+33*c^2*d^6-7*a*d^7-41*b*d^7-3*c*d^7-33*d^8,a*b^2*c^2*d^3-21*c^2*d^6-22*a*d^7-23*b*d^7+24*c*d^7+47*d^8,a^2*b*c^2*d^3+c^2*d^6-32*a*d^7-34*b*d^7-42*c*d^7+7*d^8,a^3*c^2*d^3+6*c^2*d^6-31*a*d^7-26*b*d^7+19*c*d^7-49*d^8,b^4*c*d^3+6*c^2*d^6-24*a*d^7+10*b*d^7-18*c*d^7-4*d^8,a*b^3*c*d^3+46*c^2*d^6+41*a*d^7+7*b*d^7+8*c*d^7-28*d^8,a^2*b^2*c*d^3+33*c^2*d^6-15*a*d^7-11*b*d^7+38*c*d^7+14*d^8,a^3*b*c*d^3-29*c^2*d^6-4*a*d^7-32*b*d^7+13*c*d^7-3*d^8,a^4*c*d^3-34*c^2*d^6+5*a*d^7+29*b*d^7-15*c*d^7-48*d^8,b^5*d^3-42*c^2*d^6+33*a*d^7-49*b*d^7+33*c*d^7-43*d^8,a*b^4*d^3+25*c^2*d^6-11*a*d^7-16*b*d^7+32*c*d^7-2*d^8,a^2*b^3*d^3-36*c^2*d^6-47*a*d^7-16*b*d^7+19*c*d^7+9*d^8,a^3*b^2*d^3-30*c^2*d^6-21*a*d^7-6*b*d^7+16*c*d^7-14*d^8,a^4*b*d^3+47*c^2*d^6-16*a*d^7-13*b*d^7+21*c*d^7+30*d^8,a^5*d^3-2*c^2*d^6+40*a*d^7+34*b*d^7+14*c*d^7-50*d^8,c^6*d^2-4*c^2*d^6-41*a*d^7+46*b*d^7+17*c*d^7+19*d^8,b*c^5*d^2-49*c^2*d^6+5*a*d^7-31*b*d^7+30*c*d^7+28*d^8,a*c^5*d^2-12*c^2*d^6-23*a*d^7-39*b*d^7+6*c*d^7-27*d^8,b^2*c^4*d^2-12*c^2*d^6-30*a*d^7+13*b*d^7-42*c*d^7+38*d^8,a*b*c^4*d^2-31*c^2*d^6+5*a*d^7-41*b*d^7-24*c*d^7,a^2*c^4*d^2-c^2*d^6+4*a*d^7+21*b*d^7+19*c*d^7-34*d^8,b^3*c^3*d^2-50*c^2*d^6-11*a*d^7+24*b*d^7+24*c*d^7-44*d^8,a*b^2*c^3*d^2+2*c^2*d^6-42*a*d^7-17*b*d^7-33*c*d^7-10*d^8,a^2*b*c^3*d^2+20*c^2*d^6+29*a*d^7+35*b*d^7-31*c*d^7-35*d^8,a^3*c^3*d^2+35*c^2*d^6-13*a*d^7+20*b*d^7-15*c*d^7-45*d^8,b^4*c^2*d^2+c^2*d^6+36*a*d^7-42*b*d^7+32*c*d^7+16*d^8,a*b^3*c^2*d^2-9*c^2*d^6-43*a*d^7-5*b*d^7-17*c*d^7+50*d^8,a^2*b^2*c^2*d^2-36*c^2*d^6+31*a*d^7+4*b*d^7-26*c*d^7-11*d^8,a^3*b*c^2*d^2+15*c^2*d^6+40*a*d^7-18*b*d^7-31*c*d^7+43*d^8,a^4*c^2*d^2+41*c^2*d^6-49*a*d^7+37*b*d^7+47*c*d^7-48*d^8,b^5*c*d^2-49*c^2*d^6+15*a*d^7+48*b*d^7+22*c*d^7+38*d^8,a*b^4*c*d^2+12*c^2*d^6+16*a*d^7-22*b*d^7-c*d^7+29*d^8,a^2*b^3*c*d^2+31*c^2*d^6+19*a*d^7+45*b*d^7-6*c*d^7+42*d^8,a^3*b^2*c*d^2+29*c^2*d^6-39*a*d^7+25*b*d^7-48*c*d^7-d^8,a^4*b*c*d^2-31*c^2*d^6+24*a*d^7-2*b*d^7+36*c*d^7+37*d^8,a^5*c*d^2+33*c^2*d^6-46*a*d^7-41*b*d^7-29*c*d^7-12*d^8,b^6*d^2-39*c^2*d^6+35*a*d^7-8*b*d^7+35*c*d^7+47*d^8,a*b^5*d^2-38*c^2*d^6-11*a*d^7-37*b*d^7-7*c*d^7-5*d^8,a^2*b^4*d^2+29*c^2*d^6+36*a*d^7-29*b*d^7+20*c*d^7+39*d^8,a^3*b^3*d^2-44*c^2*d^6+43*a*d^7-50*b*d^7-24*c*d^7-16*d^8,a^4*b^2*d^2+20*c^2*d^6+33*a*d^7+6*b*d^7+47*c*d^7+40*d^8,a^5*b*d^2-10*c^2*d^6+25*a*d^7-8*b*d^7-14*c*d^7+16*d^8,a^6*d^2+48*c^2*d^6+14*a*d^7+32*b*d^7+17*c*d^7+13*d^8,c^7*d+38*c^2*d^6-39*a*d^7+22*b*d^7+15*c*d^7-d^8,b*c^6*d+9*c^2*d^6+37*a*d^7+12*b*d^7+27*c*d^7+3*d^8,a*c^6*d-5*c^2*d^6+34*a*d^7+15*b*d^7+2*c*d^7-21*d^8,b^2*c^5*d+35*c^2*d^6+27*a*d^7+13*b*d^7-39*c*d^7+8*d^8,a*b*c^5*d-34*c^2*d^6-18*a*d^7-21*b*d^7-31*c*d^7+46*d^8,a^2*c^5*d-16*c^2*d^6-6*a*d^7-18*b*d^7+3*c*d^7+47*d^8,b^3*c^4*d-46*c^2*d^6+4*a*d^7-38*b*d^7-29*c*d^7-4*d^8,a*b^2*c^4*d-35*c^2*d^6-14*a*d^7-32*b*d^7-40*c*d^7-35*d^8,a^2*b*c^4*d+23*c^2*d^6-44*a*d^7-3*b*d^7+4*c*d^7-4*d^8,a^3*c^4*d+24*c^2*d^6-7*a*d^7-44*b*d^7-16*c*d^7+10*d^8,b^4*c^3*d+43*c^2*d^6+12*a*d^7+43*b*d^7-49*c*d^7-23*d^8,a*b^3*c^3*d+22*c^2*d^6+6*a*d^7+2*b*d^7-9*c*d^7,a^2*b^2*c^3*d+4*c^2*d^6+21*a*d^7-24*b*d^7-26*c*d^7+33*d^8,a^3*b*c^3*d+13*c^2*d^6-18*a*d^7+31*b*d^7-28*c*d^7+2*d^8,a^4*c^3*d+10*c^2*d^6-14*a*d^7+30*b*d^7-40*c*d^7+33*d^8,b^5*c^2*d-35*c^2*d^6-33*a*d^7+7*b*d^7+13*c*d^7+26*d^8,a*b^4*c^2*d-49*c^2*d^6+9*a*d^7+20*b*d^7+11*c*d^7-32*d^8,a^2*b^3*c^2*d+33*c^2*d^6-43*a*d^7-27*b*d^7-31*c*d^7-41*d^8,a^3*b^2*c^2*d-6*c^2*d^6+23*a*d^7+20*b*d^7-8*c*d^7-6*d^8,a^4*b*c^2*d+10*c^2*d^6-24*a*d^7+30*b*d^7+42*c*d^7-23*d^8,a^5*c^2*d+12*c^2*d^6+20*a*d^7+24*b*d^7-9*c*d^7-9*d^8,b^6*c*d-12*c^2*d^6+36*a*d^7+4*b*d^7-12*c*d^7+26*d^8,a*b^5*c*d-19*c^2*d^6-39*a*d^7-26*b*d^7-4*c*d^7+10*d^8,a^2*b^4*c*d+38*c^2*d^6-6*a*d^7+6*b*d^7+41*c*d^7+49*d^8,a^3*b^3*c*d-34*c^2*d^6-42*a*d^7+22*b*d^7-26*c*d^7-13*d^8,a^4*b^2*c*d+14*c^2*d^6+40*a*d^7+39*b*d^7-34*d^8,a^5*b*c*d-8*c^2*d^6+45*a*d^7-35*b*d^7+48*c*d^7+47*d^8,a^6*c*d-6*c^2*d^6-24*a*d^7-2*b*d^7-9*c*d^7+7*d^8,b^7*d+34*c^2*d^6-14*a*d^7+46*b*d^7-50*c*d^7+26*d^8,a*b^6*d+6*c^2*d^6+23*a*d^7-27*b*d^7-25*c*d^7-2*d^8,c^8+43*c^2*d^6+11*b*d^7-39*c*d^7-30*d^8,b*c^7-44*c^2*d^6-4*a*d^7-10*b*d^7+31*c*d^7+42*d^8,a*c^7-6*a*d^7+31*b*d^7+37*c*d^7-41*d^8,b^2*c^6-11*c^2*d^6-35*a*d^7+32*b*d^7-25*c*d^7-21*d^8,a*b*c^6+2*c^2*d^6+43*a*d^7-48*b*d^7-49*c*d^7-19*d^8,a^2*c^6-20*c^2*d^6-11*a*d^7-35*b*d^7-33*c*d^7+28*d^8,b^3*c^5+4*c^2*d^6-7*a*d^7-21*b*d^7-14*c*d^7+48*d^8,a*b^2*c^5+17*c^2*d^6+45*a*d^7-32*b*d^7+29*c*d^7+38*d^8,a^2*b*c^5-13*c^2*d^6+46*a*d^7+4*b*d^7-18*c*d^7+19*d^8,a^3*c^5-23*c^2*d^6-a*d^7-3*b*d^7-15*c*d^7+19*d^8,b^4*c^4-50*c^2*d^6+39*a*d^7+49*b*d^7+47*c*d^7+7*d^8,a*b^3*c^4-33*c^2*d^6+10*a*d^7+32*b*d^7+21*c*d^7-39*d^8,a^2*b^2*c^4+23*c^2*d^6+27*a*d^7-17*b*d^7+29*c*d^7+9*d^8,a^3*b*c^4-47*c^2*d^6-43*a*d^7-47*b*d^7-34*c*d^7-23*d^8,a^4*c^4-6*c^2*d^6+7*a*d^7+38*b*d^7-27*c*d^7-9*d^8,b^5*c^3-47*c^2*d^6+18*a*d^7-44*b*d^7-4*c*d^7-18*d^8,a*b^4*c^3+30*c^2*d^6+36*a*d^7+25*b*d^7+42*c*d^7+d^8,a^2*b^3*c^3+10*c^2*d^6+31*a*d^7+45*b*d^7-44*c*d^7+37*d^8,a^3*b^2*c^3-41*c^2*d^6-15*a*d^7-34*b*d^7-22*c*d^7+28*d^8,a^4*b*c^3+19*c^2*d^6-23*a*d^7+18*b*d^7-13*c*d^7-48*d^8,a^5*c^3+16*c^2*d^6+22*a*d^7-31*b*d^7+33*c*d^7+15*d^8,b^6*c^2-42*c^2*d^6-10*a*d^7-16*b*d^7-46*c*d^7+42*d^8,a*b^5*c^2-23*c^2*d^6+34*a*d^7-37*b*d^7+2*c*d^7+10*d^8,a^2*b^4*c^2-45*c^2*d^6-5*a*d^7+43*b*d^7-18*c*d^7+7*d^8,a^3*b^3*c^2+36*c^2*d^6+19*a*d^7+21*b*d^7+46*c*d^7-24*d^8,a^4*b^2*c^2-17*c^2*d^6+30*a*d^7-39*b*d^7-39*c*d^7-24*d^8,a^5*b*c^2+10*c^2*d^6-24*a*d^7-36*b*d^7-14*c*d^7+26*d^8,a^6*c^2+47*c^2*d^6-41*a*d^7+32*b*d^7+6*c*d^7+42*d^8,b^7*c+44*c^2*d^6-6*a*d^7+5*b*d^7+20*c*d^7+50*d^8,a*b^6*c+29*c^2*d^6-16*a*d^7+45*b*d^7-3*c*d^7+14*d^8,b^8+48*c^2*d^6-40*a*d^7-44*b*d^7-10*c*d^7-23*d^8,a*b^7-32*c^2*d^6-41*a*d^7-11*b*d^7+50*c*d^7+13*d^8,d^9,c*d^8,b*d^8,a*d^8,c^2*d^7; 2450 2619 M; 2451 TestSSresAttribs2tr(M );2620 TestSSresAttribs2tr(M, "AGR@101n3d010s010%3, a bit slower..."); 2452 2621 kill AGR; 2453 2622 2454 2623 ring AGR = (101), (a,b,c,d,e,f,g,h), dp; AGR; 2455 // AGR@101n7d005s010%2 )medium: <= 22624 // AGR@101n7d005s010%2, medium: <= 2 2456 2625 ideal M = 2457 2626 f*h-g*h,e*h-g*h,d*h-g*h,c*h-g*h,b*h-g*h,a*h-g*h,e*g+48*f*g-49*g*h,d*g+5*f*g-6*g*h,c*g+49*f*g-50*g*h,b*g-7*f*g+6*g*h,a*g-50*f*g+49*g*h,e*f-20*f*g+19*g*h,d*f+40*f*g-41*g*h,c*f-12*f*g+11*g*h,b*f+45*f*g-46*g*h,a*f+4*f*g-5*g*h,d*e-f*g,c*e-30*f*g+29*g*h,b*e-39*f*g+38*g*h,a*e+10*f*g-11*g*h,c*d-41*f*g+40*g*h,b*d-23*f*g+22*g*h,a*d-20*f*g+19*g*h,b*c+17*f*g-18*g*h,a*c+6*f*g-7*g*h,a*b+28*f*g-29*g*h,g^2*h-g*h^2,f^2*g-8*f*g^2+7*g*h^2,g*h^4+50*h^5,g^5+41*h^5,f*g^4-18*h^5,f^5+29*h^5,e^5+6*h^5,d^5-23*h^5,c^5-32*h^5, 2458 2627 b^5+17*h^5,a^5+17*h^5,h^6; 2459 2628 M; 2460 TestSSresAttribs2tr(M );2629 TestSSresAttribs2tr(M, "AGR@101n7d005s010%2, medium"); 2461 2630 /* 2462 2631 options: 1 1 0 : Time: 3/10 … … 2513 2682 b^2*c^2*e^2, a*b*c^2*e^2; 2514 2683 M; 2515 TestSSresAttribs2tr(M );2684 TestSSresAttribs2tr(M, "AGR101n4d007s021%4"); 2516 2685 /* 2517 2686 options: 1 1 0 : Time: 5/9/10 (35 without LCM) … … 2526 2695 2527 2696 2528 // too big? 2529 // AGR101n4d008s020%1 2697 // AGR101n4d008s020%1, too big? 2530 2698 ideal M = 2531 2699 c^5*d-49*a^4*d^2-36*a^3*b*d^2-a^2*b^2*d^2-26*a*b^3*d^2+2*b^4*d^2+8*a^3*c*d^2-46*a^2*b*c*d^2-43*a*b^2*c*d^2-46*b^3*c*d^2-3*a^2*c^2*d^2-43*a*b*c^2*d^2+49*b^2*c^2*d^2-10*a*c^3*d^2+35*b*c^3*d^2+20*c^4*d^2-42*a^3*d^3+45*a^2*b*d^3+32*a*b^2*d^3-45*b^3*d^3-27*a^2*c*d^3+13*a*b*c*d^3+25*b^2*c*d^3+8*a*c^2*d^3+9*b*c^2*d^3+9*c^3*d^3+45*a^2*d^4+30*a*b*d^4+39*b^2*d^4-23*a*c*d^4+2*b*c*d^4-16*c^2*d^4+32*a*d^5-34*b*d^5+39*c*d^5+12*d^6-29*a^5*e-23*a^4*b*e-29*a^3*b^2*e-a^2*b^3*e-20*a*b^4*e+42*b^5*e+20*a^4*c*e-27*a^3*b*c*e-5*a^2*b^2*c*e-14*b^4*c*e-27*a^3*c^2*e-7*a^2*b*c^2*e-25*a*b^2*c^2*e+14*b^3*c^2*e+19*a^2*c^3*e+43*a*b*c^3*e-31*b^2*c^3*e+37*a*c^4*e-34*b*c^4*e+44*c^5*e+21*a^4*d*e+22*a^3*b*d*e+14*a^2*b^2*d*e-35*a*b^3*d*e-29*b^4*d*e-9*a^3*c*d*e-41*a^2*b*c*d*e+28*a*b^2*c*d*e+35*b^3*c*d*e+48*a^2*c^2*d*e+26*a*b*c^2*d*e-47*b^2*c^2*d*e+18*a*c^3*d*e+8*b*c^3*d*e-46*c^4*d*e+50*a^3*d^2*e-46*a^2*b*d^2*e-41*a*b^2*d^2*e-44*b^3*d^2*e+7*a^2*c*d^2*e-a*b*c*d^2*e+38*b^2*c*d^2*e+33*a*c^2*d^2*e-24*b*c^2*d^2*e-7*c^3*d^2*e+27*a^2*d^3*e+19*a*b*d^3*e-14*b^2*d^3*e+9*a*c*d^3*e+3*b*c*d^3*e+34*c^2*d^3*e-49*a*d^4*e-2*b*d^4*e+9*c*d^4*e+17*d^5*e+12*a^4*e^2-17*a^3*b*e^2+16*a^2*b^2*e^2+2*a*b^3*e^2+25*b^4*e^2+49*a^3*c*e^2+10*a^2*b*c*e^2-43*a*b^2*c*e^2+5*b^3*c*e^2+4*a^2*c^2*e^2-44*a*b*c^2*e^2-25*b^2*c^2*e^2+15*a*c^3*e^2-44*b*c^3*e^2-17*c^4*e^2+17*a^3*d*e^2+40*a^2*b*d*e^2+3*a*b^2*d*e^2-25*b^3*d*e^2-47*a^2*c*d*e^2-45*a*b*c*d*e^2+9*b^2*c*d*e^2-41*a*c^2*d*e^2-36*b*c^2*d*e^2-17*c^3*d*e^2-15*a^2*d^2*e^2+49*a*b*d^2*e^2+13*b^2*d^2*e^2-39*a*c*d^2*e^2+36*b*c*d^2*e^2-32*c^2*d^2*e^2+23*a*d^3*e^2+14*b*d^3*e^2+10*c*d^3*e^2-d^4*e^2+24*a^3*e^3+27*a^2*b*e^3+31*a*b^2*e^3-45*b^3*e^3-50*a^2*c*e^3-a*b*c*e^3+43*b^2*c*e^3+46*a*c^2*e^3-25*b*c^2*e^3+2*c^3*e^3+44*a^2*d*e^3+43*a*b*d*e^3-30*b^2*d*e^3-18*a*c*d*e^3+44*b*c*d*e^3-34*c^2*d*e^3-49*a*d^2*e^3-18*b*d^2*e^3-21*c*d^2*e^3-43*d^3*e^3-26*a^2*e^4-18*a*b*e^4+6*b^2*e^4-48*a*c*e^4+6*b*c*e^4-16*c^2*e^4-2*a*d*e^4-21*b*d*e^4+5*c*d*e^4-18*d^2*e^4+33*a*e^5-23*b*e^5-48*c*e^5+37*d*e^5-44*e^6, … … 2592 2760 a*c^2*d^2*e^2, b^2*c*d^2*e^2, a*b*c*d^2*e^2; 2593 2761 M; 2594 TestSSresAttribs2tr(M );2762 TestSSresAttribs2tr(M, "AGR101n4d008s020%1, too big?"); 2595 2763 /* 2596 2764 options: 1 1 0 : Time: 29/32/73/92 (316 without LCM) … … 2602 2770 kill M; 2603 2771 2604 2605 } 2606 2772 kill AGR; 2773 2774 ring AGR = (101), (a,b,c,d,e,f), dp; AGR; 2775 2776 // AGR@101n5d005s016%1, new, medium difficulty? 2777 ideal M = 2778 b*d-13*c*d+7*a*e-32*b*e+31*c*e+3*d*e+46*a*f-13*b*f+22*c*f-19*d*f-33*e*f, a*d+2*c*d-42*a*e+46*b*e+7*c*e-38*d*e+31*a*f+9*b*f+27*c*f-19*d*f-24*e*f, b*c-35*c*d-34*a*e+4*b*e+33*c*e+23*d*e+4*a*f-43*b*f+43*c*f+17*d*f-13*e*f, a*c+49*c*d-28*a*e+18*b*e-23*c*e+3*d*e-5*a*f-23*b*f+2*c*f+46*d*f-40*e*f, a*b-38*c*d+a*e-49*b*e-20*c*e+32*d*e+13*a*f+25*b*f+37*c*f-27*d*f+25*e*f, f^4, e*f^3, d*f^3, c*f^3, b*f^3, a*f^3, e^2*f^2, d*e*f^2, c*e*f^2, b*e*f^2, a*e*f^2, d^2*f^2, c*d*f^2, c^2*f^2, b^2*f^2, a^2*f^2, e^3*f, d*e^2*f, c*e^2*f, b*e^2*f, a*e^2*f, d^2*e*f, d^3*f, c^3*f, b^3*f, a^3*f, e^4, d^4, c^4, b^4, a^4; 2779 M; 2780 2781 TestSSresAttribs(M, "AGR@101n5d005s016%1, new, medium difficulty?"); 2782 /* 2783 * ? 2784 */ 2785 kill M; 2786 } 2787 2788 proc testAGRhard(list #) 2789 { 2790 def DEBUG = 0; 2791 if(size(#) > 0) { DEBUG = #[1]; } 2792 2793 system("--min-time", "0.01"); 2794 system("--ticks-per-sec", 100); 2795 2796 attrib(SSinit, "DEBUG", 0); 2797 attrib(SSinit, "SYZCHECK", (DEBUG > 0)); 2798 attrib(SSinit, "KERCHECK", 0); 2799 2800 // option(prot); 2801 ring AGR = (101), (a,b,c,d,e,f), dp; AGR; 2802 2803 2804 // AGR@101n5d006s016%1, new, hard!? 2805 ideal M = 2806 b*d+47*c*d-27*a*e+37*b*e+21*c*e+31*d*e-31*a*f+23*b*f+47*c*f+42*d*f+11*e*f, a*d+7*c*d+19*a*e+28*b*e-33*c*e-28*d*e+15*a*f+28*b*f+47*c*f+3*d*f+14*e*f, b*c+29*c*d-25*a*e+12*b*e+23*c*e-50*d*e-17*a*f+30*b*f-37*c*f+35*d*f-e*f, a*c+46*c*d+12*a*e+27*b*e+39*c*e+23*d*e-45*a*f+39*b*f-35*c*f+4*d*f-10*e*f, a*b+38*c*d-18*a*e-34*b*e-30*c*e+38*d*e+22*a*f+34*b*f+39*c*f+30*d*f-19*e*f, f^5, e*f^4, d*f^4, c*f^4, b*f^4, a*f^4, e^2*f^3, d*e*f^3, c*e*f^3, b*e*f^3, a*e*f^3, d^2*f^3, c*d*f^3, c^2*f^3, b^2*f^3, a^2*f^3, e^3*f^2, d*e^2*f^2, c*e^2*f^2, b*e^2*f^2, a*e^2*f^2, d^2*e*f^2, d^3*f^2, c^3*f^2, b^3*f^2, a^3*f^2, e^4*f, e^5, d^5, c^5, b^5, a^5; 2807 TestSSresAttribs(M, "AGR@101n5d006s016%1, new, hard!?"); 2808 /* 2809 * ? 2810 */ 2811 kill M; 2812 } 2607 2813 2608 2814 … … 2611 2817 proc testAGRFrame() 2612 2818 { 2613 system("--min-time", " 1.0");2614 system("--ticks-per-sec", 1 );2819 system("--min-time", "0.01"); 2820 system("--ticks-per-sec", 100); 2615 2821 2616 2822 attrib(SSinit, "DEBUG", 0); 2617 2823 attrib(SSinit, "SYZCHECK", 0); // no such tests anymore with IGNORETAILS == 1! 2618 2824 attrib(SSinit, "KERCHECK", 1); 2619 attrib(SSinit, "IGNORETAILS", 1); 2825 attrib(SSinit, "IGNORETAILS", 1); 2826 2827 // option(prot); 2620 2828 2621 2829 ring AGR = (101), (a, b, c, d), dp; AGR; … … 2775 2983 kill M; 2776 2984 2985 2986 kill AGR; 2987 2988 ring AGR = (101), (a,b,c,d,e,f), dp; AGR; 2989 ideal M = b*f+7*c*f+30*d*f-38*e*f, a*f+10*c*f-25*d*f+14*e*f, d*e-10*c*f-17*d*f+26*e*f, c*e-43*c*f+12*d*f+30*e*f, b*e+37*c*f+15*d*f+48*e*f, a*e+21*c*f+37*d*f+42*e*f, c*d+21*c*f+20*d*f-42*e*f, b*d-39*c*f+27*d*f+11*e*f, a*d-39*c*f+17*d*f+21*e*f, b*c+36*c*f+6*d*f-43*e*f, a*c+12*c*f-2*d*f-11*e*f, a*b-35*c*f+d*f+33*e*f, e*f^6+46*f^7, d*f^6-37*f^7, c*f^6+9*f^7, e^7+19*f^7, d^7+40*f^7, c^7+34*f^7, b^7+17*f^7, a^7+40*f^7; 2990 2991 TestSSresAttribs(M); 2992 /* 2993 * ? 2994 */ 2995 kill M; 2777 2996 } 2778 2997 -
dyn_modules/syzextra/syzextra.cc
r13a431 r9936d6 30 30 #include <polys/monomials/p_polys.h> 31 31 #include <polys/monomials/ring.h> 32 #include <polys/simpleideals.h> 32 33 33 34 #include <kernel/kstd1.h> … … 36 37 #include <kernel/ideals.h> 37 38 39 #include <kernel/timer.h> 38 40 39 41 … … 152 154 /// return a new term: leading coeff * leading monomial of p 153 155 /// with 0 leading component! 154 poly leadmonom(const poly p, const ring r )156 poly leadmonom(const poly p, const ring r, const bool bSetZeroComp) 155 157 { 156 158 poly m = NULL; … … 164 166 p_SetCoeff0(m, n_Copy(p_GetCoeff(p, r), r), r); 165 167 166 p_SetComp(m, 0, r); 168 if( bSetZeroComp ) 169 p_SetComp(m, 0, r); 167 170 p_Setm(m, r); 168 171 169 assume( p_GetComp(m, r) == 0 );172 170 173 assume( m != NULL ); 171 174 assume( pNext(m) == NULL ); 172 175 assume( p_LmTest(m, r) ); 176 177 if( bSetZeroComp ) 178 assume( p_GetComp(m, r) == 0 ); 173 179 } 174 180 … … 225 231 void SchreyerSyzygyComputation::CleanUp() 226 232 { 233 extern void id_Delete (ideal*, const ring); 234 235 id_Delete(const_cast<ideal*>(&m_idTails), m_rBaseRing); // TODO!!! 236 } 227 237 /* 228 238 for( TTailTerms::const_iterator it = m_idTailTerms.begin(); it != m_idTailTerms.end(); it++ ) … … 233 243 } 234 244 */ 235 } 236 237 238 239 void SchreyerSyzygyComputation::SetUpTailTerms(const ideal idTails) 240 { 245 246 247 248 bool CReducerFinder::PreProcessTerm(const poly t, CReducerFinder& syzChecker) const 249 { 250 assume( t != NULL ); 251 252 if( __DEBUG__ && __TAILREDSYZ__ ) 253 assume( !IsDivisible(t) ); // each input term should NOT be in <L> 254 255 const ring r = m_rBaseRing; 256 257 258 if( __TAILREDSYZ__ ) 259 if( p_LmIsConstant(t, r) ) // most basic case of baing coprime with L, whatever that is... 260 return true; // TODO: prove this...? 261 262 // return false; // appears to be fine 263 264 const long comp = p_GetComp(t, r); 265 266 CReducersHash::const_iterator itr = m_hash.find(comp); 267 268 if ( itr == m_hash.end() ) 269 return true; // no such leading component!!! 270 271 const bool bIdealCase = (comp == 0); 272 const bool bSyzCheck = syzChecker.IsNonempty(); // need to check even in ideal case????? proof? "&& !bIdealCase" 273 274 // return false; 275 if( __TAILREDSYZ__ && (bIdealCase || bSyzCheck) ) 276 { 277 const TReducers& v = itr->second; 278 const int N = rVar(r); 279 // TODO: extract exps of t beforehand?! 280 bool coprime = true; 281 for(TReducers::const_iterator vit = v.begin(); (vit != v.end()) && coprime; ++vit ) 282 { 283 assume( m_L->m[(*vit)->m_label] == (*vit)->m_lt ); 284 285 const poly p = (*vit)->m_lt; 286 287 assume( p_GetComp(p, r) == comp ); 288 289 // TODO: check if coprime with Leads... if __TAILREDSYZ__ ! 290 for( int var = N; var > 0; --var ) 291 if( (p_GetExp(p, var, r) != 0) && (p_GetExp(t, var, r) != 0) ) 292 { 293 if( __DEBUG__ || 0) 294 { 295 PrintS("CReducerFinder::PreProcessTerm, 't' is NOT co-prime with the following leading term: \n"); 296 dPrint(p, r, r, 1); 297 } 298 coprime = false; // t not coprime with p! 299 break; 300 } 301 302 if( bSyzCheck && coprime ) 303 { 304 poly ss = p_LmInit(t, r); 305 p_SetCoeff0(ss, n_Init(1, r), r); // for delete & printout only!... 306 p_SetComp(ss, (*vit)->m_label + 1, r); // coeff? 307 p_Setm(ss, r); 308 309 coprime = ( syzChecker.IsDivisible(ss) ); 310 311 if( __DEBUG__ && !coprime) 312 { 313 PrintS("CReducerFinder::PreProcessTerm, 't' is co-prime with p but may lead to NOT divisible syz.term: \n"); 314 dPrint(ss, r, r, 1); 315 } 316 317 p_LmDelete(&ss, r); // deletes coeff as well??? 318 } 319 320 } 321 322 if( __DEBUG__ && coprime ) 323 PrintS("CReducerFinder::PreProcessTerm, the following 't' is 'co-prime' with all of leading terms! \n"); 324 325 return coprime; // t was coprime with all of leading terms!!! 326 327 } 328 // return true; // delete the term 329 330 return false; 331 332 333 } 334 335 336 void SchreyerSyzygyComputation::SetUpTailTerms() 337 { 338 const ideal idTails = m_idTails; 241 339 assume( idTails != NULL ); 242 340 assume( idTails->m != NULL ); 341 const ring r = m_rBaseRing; 342 343 if( __DEBUG__ || 0) 344 { 345 PrintS("SchreyerSyzygyComputation::SetUpTailTerms(): Tails: \n"); 346 dPrint(idTails, r, r, 0); 347 } 348 349 unsigned long pp = 0; // count preprocessed terms... 350 351 for( int p = IDELEMS(idTails) - 1; p >= 0; --p ) 352 for( poly* tt = &(idTails->m[p]); (*tt) != NULL; ) 353 { 354 const poly t = *tt; 355 if( m_div.PreProcessTerm(t, m_checker) ) 356 { 357 if( __DEBUG__ || 0) 358 { 359 PrintS("SchreyerSyzygyComputation::SetUpTailTerms(): PP the following TT: \n"); 360 dPrint(t, r, r, 1); 361 } 362 ++pp; 363 364 (*tt) = p_LmDeleteAndNext(t, r); // delete the lead and next... 365 } 366 else 367 tt = &pNext(t); // go next? 368 369 } 370 371 if( TEST_OPT_PROT || 1) 372 Print("**!!** SchreyerSyzygyComputation::SetUpTailTerms()::PreProcessing has eliminated %u terms!\n", pp); 373 374 375 if( __DEBUG__ || 0) 376 { 377 PrintS("SchreyerSyzygyComputation::SetUpTailTerms(): Preprocessed Tails: \n"); 378 dPrint(idTails, r, r, 0); 379 } 380 } 243 381 /* 244 382 m_idTailTerms.resize( IDELEMS(idTails) ); … … 265 403 } 266 404 */ 267 }268 405 269 406 … … 568 705 569 706 570 571 707 void SchreyerSyzygyComputation::ComputeSyzygy() 572 708 { … … 581 717 582 718 assume( IDELEMS(L) == IDELEMS(T) ); 719 int t, r; 583 720 584 721 if( m_syzLeads == NULL ) 722 { 723 if( TEST_OPT_PROT && 1) 724 { 725 /* initTimer(); 726 initRTimer(); 727 startTimer(); 728 startRTimer();*/ 729 730 t = getTimer(); 731 r = getRTimer(); 732 Print("%d **!TIME4!** SchreyerSyzygyComputation::ComputeSyzygy::ComputeLeadingSyzygyTerms: t: %d, r: %d\n", getRTimer(), t, r); 733 } 734 585 735 ComputeLeadingSyzygyTerms( __LEAD2SYZ__ && !__IGNORETAILS__ ); // 2 terms OR 1 term! 736 if( TEST_OPT_PROT && 1) 737 { 738 t = getTimer() - t; 739 r = getRTimer() - r; 740 741 Print("%d **!TIME4!** SchreyerSyzygyComputation::ComputeSyzygy::ComputeLeadingSyzygyTerms: t: %d, r: %d\n", getRTimer(), t, r); 742 } 743 744 } 745 586 746 587 747 assume( m_syzLeads != NULL ); … … 596 756 if( size == 1 && LL->m[0] == NULL ) 597 757 return; 598 758 759 if( !__IGNORETAILS__) 760 { 761 if( T != NULL ) 762 { 763 764 if( TEST_OPT_PROT && 1 ) 765 { 766 // initTimer(); 767 // initRTimer(); 768 // startTimer(); 769 // startRTimer(); 770 771 t = getTimer(); 772 r = getRTimer(); 773 Print("%d **!TIME4!** SchreyerSyzygyComputation::ComputeSyzygy::SetUpTailTerms(): t: %d, r: %d\n", getRTimer(), t, r); 774 } 775 776 SetUpTailTerms(); 777 778 if( TEST_OPT_PROT && 1) 779 { 780 t = getTimer() - t; 781 r = getRTimer() - r; 782 783 Print("%d **!TIME4!** SchreyerSyzygyComputation::ComputeSyzygy::SetUpTailTerms(): t: %d, r: %d\n", getRTimer(), t, r); 784 } 785 786 787 788 } 789 } 790 791 if( TEST_OPT_PROT && 1) 792 { 793 // initTimer(); 794 // initRTimer(); 795 // startTimer(); 796 // startRTimer(); 797 798 t = getTimer(); 799 r = getRTimer(); 800 Print("%d **!TIME4!** SchreyerSyzygyComputation::ComputeSyzygy::SyzygyLift: t: %d, r: %d\n", getRTimer(), t, r); 801 } 599 802 600 803 for( int k = size - 1; k >= 0; k-- ) … … 631 834 632 835 } 633 634 TT->rank = id_RankFreeModule(TT, R); 836 837 if( TEST_OPT_PROT && 1) 838 { 839 t = getTimer() - t; 840 r = getRTimer(); - r; 841 842 Print("%d **!TIME4!** SchreyerSyzygyComputation::ComputeSyzygy::SyzygyLift: t: %d, r: %d\n", getRTimer(), t, r); 843 } 844 845 846 847 TT->rank = id_RankFreeModule(TT, R); 635 848 } 636 849 … … 772 985 assume( tail >= 0 && tail < IDELEMS(m_idTails) ); 773 986 774 const poly t = m_idTails->m[tail]; 987 const poly t = m_idTails->m[tail]; // !!! 775 988 776 989 if(t != NULL) … … 1335 1548 poly lm = p_Mult_mm(leadmonom(syzterm, r), m, r); 1336 1549 1337 poly pr = p_Mult_q( p_LmInit(multiplier, r), p_LmInit(t, r), r);1550 poly pr = p_Mult_q( leadmonom(multiplier, r, false), leadmonom(t, r, false), r); 1338 1551 1339 1552 assume( p_EqualPolys(lm, pr, r) ); … … 1394 1607 return q; 1395 1608 } 1396 1397 p_LmFree(q, r); 1398 1399 return NULL; 1400 1401 1402 1403 1404 1405 #if 0 1609 1610 /* 1406 1611 const long comp = p_GetComp(t, r); assume( comp >= 0 ); 1407 1612 const unsigned long not_sev = ~p_GetShortExpVector(multiplier, t, r); // ! … … 1484 1689 return q; 1485 1690 } 1691 */ 1486 1692 1487 1693 p_LmFree(q, r); 1488 1694 1489 1695 return NULL; 1490 #endif 1696 1491 1697 } 1492 1698 … … 1494 1700 poly CReducerFinder::FindReducer(const poly product, const poly syzterm, const CReducerFinder& syz_checker) const 1495 1701 { 1702 CDivisorEnumerator itr(*this, product); 1703 if( !itr.Reset() ) 1704 return NULL; 1705 1706 1496 1707 const ring& r = m_rBaseRing; 1497 1708 … … 1522 1733 } 1523 1734 1524 const long comp = p_GetComp(product, r);1525 const unsigned long not_sev = ~p_GetShortExpVector(product, r);1526 1527 assume( comp >= 0 );1528 1529 // for( int k = IDELEMS(L)-1; k>= 0; k-- )1530 // {1531 // const poly p = L->m[k];1532 //1533 // if ( p_GetComp(p, r) != comp )1534 // continue;1535 //1536 // const unsigned long p_sev = p_GetShortExpVector(p, r); // to be stored in m_hash!!!1537 1538 // looking for an appropriate diviser p = L[k]...1539 CReducersHash::const_iterator it = m_hash.find(comp); // same module component1540 1541 if( it == m_hash.end() )1542 return NULL;1543 1544 assume( m_L != NULL );1545 1546 const TReducers& reducers = it->second;1547 1735 1548 1736 const BOOLEAN to_check = (syz_checker.IsNonempty()); // __TAILREDSYZ__ && … … 1552 1740 if( __DEBUG__ ) 1553 1741 p_SetCoeff0(q, 0, r); // for printing q 1554 1555 for(TReducers::const_iterator vit = reducers.begin(); vit != reducers.end(); vit++ ) 1556 { 1557 const poly p = (*vit)->m_lt; 1558 1559 assume( p_GetComp(p, r) == comp ); 1560 1561 const int k = (*vit)->m_label; 1562 1563 assume( L->m[k] == p ); 1564 1565 const unsigned long p_sev = (*vit)->m_sev; 1566 1567 assume( p_sev == p_GetShortExpVector(p, r) ); 1568 1569 if( !p_LmShortDivisibleByNoComp(p, p_sev, product, not_sev, r) ) 1570 continue; 1571 1572 // // ... which divides the product, looking for the _1st_ appropriate one! 1573 // if( !p_LmDivisibleByNoComp(p, product, r) ) // included inside p_LmShortDivisibleBy! 1574 // continue; 1575 1742 1743 while( itr.MoveNext() ) 1744 { 1745 const poly p = itr.Current().m_lt; 1746 const int k = itr.Current().m_label; 1747 1576 1748 p_ExpVectorDiff(q, product, p, r); // (LM(product) / LM(L[k])) 1577 1749 p_SetComp(q, k + 1, r); … … 1598 1770 PrintS("_FindReducer::Test LS: q is divisible by LS[?] !:((: "); 1599 1771 } 1772 1773 continue; 1774 } 1775 1776 p_SetCoeff0(q, n_Neg( n_Div( p_GetCoeff(product, r), p_GetCoeff(p, r), r), r), r); 1777 1778 return q; 1779 } 1780 1781 1782 1783 /* 1784 const long comp = p_GetComp(product, r); 1785 const unsigned long not_sev = ~p_GetShortExpVector(product, r); 1786 1787 assume( comp >= 0 ); 1788 1789 // for( int k = IDELEMS(L)-1; k>= 0; k-- ) 1790 // { 1791 // const poly p = L->m[k]; 1792 // 1793 // if ( p_GetComp(p, r) != comp ) 1794 // continue; 1795 // 1796 // const unsigned long p_sev = p_GetShortExpVector(p, r); // to be stored in m_hash!!! 1797 1798 // looking for an appropriate diviser p = L[k]... 1799 CReducersHash::const_iterator it = m_hash.find(comp); // same module component 1800 1801 if( it == m_hash.end() ) 1802 return NULL; 1803 1804 assume( m_L != NULL ); 1805 1806 const TReducers& reducers = it->second; 1807 1808 const BOOLEAN to_check = (syz_checker.IsNonempty()); // __TAILREDSYZ__ && 1809 1810 const poly q = p_New(r); pNext(q) = NULL; 1811 1812 if( __DEBUG__ ) 1813 p_SetCoeff0(q, 0, r); // for printing q 1814 1815 for(TReducers::const_iterator vit = reducers.begin(); vit != reducers.end(); vit++ ) 1816 { 1817 const poly p = (*vit)->m_lt; 1818 1819 assume( p_GetComp(p, r) == comp ); 1820 1821 const int k = (*vit)->m_label; 1822 1823 assume( L->m[k] == p ); 1824 1825 const unsigned long p_sev = (*vit)->m_sev; 1826 1827 assume( p_sev == p_GetShortExpVector(p, r) ); 1828 1829 if( !p_LmShortDivisibleByNoComp(p, p_sev, product, not_sev, r) ) 1830 continue; 1831 1832 // // ... which divides the product, looking for the _1st_ appropriate one! 1833 // if( !p_LmDivisibleByNoComp(p, product, r) ) // included inside p_LmShortDivisibleBy! 1834 // continue; 1835 1836 p_ExpVectorDiff(q, product, p, r); // (LM(product) / LM(L[k])) 1837 p_SetComp(q, k + 1, r); 1838 p_Setm(q, r); 1839 1840 // cannot allow something like: a*gen(i) - a*gen(i) 1841 if (syzterm != NULL && (k == c)) 1842 if (p_ExpVectorEqual(syzterm, q, r)) 1843 { 1844 if( __DEBUG__ ) 1845 { 1846 Print("_FindReducer::Test SYZTERM: q == syzterm !:((, syzterm is: "); 1847 dPrint(syzterm, r, r, 1); 1848 } 1849 1850 continue; 1851 } 1852 1853 // while the complement (the fraction) is not reducible by leading syzygies 1854 if( to_check && syz_checker.IsDivisible(q) ) 1855 { 1856 if( __DEBUG__ ) 1857 { 1858 PrintS("_FindReducer::Test LS: q is divisible by LS[?] !:((: "); 1859 } 1600 1860 1601 1861 continue; … … 1605 1865 return q; 1606 1866 } 1867 */ 1607 1868 1608 1869 p_LmFree(q, r); -
dyn_modules/syzextra/syzextra.h
r13a431 r9936d6 38 38 BEGIN_NAMESPACE_SINGULARXX BEGIN_NAMESPACE(SYZEXTRA) 39 39 40 poly leadmonom(const poly p, const ring r );40 poly leadmonom(const poly p, const ring r, const bool bSetZeroComp = true); 41 41 42 42 /// return the tail of a given polynomial or vector … … 60 60 61 61 /// Computation attribute storage 62 class SchreyerSyzygyComputationFlags 63 { 64 public: 62 struct SchreyerSyzygyComputationFlags 63 { 65 64 SchreyerSyzygyComputationFlags(idhdl rootRingHdl); 66 65 … … 93 92 /// global base ring 94 93 const ring m_rBaseRing; 95 96 94 }; 97 95 … … 160 158 bool IsDivisible(const poly q) const; 161 159 162 bool IsNonempty() const { return !m_hash.empty(); } 160 inline bool IsNonempty() const { return !m_hash.empty(); } 161 162 /// is the term to be "preprocessed" as lower order term or lead to only reducible syzygies... 163 bool PreProcessTerm(const poly t, CReducerFinder& syzChecker) const; 163 164 164 165 poly FindReducer(const poly multiplier, const poly monom, const poly syzterm, const CReducerFinder& checker) const; … … 178 179 }; 179 180 181 extern ideal id_Copy (const ideal, const ring); 180 182 181 183 … … 199 201 SchreyerSyzygyComputation(const ideal idLeads, const ideal idTails, const SchreyerSyzygyComputationFlags setting): 200 202 SchreyerSyzygyComputationFlags(setting), 201 m_idLeads(idLeads), m_idTails(id Tails),203 m_idLeads(idLeads), m_idTails(id_Copy(idTails, setting.m_rBaseRing)), 202 204 m_syzLeads(NULL), m_syzTails(NULL), m_LS(NULL), 203 205 m_lcm(m_idLeads, setting), m_div(m_idLeads, setting), m_checker(NULL, setting) 204 206 { 205 if( __TAILREDSYZ__ && !__IGNORETAILS__)206 {207 if( idTails != NULL )208 SetUpTailTerms(idTails);209 }210 207 } 211 208 … … 213 210 SchreyerSyzygyComputation(const ideal idLeads, const ideal idTails, const ideal syzLeads, const SchreyerSyzygyComputationFlags setting): 214 211 SchreyerSyzygyComputationFlags(setting), 215 m_idLeads(idLeads), m_idTails(id Tails),212 m_idLeads(idLeads), m_idTails(id_Copy(idTails, setting.m_rBaseRing)), 216 213 m_syzLeads(syzLeads), m_syzTails(NULL), m_LS(syzLeads), 217 214 m_lcm(m_idLeads, setting), m_div(m_idLeads, setting), m_checker(NULL, setting) … … 221 218 if (syzLeads != NULL) 222 219 m_checker.Initialize(syzLeads); 223 if( idTails != NULL )224 SetUpTailTerms(idTails);220 // if( idTails != NULL ) 221 // SetUpTailTerms(); 225 222 } 226 223 } 227 224 228 225 /// Destructor should not destruct the resulting m_syzLeads, m_syzTails. 229 ~SchreyerSyzygyComputation(){ CleanUp(); } 226 ~SchreyerSyzygyComputation(){ CleanUp(); } 230 227 231 228 /// Convert the given ideal of tails into the internal representation (with reducers!) 232 void SetUpTailTerms(const ideal idTails); 233 234 void CleanUp(); 235 229 /// Preprocess m_idTails as well...? 230 void SetUpTailTerms(); 231 236 232 /// Read off the results while detaching them from this object 237 233 /// NOTE: no copy! … … 268 264 inline poly _FindReducer(const poly product, const poly syzterm) const 269 265 { return m_div.FindReducer(product, syzterm, m_checker); } 270 266 private: 267 void CleanUp(); 271 268 protected: 269 272 270 273 271 /// just leading terms … … 321 319 TTailTerms m_idTailTerms; 322 320 */ 321 322 323 /// TODO: look into m_idTailTerms!!!!!!!!!!!!!!!!!!!!!!!! map? heaps??? 323 324 }; 324 325
Note: See TracChangeset
for help on using the changeset viewer.