001/* 002 * $Id: GroebnerBaseFGLMTest.java 5048 2014-12-30 17:45:01Z kredel $ 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 via FGLM 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("cast") 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 @SuppressWarnings("unused") 144 String exam2 = "(x,y,z) L " + "( " + "( z y**2 + 2 x + 1/2 )" + "( z x**2 - y**2 - 1/2 x )" 145 + "( -z + y**2 x + 4 x**2 + 1/4 )" + " )"; 146 147 Reader source = new StringReader(exam); 148 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 149 try { 150 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 151 } catch (ClassCastException e) { 152 fail("" + e); 153 } catch (IOException e) { 154 fail("" + e); 155 } 156 //System.out.println("F = " + F); 157 158 G = bb.GB(F.list); 159 PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G); 160 //System.out.println("G = " + trinks); 161 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 162 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 163 164 Gs = bbs.GB(F.list); 165 PolynomialList<BigRational> trinks2 = new PolynomialList<BigRational>(F.ring, Gs); 166 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 167 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 168 169 assertEquals("GB == FGLM", trinks, trinks2); 170 } 171 172 173 /** 174 * Test Trinks6 GBase. 175 */ 176 @SuppressWarnings("cast") 177 public void testTrinks6GBase() { 178 GroebnerBase<BigRational> bbs = new GroebnerBaseSeq<BigRational>(new ReductionSeq<BigRational>(), 179 new OrderedSyzPairlist<BigRational>()); 180 String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 181 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 182 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 183 + "( 99 W - 11 B S + 3 B**2 ), " + ") "; 184 185 Reader source = new StringReader(exam); 186 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 187 try { 188 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 189 } catch (ClassCastException e) { 190 fail("" + e); 191 } catch (IOException e) { 192 fail("" + e); 193 } 194 //System.out.println("F = " + F); 195 196 G = bb.GB(F.list); 197 PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G); 198 //System.out.println("G = " + trinks); 199 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 200 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 201 202 Gs = bbs.GB(F.list); 203 PolynomialList<BigRational> trinks2 = new PolynomialList<BigRational>(F.ring, Gs); 204 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 205 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 206 207 assertEquals("GB == FGLM", trinks, trinks2); 208 } 209 210 211 /** 212 * Test Trinks7 GBase over Q(sqrt(2)). 213 */ 214 @SuppressWarnings("cast") 215 public void testTrinks7GBaseSqrt() { 216 GroebnerBase<AlgebraicNumber<BigRational>> bbs = new GroebnerBaseSeq<AlgebraicNumber<BigRational>>( 217 new ReductionSeq<AlgebraicNumber<BigRational>>(), 218 new OrderedSyzPairlist<AlgebraicNumber<BigRational>>()); 219 GroebnerBase<AlgebraicNumber<BigRational>> bb = new GroebnerBaseFGLM<AlgebraicNumber<BigRational>>(); 220 String exam = "AN[ (w2) (w2^2 - 2) ] (B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 221 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 222 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 223 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 224 225 Reader source = new StringReader(exam); 226 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 227 PolynomialList<AlgebraicNumber<BigRational>> F = null; 228 List<GenPolynomial<AlgebraicNumber<BigRational>>> G, Gs; 229 try { 230 F = (PolynomialList<AlgebraicNumber<BigRational>>) parser.nextPolynomialSet(); 231 } catch (ClassCastException e) { 232 fail("" + e); 233 } catch (IOException e) { 234 fail("" + e); 235 } 236 //System.out.println("F = " + F); 237 GenPolynomialRing<AlgebraicNumber<BigRational>> pfac = F.ring; 238 AlgebraicNumberRing<BigRational> afac = (AlgebraicNumberRing<BigRational>) pfac.coFac; 239 //System.out.println("afac = " + afac); 240 afac = new AlgebraicNumberRing<BigRational>(afac.modul, true); 241 //System.out.println("afac = " + afac); 242 pfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(afac, pfac); 243 List<GenPolynomial<AlgebraicNumber<BigRational>>> Fp = new ArrayList<GenPolynomial<AlgebraicNumber<BigRational>>>( 244 F.list.size()); 245 for (GenPolynomial<AlgebraicNumber<BigRational>> p : F.list) { 246 GenPolynomial<AlgebraicNumber<BigRational>> pp = pfac.copy(p); 247 Fp.add(pp); 248 } 249 F = new PolynomialList<AlgebraicNumber<BigRational>>(pfac, Fp); 250 251 G = bb.GB(F.list); 252 PolynomialList<AlgebraicNumber<BigRational>> trinks = new PolynomialList<AlgebraicNumber<BigRational>>( 253 F.ring, G); 254 //System.out.println("G = " + trinks); 255 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 256 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 257 258 Gs = bbs.GB(F.list); 259 PolynomialList<AlgebraicNumber<BigRational>> trinks2 = new PolynomialList<AlgebraicNumber<BigRational>>( 260 F.ring, Gs); 261 //System.out.println("Gs = " + trinks2); 262 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 263 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 264 265 assertEquals("GB == FGLM", trinks, trinks2); 266 } 267 268 269 /** 270 * Test Trinks7 GBase over Q(i). 271 */ 272 @SuppressWarnings("cast") 273 public void testTrinks7GBaseCompl() { 274 GroebnerBase<Complex<BigRational>> bbs = new GroebnerBaseSeq<Complex<BigRational>>( 275 new ReductionSeq<Complex<BigRational>>(), 276 new OrderedSyzPairlist<Complex<BigRational>>()); 277 GroebnerBase<Complex<BigRational>> bb = new GroebnerBaseFGLM<Complex<BigRational>>(); 278 String exam = "Complex (B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 279 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 280 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 281 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 282 283 Reader source = new StringReader(exam); 284 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 285 PolynomialList<Complex<BigRational>> F = null; 286 List<GenPolynomial<Complex<BigRational>>> G, Gs; 287 try { 288 F = (PolynomialList<Complex<BigRational>>) parser.nextPolynomialSet(); 289 } catch (ClassCastException e) { 290 fail("" + e); 291 } catch (IOException e) { 292 fail("" + e); 293 } 294 //System.out.println("F = " + F); 295 296 G = bb.GB(F.list); 297 PolynomialList<Complex<BigRational>> trinks = new PolynomialList<Complex<BigRational>>(F.ring, G); 298 //System.out.println("G = " + trinks); 299 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 300 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 301 302 Gs = bbs.GB(F.list); 303 PolynomialList<Complex<BigRational>> trinks2 = new PolynomialList<Complex<BigRational>>(F.ring, Gs); 304 //System.out.println("Gs = " + trinks2); 305 assertTrue("isGB( GB(Trinks7) )", bb.isGB(Gs)); 306 assertEquals("#GB(Trinks7) == 6", 6, Gs.size()); 307 308 assertEquals("GB == FGLM", trinks, trinks2); 309 } 310 311}