001 /* 002 * $Id: IdealTest.java 3666 2011-06-13 11:09:05Z kredel $ 003 */ 004 005 package edu.jas.application; 006 007 008 import java.util.ArrayList; 009 import java.util.List; 010 import java.util.Arrays; 011 012 import junit.framework.Test; 013 import junit.framework.TestCase; 014 import junit.framework.TestSuite; 015 016 import org.apache.log4j.BasicConfigurator; 017 import org.apache.log4j.Logger; 018 019 import edu.jas.arith.BigDecimal; 020 import edu.jas.arith.BigRational; 021 import edu.jas.gb.GroebnerBase; 022 import edu.jas.gbufd.GBFactory; 023 import edu.jas.kern.ComputerThreads; 024 import edu.jas.poly.Complex; 025 import edu.jas.poly.ComplexRing; 026 import edu.jas.poly.GenPolynomial; 027 import edu.jas.poly.GenPolynomialRing; 028 import edu.jas.poly.PolyUtil; 029 import edu.jas.poly.PolynomialList; 030 import edu.jas.poly.TermOrder; 031 import edu.jas.ufd.Quotient; 032 import edu.jas.util.KsubSet; 033 034 035 /** 036 * Ideal tests with JUnit. 037 * @author Heinz Kredel. 038 */ 039 public class IdealTest extends TestCase { 040 041 042 private static final Logger logger = Logger.getLogger(IdealTest.class); 043 044 /** 045 * main 046 */ 047 public static void main(String[] args) { 048 BasicConfigurator.configure(); 049 junit.textui.TestRunner.run(suite()); 050 } 051 052 053 /** 054 * Constructs a <CODE>IdealTest</CODE> object. 055 * @param name String. 056 */ 057 public IdealTest(String name) { 058 super(name); 059 } 060 061 062 /** 063 * suite. 064 */ 065 public static Test suite() { 066 TestSuite suite = new TestSuite(IdealTest.class); 067 return suite; 068 } 069 070 071 TermOrder to; 072 073 074 GenPolynomialRing<BigRational> fac; 075 076 077 List<GenPolynomial<BigRational>> L; 078 079 080 PolynomialList<BigRational> F; 081 082 083 List<GenPolynomial<BigRational>> G; 084 085 086 List<? extends GenPolynomial<BigRational>> M; 087 088 089 GroebnerBase<BigRational> bb; 090 091 092 GenPolynomial<BigRational> a; 093 094 095 GenPolynomial<BigRational> b; 096 097 098 GenPolynomial<BigRational> c; 099 100 101 GenPolynomial<BigRational> d; 102 103 104 GenPolynomial<BigRational> e; 105 106 107 int rl = 3; //4; //3; 108 109 110 int kl = 4; //10 111 112 113 int ll = 5; //7 114 115 116 int el = 3; 117 118 119 float q = 0.2f; //0.4f 120 121 122 @Override 123 protected void setUp() { 124 BigRational coeff = new BigRational(17, 1); 125 to = new TermOrder( /*TermOrder.INVLEX*/); 126 String[] vars = new String[] { "x", "y", "z" }; 127 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 128 //bb = new GroebnerBaseSeq<BigRational>(); 129 bb = GBFactory.getImplementation(coeff); 130 a = b = c = d = e = null; 131 } 132 133 134 @Override 135 protected void tearDown() { 136 a = b = c = d = e = null; 137 fac = null; 138 bb = null; 139 ComputerThreads.terminate(); 140 } 141 142 143 /** 144 * Test Ideal sum. 145 */ 146 public void testIdealSum() { 147 148 Ideal<BigRational> I; 149 Ideal<BigRational> J; 150 Ideal<BigRational> K; 151 152 L = new ArrayList<GenPolynomial<BigRational>>(); 153 154 a = fac.random(kl, ll, el, q); 155 b = fac.random(kl, ll, el, q); 156 c = fac.random(kl, ll, el, q); 157 d = fac.random(kl, ll, el, q); 158 e = d; //fac.random(kl, ll, el, q ); 159 160 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 161 return; 162 } 163 164 assertTrue("not isZERO( a )", !a.isZERO()); 165 L.add(a); 166 167 I = new Ideal<BigRational>(fac, L, true); 168 assertTrue("not isZERO( I )", !I.isZERO()); 169 assertTrue("not isONE( I )", !I.isONE()); 170 assertTrue("isGB( I )", I.isGB()); 171 172 I = new Ideal<BigRational>(fac, L, false); 173 assertTrue("not isZERO( I )", !I.isZERO()); 174 assertTrue("not isONE( I )", !I.isONE()); 175 assertTrue("isGB( I )", I.isGB()); 176 177 178 L = bb.GB(L); 179 assertTrue("isGB( { a } )", bb.isGB(L)); 180 181 I = new Ideal<BigRational>(fac, L, true); 182 assertTrue("not isZERO( I )", !I.isZERO()); 183 //assertTrue("not isONE( I )", !I.isONE() ); 184 assertTrue("isGB( I )", I.isGB()); 185 186 I = new Ideal<BigRational>(fac, L, false); 187 assertTrue("not isZERO( I )", !I.isZERO()); 188 //assertTrue("not isONE( I )", !I.isONE() ); 189 assertTrue("isGB( I )", I.isGB()); 190 191 192 assertTrue("not isZERO( b )", !b.isZERO()); 193 L.add(b); 194 //System.out.println("L = " + L.size() ); 195 196 I = new Ideal<BigRational>(fac, L, false); 197 assertTrue("not isZERO( I )", !I.isZERO()); 198 //assertTrue("not isONE( I )", !I.isONE() ); 199 //assertTrue("not isGB( I )", !I.isGB() ); 200 201 202 L = bb.GB(L); 203 assertTrue("isGB( { a, b } )", bb.isGB(L)); 204 205 I = new Ideal<BigRational>(fac, L, true); 206 assertTrue("not isZERO( I )", !I.isZERO()); 207 // assertTrue("not isONE( I )", !I.isONE() ); 208 assertTrue("isGB( I )", I.isGB()); 209 210 211 J = I; 212 K = J.sum(I); 213 assertTrue("not isZERO( K )", !K.isZERO()); 214 assertTrue("isGB( K )", K.isGB()); 215 assertTrue("equals( K, I )", K.equals(I)); 216 217 218 L = new ArrayList<GenPolynomial<BigRational>>(); 219 assertTrue("not isZERO( c )", !c.isZERO()); 220 L.add(c); 221 assertTrue("isGB( { c } )", bb.isGB(L)); 222 223 J = new Ideal<BigRational>(fac, L, true); 224 K = J.sum(I); 225 assertTrue("not isZERO( K )", !K.isZERO()); 226 assertTrue("isGB( K )", K.isGB()); 227 assertTrue("K contains(I)", K.contains(I)); 228 assertTrue("K contains(J)", K.contains(J)); 229 230 L = new ArrayList<GenPolynomial<BigRational>>(); 231 assertTrue("not isZERO( d )", !d.isZERO()); 232 L.add(d); 233 234 assertTrue("isGB( { d } )", bb.isGB(L)); 235 J = new Ideal<BigRational>(fac, L, true); 236 I = K; 237 K = J.sum(I); 238 assertTrue("not isZERO( K )", !K.isZERO()); 239 assertTrue("isGB( K )", K.isGB()); 240 assertTrue("K contains(I)", K.contains(I)); 241 assertTrue("K contains(J)", K.contains(J)); 242 243 244 L = new ArrayList<GenPolynomial<BigRational>>(); 245 assertTrue("not isZERO( e )", !e.isZERO()); 246 L.add(e); 247 248 assertTrue("isGB( { e } )", bb.isGB(L)); 249 J = new Ideal<BigRational>(fac, L, true); 250 I = K; 251 K = J.sum(I); 252 assertTrue("not isZERO( K )", !K.isZERO()); 253 assertTrue("isGB( K )", K.isGB()); 254 assertTrue("equals( K, I )", K.equals(I)); 255 assertTrue("K contains(J)", K.contains(I)); 256 assertTrue("I contains(K)", I.contains(K)); 257 } 258 259 260 /** 261 * Test Ideal product. 262 */ 263 public void testIdealProduct() { 264 265 Ideal<BigRational> I; 266 Ideal<BigRational> J; 267 Ideal<BigRational> K; 268 Ideal<BigRational> H; 269 270 a = fac.random(kl, ll, el, q); 271 b = fac.random(kl, ll, el, q); 272 c = fac.random(kl, ll, el, q); 273 d = fac.random(kl, ll, el, q); 274 e = d; //fac.random(kl, ll, el, q ); 275 276 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 277 return; 278 } 279 280 L = new ArrayList<GenPolynomial<BigRational>>(); 281 assertTrue("not isZERO( a )", !a.isZERO()); 282 L.add(a); 283 284 I = new Ideal<BigRational>(fac, L, true); 285 assertTrue("not isZERO( I )", !I.isZERO()); 286 assertTrue("not isONE( I )", !I.isONE()); 287 assertTrue("isGB( I )", I.isGB()); 288 289 L = new ArrayList<GenPolynomial<BigRational>>(); 290 assertTrue("not isZERO( b )", !a.isZERO()); 291 L.add(b); 292 293 J = new Ideal<BigRational>(fac, L, true); 294 assertTrue("not isZERO( J )", !J.isZERO()); 295 assertTrue("not isONE( J )", !J.isONE()); 296 assertTrue("isGB( J )", J.isGB()); 297 298 K = I.product(J); 299 assertTrue("not isZERO( K )", !K.isZERO()); 300 assertTrue("isGB( K )", K.isGB()); 301 assertTrue("I contains(K)", I.contains(K)); 302 assertTrue("J contains(K)", J.contains(K)); 303 304 H = I.intersect(J); 305 assertTrue("not isZERO( H )", !H.isZERO()); 306 assertTrue("isGB( H )", H.isGB()); 307 assertTrue("I contains(H)", I.contains(H)); 308 assertTrue("J contains(H)", J.contains(H)); 309 assertTrue("H contains(K)", H.contains(K)); 310 if (false /*! H.equals(K)*/) { 311 System.out.println("I = " + I); 312 System.out.println("J = " + J); 313 System.out.println("K = " + K); 314 System.out.println("H = " + H); 315 } 316 317 318 L = new ArrayList<GenPolynomial<BigRational>>(); 319 assertTrue("not isZERO( a )", !a.isZERO()); 320 L.add(a); 321 assertTrue("not isZERO( c )", !c.isZERO()); 322 L.add(c); 323 L = bb.GB(L); 324 325 I = new Ideal<BigRational>(fac, L, true); 326 assertTrue("not isZERO( I )", !I.isZERO()); 327 //assertTrue("not isONE( I )", !I.isONE() ); 328 assertTrue("isGB( I )", I.isGB()); 329 330 K = I.product(J); 331 assertTrue("not isZERO( K )", !K.isZERO()); 332 assertTrue("isGB( K )", K.isGB()); 333 assertTrue("I contains(K)", I.contains(K)); 334 assertTrue("J contains(K)", J.contains(K)); 335 336 H = I.intersect(J); 337 assertTrue("not isZERO( H )", !H.isZERO()); 338 assertTrue("isGB( H )", H.isGB()); 339 assertTrue("I contains(H)", I.contains(H)); 340 assertTrue("J contains(H)", J.contains(H)); 341 assertTrue("H contains(K)", H.contains(K)); 342 if (false /*! H.equals(K)*/) { 343 System.out.println("I = " + I); 344 System.out.println("J = " + J); 345 System.out.println("K = " + K); 346 System.out.println("H = " + H); 347 } 348 349 350 L = new ArrayList<GenPolynomial<BigRational>>(); 351 assertTrue("not isZERO( b )", !b.isZERO()); 352 L.add(b); 353 assertTrue("not isZERO( d )", !d.isZERO()); 354 L.add(d); 355 L = bb.GB(L); 356 357 J = new Ideal<BigRational>(fac, L, true); 358 assertTrue("not isZERO( J )", !J.isZERO()); 359 //assertTrue("not isONE( J )", !J.isONE() ); 360 assertTrue("isGB( J )", J.isGB()); 361 362 K = I.product(J); 363 assertTrue("not isZERO( K )", !K.isZERO()); 364 assertTrue("isGB( K )", K.isGB()); 365 assertTrue("I contains(K)", I.contains(K)); 366 assertTrue("J contains(K)", J.contains(K)); 367 368 H = I.intersect(J); 369 assertTrue("not isZERO( H )", !H.isZERO()); 370 assertTrue("isGB( H )", H.isGB()); 371 assertTrue("I contains(H)", I.contains(H)); 372 assertTrue("J contains(H)", J.contains(H)); 373 assertTrue("H contains(K)", H.contains(K)); 374 if (false /*! H.equals(K)*/) { 375 System.out.println("I = " + I); 376 System.out.println("J = " + J); 377 System.out.println("K = " + K); 378 System.out.println("H = " + H); 379 } 380 } 381 382 383 /** 384 * Test Ideal quotient. 385 */ 386 public void testIdealQuotient() { 387 388 Ideal<BigRational> I; 389 Ideal<BigRational> J; 390 Ideal<BigRational> K; 391 Ideal<BigRational> H; 392 393 a = fac.random(kl, ll, el, q); 394 b = fac.random(kl, ll, el, q); 395 c = fac.random(kl, ll, el, q); 396 d = fac.random(kl, ll, el, q); 397 e = d; //fac.random(kl, ll, el, q ); 398 399 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 400 return; 401 } 402 403 L = new ArrayList<GenPolynomial<BigRational>>(); 404 assertTrue("not isZERO( a )", !a.isZERO()); 405 L.add(a); 406 L = bb.GB(L); 407 408 I = new Ideal<BigRational>(fac, L, true); 409 assertTrue("not isZERO( I )", !I.isZERO()); 410 //assertTrue("not isONE( I )", !I.isONE() ); 411 assertTrue("isGB( I )", I.isGB()); 412 413 414 L = new ArrayList<GenPolynomial<BigRational>>(); 415 assertTrue("not isZERO( b )", !a.isZERO()); 416 L.add(b); 417 L = bb.GB(L); 418 419 J = new Ideal<BigRational>(fac, L, true); 420 assertTrue("not isZERO( J )", !J.isZERO()); 421 //assertTrue("not isONE( J )", !J.isONE() ); 422 assertTrue("isGB( J )", J.isGB()); 423 424 K = I.product(J); 425 assertTrue("not isZERO( K )", !K.isZERO()); 426 assertTrue("isGB( K )", K.isGB()); 427 assertTrue("I contains(K)", I.contains(K)); 428 assertTrue("J contains(K)", J.contains(K)); 429 430 H = K.quotient(J.getList().get(0)); 431 assertTrue("not isZERO( H )", !H.isZERO()); 432 assertTrue("isGB( H )", H.isGB()); 433 assertTrue("equals(H,I)", H.equals(I)); // GBs only 434 435 H = K.quotient(J); 436 assertTrue("not isZERO( H )", !H.isZERO()); 437 assertTrue("isGB( H )", H.isGB()); 438 assertTrue("equals(H,I)", H.equals(I)); // GBs only 439 440 441 L = new ArrayList<GenPolynomial<BigRational>>(); 442 assertTrue("not isZERO( b )", !b.isZERO()); 443 L.add(b); 444 assertTrue("not isZERO( c )", !c.isZERO()); 445 L.add(c); 446 L = bb.GB(L); 447 448 J = new Ideal<BigRational>(fac, L, true); 449 assertTrue("not isZERO( J )", !J.isZERO()); 450 //assertTrue("not isONE( J )", !J.isONE() ); 451 assertTrue("isGB( J )", J.isGB()); 452 453 K = I.product(J); 454 assertTrue("not isZERO( K )", !K.isZERO()); 455 assertTrue("isGB( K )", K.isGB()); 456 assertTrue("I contains(K)", I.contains(K)); 457 assertTrue("J contains(K)", J.contains(K)); 458 459 H = K.quotient(J); 460 assertTrue("not isZERO( H )", !H.isZERO()); 461 assertTrue("isGB( H )", H.isGB()); 462 assertTrue("equals(H,I)", H.equals(I)); // GBs only 463 464 465 L = new ArrayList<GenPolynomial<BigRational>>(); 466 assertTrue("not isZERO( a )", !a.isZERO()); 467 L.add(a); 468 assertTrue("not isZERO( d )", !d.isZERO()); 469 L.add(d); 470 L = bb.GB(L); 471 472 I = new Ideal<BigRational>(fac, L, true); 473 assertTrue("not isZERO( I )", !I.isZERO()); 474 //assertTrue("not isONE( J )", !J.isONE() ); 475 assertTrue("isGB( I )", I.isGB()); 476 477 K = I.product(J); 478 assertTrue("not isZERO( K )", !K.isZERO()); 479 assertTrue("isGB( K )", K.isGB()); 480 assertTrue("I contains(K)", I.contains(K)); 481 assertTrue("J contains(K)", J.contains(K)); 482 483 H = K.quotient(J); 484 assertTrue("not isZERO( H )", !H.isZERO()); 485 assertTrue("isGB( H )", H.isGB()); 486 assertTrue("equals(H,I)", H.equals(I)); // GBs only 487 488 if (false) { 489 System.out.println("I = " + I); 490 System.out.println("J = " + J); 491 System.out.println("K = " + K); 492 System.out.println("H = " + H); 493 } 494 } 495 496 497 /** 498 * Test Ideal infinite quotient. 499 */ 500 public void testIdealInfiniteQuotient() { 501 502 Ideal<BigRational> I; 503 Ideal<BigRational> J; 504 Ideal<BigRational> K; 505 506 a = fac.random(kl, ll, el, q); 507 b = fac.random(kl, ll, el, q); 508 c = fac.random(kl, ll, el, q); 509 d = fac.random(kl, ll, el, q); 510 e = d; //fac.random(kl, ll, el, q ); 511 512 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 513 return; 514 } 515 516 L = new ArrayList<GenPolynomial<BigRational>>(); 517 assertTrue("not isZERO( b )", !b.isZERO()); 518 L.add(b); 519 L = bb.GB(L); 520 I = new Ideal<BigRational>(fac, L, true); 521 assertTrue("not isZERO( I )", !I.isZERO()); 522 //assertTrue("not isONE( I )", !I.isONE() ); 523 assertTrue("isGB( I )", I.isGB()); 524 525 J = I.infiniteQuotient(a); 526 527 assertTrue("not isZERO( c )", !c.isZERO()); 528 L.add(c); 529 L = bb.GB(L); 530 I = new Ideal<BigRational>(fac, L, true); 531 assertTrue("not isZERO( I )", !I.isZERO()); 532 //assertTrue("not isONE( I )", !I.isONE() ); 533 assertTrue("isGB( I )", I.isGB()); 534 535 J = I.infiniteQuotient(a); 536 assertTrue("equals(J,I)", J.equals(I)); // GBs only 537 538 assertTrue("not isZERO( d )", !d.isZERO()); 539 L.add(d); 540 L = bb.GB(L); 541 I = new Ideal<BigRational>(fac, L, true); 542 assertTrue("not isZERO( I )", !I.isZERO()); 543 //assertTrue("not isONE( I )", !I.isONE() ); 544 assertTrue("isGB( I )", I.isGB()); 545 546 J = I.infiniteQuotient(a); 547 assertTrue("isGB( J )", J.isGB()); 548 assertTrue("equals(J,I)", J.equals(I)); // GBs only 549 550 551 G = new ArrayList<GenPolynomial<BigRational>>(); 552 assertTrue("not isZERO( a )", !a.isZERO()); 553 G.add(a); 554 G = bb.GB(G); 555 K = new Ideal<BigRational>(fac, G, true); 556 assertTrue("not isZERO( K )", !K.isZERO()); 557 //assertTrue("not isONE( I )", !I.isONE() ); 558 assertTrue("isGB( K )", K.isGB()); 559 560 J = I.infiniteQuotient(K); 561 assertTrue("equals(J,I)", J.equals(I)); // GBs only 562 563 564 assertTrue("not isZERO( e )", !e.isZERO()); 565 G.add(e); 566 G = bb.GB(G); 567 K = new Ideal<BigRational>(fac, G, true); 568 assertTrue("not isZERO( K )", !K.isZERO()); 569 //assertTrue("not isONE( I )", !I.isONE() ); 570 assertTrue("isGB( K )", K.isGB()); 571 572 J = I.infiniteQuotient(K); 573 assertTrue("equals(J,I)", J.equals(I)); // GBs only 574 } 575 576 577 /** 578 * Test Ideal infinite quotient with Rabinowich trick. 579 */ 580 public void testIdealInfiniteQuotientRabi() { 581 582 Ideal<BigRational> I; 583 Ideal<BigRational> J; 584 Ideal<BigRational> K; 585 Ideal<BigRational> JJ; 586 587 a = fac.random(kl - 1, ll - 1, el - 1, q / 2); 588 b = fac.random(kl - 1, ll - 1, el, q / 2); 589 c = fac.random(kl - 1, ll - 1, el, q / 2); 590 d = fac.random(kl - 1, ll - 1, el, q / 2); 591 e = a; //fac.random(kl, ll-1, el, q ); 592 593 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 594 return; 595 } 596 597 L = new ArrayList<GenPolynomial<BigRational>>(); 598 assertTrue("not isZERO( b )", !b.isZERO()); 599 L.add(b); 600 L = bb.GB(L); 601 I = new Ideal<BigRational>(fac, L, true); 602 assertTrue("not isZERO( I )", !I.isZERO()); 603 //assertTrue("not isONE( I )", !I.isONE() ); 604 assertTrue("isGB( I )", I.isGB()); 605 606 J = I.infiniteQuotientRab(a); 607 JJ = I.infiniteQuotient(a); 608 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 609 610 assertTrue("not isZERO( c )", !c.isZERO()); 611 L.add(c); 612 L = bb.GB(L); 613 I = new Ideal<BigRational>(fac, L, true); 614 assertTrue("not isZERO( I )", !I.isZERO()); 615 //assertTrue("not isONE( I )", !I.isONE() ); 616 assertTrue("isGB( I )", I.isGB()); 617 618 J = I.infiniteQuotientRab(a); 619 assertTrue("equals(J,I)", J.equals(I)); // GBs only 620 JJ = I.infiniteQuotient(a); 621 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 622 623 assertTrue("not isZERO( d )", !d.isZERO()); 624 L.add(d); 625 L = bb.GB(L); 626 I = new Ideal<BigRational>(fac, L, true); 627 assertTrue("not isZERO( I )", !I.isZERO()); 628 //assertTrue("not isONE( I )", !I.isONE() ); 629 assertTrue("isGB( I )", I.isGB()); 630 631 J = I.infiniteQuotientRab(a); 632 assertTrue("isGB( J )", J.isGB()); 633 assertTrue("equals(J,I)", J.equals(I)); // GBs only 634 JJ = I.infiniteQuotient(a); 635 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 636 637 638 G = new ArrayList<GenPolynomial<BigRational>>(); 639 assertTrue("not isZERO( a )", !a.isZERO()); 640 G.add(a); 641 G = bb.GB(G); 642 K = new Ideal<BigRational>(fac, G, true); 643 assertTrue("not isZERO( K )", !K.isZERO()); 644 //assertTrue("not isONE( I )", !I.isONE() ); 645 assertTrue("isGB( K )", K.isGB()); 646 647 J = I.infiniteQuotientRab(K); 648 assertTrue("equals(J,I)", J.equals(I)); // GBs only 649 JJ = I.infiniteQuotient(a); 650 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 651 652 653 assertTrue("not isZERO( e )", !e.isZERO()); 654 G.add(e); 655 G = bb.GB(G); 656 K = new Ideal<BigRational>(fac, G, true); 657 assertTrue("not isZERO( K )", !K.isZERO()); 658 //assertTrue("not isONE( I )", !I.isONE() ); 659 assertTrue("isGB( K )", K.isGB()); 660 661 J = I.infiniteQuotientRab(K); 662 assertTrue("equals(J,I)", J.equals(I)); // GBs only 663 JJ = I.infiniteQuotient(a); 664 assertTrue("equals(J,JJ)", J.equals(JJ)); // GBs only 665 } 666 667 668 /** 669 * Test Ideal radical membership. 670 */ 671 public void testIdealRadicalMember() { 672 673 Ideal<BigRational> I; 674 Ideal<BigRational> J; 675 Ideal<BigRational> K; 676 Ideal<BigRational> JJ; 677 678 a = fac.random(kl - 1, ll, el - 1, q); 679 b = fac.random(kl - 1, ll, el, q); 680 c = fac.random(kl - 1, ll - 1, el, q / 2); 681 d = fac.random(kl - 1, ll - 1, el, q / 2); 682 e = a; //fac.random(kl, ll-1, el, q ); 683 684 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 685 return; 686 } 687 688 L = new ArrayList<GenPolynomial<BigRational>>(); 689 L.add(b); 690 L = bb.GB(L); 691 I = new Ideal<BigRational>(fac, L, true); 692 assertTrue("not isZERO( I )", !I.isZERO()); 693 //assertTrue("not isONE( I )", !I.isONE() ); 694 assertTrue("isGB( I )", I.isGB()); 695 696 //System.out.println("a = " + a); 697 //System.out.println("b = " + b); 698 //System.out.println("I = " + I); 699 700 if (!I.isONE()) { 701 assertFalse("a in radical(b)", I.isRadicalMember(a)); 702 assertTrue("b in radical(b)", I.isRadicalMember(b)); 703 } 704 705 L = new ArrayList<GenPolynomial<BigRational>>(); 706 L.add(b.multiply(b)); 707 L = bb.GB(L); 708 I = new Ideal<BigRational>(fac, L, true); 709 assertTrue("not isZERO( I )", !I.isZERO()); 710 //assertTrue("not isONE( I )", !I.isONE() ); 711 assertTrue("isGB( I )", I.isGB()); 712 713 //System.out.println("I = " + I); 714 715 if (!I.isONE()) { 716 assertFalse("a in radical(b*b)", I.isRadicalMember(a)); 717 assertTrue("b in radical(b*b)", I.isRadicalMember(b)); 718 } 719 720 //System.out.println("c = " + c); 721 L.add(c); 722 L = bb.GB(L); 723 I = new Ideal<BigRational>(fac, L, true); 724 assertTrue("not isZERO( I )", !I.isZERO()); 725 //assertTrue("not isONE( I )", !I.isONE() ); 726 assertTrue("isGB( I )", I.isGB()); 727 728 //System.out.println("I = " + I); 729 730 if (!I.isONE()) { 731 assertFalse("a in radical(b*b)", I.isRadicalMember(a)); 732 assertTrue("b in radical(b*b)", I.isRadicalMember(b)); 733 } 734 } 735 736 737 /** 738 * Test Ideal common zeros. 739 */ 740 public void testIdealCommonZeros() { 741 742 Ideal<BigRational> I; 743 L = new ArrayList<GenPolynomial<BigRational>>(); 744 745 I = new Ideal<BigRational>(fac, L, true); 746 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 747 748 a = fac.getZERO(); 749 L.add(a); 750 I = new Ideal<BigRational>(fac, L, true); 751 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 752 753 b = fac.getONE(); 754 L.add(b); 755 I = new Ideal<BigRational>(fac, L, true); 756 assertEquals("commonZeroTest( I )", I.commonZeroTest(), -1); 757 758 L = new ArrayList<GenPolynomial<BigRational>>(); 759 a = fac.random(kl, ll, el, q); 760 if (!a.isZERO() && !a.isConstant()) { 761 L.add(a); 762 I = new Ideal<BigRational>(fac, L, true); 763 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 764 } 765 766 L = (List<GenPolynomial<BigRational>>) fac.univariateList(); 767 I = new Ideal<BigRational>(fac, L, true); 768 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 0); 769 770 L.remove(0); 771 I = new Ideal<BigRational>(fac, L, true); 772 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 773 } 774 775 776 /** 777 * Test Ideal dimension. 778 */ 779 public void testIdealDimension() { 780 781 Ideal<BigRational> I; 782 L = new ArrayList<GenPolynomial<BigRational>>(); 783 Dimension dim; 784 785 I = new Ideal<BigRational>(fac, L, true); 786 assertEquals("dimension( I )", rl, I.dimension().d); 787 788 a = fac.getZERO(); 789 L.add(a); 790 I = new Ideal<BigRational>(fac, L, true); 791 assertEquals("dimension( I )", rl, I.dimension().d); 792 793 b = fac.getONE(); 794 L.add(b); 795 I = new Ideal<BigRational>(fac, L, true); 796 assertEquals("dimension( I )", -1, I.dimension().d); 797 798 L = new ArrayList<GenPolynomial<BigRational>>(); 799 a = fac.random(kl, ll, el, q); 800 if (!a.isZERO() && !a.isConstant()) { 801 L.add(a); 802 I = new Ideal<BigRational>(fac, L, true); 803 //System.out.println("a = " + a); 804 dim = I.dimension(); 805 //System.out.println("dim(I) = " + dim); 806 assertTrue("dimension( I )", dim.d >= 1); 807 } 808 809 L = (List<GenPolynomial<BigRational>>) fac.univariateList(); 810 I = new Ideal<BigRational>(fac, L, true); 811 dim = I.dimension(); 812 assertEquals("dimension( I )", 0, dim.d); 813 814 while (L.size() > 0) { 815 L.remove(0); 816 I = new Ideal<BigRational>(fac, L, true); 817 //System.out.println("I = " + I); 818 dim = I.dimension(); 819 //System.out.println("dim(I) = " + dim); 820 assertEquals("dimension( I )", rl - L.size(), dim.d); 821 } 822 823 L = (List<GenPolynomial<BigRational>>) fac.univariateList(); 824 I = new Ideal<BigRational>(fac, L, true); 825 I = I.product(I); 826 //System.out.println("I = " + I); 827 dim = I.dimension(); 828 //System.out.println("dim(I) = " + dim); 829 assertEquals("dimension( I )", 0, dim.d); 830 831 L = I.getList(); 832 while (L.size() > 0) { 833 L.remove(0); 834 I = new Ideal<BigRational>(fac, L, true); 835 //System.out.println("I = " + I); 836 dim = I.dimension(); 837 //System.out.println("dim(I) = " + dim); 838 assertTrue("dimension( I )", dim.d > 0); 839 } 840 } 841 842 843 /** 844 * Test Ideal term order optimization. 845 */ 846 public void testIdealTopt() { 847 848 Ideal<BigRational> I; 849 Ideal<BigRational> J; 850 Ideal<BigRational> K; 851 852 L = new ArrayList<GenPolynomial<BigRational>>(); 853 854 a = fac.random(kl, ll, el, q); 855 b = fac.random(kl, ll, el, q); 856 c = fac.random(kl, ll, el, q); 857 d = fac.random(kl, ll, el, q); 858 e = d; //fac.random(kl, ll, el, q ); 859 860 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 861 return; 862 } 863 864 assertTrue("not isZERO( a )", !a.isZERO()); 865 L.add(a); 866 867 I = new Ideal<BigRational>(fac, L); 868 I.doGB(); 869 assertTrue("not isZERO( I )", !I.isZERO()); 870 assertTrue("isGB( I )", I.isGB()); 871 //System.out.println("I = " + I); 872 873 J = I.clone(); //new Ideal<BigRational>(fac,L); 874 J.doToptimize(); 875 assertTrue("not isZERO( J )", !J.isZERO()); 876 assertTrue("isGB( J )", J.isGB()); 877 //System.out.println("J = " + J); 878 879 if (I.isONE()) { 880 return; 881 } 882 883 assertTrue("not isZERO( b )", !b.isZERO()); 884 L.add(b); 885 886 I = new Ideal<BigRational>(fac, L); 887 K = I.clone(); 888 I.doGB(); 889 assertTrue("not isZERO( I )", !I.isZERO()); 890 assertTrue("isGB( I )", I.isGB()); 891 //System.out.println("GB(I) = " + I); 892 893 K.doToptimize(); 894 K.doGB(); 895 assertTrue("not isZERO( K )", !K.isZERO()); 896 assertTrue("isGB( K )", K.isGB()); 897 //System.out.println("GB(opt(K)) = " + K); 898 899 J = I.clone(); 900 J.doToptimize(); 901 assertTrue("not isZERO( J )", !J.isZERO()); 902 assertTrue("isGB( J )", J.isGB()); 903 //System.out.println("opt(GB(J)) = " + J); 904 905 if (I.isONE()) { 906 return; 907 } 908 909 assertTrue("not isZERO( c )", !c.isZERO()); 910 L.add(c); 911 912 I = new Ideal<BigRational>(fac, L); 913 K = I.clone(); 914 I.doGB(); 915 assertTrue("not isZERO( I )", !I.isZERO()); 916 assertTrue("isGB( I )", I.isGB()); 917 //System.out.println("GB(I) = " + I); 918 919 K.doToptimize(); 920 K.doGB(); 921 assertTrue("not isZERO( K )", !K.isZERO()); 922 assertTrue("isGB( K )", K.isGB()); 923 //System.out.println("GB(opt(K)) = " + K); 924 925 J = I.clone(); 926 J.doToptimize(); 927 assertTrue("not isZERO( J )", !J.isZERO()); 928 assertTrue("isGB( J )", J.isGB()); 929 //System.out.println("opt(GB(J)) = " + J); 930 } 931 932 933 /** 934 * Test elimination Ideals. 935 */ 936 public void testElimIdeal() { 937 938 String[] vars = fac.getVars(); 939 //System.out.println("vars = " + Arrays.toString(vars)); 940 //System.out.println("fac = " + fac); 941 942 Ideal<BigRational> I; 943 Ideal<BigRational> J; 944 945 L = new ArrayList<GenPolynomial<BigRational>>(); 946 947 a = fac.univariate(2, 3L); //fac.random(kl, ll, el, q ); 948 b = fac.univariate(1, 2L); //fac.random(kl, ll, el, q ); 949 c = fac.univariate(0, 1L); //fac.random(kl, ll, el, q ); 950 951 if (a.isZERO() || b.isZERO() || c.isZERO()) { 952 return; 953 } 954 955 L.add(a); 956 L.add(b); 957 L.add(c); 958 959 I = new Ideal<BigRational>(fac, L); 960 //I.doGB(); 961 assertTrue("not isZERO( I )", !I.isZERO()); 962 assertTrue("isGB( I )", I.isGB()); 963 //System.out.println("I = " + I); 964 965 List<String> sv = new ArrayList<String>(vars.length); 966 for (int i = 0; i < vars.length; i++) { 967 sv.add(vars[i]); 968 } 969 //System.out.println("sv = " + sv); 970 971 for (int i = 0; i <= vars.length; i++) { 972 KsubSet<String> ps = new KsubSet<String>(sv, i); 973 //System.out.println("========================== ps : " + i); 974 for (List<String> ev : ps) { 975 //System.out.println("ev = " + ev); 976 977 String[] evars = new String[ev.size()]; 978 for (int j = 0; j < ev.size(); j++) { 979 evars[j] = ev.get(j); 980 } 981 GenPolynomialRing<BigRational> efac; 982 efac = new GenPolynomialRing<BigRational>(fac.coFac, evars.length, fac.tord, evars); 983 //System.out.println("efac = " + efac); 984 985 J = I.eliminate(efac); 986 assertTrue("isGB( J )", J.isGB()); 987 assertTrue("size( J ) <= |ev|", J.getList().size() <= ev.size()); 988 //System.out.println("J = " + J); 989 } 990 } 991 } 992 993 994 /** 995 * Test univariate polynomials in ideal. 996 */ 997 public void testUnivPoly() { 998 String[] vars; 999 1000 BigRational coeff = new BigRational(17, 1); 1001 to = new TermOrder(TermOrder.INVLEX); 1002 vars = new String[] { "x", "y", "z" }; 1003 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1004 1005 vars = fac.getVars(); 1006 //System.out.println("vars = " + Arrays.toString(vars)); 1007 //System.out.println("fac = " + fac); 1008 1009 Ideal<BigRational> I; 1010 L = new ArrayList<GenPolynomial<BigRational>>(); 1011 1012 a = fac.parse("( x^3 + 34/55 x^2 + 1/9 x + 99 )"); 1013 b = fac.parse("( y^4 - x )"); 1014 c = fac.parse("( z^3 - x y )"); 1015 1016 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1017 return; 1018 } 1019 1020 L.add(a); 1021 L.add(b); 1022 L.add(c); 1023 I = new Ideal<BigRational>(fac, L); 1024 //I.doGB(); 1025 assertTrue("not isZERO( I )", !I.isZERO()); 1026 assertTrue("isGB( I )", I.isGB()); 1027 //System.out.println("I = " + I); 1028 1029 for (int i = 0; i < rl; i++) { // rl 1030 GenPolynomial<BigRational> u = I.constructUnivariate(rl - 1 - i); 1031 //System.out.println("u = " + u); 1032 GenPolynomial<BigRational> U = fac.parse(u.toString()); 1033 //System.out.println("U = " + U + "\n"); 1034 assertTrue("I.contains(U) ", I.contains(U)); 1035 } 1036 1037 List<GenPolynomial<BigRational>> Us = I.constructUnivariate(); 1038 for (GenPolynomial<BigRational> u : Us) { 1039 //System.out.println("u = " + u); 1040 GenPolynomial<BigRational> U = fac.parse(u.toString()); 1041 //System.out.println("U = " + U + "\n"); 1042 assertTrue("I.contains(U) ", I.contains(U)); 1043 } 1044 } 1045 1046 1047 /** 1048 * Test complex roots univariate polynomials in zero dim ideal. 1049 */ 1050 public void testComplexRoot() { 1051 String[] vars; 1052 1053 BigRational coeff = new BigRational(17, 1); 1054 to = new TermOrder(TermOrder.INVLEX); 1055 vars = new String[] { "x", "y", "z" }; 1056 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1057 1058 vars = fac.getVars(); 1059 //System.out.println("vars = " + Arrays.toString(vars)); 1060 //System.out.println("fac = " + fac); 1061 1062 Ideal<BigRational> I; 1063 L = new ArrayList<GenPolynomial<BigRational>>(); 1064 1065 a = fac.parse("( x^3 - 27 )"); 1066 b = fac.parse("( y^2 - 9 )"); 1067 c = fac.parse("( z - 7 )"); 1068 1069 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1070 return; 1071 } 1072 1073 L.add(a); 1074 L.add(b); 1075 L.add(c); 1076 I = new Ideal<BigRational>(fac, L); 1077 //I.doGB(); 1078 assertTrue("not isZERO( I )", !I.isZERO()); 1079 assertTrue("isGB( I )", I.isGB()); 1080 //System.out.println("I = " + I); 1081 1082 BigRational eps = new BigRational(1, 1000000); 1083 eps = eps.multiply(eps); 1084 eps = eps.multiply(eps).multiply(eps); 1085 BigDecimal e = new BigDecimal(eps.getRational()); 1086 e = e.abs(); //.multiply(e); 1087 1088 BigDecimal dc = BigDecimal.ONE; 1089 GenPolynomialRing<BigDecimal> dfac = new GenPolynomialRing<BigDecimal>(dc, fac); 1090 //System.out.println("dfac = " + dfac); 1091 ComplexRing<BigDecimal> dcc = new ComplexRing<BigDecimal>(dc); 1092 GenPolynomialRing<Complex<BigDecimal>> dcfac = new GenPolynomialRing<Complex<BigDecimal>>(dcc, dfac); 1093 //System.out.println("dcfac = " + dcfac); 1094 1095 List<List<Complex<BigDecimal>>> roots = PolyUtilApp.<BigRational, BigRational> complexRootTuples(I, 1096 eps); 1097 //System.out.println("roots = " + roots + "\n"); 1098 for (GenPolynomial<BigRational> p : I.getList()) { 1099 GenPolynomial<BigDecimal> dp = PolyUtil.<BigRational> decimalFromRational(dfac, p); 1100 GenPolynomial<Complex<BigDecimal>> dpc = PolyUtil.<BigDecimal> toComplex(dcfac, dp); 1101 //System.out.println("dpc = " + dpc); 1102 for (List<Complex<BigDecimal>> r : roots) { 1103 //System.out.println("r = " + r); 1104 Complex<BigDecimal> ev = PolyUtil.<Complex<BigDecimal>> evaluateAll(dcc, dcfac, dpc, r); 1105 if (ev.norm().getRe().compareTo(e) > 0) { 1106 //System.out.println("ev = " + ev); 1107 fail("ev > eps : " + ev + " > " + e); 1108 } 1109 } 1110 } 1111 //System.out.println(); 1112 } 1113 1114 1115 /** 1116 * Test real roots univariate polynomials in zero dim ideal. 1117 */ 1118 public void testRealRoot() { 1119 String[] vars; 1120 1121 BigRational coeff = new BigRational(17, 1); 1122 to = new TermOrder(TermOrder.INVLEX); 1123 vars = new String[] { "x", "y", "z" }; 1124 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1125 1126 vars = fac.getVars(); 1127 //System.out.println("vars = " + Arrays.toString(vars)); 1128 //System.out.println("fac = " + fac); 1129 1130 Ideal<BigRational> I; 1131 L = new ArrayList<GenPolynomial<BigRational>>(); 1132 1133 a = fac.parse("( x^3 - 27 )"); 1134 b = fac.parse("( y^4 - x )"); 1135 c = fac.parse("( z^2 - x^2 )"); 1136 1137 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1138 return; 1139 } 1140 1141 L.add(a); 1142 L.add(b); 1143 L.add(c); 1144 I = new Ideal<BigRational>(fac, L); 1145 //I.doGB(); 1146 assertTrue("not isZERO( I )", !I.isZERO()); 1147 assertTrue("isGB( I )", I.isGB()); 1148 //System.out.println("I = " + I); 1149 1150 BigRational eps = new BigRational(1, 1000000); 1151 eps = eps.multiply(eps); 1152 eps = eps.multiply(eps).multiply(eps); 1153 BigDecimal e = new BigDecimal(eps.getRational()); 1154 e = e.abs(); //.multiply(e); 1155 1156 List<List<BigDecimal>> roots = PolyUtilApp.<BigRational, BigRational> realRootTuples(I, eps); 1157 //System.out.println("roots = " + roots + "\n"); 1158 // polynomials with decimal coefficients 1159 BigDecimal dc = BigDecimal.ONE; 1160 GenPolynomialRing<BigDecimal> dfac = new GenPolynomialRing<BigDecimal>(dc, fac); 1161 //System.out.println("dfac = " + dfac); 1162 for (GenPolynomial<BigRational> p : I.getList()) { 1163 GenPolynomial<BigDecimal> dp = PolyUtil.<BigRational> decimalFromRational(dfac, p); 1164 //System.out.println("dp = " + dp); 1165 for (List<BigDecimal> r : roots) { 1166 //System.out.println("r = " + r); 1167 BigDecimal ev = PolyUtil.<BigDecimal> evaluateAll(dc, dfac, dp, r); 1168 if (ev.abs().compareTo(e) > 0) { 1169 //System.out.println("ev = " + ev); 1170 fail("ev > eps : " + ev + " > " + e); 1171 } 1172 } 1173 } 1174 //System.out.println(); 1175 } 1176 1177 1178 /** 1179 * Test zero dimensional decomposition. 1180 */ 1181 public void testZeroDimDecomp() { 1182 String[] vars; 1183 1184 BigRational coeff = new BigRational(17, 1); 1185 to = new TermOrder(TermOrder.INVLEX); 1186 vars = new String[] { "x", "y", "z" }; 1187 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1188 1189 vars = fac.getVars(); 1190 //System.out.println("vars = " + Arrays.toString(vars)); 1191 //System.out.println("fac = " + fac); 1192 1193 Ideal<BigRational> I; 1194 L = new ArrayList<GenPolynomial<BigRational>>(); 1195 1196 a = fac.parse("( x^3 - 27 )"); 1197 b = fac.parse("( y^4 - x )"); 1198 c = fac.parse("( z^2 - x^2 )"); 1199 1200 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1201 return; 1202 } 1203 1204 L.add(a); 1205 L.add(b); 1206 L.add(c); 1207 I = new Ideal<BigRational>(fac, L); 1208 //I.doGB(); 1209 assertTrue("not isZERO( I )", !I.isZERO()); 1210 assertTrue("isGB( I )", I.isGB()); 1211 //System.out.println("I = " + I); 1212 1213 List<IdealWithUniv<BigRational>> zd = I.zeroDimDecomposition(); 1214 //System.out.println("I = " + I); 1215 //System.out.println("zd = " + zd); 1216 1217 boolean t = I.isZeroDimDecomposition(zd); 1218 //System.out.println("t = " + t); 1219 assertTrue("is decomposition ", t); 1220 } 1221 1222 1223 /** 1224 * Test real roots univariate polynomials in zero dim ideal. 1225 */ 1226 public void testIdealRealRoot() { 1227 String[] vars; 1228 1229 BigRational coeff = new BigRational(17, 1); 1230 to = new TermOrder(TermOrder.INVLEX); 1231 vars = new String[] { "x", "y", "z" }; 1232 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1233 1234 vars = fac.getVars(); 1235 //System.out.println("vars = " + Arrays.toString(vars)); 1236 //System.out.println("fac = " + fac); 1237 1238 Ideal<BigRational> I; 1239 L = new ArrayList<GenPolynomial<BigRational>>(); 1240 1241 a = fac.parse("( x^3 - 27 )"); 1242 b = fac.parse("( y^4 - x )"); 1243 c = fac.parse("( z^2 - x^2 )"); 1244 1245 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1246 return; 1247 } 1248 1249 L.add(a); 1250 L.add(b); 1251 L.add(c); 1252 I = new Ideal<BigRational>(fac, L); 1253 //I.doGB(); 1254 assertTrue("not isZERO( I )", !I.isZERO()); 1255 assertTrue("isGB( I )", I.isGB()); 1256 //System.out.println("I = " + I); 1257 1258 List<IdealWithUniv<BigRational>> zd = I.zeroDimDecomposition(); 1259 //System.out.println("zd = " + zd); 1260 assertTrue("is decomposition ", I.isZeroDimDecomposition(zd)); 1261 1262 BigRational eps = new BigRational(1, 1000000); 1263 eps = eps.multiply(eps); 1264 eps = eps.multiply(eps).multiply(eps); 1265 BigDecimal e = new BigDecimal(eps.getRational()); 1266 e = e.abs(); //.multiply(e); 1267 BigDecimal dc = BigDecimal.ONE; 1268 1269 List<IdealWithRealRoots<BigRational>> roots 1270 = PolyUtilApp.<BigRational, BigRational> realRoots(zd,eps); 1271 //System.out.println("roots = " + roots + "\n"); 1272 1273 for (IdealWithRealRoots<BigRational> Ir : roots) { 1274 List<GenPolynomial<BigRational>> L = Ir.ideal.getList(); 1275 List<GenPolynomial<BigDecimal>> Ld = new ArrayList<GenPolynomial<BigDecimal>>(L.size()); 1276 1277 GenPolynomialRing<BigDecimal> dfac = new GenPolynomialRing<BigDecimal>(dc, Ir.ideal.list.ring); 1278 //System.out.println("dfac = " + dfac); 1279 1280 for (GenPolynomial<BigRational> p : L) { 1281 GenPolynomial<BigDecimal> dp = PolyUtil.<BigRational> decimalFromRational(dfac, p); 1282 //System.out.println("dp = " + dp); 1283 Ld.add(dp); 1284 } 1285 boolean t = PolyUtilApp.isRealRoots(Ld, Ir.rroots, e); 1286 assertTrue("isRealRoots ", t); // this example only 1287 } 1288 } 1289 1290 1291 /** 1292 * Test complex roots univariate polynomials in zero dim ideal. 1293 */ 1294 public void testIdealComplexRoot() { 1295 String[] vars; 1296 1297 BigRational coeff = new BigRational(1, 1); 1298 to = new TermOrder(TermOrder.INVLEX); 1299 //vars = new String[] { "x", "y" }; 1300 vars = new String[] { "x", "y" , "z" }; 1301 fac = new GenPolynomialRing<BigRational>(coeff, vars.length, to, vars); 1302 1303 vars = fac.getVars(); 1304 //System.out.println("vars = " + Arrays.toString(vars)); 1305 //System.out.println("fac = " + fac); 1306 1307 Ideal<BigRational> I; 1308 L = new ArrayList<GenPolynomial<BigRational>>(); 1309 1310 a = fac.parse("( x^3 + 3 )"); 1311 //a = fac.parse("( x^3 - 3 )"); 1312 //a = fac.parse("( x^2 + 3 )"); 1313 b = fac.parse("( y^2 - x )"); 1314 //b = fac.parse("( y^2 + x )"); 1315 //b = fac.parse("( y^2 + 4 )"); 1316 c = fac.parse("( z^2 - x y )"); 1317 1318 if (a.isZERO() || b.isZERO() ) { 1319 return; 1320 } 1321 1322 L.add(a); 1323 L.add(b); 1324 L.add(c); 1325 I = new Ideal<BigRational>(fac, L); 1326 //I.doGB(); 1327 assertTrue("not isZERO( I )", !I.isZERO()); 1328 assertTrue("isGB( I )", I.isGB()); 1329 //System.out.println("I = " + I); 1330 1331 List<IdealWithUniv<BigRational>> zd = I.zeroDimRootDecomposition(); 1332 //System.out.println("zd = " + zd); 1333 assertTrue("is decomposition ", I.isZeroDimDecomposition(zd)); 1334 1335 BigRational eps = new BigRational(1, 1000000); 1336 //eps = eps.multiply(eps); 1337 eps = eps.multiply(eps).multiply(eps); 1338 BigDecimal e = new BigDecimal(eps.getRational()); 1339 e = e.abs(); //.multiply(e); 1340 1341 List<IdealWithComplexAlgebraicRoots<BigRational,BigRational>> roots 1342 = PolyUtilApp.<BigRational, BigRational> complexAlgebraicRoots(zd); //, eps); 1343 //System.out.println("roots = " + roots + "\n"); 1344 1345 ComplexRing<BigDecimal> dcc = new ComplexRing<BigDecimal>(e); 1346 1347 int d = 0; 1348 int s = 0; 1349 for (IdealWithComplexAlgebraicRoots<BigRational,BigRational> Ic : roots) { 1350 List<GenPolynomial<BigRational>> L = Ic.ideal.getList(); 1351 List<GenPolynomial<Complex<BigDecimal>>> Ld 1352 = new ArrayList<GenPolynomial<Complex<BigDecimal>>>(L.size()); 1353 s += Ic.can.size(); 1354 1355 GenPolynomialRing<BigDecimal> dfac = new GenPolynomialRing<BigDecimal>(e, Ic.ideal.list.ring); 1356 //System.out.println("dfac = " + dfac); 1357 GenPolynomialRing<Complex<BigDecimal>> dcfac; 1358 dcfac = new GenPolynomialRing<Complex<BigDecimal>>(dcc, dfac); 1359 //System.out.println("dcfac = " + dcfac); 1360 int ds = 1; 1361 for (GenPolynomial<BigRational> p : L) { 1362 long dl = p.leadingExpVector().totalDeg(); 1363 ds *= dl; 1364 GenPolynomial<BigDecimal> dp = PolyUtil.<BigRational> decimalFromRational(dfac, p); 1365 GenPolynomial<Complex<BigDecimal>> dpc = PolyUtil.<BigDecimal> toComplex(dcfac, dp); 1366 //System.out.println("p = " + p); 1367 //System.out.println("dpc = " + dpc); 1368 Ld.add(dpc); 1369 } 1370 d += ds; 1371 List<List<Complex<BigDecimal>>> droot = Ic.decimalApproximation(); 1372 for ( List<Complex<BigDecimal>> dr : droot ) { 1373 //System.out.println("dr = " + dr); 1374 } 1375 } 1376 logger.info("#roots = " + s + ", #vr-dim = " + d); 1377 assertTrue("#roots(" + s + ") == degree(" + d + "): ", s == d); 1378 } 1379 1380 1381 /** 1382 * Test normal position. 1383 */ 1384 public void testNormalPosition() { 1385 String[] vars; 1386 1387 BigRational coeff = new BigRational(17, 1); 1388 to = new TermOrder(TermOrder.INVLEX); 1389 vars = new String[] { "x", "y", "z" }; 1390 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1391 1392 vars = fac.getVars(); 1393 //System.out.println("vars = " + Arrays.toString(vars)); 1394 //System.out.println("fac = " + fac); 1395 1396 Ideal<BigRational> I; 1397 L = new ArrayList<GenPolynomial<BigRational>>(); 1398 1399 a = fac.parse("( x^3 - 27 )"); 1400 b = fac.parse("( y^3 - x )"); 1401 c = fac.parse("( z^2 - x^2 )"); 1402 1403 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1404 return; 1405 } 1406 1407 L.add(a); 1408 L.add(b); 1409 L.add(c); 1410 I = new Ideal<BigRational>(fac, L); 1411 I.doGB(); 1412 assertTrue("not isZERO( I )", !I.isZERO()); 1413 assertTrue("isGB( I )", I.isGB()); 1414 //System.out.println("I = " + I); 1415 1416 int[] np = I.normalPositionIndex2Vars(); 1417 //System.out.println("np = " + np); 1418 if (np == null) { 1419 np = I.normalPositionIndexUnivars(); 1420 //System.out.println("np = " + np); 1421 } 1422 if (np == null) { 1423 return; 1424 } 1425 int i = np[0]; 1426 int j = np[1]; 1427 IdealWithUniv<BigRational> Ip = I.normalPositionFor(i, j, null); 1428 //System.out.println("Ip = " + Ip); 1429 1430 boolean t = Ip.ideal.isNormalPositionFor(i + 1, j + 1); // sic 1431 //System.out.println("t = " + t); 1432 assertTrue("is normal position ", t); 1433 1434 np = Ip.ideal.normalPositionIndex2Vars(); 1435 //System.out.println("np = " + np); 1436 if (np == null) { 1437 np = Ip.ideal.normalPositionIndexUnivars(); 1438 //System.out.println("np = " + Arrays.toString(np)); 1439 } 1440 if (np == null) { 1441 return; 1442 } 1443 i = np[0]; 1444 j = np[1]; 1445 assertTrue("i == 0: " + i, i == 0); 1446 assertTrue("j == 2: " + j, j == 2); // fixed, was 3 1447 } 1448 1449 1450 /** 1451 * Test 0-dim root decomposition. 1452 */ 1453 public void testRootDecomposition() { 1454 String[] vars; 1455 1456 BigRational coeff = new BigRational(17, 1); 1457 to = new TermOrder(TermOrder.INVLEX); 1458 vars = new String[] { "x", "y", "z" }; 1459 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1460 1461 vars = fac.getVars(); 1462 //System.out.println("vars = " + Arrays.toString(vars)); 1463 //System.out.println("fac = " + fac); 1464 1465 Ideal<BigRational> I; 1466 L = new ArrayList<GenPolynomial<BigRational>>(); 1467 1468 a = fac.parse("( x^2 - 7 )"); 1469 b = fac.parse("( y^2 - 5 )"); 1470 c = fac.parse("( z^3 - x * y )"); 1471 1472 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1473 return; 1474 } 1475 1476 L.add(a); 1477 L.add(b); 1478 L.add(c); 1479 I = new Ideal<BigRational>(fac, L); 1480 I.doGB(); 1481 assertTrue("not isZERO( I )", !I.isZERO()); 1482 assertTrue("isGB( I )", I.isGB()); 1483 //System.out.println("I = " + I); 1484 1485 List<IdealWithUniv<BigRational>> rzd = I.zeroDimRootDecomposition(); 1486 //System.out.println("rzd = " + rzd); 1487 1488 assertTrue("is contained in intersection ", I.isZeroDimDecomposition(rzd)); 1489 } 1490 1491 1492 /** 1493 * Test 0-dim prime decomposition. 1494 */ 1495 public void testPrimeDecomposition() { 1496 String[] vars; 1497 1498 BigRational coeff = new BigRational(17, 1); 1499 to = new TermOrder(TermOrder.INVLEX); 1500 vars = new String[] { "x", "y", "z" }; 1501 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1502 1503 vars = fac.getVars(); 1504 //System.out.println("vars = " + Arrays.toString(vars)); 1505 //System.out.println("fac = " + fac); 1506 1507 Ideal<BigRational> I; 1508 L = new ArrayList<GenPolynomial<BigRational>>(); 1509 1510 a = fac.parse("( x^2 - 5 )^2 "); 1511 b = fac.parse("( y^2 - 5 )"); 1512 c = fac.parse("( z^3 - x )"); 1513 1514 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1515 return; 1516 } 1517 1518 L.add(a); 1519 L.add(b); 1520 L.add(c); 1521 I = new Ideal<BigRational>(fac, L); 1522 I.doGB(); 1523 assertTrue("not isZERO( I )", !I.isZERO()); 1524 assertTrue("isGB( I )", I.isGB()); 1525 //System.out.println("I = " + I); 1526 1527 List<IdealWithUniv<BigRational>> pzd = I.zeroDimPrimeDecomposition(); 1528 //System.out.println("pzd = " + pzd); 1529 //System.out.println("I = " + I); 1530 1531 assertTrue("is contained in intersection ", I.isZeroDimDecomposition(pzd)); 1532 } 1533 1534 1535 /** 1536 * Test 0-dim primary decomposition. 1537 */ 1538 public void testPrimaryDecomposition() { 1539 String[] vars; 1540 1541 BigRational coeff = new BigRational(17, 1); 1542 to = new TermOrder(TermOrder.INVLEX); 1543 vars = new String[] { "x", "y", "z" }; 1544 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1545 1546 vars = fac.getVars(); 1547 //System.out.println("vars = " + Arrays.toString(vars)); 1548 //System.out.println("fac = " + fac); 1549 1550 Ideal<BigRational> I; 1551 L = new ArrayList<GenPolynomial<BigRational>>(); 1552 1553 a = fac.parse("( x^2 - 5 )^2 "); 1554 b = fac.parse("( y^2 - 5 )"); 1555 c = fac.parse("( z^3 - x )"); 1556 1557 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1558 return; 1559 } 1560 1561 L.add(a); 1562 L.add(b); 1563 L.add(c); 1564 I = new Ideal<BigRational>(fac, L); 1565 I.doGB(); 1566 assertTrue("not isZERO( I )", !I.isZERO()); 1567 assertTrue("isGB( I )", I.isGB()); 1568 //System.out.println("I = " + I); 1569 1570 List<PrimaryComponent<BigRational>> qzd = I.zeroDimPrimaryDecomposition(); 1571 //System.out.println("qzd = " + qzd); 1572 //System.out.println("I = " + I); 1573 1574 assertTrue("is intersection ", I.isPrimaryDecomposition(qzd)); 1575 } 1576 1577 1578 /** 1579 * Test 0-dim root decomposition and real roots. 1580 */ 1581 public void testRootDecompositionReal() { 1582 String[] vars; 1583 1584 BigRational coeff = new BigRational(17, 1); 1585 to = new TermOrder(TermOrder.INVLEX); 1586 vars = new String[] { "x", "y", "z" }; 1587 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1588 1589 vars = fac.getVars(); 1590 //System.out.println("vars = " + Arrays.toString(vars)); 1591 //System.out.println("fac = " + fac); 1592 1593 Ideal<BigRational> I; 1594 L = new ArrayList<GenPolynomial<BigRational>>(); 1595 1596 a = fac.parse("( x^2 - 5 )"); 1597 b = fac.parse("( y^2 - 7 )"); 1598 c = fac.parse("( z^3 - x * y )"); 1599 1600 if (a.isZERO() || b.isZERO() || c.isZERO()) { 1601 return; 1602 } 1603 1604 L.add(a); 1605 L.add(b); 1606 L.add(c); 1607 I = new Ideal<BigRational>(fac, L); 1608 I.doGB(); 1609 assertTrue("not isZERO( I )", !I.isZERO()); 1610 assertTrue("isGB( I )", I.isGB()); 1611 //System.out.println("I = " + I); 1612 1613 List<IdealWithRealAlgebraicRoots<BigRational, BigRational>> iur; 1614 iur = PolyUtilApp.<BigRational, BigRational> realAlgebraicRoots(I); 1615 1616 List<IdealWithUniv<BigRational>> iul = new ArrayList<IdealWithUniv<BigRational>>(); 1617 for (IdealWithRealAlgebraicRoots<BigRational, BigRational> iu : iur) { 1618 iul.add((IdealWithUniv<BigRational>) iu); 1619 } 1620 assertTrue("is contained in intersection ", I.isZeroDimDecomposition(iul)); 1621 1622 for (IdealWithRealAlgebraicRoots<BigRational, BigRational> iu : iur) { 1623 //System.out.println("iu = " + iu); 1624 //System.out.println(""); 1625 List<List<BigDecimal>> rd = iu.decimalApproximation(); 1626 //System.out.println("iu = " + iu); 1627 //System.out.println(""); 1628 } 1629 } 1630 1631 1632 /** 1633 * Test extension-contraction. 1634 */ 1635 public void testExtCont() { 1636 String[] vars; 1637 1638 BigRational coeff = new BigRational(17, 1); 1639 to = new TermOrder(); //TermOrder.INVLEX); 1640 vars = new String[] { "x", "y", "z" }; 1641 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1642 1643 vars = fac.getVars(); 1644 //System.out.println("vars = " + Arrays.toString(vars)); 1645 //System.out.println("fac = " + fac); 1646 1647 Ideal<BigRational> I; 1648 L = new ArrayList<GenPolynomial<BigRational>>(); 1649 1650 //a = fac.parse("( y^2 - 5 ) x "); 1651 //b = fac.parse("( y^2 - 5 ) x "); 1652 //c = fac.parse("( x z^3 - 3 )"); 1653 1654 //a = fac.parse("( x^2 + 2 x y z + z^4 ) "); 1655 //b = fac.parse("( y z - z^2 ) "); 1656 //c = fac.parse("0"); 1657 1658 a = fac.parse("( y + x y^2 ) "); 1659 b = fac.parse("( x z + x^2 y ) "); 1660 //c = fac.parse("0"); 1661 1662 if (a.isZERO() || b.isZERO()) { 1663 return; 1664 } 1665 1666 L.add(a); 1667 L.add(b); 1668 //L.add(c); 1669 I = new Ideal<BigRational>(fac, L); 1670 I.doGB(); 1671 assertTrue("not isZERO( I )", !I.isZERO()); 1672 assertTrue("isGB( I )", I.isGB()); 1673 //System.out.println("I = " + I); 1674 1675 IdealWithUniv<Quotient<BigRational>> Ext = I.extension(new String[] { "x" }); 1676 //Ideal<Quotient<BigRational>> Ext = I.extension( new String[] { "y", "z" } ); 1677 //System.out.println("Ext = " + Ext); 1678 //System.out.println("I = " + I); 1679 1680 IdealWithUniv<BigRational> Con = I.permContraction(Ext); 1681 //System.out.println("Con = " + Con); 1682 //System.out.println("I = " + I); 1683 1684 assertTrue("I subseteq Con(Ext(I)) ", Con.ideal.contains(I)); 1685 } 1686 1687 1688 /** 1689 * Test prime ideal decomposition. 1690 */ 1691 public void testPrimeDecomp() { 1692 String[] vars; 1693 1694 BigRational coeff = new BigRational(17, 1); 1695 to = new TermOrder(TermOrder.INVLEX); 1696 vars = new String[] { "x", "y", "z" }; 1697 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1698 1699 vars = fac.getVars(); 1700 //System.out.println("vars = " + Arrays.toString(vars)); 1701 //System.out.println("fac = " + fac); 1702 1703 Ideal<BigRational> I; 1704 L = new ArrayList<GenPolynomial<BigRational>>(); 1705 1706 //a = fac.parse("( y^2 - 5 ) x "); 1707 //b = fac.parse("( y^2 - 5 ) x "); 1708 //c = fac.parse("( x z^3 - 3 )"); 1709 1710 //a = fac.parse("( x^2 + 2 x y z + z^4 ) "); 1711 //b = fac.parse("( y z - z^2 ) "); 1712 1713 //a = fac.parse("( y + x y^2 ) "); 1714 //b = fac.parse("( x z + x^2 y ) "); 1715 1716 a = fac.parse("( z^2 - x ) "); 1717 b = fac.parse("( y^2 - x ) "); 1718 1719 //a = fac.parse("( x y ) "); 1720 //b = fac.parse("( x z ) "); 1721 1722 if (a.isZERO() || b.isZERO()) { 1723 return; 1724 } 1725 1726 L.add(a); 1727 L.add(b); 1728 //L.add(c); 1729 I = new Ideal<BigRational>(fac, L); 1730 I.doGB(); 1731 assertTrue("not isZERO( I )", !I.isZERO()); 1732 assertTrue("isGB( I )", I.isGB()); 1733 //System.out.println("I = " + I); 1734 1735 List<IdealWithUniv<BigRational>> pdec = I.primeDecomposition(); 1736 //System.out.println("pdec = " + pdec); 1737 //System.out.println("I = " + I); 1738 1739 assertTrue("I subseteq cup G_i ", I.isDecomposition(pdec)); 1740 1741 List<Ideal<BigRational>> dec = new ArrayList<Ideal<BigRational>>(pdec.size()); 1742 for (IdealWithUniv<BigRational> pu : pdec) { 1743 dec.add(pu.ideal); 1744 } 1745 Ideal<BigRational> Ii = I.intersect(dec); 1746 //System.out.println("Ii = " + Ii); 1747 //System.out.println("I = " + I); 1748 1749 // not always: 1750 assertTrue("I == Ii ", I.equals(Ii)); 1751 } 1752 1753 1754 /** 1755 * Test radical ideal decomposition. 1756 */ 1757 public void testRadicalDecomp() { 1758 String[] vars; 1759 1760 BigRational coeff = new BigRational(17, 1); 1761 to = new TermOrder(TermOrder.INVLEX); 1762 vars = new String[] { "x", "y", "z" }; 1763 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1764 1765 vars = fac.getVars(); 1766 //System.out.println("vars = " + Arrays.toString(vars)); 1767 //System.out.println("fac = " + fac); 1768 1769 Ideal<BigRational> I; 1770 L = new ArrayList<GenPolynomial<BigRational>>(); 1771 1772 //a = fac.parse("( y^2 - 5 ) x "); 1773 //b = fac.parse("( y^2 - 5 ) x "); 1774 //c = fac.parse("( x z^3 - 3 )"); 1775 1776 a = fac.parse("( x^2 + 2 x y z + z^4 ) "); 1777 b = fac.parse("( y z - z^2 ) "); 1778 1779 //a = fac.parse("( y + x y^2 ) "); 1780 //b = fac.parse("( x z + x^2 y ) "); 1781 1782 //a = fac.parse("( z^2 - x )^2 "); 1783 //b = fac.parse("( y^2 - x ) "); 1784 1785 //a = fac.parse("( x^2 y^3 ) "); 1786 //b = fac.parse("( x^2 z^5 ) "); 1787 1788 if (a.isZERO() || b.isZERO()) { 1789 return; 1790 } 1791 1792 L.add(a); 1793 L.add(b); 1794 //L.add(c); 1795 I = new Ideal<BigRational>(fac, L); 1796 I.doGB(); 1797 assertTrue("not isZERO( I )", !I.isZERO()); 1798 assertTrue("isGB( I )", I.isGB()); 1799 //System.out.println("I = " + I); 1800 1801 List<IdealWithUniv<BigRational>> rdec = I.radicalDecomposition(); 1802 //System.out.println("rdec = " + rdec); 1803 //System.out.println("I = " + I); 1804 1805 assertTrue("I subseteq cup G_i ", I.isDecomposition(rdec)); 1806 1807 List<Ideal<BigRational>> dec = new ArrayList<Ideal<BigRational>>(rdec.size()); 1808 for (IdealWithUniv<BigRational> ru : rdec) { 1809 dec.add(ru.ideal); 1810 } 1811 Ideal<BigRational> Ii = I.intersect(dec); 1812 //System.out.println("Ii = " + Ii); 1813 //System.out.println("I = " + I); 1814 1815 assertTrue("Ii.contains(I) ", Ii.contains(I)); 1816 1817 //Ii = I.radical(); 1818 //System.out.println("Ii = " + Ii); 1819 //System.out.println("I = " + I); 1820 //assertTrue("Ii.contains(I) ", Ii.contains(I)); 1821 } 1822 1823 1824 /** 1825 * Test ideal decomposition. 1826 */ 1827 public void testIrredDecomp() { 1828 String[] vars; 1829 1830 BigRational coeff = new BigRational(17, 1); 1831 to = new TermOrder(TermOrder.INVLEX); 1832 vars = new String[] { "x", "y", "z" }; 1833 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1834 1835 vars = fac.getVars(); 1836 //System.out.println("vars = " + Arrays.toString(vars)); 1837 //System.out.println("fac = " + fac); 1838 1839 Ideal<BigRational> I; 1840 L = new ArrayList<GenPolynomial<BigRational>>(); 1841 1842 //a = fac.parse("( y^2 - 5 ) x "); 1843 //b = fac.parse("( y^2 - 5 ) x "); 1844 //c = fac.parse("( x z^3 - 3 )"); 1845 1846 a = fac.parse("( x^2 + 2 x y z + z^4 ) "); 1847 b = fac.parse("( y z - z^2 ) "); 1848 1849 //a = fac.parse("( y + x y^2 ) "); 1850 //b = fac.parse("( x z + x^2 y ) "); 1851 1852 //a = fac.parse("( z^2 - x )^2 "); 1853 //b = fac.parse("( y^2 - x ) "); 1854 1855 //a = fac.parse("( x^2 y^3 ) "); 1856 //b = fac.parse("( x^2 z^5 ) "); 1857 1858 if (a.isZERO() || b.isZERO()) { 1859 return; 1860 } 1861 1862 L.add(a); 1863 L.add(b); 1864 //L.add(c); 1865 I = new Ideal<BigRational>(fac, L); 1866 I.doGB(); 1867 assertTrue("not isZERO( I )", !I.isZERO()); 1868 assertTrue("isGB( I )", I.isGB()); 1869 //System.out.println("I = " + I); 1870 1871 List<IdealWithUniv<BigRational>> rdec = I.decomposition(); 1872 //System.out.println("rdec = " + rdec); 1873 //System.out.println("I = " + I); 1874 1875 assertTrue("I subseteq cup G_i ", I.isDecomposition(rdec)); 1876 1877 List<Ideal<BigRational>> dec = new ArrayList<Ideal<BigRational>>(rdec.size()); 1878 for (IdealWithUniv<BigRational> ru : rdec) { 1879 dec.add(ru.ideal); 1880 } 1881 Ideal<BigRational> Ii = I.intersect(dec); 1882 //System.out.println("Ii = " + Ii); 1883 //System.out.println("I = " + I); 1884 1885 assertTrue("Ii.contains(I) ", Ii.contains(I)); 1886 1887 //Ii = I.radical(); 1888 //System.out.println("Ii = " + Ii); 1889 //System.out.println("I = " + I); 1890 //assertTrue("Ii.contains(I) ", Ii.contains(I)); 1891 } 1892 1893 1894 /** 1895 * Test primary ideal decomposition. 1896 */ 1897 public void testPrimaryDecomp() { 1898 String[] vars; 1899 1900 BigRational coeff = new BigRational(17, 1); 1901 to = new TermOrder(TermOrder.INVLEX); 1902 vars = new String[] { "x", "y", "z" }; 1903 fac = new GenPolynomialRing<BigRational>(coeff, rl, to, vars); 1904 1905 vars = fac.getVars(); 1906 //System.out.println("vars = " + Arrays.toString(vars)); 1907 //System.out.println("fac = " + fac); 1908 1909 Ideal<BigRational> I; 1910 L = new ArrayList<GenPolynomial<BigRational>>(); 1911 1912 //a = fac.parse("( y^2 - 5 ) x "); 1913 //b = fac.parse("( y^2 - 5 ) x "); 1914 //c = fac.parse("( x z^3 - 3 )"); 1915 1916 //a = fac.parse("( x^2 + 2 x y z + z^4 ) "); 1917 //b = fac.parse("( y z - z^2 ) "); 1918 1919 //a = fac.parse("( y + x y^2 ) "); 1920 //b = fac.parse("( x z + x^2 y ) "); 1921 1922 a = fac.parse("( x z^2 - 1 )^2 "); 1923 b = fac.parse("( y^2 - x ) "); 1924 1925 //a = fac.parse("( x^2 y ) "); 1926 //b = fac.parse("( x z^3 ) "); 1927 1928 if (a.isZERO() || b.isZERO()) { 1929 return; 1930 } 1931 1932 L.add(a); 1933 L.add(b); 1934 //L.add(c); 1935 I = new Ideal<BigRational>(fac, L); 1936 I.doGB(); 1937 assertTrue("not isZERO( I )", !I.isZERO()); 1938 assertTrue("isGB( I )", I.isGB()); 1939 //System.out.println("I = " + I); 1940 1941 List<PrimaryComponent<BigRational>> qdec = I.primaryDecomposition(); 1942 //System.out.println("qdec = " + qdec); 1943 //System.out.println("I = " + I); 1944 1945 List<Ideal<BigRational>> dec = new ArrayList<Ideal<BigRational>>(qdec.size()); 1946 for (PrimaryComponent<BigRational> ru : qdec) { 1947 dec.add(ru.primary); 1948 } 1949 assertTrue("I eq cup G_i ", I.isPrimaryDecomposition(qdec)); 1950 } 1951 1952 }