source: git/dyn_modules/syzextra/mod_main.cc @ 4f7d76

spielwiese
Last change on this file since 4f7d76 was 4f7d76, checked in by Oleksandr Motsak <motsak@…>, 13 years ago
moved all the user-space syzygy-related stuff into a synamic module TODO: add my syz-functions aswell From: Oleksandr Motsak <motsak@mathematik.uni-kl.de> git-svn-id: file:///usr/local/Singular/svn/trunk@13983 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 18.7 KB
Line 
1#include <Singular/mod2.h>
2
3#include <omalloc/omalloc.h>
4
5#include <kernel/syz.h>
6#include <kernel/intvec.h>
7#include <kernel/p_polys.h>
8#include <kernel/longrat.h>
9#include <kernel/kstd1.h>
10
11#include <Singular/tok.h>
12#include <Singular/ipid.h>
13#include <Singular/lists.h>
14#include <Singular/attrib.h>
15
16#include "singularxx_defs.h"
17#include "DebugPrint.h"
18#include "myNF.h"
19
20
21
22extern void rSetISReference(const ideal F, const int rank, const int p, const intvec * componentWeights, const ring r);
23extern void pISUpdateComponents(ideal F, const intvec *const V, const int MIN, const ring r);
24extern ring rCurrRingAssure_SyzComp();
25extern ring rAssure_InducedSchreyerOrdering(const ring r, BOOLEAN complete, int sign);
26extern int rGetISPos(const int p, const ring r);
27
28
29USING_NAMESPACE( SINGULARXXNAME :: DEBUG )
30USING_NAMESPACE( SINGULARXXNAME :: NF )
31
32BEGIN_NAMESPACE_NONAME
33static inline void NoReturn(leftv& res)
34{
35  res->rtyp = NONE;
36  res->data = NULL;
37}
38
39/// try to get an optional (simple) integer argument out of h
40/// or return the default value
41static int getOptionalInteger(const leftv& h, const int _n)
42{
43  if( h!= NULL && h->Typ() == INT_CMD )
44  {
45    int n = (int)(long)(h->Data());
46
47    if( n < 0 )
48      Warn("Negative (%d) optional integer argument", n);
49
50    return (n);
51  }
52
53  return (_n); 
54}
55
56BOOLEAN noop(leftv __res, leftv __v)
57{
58  NoReturn(__res);
59  return FALSE;
60}
61
62
63
64static inline number jjLONG2N(long d)
65{
66#if SIZEOF_LONG == 8
67  int i=(int)d;
68  if ((long)i == d)
69    return nlInit(i, NULL);
70  else
71  {
72# if !defined(OM_NDEBUG) && !defined(NDEBUG)
73    omCheckBin(rnumber_bin);
74# endif
75    number z=(number)omAllocBin(rnumber_bin);
76# if defined(LDEBUG)
77    z->debug=123456;
78# endif
79    z->s=3;
80    mpz_init_set_si(z->z,d);
81    return z;
82  }
83#else
84  return nlInit((int)d, NULL);
85#endif
86}
87
88static BOOLEAN DetailedPrint(leftv __res, leftv h)
89{
90  NoReturn(__res);
91
92  if( h == NULL )
93  {
94    WarnS("DetailedPrint needs an argument...");
95    return TRUE;
96  }
97
98  if( h->Typ() == RING_CMD)
99  {
100    const ring r = (const ring)h->Data();
101    rWrite(r);
102    PrintLn();
103#ifdef RDEBUG
104    rDebugPrint(r);
105#endif
106    return FALSE;
107  }
108
109  if( h->Typ() == POLY_CMD || h->Typ() == VECTOR_CMD)
110  {
111    const poly p = (const poly)h->Data(); h = h->Next();
112
113    dPrint(p, currRing, currRing, getOptionalInteger(h, 3));
114
115    return FALSE;
116  }
117
118  if( h->Typ() == IDEAL_CMD || h->Typ() == MODUL_CMD)
119  {
120    const ideal id = (const ideal)h->Data(); h = h->Next(); 
121
122    dPrint(id, currRing, currRing, getOptionalInteger(h, 3));
123   
124    return FALSE;           
125  }
126
127  if( h->Typ() == RESOLUTION_CMD )
128  {
129    const syStrategy syzstr = reinterpret_cast<syStrategy>(h->Data());
130
131    h = h->Next();
132
133    int nTerms = getOptionalInteger(h, 1);
134
135
136    Print("RESOLUTION_CMD(%p): ", reinterpret_cast<void*>(syzstr)); PrintLn();
137
138    const ring save = currRing;
139    const ring r = syzstr->syRing;
140    const ring rr = (r != NULL) ? r: save;
141
142
143    const int iLength = syzstr->length;
144
145    Print("int 'length': %d", iLength); PrintLn();
146    Print("int 'regularity': %d", syzstr->regularity); PrintLn();
147    Print("short 'list_length': %hd", syzstr->list_length); PrintLn();
148    Print("short 'references': %hd", syzstr->references); PrintLn();
149
150
151#define PRINT_pINTVECTOR(s, v) Print("intvec '%10s'(%p)", #v, (s)->v); \
152if( (s)->v != NULL ){ PrintS(": "); (s)->v->view(); }; \
153PrintLn();
154
155    PRINT_pINTVECTOR(syzstr, resolution);
156    PRINT_pINTVECTOR(syzstr, betti);
157    PRINT_pINTVECTOR(syzstr, Tl);
158    PRINT_pINTVECTOR(syzstr, cw);
159#undef PRINT_pINTVECTOR
160
161    if (r == NULL)
162      Print("ring '%10s': NULL", "syRing");
163    else 
164      if (r == currRing)
165        Print("ring '%10s': currRing", "syRing");
166      else
167        if (r != NULL && r != save)
168        {
169          Print("ring '%10s': ", "syRing");
170          rWrite(r);
171#ifdef RDEBUG
172          //              rDebugPrint(r);
173#endif
174          // rChangeCurrRing(r);
175        }           
176    PrintLn();
177
178    const SRes rP = syzstr->resPairs;
179    Print("SRes 'resPairs': %p", rP); PrintLn();
180
181    if (rP != NULL)
182      for (int iLevel = 0; (iLevel < iLength) && (rP[iLevel] != NULL) && ((*syzstr->Tl)[iLevel] >= 0); iLevel++)
183      {
184        int n = 0;
185        const int iTl = (*syzstr->Tl)[iLevel];
186        for (int j = 0; (j < iTl) && ((rP[iLevel][j].lcm!=NULL) || (rP[iLevel][j].syz!=NULL)); j++)
187        {
188          if (rP[iLevel][j].isNotMinimal==NULL)
189            n++;
190        }
191        Print("minimal-resPairs-Size[1+%d]: %d", iLevel, n); PrintLn();
192      }
193
194
195    //  const ring rrr = (iLevel > 0) ? rr : save; ?
196#define PRINT_RESOLUTION(s, v) Print("resolution '%12s': %p", #v, (s)->v); PrintLn(); \
197if ((s)->v != NULL) \
198  for (int iLevel = 0; (iLevel < iLength) && ( ((s)->v)[iLevel] != NULL ); iLevel++) \
199  { \
200    const ring rrr = (iLevel > 0) ? save : save; \
201    Print("id '%10s'[%d]: (%p) ncols = %d / size: %d; nrows = %d, rank = %ld / rk: %ld", #v, iLevel, ((s)->v)[iLevel], ((s)->v)[iLevel]->ncols, idSize(((s)->v)[iLevel]), ((s)->v)[iLevel]->nrows, ((s)->v)[iLevel]->rank, -1L/*idRankFreeModule(((s)->v)[iLevel], rrr)*/ ); \
202    PrintLn(); \
203  } \
204  PrintLn();
205
206    // resolvente:
207    PRINT_RESOLUTION(syzstr, minres);
208    PRINT_RESOLUTION(syzstr, fullres);
209
210    assume (idRankFreeModule (syzstr->res[1], rr) == syzstr->res[1]->rank);
211
212    PRINT_RESOLUTION(syzstr, res);
213    PRINT_RESOLUTION(syzstr, orderedRes);
214#undef PRINT_RESOLUTION
215
216#define PRINT_POINTER(s, v) Print("pointer '%17s': %p", #v, (s)->v); PrintLn();
217    // 2d arrays:
218    PRINT_POINTER(syzstr, truecomponents);
219    PRINT_POINTER(syzstr, ShiftedComponents);
220    PRINT_POINTER(syzstr, backcomponents);
221    PRINT_POINTER(syzstr, Howmuch);
222    PRINT_POINTER(syzstr, Firstelem);
223    PRINT_POINTER(syzstr, elemLength);
224    PRINT_POINTER(syzstr, sev);
225
226    // arrays of intvects:
227    PRINT_POINTER(syzstr, weights);
228    PRINT_POINTER(syzstr, hilb_coeffs);
229#undef PRINT_POINTER
230
231
232    if (syzstr->fullres==NULL)
233    {
234      PrintS("resolution 'fullres': (NULL) => resolution not computed yet");
235      PrintLn();
236    } else
237    {
238      Print("resolution 'fullres': (%p) => resolution seems to be computed already", syzstr->fullres);
239      PrintLn();
240      dPrint(*syzstr->fullres, save, save, nTerms);
241    }
242
243
244
245
246    if (syzstr->minres==NULL)
247    {
248      PrintS("resolution 'minres': (NULL) => resolution not minimized yet");
249      PrintLn();
250    } else
251    {
252      Print("resolution 'minres': (%p) => resolution seems to be minimized already", syzstr->minres);
253      PrintLn();
254      dPrint(*syzstr->minres, save, save, nTerms);
255    }
256
257
258
259
260    /*
261    int ** truecomponents;
262    long** ShiftedComponents;
263    int ** backcomponents;
264    int ** Howmuch;
265    int ** Firstelem;
266    int ** elemLength;
267    unsigned long ** sev;
268
269    intvec ** weights;
270    intvec ** hilb_coeffs;
271
272    SRes resPairs;               //polynomial data for internal use only
273
274    resolvente fullres;
275    resolvente minres;
276    resolvente res;              //polynomial data for internal use only
277    resolvente orderedRes;       //polynomial data for internal use only
278*/
279
280    //            if( currRing != save ) rChangeCurrRing(save);
281  }
282
283
284  return FALSE;
285}
286
287
288
289/// Get leading monom (no module component)
290static BOOLEAN leadmonom(leftv res, leftv h)
291{
292  NoReturn(res);
293
294  if ((h!=NULL) && (h->Typ()==VECTOR_CMD || h->Typ()==POLY_CMD) && (h->Data() != NULL))
295  {
296    const ring r = currRing;
297    const poly p = (poly)(h->Data());
298
299    poly m = NULL;
300
301    if( p != NULL )
302    {
303      assume( p != NULL );
304      assume( p_LmTest(p, r) );
305
306      m = p_LmInit(p, r);
307      p_SetCoeff0(m, n_Init(1, r), r);
308
309      //            if( p_GetComp(m, r) != 0 )
310      //            {
311      p_SetComp(m, 0, r);
312      p_Setm(m, r);
313      //            }
314
315      assume( p_GetComp(m, r) == 0 );
316      assume( m != NULL );
317      assume( p_LmTest(m, r) );
318    }
319
320    res->rtyp = POLY_CMD;
321    res->data = reinterpret_cast<void *>(m);
322
323    return FALSE;
324  }
325
326  WerrorS("`system(\"leadmonom\",<poly/vector>)` expected");
327  return TRUE;
328}
329
330/// Get leading component
331static BOOLEAN leadcomp(leftv res, leftv h)
332{
333  NoReturn(res);
334
335  if ((h!=NULL) && (h->Typ()==VECTOR_CMD || h->Typ()==POLY_CMD) && (h->Data() != NULL))
336  {
337    const ring r = currRing;
338
339    const poly p = (poly)(h->Data());
340
341    assume( p != NULL );
342    assume( p_LmTest(p, r) );
343
344    const unsigned long iComp = p_GetComp(p, r);
345
346    assume( iComp > 0 ); // p is a vector
347
348    res->rtyp = BIGINT_CMD;
349    res->data = reinterpret_cast<void *>(jjLONG2N(iComp));
350
351    return FALSE;
352  }
353
354  WerrorS("`system(\"leadcomp\",<poly/vector>)` expected");
355  return TRUE;
356}
357
358
359
360
361/// Get raw leading exponent vector
362static BOOLEAN leadrawexp(leftv res, leftv h)
363{
364  NoReturn(res);
365
366  if ((h!=NULL) && (h->Typ()==VECTOR_CMD || h->Typ()==POLY_CMD) && (h->Data() != NULL))
367  {
368    const ring r = currRing;
369    const poly p = (poly)(h->Data());
370
371    assume( p != NULL );
372    assume( p_LmTest(p, r) );
373
374    const int iExpSize = r->ExpL_Size;
375
376    intvec *iv = new intvec(iExpSize);
377
378    lists l=(lists)omAllocBin(slists_bin);
379    l->Init(iExpSize);
380
381    for(int i = iExpSize-1; i >= 0; i--)
382    {
383      l->m[i].rtyp = BIGINT_CMD;
384      l->m[i].data = reinterpret_cast<void *>(jjLONG2N(p->exp[i])); // longs...
385    }
386
387    res->rtyp = LIST_CMD; // list of bigints
388    res->data = reinterpret_cast<void *>(l);
389    return FALSE;
390  }
391
392  WerrorS("`system(\"leadrawexp\",<poly/vector>)` expected");
393  return TRUE;
394}
395
396
397/// Endowe the current ring with additional (leading) Syz-component ordering
398static BOOLEAN MakeSyzCompOrdering(leftv res, leftv h)
399{
400
401  NoReturn(res);
402
403  //    res->data = rCurrRingAssure_SyzComp(); // changes current ring! :(
404  res->data = reinterpret_cast<void *>(rCurrRingAssure_SyzComp());
405  res->rtyp = RING_CMD; // return new ring!
406  // QRING_CMD?
407
408  return FALSE;
409}
410
411
412/// Same for Induced Schreyer ordering (ordering on components is defined by sign!)
413static BOOLEAN MakeInducedSchreyerOrdering(leftv res, leftv h)
414{
415
416  NoReturn(res);
417
418  int sign = 1;
419  if ((h!=NULL) && (h->Typ()==INT_CMD))
420  {
421    const int s = (int)((long)(h->Data()));
422
423    if( s != -1 && s != 1 )
424    {
425      WerrorS("`system(\"MakeInducedSchreyerOrdering\",<int>)` called with wrong integer argument (must be +-1)!");
426      return TRUE;
427    }
428
429    sign = s;           
430  }
431
432  assume( sign == 1 || sign == -1 );
433  res->data = reinterpret_cast<void *>(rAssure_InducedSchreyerOrdering(currRing, TRUE, sign));
434  res->rtyp = RING_CMD; // return new ring!
435  // QRING_CMD?
436  return FALSE;
437}
438
439
440/// Returns old SyzCompLimit, can set new limit
441static BOOLEAN SetSyzComp(leftv res, leftv h)
442{
443  NoReturn(res);
444
445  const ring r = currRing;
446
447  if( !rIsSyzIndexRing(r) )
448  {
449    WerrorS("`system(\"SetSyzComp\",<int>)` called on incompatible ring (not created by 'MakeSyzCompOrdering'!)");
450    return TRUE;
451  }
452
453  res->rtyp = INT_CMD;
454  res->data = reinterpret_cast<void *>(rGetCurrSyzLimit(r)); // return old syz limit
455
456  if ((h!=NULL) && (h->Typ()==INT_CMD))
457  {
458    const int iSyzComp = (int)reinterpret_cast<long>(h->Data());
459    assume( iSyzComp > 0 );
460    rSetSyzComp( iSyzComp );
461  }
462
463  return FALSE;
464}
465
466/// ?
467static BOOLEAN GetInducedData(leftv res, leftv h)
468{
469  NoReturn(res);
470
471  const ring r = currRing;
472
473  int p = 0; // which IS-block? p^th!
474
475  if ((h!=NULL) && (h->Typ()==INT_CMD))
476  {
477    p = (int)((long)(h->Data())); h=h->next;
478    assume(p >= 0);
479  }
480
481  const int pos = rGetISPos(p, r);
482
483  if( (-1 == pos) )
484  {
485    WerrorS("`system(\"GetInducedData\",[int])` called on incompatible ring (not created by 'MakeInducedSchreyerOrdering'!)");
486    return TRUE;
487  }
488
489
490  const int iLimit = r->typ[pos].data.is.limit;
491  const ideal F = r->typ[pos].data.is.F;
492  ideal FF = id_Copy(F, r);
493
494  lists l=(lists)omAllocBin(slists_bin);
495  l->Init(2);
496
497  l->m[0].rtyp = INT_CMD;
498  l->m[0].data = reinterpret_cast<void *>(iLimit);
499
500
501  //        l->m[1].rtyp = MODUL_CMD;
502
503  if( idIsModule(FF, r) )
504  {
505    l->m[1].rtyp = MODUL_CMD;
506
507    //          Print("before: %d\n", FF->nrows);
508    //          FF->nrows = idRankFreeModule(FF, r); // ???
509    //          Print("after: %d\n", FF->nrows);
510  }
511  else
512    l->m[1].rtyp = IDEAL_CMD;
513
514  l->m[1].data = reinterpret_cast<void *>(FF);       
515
516
517  res->rtyp = LIST_CMD; // list of int/module
518  res->data = reinterpret_cast<void *>(l);
519
520  return FALSE;
521
522}
523
524
525/// Returns old SyzCompLimit, can set new limit
526static BOOLEAN SetInducedReferrence(leftv res, leftv h)
527{
528  NoReturn(res);
529
530  const ring r = currRing;
531
532  if( !( (h!=NULL) && ( (h->Typ()==IDEAL_CMD) || (h->Typ()==MODUL_CMD))) )
533  {
534    WerrorS("`system(\"SetInducedReferrence\",<ideal/module>, [int[, int]])` expected");
535    return TRUE;
536  }
537
538  intvec * componentWeights = (intvec *)atGet(h,"isHomog",INTVEC_CMD); // No copy!
539
540  const ideal F = (ideal)h->Data(); ; // No copy!
541  h=h->next;
542
543  int rank = 0;
544
545  if ((h!=NULL) && (h->Typ()==INT_CMD))
546  {
547    rank = (int)((long)(h->Data())); h=h->next;
548    assume(rank >= 0);
549  } else
550    rank = idRankFreeModule(F, r); // Starting syz-comp (1st: i+1)
551
552  int p = 0; // which IS-block? p^th!
553
554  if ((h!=NULL) && (h->Typ()==INT_CMD))
555  {
556    p = (int)((long)(h->Data())); h=h->next;
557    assume(p >= 0);
558  }
559
560  const int posIS = rGetISPos(p, r);
561
562  if( (-1 == posIS) )
563  {
564    WerrorS("`system(\"SetInducedReferrence\",<ideal/module>, [int[, int]])` called on incompatible ring (not created by 'MakeInducedSchreyerOrdering'!)");
565    return TRUE;
566  }
567
568
569
570  // F & componentWeights belong to that ordering block of currRing now:
571  rSetISReference(F, rank, p, componentWeights, r); // F and componentWeights will be copied!
572  return FALSE;
573}
574
575
576//    F = system("ISUpdateComponents", F, V, MIN );
577//    // replace gen(i) -> gen(MIN + V[i-MIN]) for all i > MIN in all terms from F!
578static BOOLEAN ISUpdateComponents(leftv res, leftv h)
579{
580  NoReturn(res);
581
582  PrintS("ISUpdateComponents:.... \n");
583
584  if ((h!=NULL) && (h->Typ()==MODUL_CMD))
585  {
586    ideal F = (ideal)h->Data(); ; // No copy!
587    h=h->next;
588
589    if ((h!=NULL) && (h->Typ()==INTVEC_CMD))
590    {
591      const intvec* const V = (const intvec* const) h->Data();
592      h=h->next;
593
594      if ((h!=NULL) && (h->Typ()==INT_CMD))
595      {
596        const int MIN = (int)((long)(h->Data()));
597
598        pISUpdateComponents(F, V, MIN, currRing);
599        return FALSE;
600      }
601    }
602  }
603
604  WerrorS("`system(\"ISUpdateComponents\",<module>, intvec, int)` expected");
605  return TRUE;
606}
607
608
609/// NF using length
610static BOOLEAN reduce_syz(leftv res, leftv h)
611{
612  const ring r = currRing;
613
614  if ( !( (h!=NULL) && (h->Typ()==VECTOR_CMD || h->Typ()==POLY_CMD) ) )
615  {
616    WerrorS("`system(\"reduce_syz\",<poly/vector>!, <ideal/module>, <int>, [int])` expected");
617    return TRUE;
618  }
619
620  res->rtyp = h->Typ();
621  const poly v = reinterpret_cast<poly>(h->Data());
622  h=h->next;
623
624  if ( !( (h!=NULL) && (h->Typ()==MODUL_CMD || h->Typ()==IDEAL_CMD ) ) )
625  {
626    WerrorS("`system(\"reduce_syz\",<poly/vector>, <ideal/module>!, <int>, [int])` expected");
627    return TRUE;
628  }
629
630  assumeStdFlag(h);
631  const ideal M = reinterpret_cast<ideal>(h->Data()); h=h->next;
632
633
634  if ( !( (h!=NULL) && (h->Typ()== INT_CMD)  ) )
635  {
636    WerrorS("`system(\"reduce_syz\",<poly/vector>, <ideal/module>, <int>!, [int])` expected");
637    return TRUE;
638  }
639
640  const int iSyzComp = (int)((long)(h->Data())); h=h->next;
641
642  int iLazyReduce = 0;
643
644  if ( ( (h!=NULL) && (h->Typ()== INT_CMD)  ) )
645    iLazyReduce = (int)((long)(h->Data())); 
646
647  res->data = (void *)kNFLength(M, currQuotient, v, iSyzComp, iLazyReduce);
648  return FALSE;
649}
650
651
652/// Get raw syzygies (idPrepare)
653static BOOLEAN idPrepare(leftv res, leftv h)
654{
655  //        extern int rGetISPos(const int p, const ring r);
656
657  const ring r = currRing;
658
659  const bool isSyz = rIsSyzIndexRing(r);
660  const int posIS = rGetISPos(0, r);
661
662  if( (!isSyz) && (-1 == posIS) )
663  {
664    WerrorS("`system(\"idPrepare\",<...>)` called on incompatible ring (not created by 'MakeSyzCompOrdering' or 'MakeInducedSchreyerOrdering'!)");
665    return TRUE;
666  }
667
668  if ( !( (h!=NULL) && (h->Typ()==MODUL_CMD) && (h->Data() != NULL) ) )
669  {
670    WerrorS("`system(\"idPrepare\",<module>)` expected");
671    return TRUE;
672  }
673
674  const ideal I = reinterpret_cast<ideal>(h->Data());
675
676  assume( I != NULL );
677  idTest(I);
678
679  int iComp = -1;
680
681  h=h->next;
682  if ( (h!=NULL) && (h->Typ()==INT_CMD) )
683  {
684    iComp = (int)((long)(h->Data()));
685  } else
686  {
687    if( isSyz )
688      iComp = rGetCurrSyzLimit(r);
689    else
690      iComp = idRankFreeModule(r->typ[posIS].data.is.F, r); // ;
691  }
692
693
694  tHomog hom=testHomog;
695  intvec *w; //  = reinterpret_cast<intvec *>(atGet(h, "isHomog", INTVEC_CMD));
696
697  //           int add_row_shift = 0;
698  //
699  //           if (w!=NULL)
700  //           {
701  //             intvec * ww = ivCopy(w);
702  //
703  //             add_row_shift = ww->min_in();
704  //
705  //             (*ww) -= add_row_shift;
706  //             
707  //             if (idTestHomModule(I, currQuotient, ww))
708  //             {
709  //               hom = isHomog;
710  //               w = ww;
711  //             }
712  //             else
713  //             {
714  //               //WarnS("wrong weights");
715  //               delete ww;
716  //               w = NULL;
717  //               hom=testHomog;
718  //             }
719  //           }
720
721
722  // computes syzygies of h1,
723  // works always in a ring with ringorder_s
724  // NOTE: rSetSyzComp(syzcomp) should better be called beforehand
725  //        ideal idPrepare (ideal  h1, tHomog hom, int syzcomp, intvec **w);
726
727  ideal J = // idPrepare( I, hom, iComp, &w);
728           kStd(I, currQuotient, hom, &w, NULL, iComp);
729
730  idTest(J);
731
732  if (w!=NULL) delete w;
733  //          if (w!=NULL)
734  //            atSet(res, omStrDup("isHomog"), w, INTVEC_CMD);
735
736  res->rtyp = MODUL_CMD;
737  res->data = reinterpret_cast<void *>(J);
738  return FALSE;
739}
740     
741END_NAMESPACE
742
743extern "C"
744{
745
746int mod_init(SModulFunctions* psModulFunctions) 
747{
748 
749  psModulFunctions->iiAddCproc(currPack->libname,(char*)"DetailedPrint",FALSE, DetailedPrint);
750  psModulFunctions->iiAddCproc(currPack->libname,(char*)"leadmonom",FALSE, leadmonom);
751  psModulFunctions->iiAddCproc(currPack->libname,(char*)"leadcomp",FALSE, leadcomp);
752  psModulFunctions->iiAddCproc(currPack->libname,(char*)"leadrawexp",FALSE, leadrawexp);
753
754
755  psModulFunctions->iiAddCproc(currPack->libname,(char*)"ISUpdateComponents",FALSE, ISUpdateComponents);
756  psModulFunctions->iiAddCproc(currPack->libname,(char*)"SetInducedReferrence",FALSE, SetInducedReferrence);
757  psModulFunctions->iiAddCproc(currPack->libname,(char*)"GetInducedData",FALSE, GetInducedData);
758  psModulFunctions->iiAddCproc(currPack->libname,(char*)"SetSyzComp",FALSE, SetSyzComp);
759  psModulFunctions->iiAddCproc(currPack->libname,(char*)"MakeInducedSchreyerOrdering",FALSE, MakeInducedSchreyerOrdering);
760  psModulFunctions->iiAddCproc(currPack->libname,(char*)"MakeSyzCompOrdering",FALSE, MakeSyzCompOrdering);
761 
762  psModulFunctions->iiAddCproc(currPack->libname,(char*)"noop",FALSE, noop);
763 
764  psModulFunctions->iiAddCproc(currPack->libname,(char*)"idPrepare",FALSE, idPrepare);
765  psModulFunctions->iiAddCproc(currPack->libname,(char*)"reduce_syz",FALSE, reduce_syz);
766
767//  psModulFunctions->iiAddCproc(currPack->libname,(char*)"",FALSE, );
768 
769  return 0;
770}
771}
Note: See TracBrowser for help on using the repository browser.