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