001/* 002 * $Id$ 003 */ 004 005package edu.jas.gbufd; 006 007 008import java.io.IOException; 009import java.io.Reader; 010import java.io.StringReader; 011import java.util.ArrayList; 012import java.util.List; 013 014 015import edu.jas.arith.BigRational; 016import edu.jas.gb.GroebnerBase; 017import edu.jas.gb.GroebnerBaseSeq; 018import edu.jas.gb.OrderedSyzPairlist; 019import edu.jas.gb.ReductionSeq; 020import edu.jas.poly.AlgebraicNumber; 021import edu.jas.poly.AlgebraicNumberRing; 022import edu.jas.poly.Complex; 023import edu.jas.poly.GenPolynomial; 024import edu.jas.poly.GenPolynomialRing; 025import edu.jas.poly.GenPolynomialTokenizer; 026import edu.jas.poly.PolynomialList; 027import edu.jas.poly.TermOrder; 028 029import junit.framework.Test; 030import junit.framework.TestCase; 031import junit.framework.TestSuite; 032 033 034/** 035 * Groebner base via FGLM tests with JUnit. 036 * @author Heinz Kredel 037 */ 038 039public class GroebnerBaseFGLMTest extends TestCase { 040 041 042 /** 043 * main 044 */ 045 public static void main(String[] args) { 046 junit.textui.TestRunner.run(suite()); 047 } 048 049 050 /** 051 * Constructs a <CODE>GroebnerBaseFGLMTest</CODE> object. 052 * @param name String. 053 */ 054 public GroebnerBaseFGLMTest(String name) { 055 super(name); 056 } 057 058 059 /** 060 * suite. 061 */ 062 public static Test suite() { 063 TestSuite suite = new TestSuite(GroebnerBaseFGLMTest.class); 064 return suite; 065 } 066 067 068 GenPolynomialRing<BigRational> fac; 069 070 071 PolynomialList<BigRational> F; 072 073 074 List<GenPolynomial<BigRational>> L, G, Gs; 075 076 077 GroebnerBase<BigRational> bb; 078 079 080 GenPolynomial<BigRational> a, b, c, d, e; 081 082 083 int rl = 4; //4; //3; 084 085 086 int kl = 7; // 10 087 088 089 int ll = 7; 090 091 092 int el = 3; // 4 093 094 095 float q = 0.2f; //0.4f 096 097 098 @Override 099 protected void setUp() { 100 BigRational coeff = new BigRational(9); 101 fac = new GenPolynomialRing<BigRational>(coeff, rl, new TermOrder(TermOrder.INVLEX)); 102 a = b = c = d = e = null; 103 bb = new GroebnerBaseFGLM<BigRational>(); 104 } 105 106 107 @Override 108 protected void tearDown() { 109 a = b = c = d = e = null; 110 fac = null; 111 bb = null; 112 } 113 114 115 /** 116 * Test example GBase. 117 */ 118 @SuppressWarnings({ "unchecked", "cast" }) 119 public void testExamGBase() { 120 GroebnerBase<BigRational> bbs = new GroebnerBaseSeq<BigRational>(new ReductionSeq<BigRational>(), 121 new OrderedSyzPairlist<BigRational>()); 122 String exam = "(x,y,z) L " + "( " + "( z y**2 + 2 x + 1/2 )" + "( z x**2 - y**2 - 1/2 x )" 123 + "( -z + y**2 x + 4 x**2 + 1/4 )" + " )"; 124 125 Reader source = new StringReader(exam); 126 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 127 try { 128 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 129 } catch (ClassCastException e) { 130 fail("" + e); 131 } catch (IOException e) { 132 fail("" + e); 133 } 134 //System.out.println("F = " + F); 135 136 G = bb.GB(F.list); 137 PolynomialList<BigRational> P = new PolynomialList<BigRational>(F.ring, G); 138 //System.out.println("G = " + P); 139 assertTrue("isGB( GB(P) )", bb.isGB(G)); 140 assertEquals("#GB(P) == 3", 3, G.size()); 141 142 Gs = bbs.GB(F.list); 143 PolynomialList<BigRational> P2 = new PolynomialList<BigRational>(F.ring, Gs); 144 assertTrue("isGB( GB(P2) )", bb.isGB(Gs)); 145 assertEquals("#GB(P2) == 3", 3, Gs.size()); 146 147 assertEquals("GB == FGLM", P, P2); 148 } 149 150 151 /** 152 * Test Trinks7 GBase. 153 */ 154 @SuppressWarnings({ "unchecked", "cast" }) 155 public void testTrinks7GBase() { 156 GroebnerBase<BigRational> bbs = new GroebnerBaseSeq<BigRational>(new ReductionSeq<BigRational>(), 157 new OrderedSyzPairlist<BigRational>()); 158 String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 159 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 160 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 161 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 162 Reader source = new StringReader(exam); 163 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 164 try { 165 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 166 } catch (ClassCastException e) { 167 fail("" + e); 168 } catch (IOException e) { 169 fail("" + e); 170 } 171 //System.out.println("F = " + F); 172 173 G = bb.GB(F.list); 174 PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G); 175 //System.out.println("G = " + trinks); 176 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 177 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 178 179 Gs = bbs.GB(F.list); 180 PolynomialList<BigRational> trinks2 = new PolynomialList<BigRational>(F.ring, Gs); 181 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 182 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 183 184 assertEquals("GB == FGLM", trinks, trinks2); 185 } 186 187 188 /** 189 * Test Trinks6 GBase. 190 */ 191 @SuppressWarnings({ "unchecked", "cast" }) 192 public void testTrinks6GBase() { 193 GroebnerBase<BigRational> bbs = new GroebnerBaseSeq<BigRational>(new ReductionSeq<BigRational>(), 194 new OrderedSyzPairlist<BigRational>()); 195 String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 196 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 197 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 198 + "( 99 W - 11 B S + 3 B**2 ), " + ") "; 199 200 Reader source = new StringReader(exam); 201 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 202 try { 203 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 204 } catch (ClassCastException e) { 205 fail("" + e); 206 } catch (IOException e) { 207 fail("" + e); 208 } 209 //System.out.println("F = " + F); 210 211 G = bb.GB(F.list); 212 PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G); 213 //System.out.println("G = " + trinks); 214 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 215 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 216 217 Gs = bbs.GB(F.list); 218 PolynomialList<BigRational> trinks2 = new PolynomialList<BigRational>(F.ring, Gs); 219 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 220 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 221 222 assertEquals("GB == FGLM", trinks, trinks2); 223 } 224 225 226 /** 227 * Test Trinks7 GBase over Q(sqrt(2)). 228 */ 229 @SuppressWarnings({ "unchecked", "cast" }) 230 public void testTrinks7GBaseSqrt() { 231 GroebnerBase<AlgebraicNumber<BigRational>> bbs = new GroebnerBaseSeq<AlgebraicNumber<BigRational>>( 232 new ReductionSeq<AlgebraicNumber<BigRational>>(), 233 new OrderedSyzPairlist<AlgebraicNumber<BigRational>>()); 234 GroebnerBase<AlgebraicNumber<BigRational>> bb = new GroebnerBaseFGLM<AlgebraicNumber<BigRational>>(); 235 String exam = "AN[ (w2) (w2^2 - 2) ] (B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 236 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 237 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 238 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 239 240 Reader source = new StringReader(exam); 241 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 242 PolynomialList<AlgebraicNumber<BigRational>> F = null; 243 List<GenPolynomial<AlgebraicNumber<BigRational>>> G, Gs; 244 try { 245 F = (PolynomialList<AlgebraicNumber<BigRational>>) parser.nextPolynomialSet(); 246 } catch (ClassCastException e) { 247 fail("" + e); 248 } catch (IOException e) { 249 fail("" + e); 250 } 251 //System.out.println("F = " + F); 252 GenPolynomialRing<AlgebraicNumber<BigRational>> pfac = F.ring; 253 AlgebraicNumberRing<BigRational> afac = (AlgebraicNumberRing<BigRational>) pfac.coFac; 254 //System.out.println("afac = " + afac); 255 afac = new AlgebraicNumberRing<BigRational>(afac.modul, true); 256 //System.out.println("afac = " + afac); 257 pfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(afac, pfac); 258 List<GenPolynomial<AlgebraicNumber<BigRational>>> Fp = new ArrayList<GenPolynomial<AlgebraicNumber<BigRational>>>( 259 F.list.size()); 260 for (GenPolynomial<AlgebraicNumber<BigRational>> p : F.list) { 261 GenPolynomial<AlgebraicNumber<BigRational>> pp = pfac.copy(p); 262 Fp.add(pp); 263 } 264 F = new PolynomialList<AlgebraicNumber<BigRational>>(pfac, Fp); 265 266 G = bb.GB(F.list); 267 PolynomialList<AlgebraicNumber<BigRational>> trinks = new PolynomialList<AlgebraicNumber<BigRational>>( 268 F.ring, G); 269 //System.out.println("G = " + trinks); 270 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 271 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 272 273 Gs = bbs.GB(F.list); 274 PolynomialList<AlgebraicNumber<BigRational>> trinks2 = new PolynomialList<AlgebraicNumber<BigRational>>( 275 F.ring, Gs); 276 //System.out.println("Gs = " + trinks2); 277 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 278 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 279 280 assertEquals("GB == FGLM", trinks, trinks2); 281 } 282 283 284 /** 285 * Test Trinks7 GBase over Q(i). 286 */ 287 @SuppressWarnings({ "unchecked", "cast" }) 288 public void testTrinks7GBaseCompl() { 289 GroebnerBase<Complex<BigRational>> bbs = new GroebnerBaseSeq<Complex<BigRational>>( 290 new ReductionSeq<Complex<BigRational>>(), 291 new OrderedSyzPairlist<Complex<BigRational>>()); 292 GroebnerBase<Complex<BigRational>> bb = new GroebnerBaseFGLM<Complex<BigRational>>(); 293 String exam = "Complex (B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 294 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 295 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 296 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 297 298 Reader source = new StringReader(exam); 299 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 300 PolynomialList<Complex<BigRational>> F = null; 301 List<GenPolynomial<Complex<BigRational>>> G, Gs; 302 try { 303 F = (PolynomialList<Complex<BigRational>>) parser.nextPolynomialSet(); 304 } catch (ClassCastException e) { 305 fail("" + e); 306 } catch (IOException e) { 307 fail("" + e); 308 } 309 //System.out.println("F = " + F); 310 311 G = bb.GB(F.list); 312 PolynomialList<Complex<BigRational>> trinks = new PolynomialList<Complex<BigRational>>(F.ring, G); 313 //System.out.println("G = " + trinks); 314 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 315 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 316 317 Gs = bbs.GB(F.list); 318 PolynomialList<Complex<BigRational>> trinks2 = new PolynomialList<Complex<BigRational>>(F.ring, Gs); 319 //System.out.println("Gs = " + trinks2); 320 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 321 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 322 323 assertEquals("GB == FGLM", trinks, trinks2); 324 } 325 326}