001    /*
002     * $Id: SyzygyTest.java 3445 2010-12-25 17:24:04Z kredel $
003     */
004    
005    package edu.jas.gbmod;
006    
007    
008    import java.io.IOException;
009    import java.io.Reader;
010    import java.io.StringReader;
011    import java.util.ArrayList;
012    import java.util.List;
013    
014    import junit.framework.Test;
015    import junit.framework.TestCase;
016    import junit.framework.TestSuite;
017    
018    import org.apache.log4j.BasicConfigurator;
019    
020    import edu.jas.arith.BigRational;
021    import edu.jas.gb.GroebnerBase;
022    import edu.jas.gbufd.GBFactory;
023    import edu.jas.poly.GenPolynomial;
024    import edu.jas.poly.GenPolynomialRing;
025    import edu.jas.poly.GenPolynomialTokenizer;
026    import edu.jas.poly.ModuleList;
027    import edu.jas.poly.PolynomialList;
028    import edu.jas.poly.TermOrder;
029    
030    
031    /**
032     * Syzygy tests with JUnit.
033     * @author Heinz Kredel.
034     */
035    
036    public class SyzygyTest extends TestCase {
037    
038    
039        //private static final Logger logger = Logger.getLogger(SyzygyTest.class);
040    
041        /**
042         * main.
043         */
044        public static void main(String[] args) {
045            BasicConfigurator.configure();
046            junit.textui.TestRunner.run(suite());
047        }
048    
049    
050        /**
051         * Constructs a <CODE>SyzygyTest</CODE> object.
052         * @param name String.
053         */
054        public SyzygyTest(String name) {
055            super(name);
056        }
057    
058    
059        /**
060     */
061        public static Test suite() {
062            TestSuite suite = new TestSuite(SyzygyTest.class);
063            return suite;
064        }
065    
066    
067        GenPolynomialRing<BigRational> fac;
068    
069    
070        PolynomialList<BigRational> F;
071    
072    
073        List<GenPolynomial<BigRational>> G;
074    
075    
076        GroebnerBase<BigRational> bb;
077    
078    
079        ModGroebnerBase<BigRational> mbb;
080    
081    
082        Syzygy<BigRational> sz;
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        GenPolynomial<BigRational> zero;
101    
102    
103        GenPolynomial<BigRational> one;
104    
105    
106        TermOrder tord;
107    
108    
109        List<GenPolynomial<BigRational>> L;
110    
111    
112        List<List<GenPolynomial<BigRational>>> K;
113    
114    
115        List<GenPolynomial<BigRational>> V;
116    
117    
118        List<List<GenPolynomial<BigRational>>> W;
119    
120    
121        ModuleList<BigRational> M;
122    
123    
124        ModuleList<BigRational> N;
125    
126    
127        ModuleList<BigRational> Z;
128    
129    
130        int rl = 3; //4; //3; 
131    
132    
133        int kl = 3; //7;
134    
135    
136        int ll = 7; //9;
137    
138    
139        int el = 2;
140    
141    
142        float q = 0.3f; //0.4f
143    
144    
145        @Override
146        protected void setUp() {
147            BigRational coeff = new BigRational(9);
148            tord = new TermOrder();
149            fac = new GenPolynomialRing<BigRational>(coeff, rl, tord);
150    
151            bb = GBFactory.getImplementation(coeff);
152            mbb = new ModGroebnerBaseAbstract<BigRational>(coeff);
153            sz = new SyzygyAbstract<BigRational>();
154    
155            a = b = c = d = e = null;
156            L = null;
157            K = null;
158            V = null;
159    
160            do {
161                a = fac.random(kl, ll, el, q);
162                b = fac.random(kl, ll, el, q);
163                c = fac.random(kl, ll, el, q);
164                d = fac.random(kl, ll, el, q);
165            } while (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO());
166            e = d; //fac.random(kl, ll, el, q );
167    
168            one = fac.getONE();
169            zero = fac.getZERO();
170        }
171    
172    
173        @Override
174        protected void tearDown() {
175            a = b = c = d = e = null;
176            L = null;
177            K = null;
178            V = null;
179            fac = null;
180            tord = null;
181            bb = null;
182            mbb = null;
183            sz = null;
184        }
185    
186    
187        /**
188         * Test sequential Syzygy.
189         * 
190         */
191        public void testSequentialSyzygy() {
192    
193            L = new ArrayList<GenPolynomial<BigRational>>();
194    
195            assertTrue("not isZERO( a )", !a.isZERO());
196            L.add(a);
197            assertTrue("isGB( { a } )", bb.isGB(L));
198            K = sz.zeroRelations(L);
199            assertTrue("is ZR( { a } )", sz.isZeroRelation(K, L));
200    
201            assertTrue("not isZERO( b )", !b.isZERO());
202            L.add(b);
203            L = bb.GB(L);
204            assertTrue("isGB( { a, b } )", bb.isGB(L));
205            //System.out.println("\nL = " + L );
206            K = sz.zeroRelations(L);
207            //System.out.println("\nN = " + N );
208            assertTrue("is ZR( { a, b } )", sz.isZeroRelation(K, L));
209    
210            assertTrue("not isZERO( c )", !c.isZERO());
211            L.add(c);
212            L = bb.GB(L);
213            //System.out.println("\nL = " + L );
214            assertTrue("isGB( { a, b, c } )", bb.isGB(L));
215            K = sz.zeroRelations(L);
216            //System.out.println("\nN = " + N );
217            assertTrue("is ZR( { a, b, c } )", sz.isZeroRelation(K, L));
218    
219            assertTrue("not isZERO( d )", !d.isZERO());
220            L.add(d);
221            L = bb.GB(L);
222            //System.out.println("\nL = " + L );
223            assertTrue("isGB( { a, b, c, d } )", bb.isGB(L));
224            K = sz.zeroRelations(L);
225            //System.out.println("\nN = " + N );
226            assertTrue("is ZR( { a, b, c, d } )", sz.isZeroRelation(K, L));
227    
228            //System.out.println("N = " + N );
229            /*
230            */
231        }
232    
233    
234        /**
235         * Test sequential module Syzygy.
236         * 
237         */
238        public void testSequentialModSyzygy() {
239    
240            W = new ArrayList<List<GenPolynomial<BigRational>>>();
241    
242            assertTrue("not isZERO( a )", !a.isZERO());
243            V = new ArrayList<GenPolynomial<BigRational>>();
244            V.add(a);
245            V.add(zero);
246            V.add(one);
247            W.add(V);
248            M = new ModuleList<BigRational>(fac, W);
249            assertTrue("isGB( { (a,0,1) } )", mbb.isGB(M));
250    
251            N = mbb.GB(M);
252            assertTrue("isGB( { (a,0,1) } )", mbb.isGB(N));
253    
254            Z = sz.zeroRelations(N);
255            //System.out.println("Z = " + Z);
256            assertTrue("is ZR( { a) } )", sz.isZeroRelation(Z, N));
257    
258            assertTrue("not isZERO( b )", !b.isZERO());
259            V = new ArrayList<GenPolynomial<BigRational>>();
260            V.add(b);
261            V.add(one);
262            V.add(zero);
263            W.add(V);
264            M = new ModuleList<BigRational>(fac, W);
265            //System.out.println("W = " + W.size() );
266    
267            N = mbb.GB(M);
268            assertTrue("isGB( { a, b } )", mbb.isGB(N));
269    
270            Z = sz.zeroRelations(N);
271            //System.out.println("Z = " + Z);
272            assertTrue("is ZR( { a, b } )", sz.isZeroRelation(Z, N));
273    
274            assertTrue("not isZERO( c )", !c.isZERO());
275            V = new ArrayList<GenPolynomial<BigRational>>();
276            V.add(c);
277            V.add(one);
278            V.add(zero);
279            W.add(V);
280            M = new ModuleList<BigRational>(fac, W);
281            //System.out.println("W = " + W.size() );
282    
283            N = mbb.GB(M);
284            //System.out.println("GB(M) = " + N);
285            assertTrue("isGB( { a,b,c) } )", mbb.isGB(N));
286    
287            Z = sz.zeroRelations(N);
288            //System.out.println("Z = " + Z);
289            //boolean b = Syzygy.isZeroRelation(Z,N);
290            //System.out.println("boolean = " + b);
291            assertTrue("is ZR( { a,b,c } )", sz.isZeroRelation(Z, N));
292    
293        }
294    
295    
296        /**
297         * Test sequential arbitrary base Syzygy.
298         * 
299         */
300        public void testSequentialArbitrarySyzygy() {
301    
302            L = new ArrayList<GenPolynomial<BigRational>>();
303    
304            assertTrue("not isZERO( a )", !a.isZERO());
305            L.add(a);
306            assertTrue("isGB( { a } )", bb.isGB(L));
307            K = sz.zeroRelationsArbitrary(L);
308            assertTrue("is ZR( { a } )", sz.isZeroRelation(K, L));
309    
310            assertTrue("not isZERO( b )", !b.isZERO());
311            L.add(b);
312            // L = bb.GB(L);
313            // assertTrue("isGB( { a, b } )", bb.isGB(L) );
314            //System.out.println("\nL = " + L );
315            K = sz.zeroRelationsArbitrary(L);
316            //System.out.println("\nN = " + N );
317            assertTrue("is ZR( { a, b } )", sz.isZeroRelation(K, L));
318    
319            assertTrue("not isZERO( c )", !c.isZERO());
320            L.add(c);
321            //L = bb.GB(L);
322            //System.out.println("\nL = " + L );
323            //assertTrue("isGB( { a, b, c } )", bb.isGB(L) );
324            K = sz.zeroRelationsArbitrary(L);
325            //System.out.println("\nN = " + N );
326            assertTrue("is ZR( { a, b, c } )", sz.isZeroRelation(K, L));
327    
328            assertTrue("not isZERO( d )", !d.isZERO());
329            L.add(d);
330            //L = bb.GB(L);
331            //System.out.println("\nL = " + L );
332            //assertTrue("isGB( { a, b, c, d } )", bb.isGB(L) );
333            K = sz.zeroRelationsArbitrary(L);
334            //System.out.println("\nN = " + N );
335            assertTrue("is ZR( { a, b, c, d } )", sz.isZeroRelation(K, L));
336    
337            //System.out.println("N = " + N );
338    
339        }
340    
341    
342        /**
343         * Test sequential arbitrary base Syzygy, ex CLO 2, p 214 ff.
344         * 
345         */
346        @SuppressWarnings("unchecked")
347        // not jet working
348        public void testSequentialArbitrarySyzygyCLO() {
349    
350            PolynomialList<BigRational> F = null;
351    
352            String exam = "(x,y) G " + "( " + "( x y + x ), " + "( y^2 + 1 ) " + ") ";
353            Reader source = new StringReader(exam);
354            GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source);
355            try {
356                F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
357            } catch (ClassCastException e) {
358                fail("" + e);
359            } catch (IOException e) {
360                fail("" + e);
361            }
362            //System.out.println("F = " + F);
363    
364            L = F.list;
365            K = sz.zeroRelationsArbitrary(L);
366            assertTrue("is ZR( { a, b } )", sz.isZeroRelation(K, L));
367        }
368    
369    
370        /**
371         * Test sequential arbitrary module Syzygy.
372         * 
373         */
374        public void testSequentialArbitraryModSyzygy() {
375    
376            W = new ArrayList<List<GenPolynomial<BigRational>>>();
377    
378            assertTrue("not isZERO( a )", !a.isZERO());
379            V = new ArrayList<GenPolynomial<BigRational>>();
380            V.add(a);
381            V.add(zero);
382            V.add(one);
383            W.add(V);
384            M = new ModuleList<BigRational>(fac, W);
385            assertTrue("isGB( { (a,0,1) } )", mbb.isGB(M));
386    
387            Z = sz.zeroRelationsArbitrary(M);
388            //System.out.println("Z = " + Z);
389            assertTrue("is ZR( { a) } )", sz.isZeroRelation(Z, M));
390    
391            assertTrue("not isZERO( b )", !b.isZERO());
392            V = new ArrayList<GenPolynomial<BigRational>>();
393            V.add(b);
394            V.add(one);
395            V.add(zero);
396            W.add(V);
397            M = new ModuleList<BigRational>(fac, W);
398            //System.out.println("W = " + W.size() );
399    
400            Z = sz.zeroRelationsArbitrary(M);
401            //System.out.println("Z = " + Z);
402            assertTrue("is ZR( { a, b } )", sz.isZeroRelation(Z, M));
403    
404            assertTrue("not isZERO( c )", !c.isZERO());
405            V = new ArrayList<GenPolynomial<BigRational>>();
406            V.add(c);
407            V.add(one);
408            V.add(zero);
409            W.add(V);
410            M = new ModuleList<BigRational>(fac, W);
411            //System.out.println("W = " + W.size() );
412    
413            Z = sz.zeroRelationsArbitrary(M);
414            //System.out.println("Z = " + Z);
415            //boolean b = Syzygy.isZeroRelation(Z,N);
416            //System.out.println("boolean = " + b);
417            assertTrue("is ZR( { a,b,c } )", sz.isZeroRelation(Z, M));
418    
419        }
420    
421    }