Changeset e9ffa0 in git


Ignore:
Timestamp:
Aug 3, 2012, 1:28:10 PM (10 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '96ce329119711a2b80858c8365abd29f8460bbfa')
Children:
69c542f9869e7a3e82b1cc481139d89110b7afd3
Parents:
b0732eb4254fbe76540d72c337f3d7f985adf948051432dd83870fbe8b97700f01135436c5d6f6fd
Message:
Merge pull request #164 from mmklee/factory_trfix_sw

Factory trfix sw
Files:
11 added
48 deleted
17 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/modstd.lib

    r051432 re9ffa0  
    11////////////////////////////////////////////////////////////////////////////////
    2 version="$Id$";
     2version="$Id: modstd.lib 14375 2011-08-23 09:29:47Z steidel $";
    33category = "Commutative Algebra";
    44info="
     
    88@*        G. Pfister      pfister@mathematik.uni-kl.de
    99@*        H. Schoenemann  hannes@mathematik.uni-kl.de
     10@*        A. Steenpass    steenpass@mathematik.uni-kl.de
    1011@*        S. Steidel      steidel@mathematik.uni-kl.de
    1112
     
    2627LIB "poly.lib";
    2728LIB "ring.lib";
     29LIB "parallel.lib";
    2830
    2931////////////////////////////////////////////////////////////////////////////////
     
    243245      if(printlevel >= 11)
    244246      {
    245          "isIncluded(K,J) takes "+string(timer - t)+" seconds";
     247         "isIncluded(J,K) takes "+string(timer - t)+" seconds";
    246248         "j = "+string(j);
    247249      }
     
    373375////////////////////////////////////////////////////////////////////////////////
    374376
    375 proc primeTest(ideal I, bigint p)
     377proc primeTest(def II, bigint p)
    376378{
     379   if(typeof(II) == "string")
     380   {
     381      execute("ideal I = "+II+";");
     382   }
     383   else
     384   {
     385      ideal I = II;
     386   }
     387
     388   I = simplify(I, 2);   // erase zero generators
     389
    377390   int i,j;
     391   poly f;
     392   number cnt;
    378393   for(i = 1; i <= size(I); i++)
    379394   {
    380       for(j = 1; j <= size(I[i]); j++)
    381       {
    382          if((numerator(leadcoef(I[i][j])) mod p) == 0) { return(0); }
    383          if((denominator(leadcoef(I[i][j])) mod p) == 0) { return(0); }
     395      f = cleardenom(I[i]);
     396      if(f == 0) { return(0); }
     397      cnt = leadcoef(I[i])/leadcoef(f);
     398      if((numerator(cnt) mod p) == 0) { return(0); }
     399      if((denominator(cnt) mod p) == 0) { return(0); }
     400      for(j = size(f); j > 0; j--)
     401      {
     402         if((leadcoef(f[j]) mod p) == 0) { return(0); }
    384403      }
    385404   }
     
    390409
    391410proc primeList(ideal I, int n, list #)
    392 "USAGE:  primeList(I,n); ( resp. primeList(I,n,L); ) I ideal, n integer
    393 RETURN:  the intvec of n greatest primes  <= 2147483647 (resp. n greatest primes
     411"USAGE:  primeList(I,n[,ncores]); ( resp. primeList(I,n[,L,ncores]); ) I ideal,
     412         n integer
     413RETURN:  the intvec of n greatest primes <= 2147483647 (resp. n greatest primes
    394414         < L[size(L)] union with L) such that none of these primes divides any
    395415         coefficient occuring in I
     416NOTE:    The number of cores to use can be defined by ncores, default is 1.
    396417EXAMPLE: example primList; shows an example
    397418"
     
    399420   intvec L;
    400421   int i,p;
     422   int ncores = 1;
     423   
     424//-----------------  Initialize optional parameter ncores  ---------------------
     425   if(size(#) > 0)
     426   {
     427      if(size(#) == 1)
     428      {
     429         if(typeof(#[1]) == "int")
     430         {
     431            ncores = #[1];
     432            # = list();
     433         }
     434      }
     435      else
     436      {
     437         ncores = #[2];
     438      }
     439   }
     440   
    401441   if(size(#) == 0)
    402442   {
     
    421461   }
    422462   if(p == 2) { ERROR("no more primes"); }
    423    for(i = 2; i <= n; i++)
    424    {
    425       p = prime(p-1);
    426       while(!primeTest(I,p))
     463   if(ncores == 1)
     464   {
     465      for(i = 2; i <= n; i++)
    427466      {
    428467         p = prime(p-1);
    429          if(p == 2) { ERROR("no more primes"); }
    430       }
    431       L[size(L)+1] = p;
     468         while(!primeTest(I,p))
     469         {
     470            p = prime(p-1);
     471            if(p == 2) { ERROR("no more primes"); }
     472         }
     473         L[size(L)+1] = p;
     474      }
     475   }
     476   else
     477   {
     478      int neededSize = size(L)+n-1;;
     479      list parallelResults;
     480      list arguments;
     481      int neededPrimes = neededSize-size(L);
     482      while(neededPrimes > 0)
     483      {
     484         arguments = list();
     485         for(i = ((neededPrimes div ncores)+1-(neededPrimes%ncores == 0))
     486            *ncores; i > 0; i--)
     487         {
     488            p = prime(p-1);
     489            if(p == 2) { ERROR("no more primes"); }
     490            arguments[i] = list("I", p);
     491         }
     492         parallelResults = parallelWaitAll("primeTest", arguments,
     493            list(list(list(ncores))));
     494         for(i = size(arguments); i > 0; i--)
     495         {
     496            if(parallelResults[i])
     497            {
     498               L[size(L)+1] = arguments[i][2];
     499            }
     500         }
     501         neededPrimes = neededSize-size(L);
     502      }
     503      if(size(L) > neededSize)
     504      {
     505         L = L[1..neededSize];
     506      }
    432507   }
    433508   return(L);
     
    470545   ideal I = imap(R,I);
    471546
     547   intvec opt = option(get);
    472548   option(none);
    473549   option(prompt);
     
    504580
    505581   setring R;
     582   option(set, opt);
    506583   return(imap(newR,sI),imap(newR,T));
    507584}
     
    537614         The standard basis computation modulo p does also vary depending on the
    538615         integer variant, namely
    539 @*       - variant = 1/4: std(.,#[1]) resp. groebner,
    540 @*       - variant = 2/5: groebner,
    541 @*       - variant = 3/6: homog. - std(.,#[1]) resp. groebner - dehomog..
     616@*       - variant = 1: std(.,#[1]) resp. groebner,
     617@*       - variant = 2: groebner,
     618@*       - variant = 3: homog. - std(.,#[1]) resp. groebner - dehomog.,
     619@*       - variant = 4: fglm.
    542620EXAMPLE: example modpStd; shows an example
    543621"
     
    552630   option(redSB);
    553631
    554    int t = timer;
    555    if((variant == 1) || (variant == 4))
     632   if(variant == 1)
    556633   {
    557634      if(size(#) > 0)
     
    565642   }
    566643
    567    if((variant == 2) || (variant == 5))
     644   if(variant == 2)
    568645   {
    569646      i = groebner(i);
    570647   }
    571648
    572    if((variant == 3) || (variant == 6))
     649   if(variant == 3)
    573650   {
    574651      list rl = ringlist(@r);
     
    607684      }
    608685
    609       t = timer;
    610686      i = subst(i, homvar, 1);
    611687      i = simplify(i, 34);
     
    615691      i = interred(i);
    616692      kill HomR;
     693   }
     694   
     695   if(variant == 4)
     696   {
     697      def R1 = changeord("dp");
     698      setring R1;
     699      ideal i = fetch(@r,i);
     700      i = std(i);
     701      setring @r;
     702      i = fglm(R1,i);
    617703   }
    618704
     
    646732RETURN:  a standard basis of I if no warning appears;
    647733NOTE:    The procedure computes a standard basis of I (over the rational
    648          numbers) by using  modular methods. If a warning appears then the
    649          result is a standard basis containing I and with high probability
    650          a standard basis of I.
     734         numbers) by using  modular methods.
    651735         By default the procedure computes a standard basis of I for sure, but
    652736         if the optional parameter #[2] = 0, it computes a standard basis of I
    653          with high probability and a warning appears at the end.
     737         with high probability.
    654738         The procedure distinguishes between different variants for the standard
    655739         basis computation in positive characteristic depending on the ordering
    656740         of the basering, the parameter #[2] and if the ideal I is homogeneous.
    657 @*       - variant = 1, if I is homogeneous and exactness = 0,
    658 @*       - variant = 2, if I is not homogeneous, 1-block-ordering and
    659                         exactness = 0,
     741@*       - variant = 1, if I is homogeneous,
     742@*       - variant = 2, if I is not homogeneous, 1-block-ordering,
    660743@*       - variant = 3, if I is not homogeneous, complicated ordering (lp or
    661                         > 1 block) and exactness = 0,
    662 @*       - variant = 4, if I is homogeneous and exactness = 1,
    663 @*       - variant = 5, if I is not homogeneous, 1-block-ordering and
    664                         exactness = 1,
    665 @*       - variant = 6, if I is not homogeneous, complicated ordering (lp or
    666                         > 1 block) and exactness = 1.
     744                        > 1 block),
     745@*       - variant = 4, if I is not homogeneous, ordering lp, dim(I) = 0.
    667746EXAMPLE: example modStd; shows an example
    668747"
     
    752831   if(printlevel >= 10)
    753832   {
    754       "n1 = "+string(n1)+", n2 = "+string(n2)+", n3 = "+string(n3);
     833      "n1 = "+string(n1)+", n2 = "+string(n2)+", n3 = "+string(n3)
     834       +", exactness = "+string(exactness);
    755835   }
    756836
     
    761841
    762842//--------------------  Initialize the list of primes  -------------------------
    763    intvec L = primeList(I,n2);
     843   int tt = timer;
     844   int rt = rtimer;
     845   intvec L = primeList(I,n2,n1);
     846   if(printlevel >= 10)
     847   {
     848      "CPU-time for primeList: "+string(timer-tt)+" seconds.";
     849      "Real-time for primeList: "+string(rtimer-rt)+" seconds.";
     850   }
    764851   L[5] = prime(random(an,en));
    765852
     
    768855   int h = homog(I);
    769856
    770    int tt = timer;
    771    int rt = rtimer;
     857   tt = timer;
     858   rt = rtimer;
    772859
    773860   if(!mixedTest())
     
    775862      if(h)
    776863      {
    777          if(exactness == 0)
    778          {
    779             variant = 1;
    780             if(printlevel >= 10) { "variant = 1"; }
    781          }
    782          if(exactness == 1)
    783          {
    784             variant = 4;
    785             if(printlevel >= 10) { "variant = 4"; }
    786          }
     864         variant = 1;
     865         if(printlevel >= 10) { "variant = 1"; }
     866         
    787867         rl[1] = L[5];
    788868         def @r = ring(rl);
     
    802882         if((find(ordstr_R0, "M") > 0) || (find(ordstr_R0, "a") > 0) || neg)
    803883         {
    804             if(exactness == 0)
    805             {
    806                variant = 2;
    807                if(printlevel >= 10) { "variant = 2"; }
    808             }
    809             if(exactness == 1)
    810             {
    811                variant = 5;
    812                if(printlevel >= 10) { "variant = 5"; }
    813             }
     884            variant = 2;
     885            if(printlevel >= 10) { "variant = 2"; }
    814886         }
    815887         else
     
    827899            if((order == "simple") || (size(rl) > 4))
    828900            {
    829                if(exactness == 0)
     901               variant = 2;
     902               if(printlevel >= 10) { "variant = 2"; }
     903            }
     904            else
     905            {
     906               rl[1] = L[5];
     907               def @r = ring(rl);
     908               setring @r;
     909               
     910               def @s = changeord("dp");
     911               setring @s;
     912               ideal I = std(fetch(R0,I));
     913               if(dim(I) == 0)
    830914               {
    831                   variant = 2;
    832                   if(printlevel >= 10) { "variant = 2"; }
     915                  variant = 4;
     916                  if(printlevel >= 10) { "variant = 4"; }
    833917               }
    834                if(exactness == 1)
    835                {
    836                   variant = 5;
    837                   if(printlevel >= 10) { "variant = 5"; }
    838                }
    839             }
    840             else
    841             {
    842                if(exactness == 0)
     918               else
    843919               {
    844920                  variant = 3;
    845921                  if(printlevel >= 10) { "variant = 3"; }
     922                 
     923                  int nvar@r = nvars(@r);
     924                  intvec w;
     925                  for(i = 1; i <= nvar@r; i++)
     926                  {
     927                     w[i] = deg(var(i));
     928                  }
     929                  w[nvar@r + 1] = 1;
     930
     931                  list hiRi = hilbRing(fetch(R0,I),w);
     932                  intvec W = hiRi[2];
     933                  @s = hiRi[1];
     934                  setring @s;
     935
     936                  Id(1) = std(Id(1));
     937                  intvec hi = hilb(Id(1), 1, W);
    846938               }
    847                if(exactness == 1)
    848                {
    849                   variant = 6;
    850                   if(printlevel >= 10) { "variant = 6"; }
    851                }
    852 
    853                rl[1] = L[5];
    854                def @r = ring(rl);
    855                setring @r;
    856                int nvar@r = nvars(@r);
    857                intvec w;
    858                for(i = 1; i <= nvar@r; i++)
    859                {
    860                   w[i] = deg(var(i));
    861                }
    862                w[nvar@r + 1] = 1;
    863 
    864                list hiRi = hilbRing(fetch(R0,I),w);
    865                intvec W = hiRi[2];
    866                def @s = hiRi[1];
    867                setring @s;
    868 
    869                Id(1) = std(Id(1));
    870                intvec hi = hilb(Id(1), 1, W);
    871 
     939               
    872940               setring R0;
    873941               kill @r,@s;
     
    9711039         link l(i) = "ssi:fork";
    9721040         open(l(i));
    973          if((variant == 1) || (variant == 3) ||
    974             (variant == 4) || (variant == 6))
     1041         if((variant == 1) || (variant == 3))
    9751042         {
    9761043            write(l(i), quote(modpStd(I_for_fork, eval(L[i + 1]),
    9771044                                                  eval(variant), eval(hi))));
    9781045         }
    979          if((variant == 2) || (variant == 5))
     1046         if((variant == 2) || (variant == 4))
    9801047         {
    9811048            write(l(i), quote(modpStd(I_for_fork, eval(L[i + 1]),
     
    9851052
    9861053      int t = timer;
    987       if((variant == 1) || (variant == 3) || (variant == 4) || (variant == 6))
     1054      if((variant == 1) || (variant == 3))
    9881055      {
    9891056         P = modpStd(I_for_fork, L[1], variant, hi);
    9901057      }
    991       if((variant == 2) || (variant == 5))
     1058      if((variant == 2) || (variant == 4))
    9921059      {
    9931060         P = modpStd(I_for_fork, L[1], variant);
     
    10051072//--------------  Main standard basis computations in positive  ----------------
    10061073//----------------------  characteristic start here  ---------------------------
     1074
     1075   list arguments_farey, results_farey;
    10071076
    10081077   while(1)
     
    10291098                  if(j <= size(L))
    10301099                  {
    1031                      if((variant == 1) || (variant == 3) ||
    1032                         (variant == 4) || (variant == 6))
     1100                     if((variant == 1) || (variant == 3))
    10331101                     {
    10341102                        write(l(i), quote(modpStd(I_for_fork, eval(L[j]),
     
    10361104                        j++;
    10371105                     }
    1038                      if((variant == 2) || (variant == 5))
     1106                     if((variant == 2) || (variant == 4))
    10391107                     {
    10401108                        write(l(i), quote(modpStd(I_for_fork,
     
    10621130         while(j <= size(L))
    10631131         {
    1064             if((variant == 1) || (variant == 3) ||
    1065                (variant == 4) || (variant == 6))
     1132            if((variant == 1) || (variant == 3))
    10661133            {
    10671134               P = modpStd(I, L[j], variant, hi);
    10681135            }
    1069             if((variant == 2) || (variant == 5))
     1136            if((variant == 2) || (variant == 4))
    10701137            {
    10711138               P = modpStd(I, L[j], variant);
     
    10951162//-------------------  Lift results to basering via farey  ---------------------
    10961163
    1097       tt = timer;
     1164      tt = timer; rt = rtimer;
    10981165      N = T2[1];
    10991166      for(i = 2; i <= size(T2); i++) { N = N*T2[i]; }
    11001167      H = chinrem(T1,T2);
    1101       J = farey(H,N);
    1102       if(printlevel >= 10) { "Lifting-process takes "+string(timer - tt)
    1103                              +" seconds"; }
     1168      if(n1 == 1)
     1169      {
     1170         J = farey(H,N);
     1171      }
     1172      else
     1173      {
     1174         for(i = ncols(H); i > 0; i--)
     1175         {
     1176            arguments_farey[i] = list(ideal(H[i]), N);
     1177         }
     1178         results_farey = parallelWaitAll("farey", arguments_farey,
     1179                                         list(list(list(n1))));
     1180         for(i = ncols(H); i > 0; i--)
     1181         {
     1182            J[i] = results_farey[i][1];
     1183         }
     1184      }
     1185      if(printlevel >= 10)
     1186      {
     1187         "CPU-time for lifting-process is "+string(timer - tt)+" seconds.";
     1188         "Real-time for lifting-process is "+string(rtimer - rt)+" seconds.";
     1189      }
    11041190
    11051191//----------------  Test if we already have a standard basis of I --------------
    11061192
    11071193      tt = timer; rt = rtimer;
    1108       if((variant == 1) || (variant == 3) || (variant == 4) || (variant == 6))
     1194      if((variant == 1) || (variant == 3))
    11091195      {
    11101196         pTest = pTestSB(I,J,L,variant,hi);
    11111197      }
    1112       if((variant == 2) || (variant == 5))
     1198      if((variant == 2) || (variant == 4))
    11131199      {
    11141200         pTest = pTestSB(I,J,L,variant);
     
    11321218
    11331219         attrib(J,"isSB",1);
    1134          tt = timer; rt = rtimer;
    1135          sizeTest = 1 - isIncluded(I,J,n1);
    1136 
    1137          if(printlevel >= 10)
    1138          {
    1139             "CPU-time for checking if I subset <G> is "
    1140             +string(timer - tt)+" seconds.";
    1141             "Real-time for checking if I subset <G> is "
    1142             +string(rtimer - rt)+" seconds.";
    1143          }
    1144 
    1145          if(sizeTest == 0)
    1146          {
    1147             if((variant == 1) || (variant == 2) || (variant == 3))
    1148             {
    1149                "===========================================================";
    1150                "WARNING: Output might not be a standard basis of the input.";
    1151                "===========================================================";
    1152                option(set, opt);
    1153                if(n1 > 1) { kill I_for_fork; }
    1154                return(J);
    1155             }
    1156             if((variant == 4) || (variant == 5) || (variant == 6))
     1220         
     1221         if(exactness == 0)
     1222         {
     1223            option(set, opt);
     1224            if(n1 > 1) { kill I_for_fork; }
     1225            return(J);
     1226         }
     1227         
     1228         if(exactness == 1)
     1229         {
     1230            tt = timer; rt = rtimer;
     1231            sizeTest = 1 - isIncluded(I,J,n1);
     1232
     1233            if(printlevel >= 10)
     1234            {
     1235               "CPU-time for checking if I subset <G> is "
     1236               +string(timer - tt)+" seconds.";
     1237               "Real-time for checking if I subset <G> is "
     1238               +string(rtimer - rt)+" seconds.";
     1239            }
     1240
     1241            if(sizeTest == 0)
    11571242            {
    11581243               tt = timer; rt = rtimer;
     
    11851270
    11861271      j = size(L) + 1;
    1187       L = primeList(I,n3,L);
     1272      tt = timer; rt = rtimer;
     1273      L = primeList(I,n3,L,n1);
     1274      if(printlevel >= 10)
     1275      {
     1276         "CPU-time for primeList: "+string(timer-tt)+" seconds.";
     1277         "Real-time for primeList: "+string(rtimer-rt)+" seconds.";
     1278      }
    11881279
    11891280      if(n1 > 1)
     
    11921283         {
    11931284            open(l(i));
    1194             if((variant == 1) || (variant == 3) ||
    1195                (variant == 4) || (variant == 6))
     1285            if((variant == 1) || (variant == 3))
    11961286            {
    11971287               write(l(i), quote(modpStd(I_for_fork, eval(L[j+i-1]),
    11981288                                                     eval(variant), eval(hi))));
    11991289            }
    1200             if((variant == 2) || (variant == 5))
     1290            if((variant == 2) || (variant == 4))
    12011291            {
    12021292               write(l(i), quote(modpStd(I_for_fork, eval(L[j+i-1]),
     
    13181408   def S = ring(rl);
    13191409   setring S;
     1410   intvec opt = option(get);
    13201411   option(redSB);
    13211412   module Z,M,Z2;
     
    13621453               if(size(reduce(G3,testG1)) == 0)
    13631454               {
     1455                  option(set, opt);
    13641456                  return(G3);
    13651457               }
  • Singular/LIB/parallel.lib

    r051432 re9ffa0  
    33category="General purpose";
    44info="
    5 LIBRARY:   parallel.lib  An Interface for Parallelization
     5LIBRARY:   parallel.lib  Tools for Parallelization
    66AUTHOR:    Andreas Steenpass, e-mail: steenpass@mathematik.uni-kl.de
     7
     8OVERVIEW:
     9This library provides tools to do several computations in parallel. They
     10are aimed at ordinary Singular users as well as authors of Singular
     11libraries.
     12@* Even without this library, it is possible to do execute self-defined
     13Singular commands in parallel using @ref{links}, but the handling of
     14such links can be quite tedious. With the pocedures described below,
     15this can be done by one-line commands.
     16@* There are many parallel 'skeletons' (i.e. ways in which parallel
     17tasks rely upon and interact with each other). A few of them are already
     18implemented. Future plans include an abstraction layer for modular
     19techniques, 'worker farms', and parallel tests.
    720
    821SEE ALSO:  link, modstd_lib, assprimeszerodim_lib
     
    2639RETURN:  a list, containing the results of commands[i] applied to arg[i],
    2740         i = 1, ..., size(commands).
    28          @* The entries of the list commands must be strings.
    29          @* The entries of the list args must be lists.
    3041         @* The procedure waits for N jobs to finish.
    31          @* An optional timeout in ms can be provided. Default is 0 which
     42
     43         @* OPTIONAL PARAMETERS:
     44
     45            An optional timeout in ms can be provided. Default is 0 which
    3246            disables the timeout.
    33          @* Supported linktypes are up to now \"ssi\" and \"mp\", see
     47
     48            Supported linktypes are up to now \"ssi\" and \"mp\", see
    3449            @ref{Ssi links} and @ref{MP links}.
     50
     51            Servers:
    3552         @* Each server is given by a list containing the address of the server,
    3653            the number of cores to use on this server and the command to start
    37             Singular. If the address is \"localhost\", the processes will
    38             be generated on the same machine using forks. If the command to
    39             start Singular is \"\" (the empty string), \"Singular\" will be
    40             used. Default is @code{list(\"localhost\", system(\"cpu\"), \"\")}.
    41             There are some obvious shortcuts for servers, e.g. \"myserver\" is
     54            Singular.
     55         @* If the address is \"localhost\", the processes will be generated on
     56            the same machine using forks. If the command to start Singular is
     57            \"\" (the empty string), \"Singular\" will be used.
     58         @* Default is @code{list(\"localhost\", system(\"cpu\"), \"\")}.
     59         @* There are some obvious shortcuts for servers, e.g. \"myserver\" is
    4260            a shortcut for
    4361            @code{list(\"myserver\", [nb. of cores on myserver], \"\")}, or 3
    4462            for @code{list(\"localhost\", 3, \"\")}.
     63
     64            Memory limits:
    4565         @* If an intvec maxmemory of size @code{size(commands)} is given, the
    4666            i-th job will be killed if it uses more than maxmemory[i] MB of
    4767            memory. If maxmemory[i] is 0, there will be no restraint for the
    4868            i-th job. Default is @code{0:size(commands)}.
    49 NOTE:       The returned list may contain more than N results if several jobs
     69NOTE:       The entries of the list commands must be strings.
     70         @* The entries of the list args must be lists.
     71         @* The returned list may contain more than N results if several jobs
    5072            finished \"at the same time\". It may contain less than N results in
    5173            the case of timeout or errors occurring.
     
    368390    }
    369391    write(l(i), quote(execute("result = "+eval(commands[k])
    370                                     +"(currentargs[1..size(currentargs)]);")));
     392      +"("+argsToString("currentargs", size(currentargs))+");")));
    371393    assignment[i] = k;
    372394    k++;
     
    455477      }
    456478      write(l(wait), quote(execute("def result = "+eval(commands[k])
    457                                      +"(currentargs[1..size(currentargs)]);")));
     479        +"("+argsToString("currentargs", size(currentargs))+");")));
    458480      assignment[wait] = k;
    459481      k++;
     
    542564  ideal i = z8+z6+4z5+4z3+4z2+4, y-z2;
    543565  ideal j = 3x3y+x3+xy3+y2z2, 2x3z-xy-xz3-y4-z2, 2x2yz-2xy2+xz2-y4;
    544   list commands = list("std", "primdecGTZ", "primdecSY", "std", "primdecGTZ",
    545                        "primdecSY");
     566  list commands = list("std", "primdecGTZ", "primdecSY",
     567                       "std", "primdecGTZ", "primdecSY");
    546568  list args = list(list(i), list(i), list(i), list(j), list(j), list(j));
    547569  parallelWaitN(commands, args, 3);
     
    717739  return(i);
    718740}
     741
     742static proc argsToString(string name, int length)
     743{
     744  string arglist;
     745  if(length > 0) {
     746    arglist = name+"[1]";
     747  }
     748  int i;
     749  for(i = 2; i <= length; i++) {
     750    arglist = arglist+", "+name+"["+string(i)+"]";
     751  }
     752  return(arglist);
     753}
  • Singular/LIB/realclassify.lib

    r051432 re9ffa0  
    99OVERVIEW:
    1010   A library for classifying isolated hypersurface singularities over the reals
    11    w.r.t. right
    12    equivalence, based on the determinator of singularities by V.I. Arnold.
    13    This library is based on classify.lib by Kai Krueger, but handles the real
    14    case, while classify.lib does the complex classification.
     11   w.r.t. right equivalence, based on the determinator of singularities by
     12   V.I. Arnold. This library is based on classify.lib by Kai Krueger, but
     13   handles the real case, while classify.lib does the complex classification.
     14
     15REFERENCES:
     16Arnold, Varchenko, Gusein-Zade: Singularities of Differentiable Maps.
     17Vol. 1: The classification of critical points caustics and wave fronts.
     18Birkh\"auser, Boston 1985
     19
     20Greuel, Lossen, Shustin: Introduction to singularities and deformations.
     21Springer, Berlin 2007
    1522
    1623PROCEDURES:
     
    3138RETURN:   A list containing (in this order)
    3239          @* - the type of the singularity as a string,
    33           @* - the normal form as well as
     40          @* - the normal form,
    3441          @* - the corank, the Milnor number, the inertia index and
    3542               a bound for the determinacy as integers.
     
    778785  "EXAMPLE:";
    779786  echo = 2;
    780   LIB "realclassify.lib";
    781787  ring r = 0, (x,y,z), ds;
    782788  poly f = (x2+3y-2z)^2+xyz-(x-y3+x2z3)^3;
     
    10061012  "EXAMPLE:";
    10071013  echo = 2;
    1008   LIB "realclassify.lib";
    10091014  ring r = 0, (x,y,z), ds;
    10101015  poly f = (x2+3y-2z)^2+xyz-(x-y3+x2z3)^3;
     
    10531058  "EXAMPLE:";
    10541059  echo = 2;
    1055   LIB "realclassify.lib";
    10561060  ring r = 0, (x,y), ds;
    10571061  poly f = x3+y4;
     
    11451149  "EXAMPLE:";
    11461150  echo = 2;
    1147   LIB "realclassify.lib";
    11481151  ring r = 0, (x,y), ds;
    11491152  poly f = x3+xy3;
  • Singular/singular-libs

    r051432 re9ffa0  
    2323        paraplanecurves.lib phindex.lib \
    2424        pointid.lib poly.lib \
    25         polymake.lib presolve.lib  primdec.lib  primdecint.lib \
     25        oldpolymake.lib presolve.lib  primdec.lib  primdecint.lib \
    2626        primitiv.lib  qhmoduli.lib random.lib realclassify.lib \
    2727        realrad.lib  reesclos.lib  resbinomial.lib \
     
    4141# for new libs
    4242
    43 SLIB1 = decomp.lib template.lib findifs.lib finitediff.lib lll.lib multigrading.lib \
    44         schreyer.lib
     43SLIB1 = ffsolve.lib decomp.lib template.lib findifs.lib finitediff.lib locnormal.lib modnormal.lib \
     44        multigrading.lib parallel.lib realizationMatroids.lib ringgb.lib\
     45        schreyer.lib symodstd.lib
    4546
    4647PLIBS = bfun.lib  central.lib  dmod.lib  dmodapp.lib dmodvar.lib fpadim.lib \
  • Tst/Short/factorizep_s.res.gz.uu

    rb0732eb re9ffa0  
    11begin 644 factorizep_s.res.gz
    2 M'XL(")C:JT\``V9A8W1O<FEZ97!?<RYR97,`E/U-DRQ/>MV)[?DIKLU&#00<
     2M'XL(",%6&E```V9A8W1O<FEZ97!?<RYR97,`E/U-DRQ/>MV)[?DIKLU&#00<
    33M<\O?2Q2P&)L-S<9F,[,;(V@4"5!M:@$T=$N\1=E\=X6?YSS',SRB;KJ,1E3T
    44M_Z:'9U5F^-OS.^?\;__[__SO_M<?/WY\_/V/_^7?_4\__H>__/DO?_NG/_[?
     
    13341334M_?CX67K\Z__V#^FO__L_Y"-^I%CLZK/&G^=_S^?_2D=,YS?KK_\;KC]B3I_G
    13351335MO]3S?YU[\=*\>3Q*KG;Q4<OGS_'Z(^;>RWC!<;[OFN;[J2_OIYUO]^]^_--_
    1336 M_$]_^9=__>-__\<??_BGO_JW/_[RCW_^B_VG/__XPY_^YL?YW_Y_[9U-DQRY
    1337 MD:;O^RMRQ_9`5E1H`M^`:4>GO>QE+SOG6B.[18HV(XV92'9FQMK\]WW=@0"0
    1338 ME562ND1;FS%[^X.,0"``/("[PQV!B+P;'VE*'Z.S6[S=[6JV&-U^7DM_=+;;
    1339 MLUN+\7+1II*?;4DYFC&-A[\?CS"-1YC'X_'T[NOCMYO!"!B,9P,0W'2['P/P
    1340 M]0G.T;MO[Q]PX''P9/70+>]6\_#MR60YC>DX+7H:->.FQZ&7BF'5=*/IM3`M
    1341 M+1ZE6:^GYC@->KII3BTYQ%Y:K*4Y;8`_&N`T&V:'>NJU#9@6VZE6YX_JO--3
    1342 MV\M,4F:]I%7#LV^G44X1S*!&G_0XRW'0=%M:MJC5V8&<>X%1J:U21ZW76CU6
    1343 M9&OT6"NU1Z51"S>EEU9&:=H&HVW(M30]E,+T(`P]CI-@1/-64>YB_-6O7]VW
    1344 MY:O]9I=OOLOP5Z])Z]=OKB?[D?QM/+65`N:D>%LF"NB7TG%IO;N4<2DN7P,N
    1345 M>:G62;VQ7BMR;<6U19-Q+UKQ+?3K9JL9<'&]OVB.DA<I>:FYY@QV%-^KEF)N
    1346 M<TF?H(?:`W+C]?3KM[6G2%=(?XT4Z8GEVTN+A#?_.OW7N#ZHDVF-[LXPQ,FT
    1347 MQC`9!KMM8AP^/7Y^_.7Q^OC]\?+^\319B1COK$3$9*&6X0\0(EC5[T]N]0^?
    1348 MGNS#YX=?'JXXMZ?E]"X_R,5?D(P0ZKB,/R\+,C]\QI%>$UORO1<-75F/&]W#
    1349 M91U9<?9P1;F?CVM/=K2H#+JT/9?N/[P@W7_X2]+M/WVVO]BK_;[JD;M>EL_N
    1350 M%W>Q2_[D<$'2[>=?KM_M*@GNLD0YM]\ORR?WW;TTP28SM=#>#4^"X7T^)!\>
    1351 M/S[^]/CI=CB2OQN.%,9P?$#'?,3_GS`[FAP?/J#K/F)^_$FZ=#$F./OP`2GA
    1352 MX2=<^22SH'=;0DI$"NX;I4YS7[J;^WYUEW[J-N)C-PO1?OQI^?#I1M0AU+W6
    1353 M::I+]U-=WIYWV;L+!'B_F>.RN>NN;'_7YS7(4%@@@6[9Q8Y>T%/7)WF3X2GC
    1354 M("P05G35]4DNR=]!G8L+.NOZ%$>)TZR9_=]M6R_2)FF2M$B>I"V7K/M@PC7K
    1355 MEIC=R5;7^)*8Y3`U)=[W6;H7,^VT9WY:SO?=5GJW'4D%FK:&Y+9-^DD>D?@M
    1356 MF(3C`I5W\*1R>:A=";<+;FB6?`FG<-9R]E:N2E?Z7B)FIB5%5TQI/1\6EV)\
    1357 MJ",3U^@+SG'J<)K64'(P8@EDC-;@X3<5,1-/9;%;245'LQ<.M5M]-!M\1FGB
    1358 MOL:P^=":B-/B?0FI-='"+S0Q)9.VUDJG*3&:X%OCX'?VPF%RX;<YF\S66@MA
    1359 M67*T23&EO5&J-#E%VYJ<D)"VD&+61F><XO+FI#9I7_)F<U;;!X>U5P41@]KZ
    1360 M&+4A2=K^9-$USMFCK5:33'0A:G>%VGY)R\7;HXE>'>&8;>B-##=5!>FRL-GL
    1361 M6Y/5H5Z!6:1?*H,4@6Z-%4'\[1QCSMHV=<9+MM'7EDG"FB`TQK5FV>J\;UN&
    1362 M@+1V.<T64PCY:)?Z^*MU+E<1LUT=O7$%CO^EM0[UA<V$U-K6S4D17Q$6T)8J
    1363 M=KN:2)>W%&I+)&7-UGBMT[>F^34EZ\LA<S4$*;[D8Q"E84.`Q7D,P4(2M4$U
    1364 M3D&7!^=;^_QJDDN^"OC^%%:$,S:74.N4%(0H`9W1:I1&=%^RB"\)O@AU:O4[
    1365 MO<69Z(U6Z?4\!\B9:2T(`,U>AT"NQ@5"X6*H%4A"+[Z(%)N$:>)0*ZD^0C6B
    1366 MJ<4[+0!W0TE;;7&%":BC(E<3Y-8>,B[GK72S;:+=(?I8E52*3DN"/I;22DY+
    1367 M#!+MZ<T[[*Z-I@VNGJ8-@M9NS2N,04B@PDGIE8@),;:D7'L3EB!*?^'0;*N`
    1368 M23]!O<ZKS<'+[:K^9XS#MAEWF"@$C$O9<DF^J_^YUR&6!)$BI#QU4W#6L"T>
    1369 M(HQX<D'4:H]AC#CW,"BEZS[.4]ED'%5Q<(KRG%7='U4Y'?`8-:/H%S*:;%+:
    1370 MRJ'\J!KJEK<XE!])R>>A9$Z33'&P-FDH_U0/C,H*ZU=DF`]#@*JR*>:0M%@K
    1371 MAYF17JKZ);V4-VAX57ZIQ&S)AZ;\=JI!;(EQ:4LN=UM@]08H70F3.9"^QT")
    1372 MW9D,@N2%F8C6'7WJG]4@&FX=%$%S'!9"2C,^)-LL5NQI&0.2#QLF*=%#)$(S
    1373 M#QCP!;IOS;`/LPQ43??(,%D+N2=BD.UL+R310:="G$R&)L;-F+AU2S$7+XH>
    1374 M;3#.''9-\$4Y-M=,A\B<3"]UMJSB[@5#5AS\T0);4WO!$C]:%.+\(8KNN*]L
    1375 M!5-8MR)>13B[&`]+)J/MU=!4,Z.5)4P\KMN2,*HRHN\&\V5VQ_1A:PZH2HXR
    1376 MSQT61=)\@2^:#PN&A(R:VKRTJ_Z4:'/J=B5.-1F1+60/)7;3$J5,.`3!'&9+
    1377 MY#F&H%JAQD<')G;[DN0."\M9#NLT52$Z;WW,ZF'LHK`KM,8%6,IK.P>J32),
    1378 M8EU<<)A>5&?/XF=#U3$P36<E!7YW]JGK[+E/N\94I7>V>QI.[X!_XKOR2D)*
    1379 M`0+4%5:24*1/76%KS7`I;&D:.U<CCH3UP*U3-RZI@JG'H+HM_H+-#EIP:&QM
    1380 MN;'6Q:&PFHA^<V$;^GI3DZSZH.?0(T-U:W/K`'5MK76BQ<V1BRT?;"YF37<8
    1381 MG:GH*(8+\K[EIK>VWF!A_=0:A\/22'4&-G!6V);9P==PD\K>#D<2Z=H@L,9/
    1382 M&JQY5C0JY3'9UT0/`I.&K1'W;(.3E9OFNIOB)>85ARH/'Z".MP'4YB8];LG6
    1383 MAQC<I+TU'5-TV6)7W]M*ZLP>1?R'M4&[<LIV.Q2Z2E4H<%%SUVA?!</"5\Z3
    1384 M&ONY>"NA@-M<5G$<-D5N!)<-9=@4Z1\D-+"]RNT*!\9NL2MWN"E=U!N*ZO6F
    1385 M84:D=`.#Y.(P(^KBAM#\E[WI@!<?]%#S>%.VZ#7$S<=A-J0/X'<(;C4"*!16
    1386 M(Q1_F`EAR$FFAKTI3H$;HZ&"7'6]=-%DB[%W+=:1B[!4\,+CF/'.&ILCCXE=
    1387 M?S0?9ID8AP>L:>+FAS&_S96)/DM4X&/3G7I#A`*'IOP.-B,G4_5YUPR8OI,_
    1388 M]$13H$[SK'931U#WRA=;MJ$OE0!SD:PE=`W1U""ZY0[]T.+A[XJ-.91[E"VJ
    1389 M'!U\Y6.&LY4@(V!HD\ZUI]J((=W*I!VU(Q$@FA0GY;`W=8@N(_C$?#PTQ1X]
    1390 MBU@@38J,V`)^]!:;=KC:?V+63=<.=U.ZS-H0R6C2K"IM-#'!8<;HZG&DAE@-
    1391 M6Z\"1EAL35,/WQY,P(,9ZE%EP<+FQM0UHB4F1+4Q3CJ(2C8(:YL6JI8@XC()
    1392 M8=W6=.)6D,18!`2?/DS*YN"/8`(*JA2Q#CF"-NAMURH,-YSMXIN2.,2.Z*[J
    1393 M4)U[E`3W#-WD$(9*]2IWN`@?%A'"UL7NK`]XDM&PQ36=\`A62Y<P.4<\I^YF
    1394 M4X91A[H$#F;;-/=;0CG$XZ4984W`M.*BZW97TR!4B)W\$"RM!T$;PLPIZ+JI
    1395 MS%8OW>1A?^M=SB6[==E'X1YVX@C$*B0TW\?DNT39FY+5@'B8U;)-$F5KCR'L
    1396 M:JZXZXE0[A0FP48%-E<G]I"Z4;I8#%DBL$.T:C>7Y$J+^`X)]FN(,.;;)+Z(
    1397 MEXM/H33!\C=E5TN!"2?;)F1MQ"`@;O),!21AZ),*E@XBA"/(NLFU)R!,-ZE)
    1398 MV:BBAO3>IV9,SQ+J0IN.!0Y-<`CC)CLA23#5KMM0ITD1UOUP?<\]X$9ANJX#
    1399 MC2^FB1@B=DC(,8AZ,UR8Y+L/7/.(_J0Q9)HH;KG-QX#=U"-.`-HM:P-=?M!0
    1400 MF*0CWJG#*;5GZ_(8L)H*P8I37&UO"M?)'XYZ\'F2%125$'&6PRZX6E!"+&EC
    1401 M&[+:.0B3BL3-0QAZV7Y3YR@8WR)Q7^^P4=R*8]0#5$^TJHUG$!,<0HWNSK*N
    1402 M!T4W;4*1A%ZZ1/,8FK'<836_.=+:^$7X\4:FI&LK$&$5@MGJQ.R:`6I>RM%I
    1403 M-W6(\L*[]*G'#EI$2O#V31\JE&G$26F=I>U`.`''XK"A]J94]>$S5+M[%K7I
    1404 MT$XK9JYU9!0CZG*+(FH*G#XIM7;=*%&4%0%:B+6CSD])O,]R>(*2()0A'&(@
    1405 M"186#A-^ZZ>$$!(A2@N`)*&7KN'Y!L34QKY6`)T/P\U/\*00E=21U@K@K)<H
    1406 M1N%(D$@'EK#!C/)%5Q$H^BJXYZ<L@3^RZB#*.<P<IO1#2;-XG.HD:<4XE56S
    1407 MPT?1M1]X*:W2W&N1J%RLI2Q)XT)9<G!^V[2&`EN!SL[5[2@KIG91B/.3V7[;
    1408 M"Q@/'8P\7W_36G[9_%C.1Y'N`E6S43Y$L:(Y23]"@;[>MHN]8G9V+H;+%;.1
    1409 ME\_W!W@=-EW\OHK10=X=3ETV\E;!CBR;\Y>KVQ<O/V`BF9+Q%[?K:J]#)AQ9
    1410 M!(J7:]MF(-]=WA$J8F*^V%T?`AESN>Y2[R8O=.+(;TC:T0`G/\^P^V4/B`*\
    1411 MN7@$Q-G*^[X2*6L;SJK;:*^3"%T^_XZ4;;,1C3@O<-$EURYIL&72"EDRDC>O
    1412 MY'(*:(,]P\,,&6VP=85%FEISH14H5CP[-/",J<F;'>5C$-%I9PG4;)'RSQ8&
    1413 M)5D4+XFVR.?:SQ*L1FM1@QRB2G24'!;YMK@D+C(W7E`7TN27(^0(#H7;=BT[
    1414 M6+GY+`O(V:3+58Z\_$*([,P(F'\N^]GIHOI5#WPI17=MB$=].:/[+-RVJQR@
    1415 M8_VN!S#YY]`??B%+*/8B"[)V@SC(ZF=0<7#1R^C!TPNYJ##`W<CRRC64`,*P
    1416 M%(2X*@P>6M.$(:!X$8;5)_EU`:3(5A:5!E%*E8:Z8*?B`-]5/F(O<J%WRM"C
    1417 MGX)(@RXR>I4&(P%@%0=Y`5#%03PE")"7I9O-BE2>5:1]%8D,WUDE0KHN7R6;
    1418 MF"81"5B<<(B$Q2TJ$G*O?(E?$W/P*A6+]]97J2CZYK!*"F91%0HG[[FJ=&!P
    1419 M(!3H&!%\&>K-A:1"`=8@#=$1WN0[\DAS#@JHPX^&A"H25M_'EC3TIJTBD43H
    1420 M1"+@Y:9="RX8'!E@>=XA\K!F^8R+BHCT!J1@036^B@.\*:_B8.31D\J#D1=#
    1421 M]0":W>0AI//S7_YJ]F;:O&-D\\[MPSLC^W6>[:]ZX=F=D3T\M\_NX(J,1Y[O
    1422 M,$1M/I(?59--4N+)&)E;37L6<X0>Z#NQCII_>_\@NTYPW:SGFM-N"^[)*_[P
    1423 M2YN=Y6^S("!^/VH/$U9\HTE=73>HN]W.QBX[&G*Q9I57NZ[ZP^!7NY['IPBN
    1424 MDDWD%@%Q?:4+8PH?%L.N;T1"#5X9AC2U%VZ9=%K;8[9V]VJMW29=$W%LJ^M2
    1425 M^PC)J_0CIJK6+0X7SNW92_.AVDW=H=<GS/O:HI_U_-3<R:D?QR8'S&]O[<?I
    1426 M.7-8U>!`XZ_[L%"7<(UGJ+QTEJBY7=5V]*?V>SS7SE:ED1Q.ON\@/T"T+V(_
    1427 MGF]=Z6TV4_OOMD#`K`[QMBK:-V(=[S8^P#9-3_(?WET6Z?^+=.6BNTJ.X\7,
    1428 MZ>W,Z9D;Q[?IS\Z>7ZWEC);$">W-&P7'R/310&V]XR\-IN^ANK@Y(6H.&8>^
    1429 M;:J='SFRWH(1O_0=4NW\R"%[HHZD7K#LA:J)K;"_N#6I=\/D2,7RFU\]1KUO
    1430 MTV05T]^_<^UO[=NY*^/<E2^]O7DTSTY-==5RS)S*CG.OYWZ9E#OYZ=;P`_:0
    1431 M''`"ZB?2005*^:'*>Z#>CDFJ90O0/<YH_C3:Z:UN\RO-UQ:_:*GS)!KY?L+,
    1432 MTW!D-V^&O;,N^=ZZY,FZ_*VCF*<>RS_`#OR(4<S3T.2FB$_NM)Y@QWK#R]23
    1433 MY0<HV7J=&M37%<LT(.5NCZ(IDPZ4:8]B>&%GERE35\NNBV>C5R9JV=4P1A*3
    1434 M\G5QXL[H_+RH9X.#!ZC_UH<2(7HOP&X_H$>NRYAC+_L\E/O]Z/6*[=2(7V50
    1435 M[.:G6_]C&!2[Q:E-J8FBV506_6AYGG*]U9;<^#DPW;-_(Z<OV1-KIC$W=_8$
    1436 MP<OP4!#=]BV:/]]LT;3FS@&W9G;`/ZP?,5P?9*GVX>/#Z:?5ZVE8/RX_(5)X
    1437 M^%F]CW%OF!KU5O?9^MX=ZX?EX^@-6S[XY>-/B/[Z@*X^?@C+SV[Q\2..T;Z[
    1438 M3Q;T]J2I;?F^P\KSB*5O-WS\_OC+H[Z1,'>=W>ZZSIIYNV;LRY?O7(U5Y`6.
    1439 MM2ZIR@-3>1:G#K2>YNZ6GYO7;?1I[+&XN;3'B1('7=8Y:K%V4CUYBO=&*8QY
    1440 M='PQ$A%?%PU/$1_+,HQ%.!MD1Z?53W_)`Y-M/P]-NVH@:F.,>I!*R1?Y!!H2
    1441 MM!#$]I?AF@\]'([+L[&SC^XQ=K#)2,B3/1%/J\\55],W,JU],XM?W?%8RVN7
    1442 MU>!F/9[-2<"HNXO0X>[8>A078^JEMN%LK<\6IZZ>S()]ZZRYAC)D'/%(0'TA
    1443 MHKMEOUT*$J&L2=82K'Q-#O]H[&.\?-I*5N>\=Y?Q(H,$08N^HW.1AS@AR>=C
    1444 M-<&_9CSL9+9LG6=O9%2WN*E8Z@XC-X1R\?H,[U;^W&2+W%OG'SN$3Q9U``%%
    1445 M+_*3AG)>_%[/(7C+)'2Z&N;E-=GS*ZQN4@[7YB695B^KT\GT^=&@F@3._8!9
    1446 M">7OJWO!U[!N$BJ7_GH3CR,['8UF3V/K?H![J\V>OIIXAV$'R/2*G97'(0JB
    1447 MZP6JDLMW]0;>Z=K+>S&-I^4D[V38L=-F,;JA"=F^C]TKNC2Q+^,=(3N]G6?]
    1448 M6TW>6*<1W5MVNWR?0)&T?[>'(NWMZ%(/Y#N#PZWPN_TN[]^CB:]-/]/[@M:'
    1449 MWC6K@B\ZIJ.CQ.%[E7P2EK>_Z#>438P%F-P-^++?TOT5MDGD?#,G=<[2N6NI
    1450 M:VVZ?B&8L%+OE[VQ3I([K2G:\/>[L;)0+,L.UWWVJ70!^[++UXWVEPU&F$0K
    1451 M'(XLVBJJAG;#[:D>;1TQ(8!*E,D=#]-0AQ]@.#!`%[=KS0-#OMLD*]%:]RL@
    1452 MDZ2$5UW8,`U>^/_JPD[O^=G8K(4^JY-W672[[D7W-TG*>=&'>BI"+^08G3^]
    1453 M6V;C6PW#1+/+A]9V5(1Y9HZ*YF0<X_#\"N4D#3$<X@3%AV+L4/TC/I(WR,09
    1454 M-).N3VMU]LUK=>NL[+(TM+I+]Z%5E%8)\O;EM6&:!*2MCKW[U;H]K8S9'[$R
    1455 M5O5Z=[].M:=%+]L7O62:J2%UT^NK2E<URFW=NSK?,,/BR]<4W1RUI`EQ&N@W
    1456 M+XO%*8K5CPS<J+Q^`<!-*X'5SY//9\C?<5H2O%:OZ5+_OEOHGOIDDK&V<E:7
    1457 M^^N>4'UZ$O1E\_H$6S:6X.*2DVZ0N.KB?](,J640OSHC17;;C%LDI>0\Y4E+
    1458 M\.U4W':S+<$>E?B:4%HEM<Y16-WYZ'1+8VU"3:F[(D>*OB:?BS[A?Y::TL-M
    1459 M>;XW,-R4Z8V?R6N:G3D>Z@[8J:V]O+(]2[5:MYLPBZ:&/#52=WN;$D(#]+V6
    1460 MV'*%D2NF!GWD<DN)K5;IUWS4FMW<FRTU6S?E3:W=L@MSY#5;)3SZIK=Z"/]D
    1461 M)-Z\J/H?/02=UG!M/MS;8S7NX<7ENMY!TP*OS3]@7H+3AEIOENE0]<U*'>I_
    1462 MS6/+DZW*8?@X5[7<^^SE'$ZH&/I;/V=:0;8_8@7YK7[.M&ILVZKQN\LJOL)5
    1463 M_\2\*NYU.]XU??(8IO5D^^;UY)M)=EI^7"^'UR"K57UA54ST>NY2=SV.$Z1R
    1464 M/;_\U*JW<9*DTB8Q>=%,AFXIH&M;P_0IT47?,9Q@IX$O;YZDM@$K)DZ>N"WR
    1465 MCF['#J)H,D?+R[0XU#]?G(IZ8R9A*NE^2:*^2O>WK4=,"^JVO-48W:]''.L0
    1466 MZZ]=@W#3`KW;S/`!Y?4S>:'O6"=OFQ*:1WA[];>]`#L5]@,LB;WQH5JUE^LR
    1467 M!;B7UM2:^K)-<=,JOMM"CP+5T14<7:UHRTJ'PSN)IIM6W-WV(QY(=;=V#!1,
    1468 MR:H?O$7-KPQ5GEI1^F.,95<3<I5U"S$BZWA\X::E>&=^@&^[S,]?UNG4U]-U
    1469 M?VT(S"0:QO4A6*H]*,?$=.SUF!"FL3,_(&1%'Z/GRR16Z#D9C9<[W4Q#;R;E
    1470 M%W]NZ(1Z8:NKB^#BA4_MGT;-O-G]B#<J7T*-EJK6#RFJ2ZWUDCC?K^S-<782
    1471 M"VM:^.U/BSS,Q)_PI'KSIP5\]^8%_-']>UCDL==+'_=PTS*Z:\OH*_B\FIPU
    1472 M6-G%*A_:\*Y9H;K7?)6]NBKZ&1VC![(O;U+?:67<O7UE7)HRQ*C6,:1(*Y^L
    1473 MDC:NMFT*?92B0;P:][AI#=S9XUESQL!<3HLY=:QI;=N]>6W[QMI>;F*Z!3/B
    1474 M91V3IW!YZ0:9;WPJ8I"#BYA"D]GR:XH_+7*[ML@-K]VO9G!,X_Y#5K,GB,5V
    1475 MQ]WKJ0]NC,<"#VO:][,@*LS=V[GHGLIF*+*>>Q-:]J(B,,YUR\\ZW:#;?=91
    1476 MH%&A&?49%9K1'/FH$<Y[:XWZ87]EE]!SP9E6ZYVLUM\^2'33^KN3]??Z4/$D
    1477 M3ZL>/[R_V\[A9,W\CU_^I,\-Y:,XLB;^`?^/H?/CL>([O?)>0C)]WRF+/1F)
    1478 M=I-$DT2*G_3U?&.LGA0--H?%\7<?5(.R_.[TZ=_^?'KWY4_?3E_^"0TX?3G]
    1479 M=]&`S?Y6$KXLSKWON?UO3O^WGT"@3J>OUZ_??O_'T[M_6-<_?_C3S__VQW]X
    1480 M/'T9!D(6JT_W<M<O%[G\Y=/IW5>]]*\0N/>G__I/I]#KE$7ATZA5%F?EGX$0
    1481 M0DWY^.???_B7D:H5_WL_147]9%J#=-%,HS5OZ_O'?SP]/)S^_/N??__IRY]J
    1482 MAH>'?M?X1@\"?#7O0;L\Z'%?:'6R:5`S?NX98\]XT3GA<C/NT?>/)=4;],6Q
    1483 M7L-5)Q.=VOND,MT<C@$VCZ=_M?C?C6OQUXRT+#SV/I>/7OW5D9;/6F%8S&M#
    1484 M+1^5PG5[<_WS=-WK=??\,T[]>JSECX1<"^P)N;9@(&?[3+K,(5ZV@V9_(UXY
    1485 M-O$:]>3\DGR5[4:^RO.J[%'5Z--R6U4YJAH$Y:6J_'93E=^>5^7NJO+;355^
    1486 M.ZIRH]`7JS*W5<DW!?[]7A.^B":\^F'115;_\=_-;Y;^Q4#D=G;4CR`CV6LD
    1487 M63,\L]9_R8N>2A*/2)87M!C9,RIE3L77CTH?3;C^S;40D8A$)"(1B4A$(A*1
    1488 MB$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(
    1489 M1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$
    1490 M)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D
    1491 M(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B
    1492 M$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1
    1493 MB4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)
    1494 M2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(
    1495 M1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$
    1496 M(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B
    1497 M$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2
    1498 MD8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1
    1499 MB$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(
    1500 M1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$
    1501 M)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D
    1502 M(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B
    1503 M$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1
    1504 MB4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)
    1505 M2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(
    1506 M1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$
    1507 M(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B
    1508 M$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2
    1509 MD8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1
    1510 MB$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(
    1511 M1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$
    1512 M)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D
    1513 M(A&)2$0B$I&(1"0B$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2$0B$I&(1"0B
    1514 M$8E(1"(2D8A$)"(1B4A$(A*1B$0D(A&)2,3__(C_^Y__Q__\7R=OW.]._=C_
    1515 ?YO3MZ[?_\_7;AV_?O[XS[W_[W_[+_P,<5:,[@W('````
     1336M_$]_^9=__>-__\<??_BGO_JW/_[RCW_^B_VG/__XPY_^YL?YW_Y_[9U/<^3&
     1337MD;?O_A2]CCUP"$)&_040LN:TE[WL9??,#8XDCAD>2XXA1_UGP]]],[.`0C6;
     1338MM"5ZXHU](Y[U2@(*Z%_54Y69E55`-R_&1YM2QV@?NNA/OG=#SN&T[^?ZZ.SD
     1339M]Z&?7=2+?IRG9Z^DK,UHQB->CD=JQB.UXW&SNWJ\>3H;C"2#\6P`4F@^'K<!
     1340M>+R5Y.CJZ=VU'$0YN/5V&+JKWET_W;I)3_.XGLYVFNW&P8Y3595AM7)GY47,
     1341MU/*JYJ.=NO4TV>E@=YIRRE4M%[5@#8AK`X+=)K-#.8W6!ID6EU.K+J[5Q6"G
     1342MOFJ.JEDN6=62V2^G64]E,2,UQM&.)SU.5N[GY;9LU?D->:J"V:B]46>KUWL[
     1343M-F3O[-@J]6NEV<3=7-7F3<W:X*P-4U&S0Q6S@[3Y<6X,([NWFG(UX\?8/X:G
     1344M[M$_^>XI5AM^C%;4/SZ%6ARWXJ?MJ:T*M$7Y7%,$ZJ5QO=1?7)KD4NX>DUR*
     1345M6FW0>G.Y-NNU7JYU5BR?E58\I7K=#>4&N=A?7G2K<J?*7;FKO<%O\K5JE3F_
     1346M2_M$>FAY0.ZBG3X^];5$NT+[:RO1GNB>7MHD//M?L/^Y4`>U":TY7`2&W(36
     1347MG)K`X(=!@\/]S<>;7VZ.-U]N#N]N=DV4R/DB2F29+"PR_$F,2*+JE]O0Q^O[
     1348M6W_]\?J7ZZ.<^UVWNYJN]>(O4BQ+J/6R_/O0R<W7'^7(KFDL^5*EQ5?Z]8/A
     1349M^M!OM\K9]5%T/Z[7;OW6HGFC&X?GUOVG%ZS[3W_/NN/]1_^+/_HOO1V%XZ'[
     1350M&'X)!]]-]T$N:+G_^,OQB^^U(!RZK.?^RZ&[#U_"2Q/LZ)H6^HOA&27P/A^2
     1351MNYL/-]_?W)\/QQ@OAF-,VW#<2<=\D'_N979T4[Z^DZ[[(//C]]JEG7,I^.L[
     1352M*4G7W\N5>YT%8QA&*<E2(I_;5)NY;[R8^WYSE][7&/&AAH7L/WS?W=V?F;H8
     1353M=:VUF>K&RZEN&IYWV=5!#/AT-L=-[J*[)O^^SFMB0ZD3"PS=2>/H07KJ>*O?
     1354M9+B=Y"!U8JS25<=;O:3_399<'*2SCK=Y4VQFS2G^T['UH&W2)FF+]$E:=YCL
     1355M/9ATG.R5F%/05UWS2V8VI:8I^;+/QDLSLTY[EJ=-TV6WS;7;UJ)9/*U/8Q@&
     1356M[2=]1!*'Y$8YGL7E@V12TWQ=NE+2+DE#)[UOE%-)UJ8I>KVJ71FKHLQ,W9C#
     1357M[.:EYU,7QIROR\CD/L=9SN4TR.G8IWE*3B.!CE&?HN1-LX:)V[GSPSS.-II5
     1358M7-RNC]D-DC-J$T]]3D-,2Q/E=(YQ3N/21"]YH<OCZ,9A:66PDIQ=BDOC).^L
     1359MXA)R)6\+?G3#TEHQEF[*?C1,;6_6*MTT9K\T>92"<4ACGJS1DYS*Y2%H;=J^
     1360M,;HA>&N?)*RU*C$Q<=N8LS5DU+;?>NF:$/S:5F]%+H>4K;M2:;^637/T:Q.C
     1361M)<)Y\JDV,IU5E;3+TN"GN#39$NI>,&?ME\*@$M*MN2!HOCWE/$W6-DO&Y\GG
     1362M6%JF!?TH1N/"TBQ?DO=AF,1`EG8%NRV/*4UKNRS'[WT(4S$Q7]TQNC!+XG]8
     1363M6B?UI<&E<6E;#2>SYHH2`?U<S.YD(3),PYA*2[2DG[R+5F=<FA;[<?1Q7FVN
     1364M+$'F.$_K(&K#-@/6Y#$E+Y9H#2KK%.GR%.+2OMB[,8RQ&/CI-O6RG/'3G$J=
     1365M6B)+E"2=L=2HC:BYY*RYI/!E<:>E_F`?"2Y'9U5&.Y^2V)E;6I`$=(HV!'HU
     1366M=V(4(:=2@194^5FMV(TR3:QNI=5G<8WLBGPP`?FT..E26^XE!)11T:NCV*U?
     1367M;5S/%W4W#.K=*<=<G%2EQVX4?YSG17GL<M+5GGWX)''79[<,KIV.@QC:\M&I
     1368MEV"01J&2D[E6HB'$^7F<2F]*),C:7W+HAE[!M)_$O?:]GU+4CYO[[V4<AL&%
     1369M-43)@K&;AVD>8W7_?:U#(XFL%,7*QQH*]K9LRZL)RWJRDU6K7X<QRWF4@#)7
     1370MWY?S<1YT',UQY%3T@C??WZH*-N`YVXWJ7W*CF]PX#O/J_%*UN-LTY,WYI6B,
     1371MT^9DP8K<'"3:C)OS-_5(4.DE^LTZS&L@D*HF-[O5TG*I7,*,]E+Q+^VE:1`/
     1372M+\ZOE;AAC&EQ?M_4H+'$A7$8PU1C@;</B-/-J0D'VO<R4!IWFH"@]TJ8R#ZL
     1373M?1J?U:`>[H,X@MVQ1@A5<S&-?HE8N99-,B#3&L.T)$<QB;2$!QGP3GS?NRT^
     1374MM#90/#W*#4VTT,]D&63?Q@LM#.)3*3<APPKSX%P>:J1HY=71LT\NN#6N*;XZ
     1375MQQ"6T*$VI]-+F2V+N4?%T!V'N+;`E](JK.M'+R(AKJ88UL_-PRQ36(TBT4QX
     1376M"CFOD4Q'.UJ@*6'&*AMEX@DUEJ2M*J?^[F2^G,(Z??ARA[C*E'6>6R.*EL59
     1377M<M%IC6!2,$E-R[QT,O^9LY_&&E=R4Y-3VY+;TYQK:,FJ*0E!<FO84GO.*9E7
     1378M6/"Q@<DUOHSZ"2^1<UZC4U.%^KR/>;(,XZ0.VXO7A"21\KB<"ZH?U9@TNH04
     1379M9'HQG]UKGBVN+@.S^*R62-X]Q;'Z[+Y.N\X5IP^^9AK!/B'Y2:S.JP7CF,2`
     1380MJL-JD4C&L3ILJ5E2"C\O'MM6HXF$CX);IFZY9`YF&8/YMN8+?@KB!:O'EI8[
     1381M[T/>'-8*I=]"&C9_/:M)=WVDYZ1'-M<MS2T#5+VUU"DM7A*YO-PG,5=FS;`&
     1382MG48Z:^`2>Q^FQ6]]^8"7Z&?1.*V11JMS$@-;AUUN#I)KA,9ESX=C5.L:Q&!=
     1383M;#S8[NFE4>.T3?:E,`J!&[=8H^G9($G6M'AN.)/7-:\F5-.6`Y3Q=@(UA,:/
     1384MEV(?4TZA\=Y2+E/T/.3JON>5E)D]J_EOT4;:-8V3'U:'+E:59DE1I^K1L1B&
     1385MEUQY:MPXMO)>EP)A").9XQ93](/"Y=.\Q13M'RE8P$[%;GM)8/R0JW.G,W5U
     1386M;W'4:!_:PHBJ.PE((6]AQ%+<E);\Y;3X0-0<='7S?*:M?BWF%O,6-K0/).]0
     1387MW!($1%2B1IKC&B:481IU:C@MCC-+&F-+!;T:JKIZLI>Q#\M:1R]*I)(L/&\S
     1388MWM[6YG*/R]5_[#Z997+>,F`KTS0_;?-;6YGZLZX*8EY\IWP@BP.GQ?F#Q(QI
     1389M=,6?3W:#3-]C7/W$2L2=VEGMK(YDZ56<_3QL_E((9"[2O83J(5::U+?"ZA\F
     1390M+_FNQIC5N3=M=>4<)%=>9SA?""99,"R3SK&6^BQ#.LR-=Y2.E`6B&W/C'/ZL
     1391M#O5E67S*?+QYBE][5M8"8^/(LK:0/'K(BW>$TG\:UEWUCG"FKK.VF&1V8^LJ
     1392MRVC*!"<S1G6/M33E$MAJ%1*$-=8L[A&7!Q.2P6SN46S!2\S-8_6(I7"456W.
     1393MC0]*)8,8ZS(M%"^1%9<;95DW+#YQ;D@:+)(L/F-JG"U(/B(34#*GR&7(9=$F
     1394M?EN]2H9;DNTY+DX29.THW542JGU=)4EZ)MT49!FJU9O=R47)866%,%2SV]L#
     1395MGM'9LB4L/A%EL3I7"]-S6<]9NKDXPU:'I01!PK9;TF]=RLEZ?%Z"L!7(M!)R
     1396MJ''7RL2H9.T4-\.R>F31)LO,9M%U5IDO6;J;MOA;/A7"Z(=J^R(>)4ZL"[$"
     1397M*9X?\QBK1?DS90L@4<+J/#06Y4N/R;)K2<5#+13G'E-CV%*!GTH2NUK=IJX1
     1398M0[<(_&9:I9OG,<S+BF^UX-BG+,%\:,Q7ULMS'-.\&%8\TRZ10B:<R2]&MHR8
     1399M&$AH,E,%&67H1S,L&T0QCJ3[)L=:(,MT-RY6ME51EO0QCDLPW>M25[QIW>"P
     1400M@B#+N"9.:)&$ZE!C:+"B+-%]37WW=<$M8K:O(QX_N\7$9,4N%K(.HGU84I@Q
     1401MUARXW*/^,VY#9H6:EOMI';"S>C0)D';KWD"U'VFHA*1UO5.&4VN??)BV`2NE
     1402M8EBY65?[,W&;_"513W%J;$6D1EEQSFM<"$5HE+6DS\N0E<Z19=*LZ^;-&*IV
     1403M'"PY2BXN*_%8/N&SIA7KJ"=Q/?6J93R3AN"4RNINK_MZXNANF5"TH*KK:EZ&
     1404M9MON\':_6\N6\<N2QSN=DHZ+H"RK9#%;DIB3W2!N/L]KIYW5H<XKV64<Z]K!
     1405M),91LGU7ATHTG28I2V=9.V0Y(8G%&D/]F:KE\).X=LTL2M/%.[V&N:4CLP;1
     1406M,"VKB%(B29^JEJ[;%-5998&6<NFH_>VHV>>\9H):H)0IK6:@!5XBG$SX2S^-
     1407MLH24)<JR`-*"JF[+\T$0QV7L2P7B\VE+\T?)I&154D;:*I!D?<X:%-8"7>E(
     1408M)%Q@-GWU55DHQF*X^]M)%_YRJPVBGDN8DRE]==)),TY+DJQB.=5=LS5'L;T?
     1409MR5*62J=:BZ[*-5KJEK1<F+LIA3@,5L,LL4(Z>RIIQ]S+U*X.L;]UP[=58'OH
     1410MX/3Y^IOV\N<A;MOY(AD.XFH^ZP]1]-*<T7Z$0OIZ&`[^*+-S"#D=CC(;1?WY
     1411M_B19AQ\/\=1KT)%[3Y+434Z_57"26X80#\=PZJ+^`1.]:73Q$$ZVVQOD)CGR
     1412MLE`\')?7#/1WET^R5)2)^>!/]A#(N</QI/4.^H5..8J#%)VD`4'_/,,I=J<D
     1413MJX#H#E$6Q)/7[_OJ2MG:L#??EO8&7:'KS[]+R3#X+(W8=Y*BZUTG+9-8IJW0
     1414M+2/]YI5>'I.TP>\EPTR3M,&7'19M:KE+6B&RFME)`_<R-45W$GT91.FTO2[4
     1415M_*SZ>R\!9?0BKX5^UI]KW^MB-7LO->BA5"D=I8>S_K:X%G8Z-QZD+BG3OQRA
     1416M1Y)0A.%DVLGKA_>Z@3RY\7#4HZA_(43?S$@R_QQ.^V";ZD<[B/,\VUL;FE$?
     1417M]M)]7M*VHQY(Q\:3'4C(WZ?Z\$MN2;,_Z(:L'\0<=/<SF3F$''7T)--+TVS&
     1418M(.G&I%^Y%B<08^AF6>*:,43QFL48DLBK,?1QU+\N("7Z*HM9@SJE64/9L#-S
     1419MD-Q5?\1>[<(^J4,O_934&FR3,9HU.%T`%G/0+P":.6BF)`84=>MF\&J5>S/I
     1420M6$QBDMS9+$*[;CKJ;1J:U"0DXJ35)+Q\Q$Q"/ZN_Q&^%4XIF%5V,/A:KF.V;
     1421MPV8I,HN:403]GJM9APR.&(5TC!J^#O40TFA&(:Q)&V(C/.COR$M9".*`-OS2
     1422MD%1,PMOWL;5,>M,7DQC5Z-0B),L=3R8\R^#H`.OS#K6'?M*?<3$3T=X0*^BD
     1423MFEC,0;*I:.;@]-&3V8/3+X;:@7CV8@]IW#__RU]+O&E>WG'Z\L[YPSNG[^L\
     1424M>[_JA6=W3M_A.7]V)ZG(]LCS2H9HF8_TCZKI2U*:R3B=6]WR+&9=>DC?:72T
     1425M^X=WU_K6B5QW_;[<Z8=./C/U\J_8+;.S_M=ULB!^M]6>&JS\QI#:AQI03W[8
     1426M.]^=I"$'[WK]:M?1_C#XT??[[:<(CGJ;VJTLB,M7NF1,)8>58;=O1(H;O#(,
     1427M8]->2<NTTY9WS/J:7O6EV[1KLAS[DKJ4/I+B7OM1IJJE6X)<V"_/7I8<:OE0
     1428M3>CM"?.I7U8__?YV22>;?MQ><I#Y[:W]V#QG3KT%'/'XXVF+4(=TS'MQ>>TL
     1429M=7/?6^RH3^U/>5\ZVYQ&[PCZ^P[Z!XA.G<:/YZ^NU#:[IOT7KT!(6-W,VYMI
     1430MGYEUOGCQ06)3\R3_^NK0:?\?M"L[>ZMD/>Y<6[Z<!3L+V_%Y^;.SYU>+SM:2
     1431MW*"]^47!;63J:$AMM>,/"TQ]A^H0VH)L=^@XU->FEO/UCLD^(B-^J&](+>?K
     1432M'?I.U%I4A?5=J%*XB/W=5Y-J-S2)5)Z_^<UC5/MV;*+B^,^_N?9K^[;MRMQV
     1433MY4O?WER;YYNFAA(Y6DYCE_-HY[%KG'N,S4?35WB'9(53T-B0;E1"J7^H\A*H
     1434MMJ.Q:GT%Z!)G:WXSVN-;T^97FF\M?C%23XUI3)<3YM0,QQ3:EV$OHLMT&5VF
     1435M)KK\VE&<FAZ;OD(<^!JC.#5#,RV.>!MV_4[B6&WXW/3D_!6<K#\V#:K[BG,S
     1436M(//%.XIN;GQ@;MY13"^\V>7FIJOUK8MGHS<WU/I6PS:2,BD?NZ#IC,W/G64V
     1437M<G`M[C_4H90E>A7PPU?HD6.WS;&'4SN4I\O1JQ7[IA&_*:#X(38?_;\14/R0
     1438MFS:-BRFZP6PQ;BV?FKO>&DO.\AP)W6U^HZ<OQ1/OFC%W%_%$%B];AB*KV_J*
     1439MY@]GKVAZ=Y&`>]<FX'?]!QFN.]VJO?YPO?N^CW::^@_=][)2N/[!LH_MLZEI
     1440MU%O39Q]K=_1WW8>M-_Q\%[L/W\OJKPYH'_-=ZGX(7<P?Y%C:=_&3!;4]8].V
     1441MZ;+#YN<KEOJZX<V7FU]N[!L);=?YX:+KO&M?U\QU^_(JE+6*?H&C+UNJ^L!4
     1442MG\59`FVG4TW+]TO6[>QI[+JYV2V/$W4==.C;58OWC>OI4[PW6F&>MHZ?G:Z(
     1443MCYTM3V5]K-LP7I:S2=_H]/;37_K`9#CM-T\[VD+4YYSM8)SGZ:`_@28%)B)K
     1444M^\.6FF]^N"4NS\;.WX2;7,&:(*%/]M0\O3U7[%U]D:FO+[/$/JR/M:)U65G<
     1445M].NS.5TPVMM%TN%A??4H=\Z52\L+9WUYMMAT=1,6_%MGS3[-FXW+>B1)?2E+
     1446M=^O[=F/2%4H_ZEZ"UU^3D_^SM8^+^M-6NCL78SAL7V3015!GW]$YZ$.<-.K/
     1447MQUI!?"UX^"9L^3+/GMFHO>)F9FEO&(7-*+MHS_#.[2\TL2B\=?[QF_'IIHY`
     1448MB*//^B<-]7R.IW(NAM<U1F>[85&_)KM_A34TSA&6>4FGU4,?;#)]?K11-087
     1449MOL*L)/JG/KR0:_C0&%48_W$3UR/?'&W-;L8V?(7TUIK=_&KB!8;?0)JOV'E]
     1450M'&(@ME]@+ME]L6S@RO9>WFEHW'4[_4Z&W]ZTZ9R]T"2W?=G>7K&MB5.W?4?(
     1451M-]_.\_&M(6_;IU'?ZTZ^^]*`2M'IBU\=Z;0<'<J!_L[@EE;$D_^BW[^7)KXV
     1452M_33?%_0QU:[I#;RS,=TZ2A.^5\D;8WG[%_TV9]-@(4SA#+P[G=/]`[;&Y.(2
     1453M3LJ<97-75_;:;/]",25*O>M."VMCN<V>HD__?!JK&\6Z[7`\M3F5;6`?3OKK
     1454M1J>7`T9J3"NMB:RT55U-VBUI3\EHRX@I@;C$W*3CJ1GJ]!4"APS0(9RLY@U#
     1455M?[=)=Z*M[E=`&DM)KZ:PJ1F\]/\TA6V^Y^?S$BWL69U^E\5>USW8^TU:LN_L
     1456MH9Z9T`MW;)W??+?,Y[<&AH;FI#^T=I**9)YI5T5ML1S+X?X5RL8:<EK-21Q?
     1457M'.,DKK^NC_0;9)H,NL;7F[TZ_^:]NKYU=MT:ZL.AYM!F2KTN\D[=:\/4&,BR
     1458M.W;UFWV[V1GS7V-GK/CU*?PVUVXVO7S=]-)IIBRI%[\^FG65H+SL>Y?D6\*P
     1459MYO*EQ%Z.ZL8&L1GH-V^+Y685:S\R<.;R]@L`H=D)+'F>_GR&_C<W6X+'DC4=
     1460MRG\O-KJ;/FEL;-DY*]O]Y9U0>WJ2[,OFY0FVOE@B%[MIM!<DCK;Y/]H-XW*#
     1461MYM63E.C;-MM'M&2>IN:>L4MQ.=6TW0U=\FLEL13,2R6ESDVLO/D8[)7&TH12
     1462M4MZ*W$KL:_+3;$_XGY6.X_6Y7JP-3&>:T<66O)3YEN.ZO`';M+7JS<.S4F]U
     1463MAP9SMM(T-8VTM[W=G-("&&LM>;DK;7?E<8%>[PK=G)=:M5^GM=8IM+VYE$X^
     1464M-/>.2[OU+<SM7C<4PK5O:JLWXV^"Q)LW5?^O+T&;/5P_K>GMNAMW_>)V7>V@
     1465M9H/73U]A7I*D36H]VZ:3JL]VZJ3^US*VJ8E54]IRG*-%[E.;Y:Q)J`;Z\SRG
     1466MV4'V7V,'^:UY3K-K[)==XZM#K[G"T?XM\ZJFU\OQR<J;C*'93_9OWD\^FV2;
     1467M[<?^L&8-NEM5-U8U1/?[:G7']7@4J^SW+S^UJFUL+&E>)C']HID.73<+W?)J
     1468MF#TE.MAW#!O89N#G-T]2PP:K(4Z?N'7Z'=V*G=31=([6+]/*H?W[Q:FH-J8Q
     1469MIGF\W)(H7Z7[=?L1S8:ZG]\:C"[W(]9]B/ZW[D&$9H,^#&[+`?7K9_J%OG6?
     1470M?'DI8<D(SZ]^6P5\(_85(HD_RZ&6:@_'KEG@'I:FEM*78TIH=O'#D.HJT!)=
     1471MQ;'=BF5;:4UX&],,S8Y[&+[&`ZF:UFX#):&DMQ^\E9I?&:JI:<5<'V-T)PLA
     1472M1]VWT"#2;X\O0K,5']Q7R&V[]OE+WYS&<MJ?7AL"UYB&"W4(NA(/YG5B6M_U
     1473M:!":L7-?8<DJ?2P]/S=F)3VGH_%RI[MFZ%WC_)K/;3YA65@?RB:X9N%-^YM1
     1474M<V]./_*9R\^IK):*UV]65+9:RR5-OE]Y-R?XQBR\6Y;?<=?IPTSYMV12M?G-
     1475M!GYX\P;^UOVGU.ECKY=^W",TV^AAV4;OA2]:R.F3U[=8]8<V8EBB4'G7O-=W
     1476M=<WT)^D8.]#W\AKW;7;&P]MWQK4IFQF5.C8KLLJ;J&2-*VUKECY&L4"\NNX)
     1477MS1YX\.NSYDD&YK#KW*YB-7O;X<U[VV?1]G"VINMD1CSTV^2I7%&[0>>;.,X:
     1478MD%/(,H6.;IA><_QFDSLLF]R2M<?>;1S-N'^5W>P&HO,U<8]V&E/8QJ.3#*MY
     1479M[Z>35>%4LYV#O5.Y!(K)SJ-+R^VSF<!V;J_\],T'['6??A-T9C1;?<Z,9FN.
     1480M_JB1G-?6.LO#_L%;0L\-I]FM#[I;?_X@,33[[T'WW\M#Q9T^K;JY>W?Q.D?0
     1481M/?._//QDSPWU1W%T3_Q._MF&+FZ/%:_LRCM=DMGWG2:-)UNA'[30C6K%M_;U
     1482M?.>\G<RVV-PB3EQ_6>:C5'K0O\$@R9H;NZL[T=&_EU".]"\GVH'^E:2K.]TB
     1483MT3]H:&5'Y[>BL![ZX[P<FN8LLG&K]>)Q<]!]\?N?/^^N'GYZVCU\)]B[A]T?
     1484MU>\&_ZT6/'0AO*MWB^7^3SW)W\B8/1X?GW[\R^[J]WW_^>ZG'W[^R^]O=@];
     1485M6(J3WG1A[>OE-.CEA_O=U:-=^B1F_F[W+]_M4JTS>;VEUJJ_-:?_MR&D7$H^
     1486M?/[Q[L];J57\M_4T#[^BL=E?-O9C<]FJ?N:G[75IR-_^SH;X5,9M7,=J\^!1
     1487M7Z.SD=/1++<]_T.3Z**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1488M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1489M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1490M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1491M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1492M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1493M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1494M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1495M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**+
     1496M+KKHHHLNNNBBBRZZZ**++KKHHHLNNNBBBRZZZ**++KKHOJS[G__U;__^'[N0
     1497MQ_>[>CQ]L_O\\-/'W>?==SM_<W6X.;Z[^>&OW_[N#W_875_O/O_XPX_W#S^5
     1498M&ZZOZZ?F][N__OSIN+O_[G";=]WN>)ODWP?[]_$V?KO>.`[+C1_KC;G>>+@-
     1499M^F_YQVT?<,L'_K1\X'!]7%07[:7,VUDX_[!_O_OT\/BT^^1N=I^\_!.V:^']
     1500M[O[GS[NKAY^>=@_?R:=V#[L_[D(8!O^M%CQT(;RK=\=O=O]33](WTH6/Q\>G
     1501M'_^RN_I]WW^^^^F'G__R^YO=P[M-?]2;/KGO=O=WWS_]_/GA]./NZKZY/MMU
     1502M?W;]XW9]<G8]G%W_4W,]%/VM(!7!K:"T8$.>K,J'^]W5HZE]<F)-[W;_(@-=
     1503M06>KMJ+.5LM9/7,J11\^_WCWYZW4*OM;/7U>E5^KJGT:A[.JXK!650GB\%)5
     1504M<3BK*@[/JPJ75;GSJMQ:5>V;Z%ZLRIU7Y:2JOUUZPH-ZPBL>>LC=(75'^?\S
     1505MYWOU=M\=?7?HW.;(L3MX*3O*?_62W>">.?)K:MVQ54K=(1Z[0S`9"P^BV<@'
     1506M/>S6)AQ_=2T@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1507M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1508M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1509M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1510M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1511M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1512M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1513M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1514M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1515M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1516M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1517M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1518M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1519M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1520M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1521M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1522M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1523M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1524M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1525M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1526M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1527M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1528M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1529M""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""""*((((((H@@@@@BB"""
     1530M""*((((((H@@@@@BB"""""*((((((H@@@@CB__^(__E?__;O_[&+?GB_J\?N
     1531MF]T?_K![^OS-+L:AEOIO=G]^^/1I]_G;6A3>[SX__/1Q]_F[\>;J<'-\=_/#
     1532M7[>K\?WNKS]_.N[N=]_MCK?I^G`;=[T<>3D:[2CLNMWA-FP?2>]WGQX>GW:?
     1533MOKN_^_[IY\\/IQ^O[M]MU_/[W:.4[:X^2:>\V_UQE[_]W=;"\?WNZ<?'I_+1
     1534M1[GI1C_[:D\&Z8_:D;VO9U'.ZDG2\:L]GNVL?]:)-^==.35=.7^S>WI\^N_'
     15356I[NG+X]7[MVW__J[_P6R?Y'ZP,P(````
    15161536`
    15171537end
  • Tst/Short/factorizep_s.stat

    rb0732eb re9ffa0  
    1 1 >> tst_memory_0 :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:300364
    2 1 >> tst_memory_1 :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:2366292
    3 1 >> tst_memory_2 :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:2399076
    4 1 >> tst_timer :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:381
    5 2 >> tst_memory_0 :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:3118764
    6 2 >> tst_memory_1 :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:7380992
    7 2 >> tst_memory_2 :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:7380992
    8 2 >> tst_timer_1 :: 1336662679:3143- exported :3-1-4:ix86-Linux:mamawutz:3828
     11 >> tst_memory_0 :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:174032
     21 >> tst_memory_1 :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:2240284
     31 >> tst_memory_2 :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:2273068
     41 >> tst_timer :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:342
     52 >> tst_memory_0 :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:4109776
     62 >> tst_memory_1 :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:6680576
     72 >> tst_memory_2 :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:6680576
     82 >> tst_timer_1 :: 1343903425:3150:3-1-5:ix86-Linux:mamawutz:5873
  • Tst/Short/factorizep_s.tst

    rb0732eb re9ffa0  
    330330minpoly = a^2 + a + 1;
    331331poly f=(a + 1)*x^145*y^84 + (a + 1)*x^205*y^17 + x^32*y^112 + x^92*y^45;
     332poly g = x7y11+xy17+(a)*x7y10+(a)*xy16+(a)*x8y8+(a+1)*x8y7+(a)*y12+(a+1)*x8y3+(a+1)*x2y9+(a+1)*y11+x9+xy4;
    332333list l;
    333334for (int i= 1; i < 33002; i= i+33)
     
    340341    break;
    341342  }
     343  system ("--random", i);
     344  l= factorize (g);
     345  testfactors (l,g);
    342346}
    343347
     
    373377}
    374378
     379// tr. 440
     380kill r;
     381ring r=7,(x,y),dp;
     382poly f = y^5*x^4 - y^2*x^7 - y^3 + x^3;
     383list l=factorize(f);
     384size (l[1]) < 6;
     385testfactors (l,f);
     386
    375387tst_status(1);$
  • Tst/Short/ok_s.lst

    rb0732eb re9ffa0  
    131131facstd
    132132factorizep_s
     133factorizeQ_s
    133134factorizeQa_s
    134135fermat_gcd_1var
  • factory/facFqBivar.cc

    rb0732eb re9ffa0  
    61036103      {
    61046104        CFList source, dest;
    6105         ExtensionInfo info2= ExtensionInfo (beta, alpha, delta, gamma, k,
    6106                              info.getGFName(), info.isInExtension());
    6107         appendMapDown (factors, A, info2, source, dest);
     6105        appendMapDown (factors, A, info, source, dest);
    61086106      }
    61096107      else
  • factory/libfac/Makefile.am

    r051432 re9ffa0  
    4848EXTRA_DIST = factor/class.cc \
    4949      factor/test.cc test.cc testcs.cc header.tpl \
    50       tests charset/tests bin \
     50      charset/tests bin \
    5151      ChangeLog 00README
    5252
  • factory/libfac/charset/alg_factor.cc

    r051432 re9ffa0  
    22// emacs edit mode for this file is -*- C++ -*-
    33////////////////////////////////////////////////////////////
    4 ////////////////////////////////////////////////////////////
     4
    55// FACTORY - Includes
    66#include <factory.h>
     
    1818#include "alg_factor.h"
    1919
    20 void out_cf(char *s1,const CanonicalForm &f,char *s2);
     20void out_cf(const char *s1,const CanonicalForm &f,const char *s2);
    2121
    2222#ifdef ALGFACTORDEBUG
     
    8080// replacement for factory's broken psr
    8181static CanonicalForm
    82 mypsr ( const CanonicalForm &rr, const CanonicalForm &vv, const Variable & x ){
     82mypsr ( const CanonicalForm &rr, const CanonicalForm &vv, const Variable & x )
     83{
    8384  CanonicalForm r=rr, v=vv, l, test, lu, lv, t, retvalue;
    8485  int dr, dv, d,n=0;
     
    104105// replacement for factory's broken resultant
    105106static CanonicalForm
    106 resultante( const CanonicalForm & f, const CanonicalForm& g, const Variable & v ){
     107resultante( const CanonicalForm & f, const CanonicalForm& g, const Variable & v )
     108{
    107109  bool on_rational = isOn(SW_RATIONAL);
    108110  On(SW_RATIONAL);
     
    113115  if (!on_rational)  Off(SW_RATIONAL);
    114116
    115 return resultant(fz,gz,v);
     117  return resultant(fz,gz,v);
    116118}
    117119
     
    133135sqrf_norm_sub( const CanonicalForm & f, const CanonicalForm & PPalpha,
    134136           CFGenerator & myrandom, CanonicalForm & s,  CanonicalForm & g,
    135            CanonicalForm & R){
     137           CanonicalForm & R)
     138{
    136139  Variable y=PPalpha.mvar(),vf=f.mvar();
    137140  CanonicalForm temp, Palpha=PPalpha, t;
     
    147150
    148151  // Norm, resultante taken with respect to y
    149   while ( !sqfreetest ){
     152  while ( !sqfreetest )
     153  {
    150154    DEBOUTLN(CERR, "sqrf_norm_sub: Palpha= ", Palpha);
    151155    R = resultante(Palpha, g, y); R= R* bCommonDen(R);
     
    160164      DEBOUTLN(CERR, "sqrf_norm_sub: sqfreetest= ", sqfreetest);
    161165    }
    162     else{
     166    else
     167    {
    163168      DEBOUTMSG(CERR, "Starting SqrFreeTest(R)!");
    164169      // Look at SqrFreeTest!
     
    169174      if (getAlgVar(R,X))
    170175      {
    171         if (R.isUnivariate())
    172176          testlist=factorize( R, X );
    173         else
    174           testlist= Factorize(R, X, 0);
    175177      }
    176178      else
     
    183185      DEBOUTLN(CERR, "SqrFreeTest(R)= ", sqfreetest);
    184186    }
    185     if ( ! sqfreetest ){
     187    if ( ! sqfreetest )
     188    {
    186189      myrandom.next();
    187190      DEBOUTLN(CERR, "sqrf_norm_sub generated new myrandom item: ", myrandom.item());
     
    198201sqrf_agnorm_sub( const CanonicalForm & f, const CanonicalForm & PPalpha,
    199202           AlgExtGenerator & myrandom, CanonicalForm & s,  CanonicalForm & g,
    200            CanonicalForm & R){
     203           CanonicalForm & R)
     204{
    201205  Variable y=PPalpha.mvar(),vf=f.mvar();
    202206  CanonicalForm temp, Palpha=PPalpha, t;
     
    212216
    213217  // Norm, resultante taken with respect to y
    214   while ( !sqfreetest ){
     218  while ( !sqfreetest )
     219  {
    215220    DEBOUTLN(CERR, "sqrf_norm_sub: Palpha= ", Palpha);
    216221    R = resultante(Palpha, g, y); R= R* bCommonDen(R);
     
    225230      DEBOUTLN(CERR, "sqrf_norm_sub: sqfreetest= ", sqfreetest);
    226231    }
    227     else{
     232    else
     233    {
    228234      DEBOUTMSG(CERR, "Starting SqrFreeTest(R)!");
    229235      // Look at SqrFreeTest!
     
    234240      if (getAlgVar(R,X))
    235241      {
    236         if (R.isUnivariate())
    237242          testlist=factorize( R, X );
    238         else
    239           testlist= Factorize(R, X, 0);
    240243      }
    241244      else
     
    248251      DEBOUTLN(CERR, "SqrFreeTest(R)= ", sqfreetest);
    249252    }
    250     if ( ! sqfreetest ){
     253    if ( ! sqfreetest )
     254    {
    251255      myrandom.next();
    252256      DEBOUTLN(CERR, "sqrf_norm_sub generated new myrandom item: ", myrandom.item());
     
    264268sqrf_norm( const CanonicalForm & f, const CanonicalForm & PPalpha,
    265269           const Variable & Extension, CanonicalForm & s,  CanonicalForm & g,
    266            CanonicalForm & R){
    267 
     270           CanonicalForm & R)
     271{
    268272  DEBOUTLN(CERR, "sqrf_norm:      f= ", f);
    269273  DEBOUTLN(CERR, "sqrf_norm: Palpha= ", PPalpha);
    270   if ( getCharacteristic() == 0 ) {
     274  if ( getCharacteristic() == 0 )
     275  {
    271276    IntGenerator myrandom;
    272277    DEBOUTMSG(CERR, "sqrf_norm: no extension, char=0");
     
    278283    DEBOUTLN(CERR, "sqrf_norm:      R= ", R);
    279284  }
    280   else if ( degree(Extension) > 0 ){ // working over Extensions
     285  else if ( degree(Extension) > 0 ) // working over Extensions
     286  {
    281287    DEBOUTLN(CERR, "sqrf_norm: degree of extension is ", degree(Extension));
    282288    AlgExtGenerator myrandom(Extension);
    283289    sqrf_agnorm_sub(f,PPalpha, myrandom, s,g,R);
    284290  }
    285   else{
     291  else
     292  {
    286293    FFGenerator myrandom;
    287294    DEBOUTMSG(CERR, "sqrf_norm: degree of extension is 0");
     
    296303  Variable x;
    297304
    298   for ( VarlistIterator i=uord; i.hasItem(); i++){
     305  for ( VarlistIterator i=uord; i.hasItem(); i++)
     306  {
    299307    x=i.getItem();
    300     for ( CFListIterator j=Astar; j.hasItem(); j++ ){
     308    for ( CFListIterator j=Astar; j.hasItem(); j++ )
     309    {
    301310      elem= j.getItem();
    302       if ( degree(elem,x) > 0 ){ // x actually occures in Astar
     311      if ( degree(elem,x) > 0 ) // x actually occures in Astar
     312      {
    303313        output.append(x);
    304314        break;
     
    312322// Must be a power of p: i.e. y^{p^e}-x
    313323static int
    314 inseperable(const CFList & Astar){
     324inseperable(const CFList & Astar)
     325{
    315326  CanonicalForm elem;
    316327  int Counter= 1;
    317328
    318329  if ( Astar.length() == 0 ) return 0;
    319   for ( CFListIterator i=Astar; i.hasItem(); i++){
     330  for ( CFListIterator i=Astar; i.hasItem(); i++)
     331  {
    320332    elem= i.getItem();
    321333    if ( elem.deriv() == elem.genZero() ) return Counter;
     
    327339// calculate gcd of f and g in char=0
    328340static CanonicalForm
    329 gcd0( CanonicalForm f, CanonicalForm g ){
     341gcd0( CanonicalForm f, CanonicalForm g )
     342{
    330343  int charac= getCharacteristic();
    331344  int save=isOn(SW_RATIONAL);
     
    333346  CanonicalForm ff= mapinto(f), gg= mapinto(g);
    334347  CanonicalForm result= gcd(ff,gg);
    335   setCharacteristic(charac); 
     348  setCharacteristic(charac);
    336349  if (save) On(SW_RATIONAL);
    337350  return mapinto(result);
     
    344357// have enough elements to plug in.
    345358static int
    346 getextension( IntList & degreelist, int n){
     359getextension( IntList & degreelist, int n)
     360{
    347361  int charac= getCharacteristic();
    348362  setCharacteristic(0); // need it for k !
     
    543557
    544558static CFFList
    545 endler( const CanonicalForm & f, const CFList & AS, const Varlist & uord ){
     559endler( const CanonicalForm & f, const CFList & AS, const Varlist & uord )
     560{
    546561  CanonicalForm F=f, g, q,r;
    547562  CFFList Output;
     
    551566  Variable vg;
    552567
    553   for (i=as; i.hasItem(); i++){
     568  for (i=as; i.hasItem(); i++)
     569  {
    554570    g= i.getItem();
    555     if (g.deriv() == 0 ){
     571    if (g.deriv() == 0 )
     572    {
    556573      DEBOUTLN(CERR, "Inseperable extension detected: ", g);
    557       for (j=uord; j.hasItem(); j++){
     574      for (j=uord; j.hasItem(); j++)
     575      {
    558576        if ( degree(g,j.getItem()) > 0 ) vg= j.getItem();
    559577      }
     
    568586      // Now transform all remaining polys in as:
    569587      int x=0;
    570       for (ii=i; ii.hasItem(); ii++){
    571         if ( x != 0 ){
     588      for (ii=i; ii.hasItem(); ii++)
     589      {
     590        if ( x != 0 )
     591        {
    572592          divrem(ii.getItem(), gg, q,r);
    573593//          CERR << ii.getItem() << " divided by " << gg << "\n";
     
    595615
    596616  // Transform back:
    597   for ( CFFListIterator k=factorlist; k.hasItem(); k++){
     617  for ( CFFListIterator k=factorlist; k.hasItem(); k++)
     618  {
    598619    CanonicalForm factor= k.getItem().factor();
    599620    ii=One;
    600     for (i=Two; i.hasItem(); i++){
     621    for (i=Two; i.hasItem(); i++)
     622    {
    601623      DEBOUTLN(CERR, "Mapping ", i.getItem());
    602624      DEBOUTLN(CERR, "     to ", ii.getItem());
     
    618640//           no transcendentals, seperable and inseperable extensions
    619641CFFList
    620 newfactoras( const CanonicalForm & f, const CFList & as, int &success){
     642newfactoras( const CanonicalForm & f, const CFList & as, int &success)
     643{
    621644  Variable vf=f.mvar();
    622645  CFListIterator i;
     
    751774
    752775CFFList
    753 newcfactor(const CanonicalForm & f, const CFList & as, int & success ){
     776newcfactor(const CanonicalForm & f, const CFList & as, int & success )
     777{
    754778  Off(SW_RATIONAL);
    755   CFFList Output, output, Factors=Factorize(f); On(SW_RATIONAL);
     779  CFFList Output, output, Factors=Factorize(f);
     780  On(SW_RATIONAL);
    756781  Factors.removeFirst();
    757782
     
    760785
    761786  success=1;
    762   for ( CFFListIterator i=Factors; i.hasItem(); i++ ){
     787  for ( CFFListIterator i=Factors; i.hasItem(); i++ )
     788  {
    763789    output=newfactoras(i.getItem().factor(),as, success);
    764790    for ( CFFListIterator j=output; j.hasItem(); j++)
  • factory/libfac/charset/charset.cc

    r051432 re9ffa0  
    493493    if ( degree(elem) > 1 ) // linear poly's are irreduzible
    494494    {
    495       qs = Factorize(elem);
     495      qs = factorize(elem);
    496496      // remove a constant
    497497      if (qs.getFirst().factor().degree()==0) qs.removeFirst();
  • factory/libfac/configure

    r051432 re9ffa0  
    530530libfac_name="\"Factorization and characteristic sets library\""
    531531
    532 libfac_version="3.1.3"
     532libfac_version="3.1.5"
    533533cat >> confdefs.h <<EOF
    534534#define LIBFAC_VERSION "$libfac_version"
     
    536536
    537537
    538 libfac_date="\"March 2011\""
     538libfac_date="\"July 2012\""
    539539cat >> confdefs.h <<EOF
    540540#define LIBFAC_DATE $libfac_date
  • factory/libfac/configure.in

    r051432 re9ffa0  
    1515libfac_name="\"Factorization and characteristic sets library\""
    1616AC_SUBST(libfac_name)
    17 libfac_version="3.1.3"
     17libfac_version="3.1.5"
    1818AC_DEFINE_UNQUOTED(LIBFAC_VERSION,"$libfac_version")
    1919AC_SUBST(libfac_version)
    20 libfac_date="\"March 2011\""
     20libfac_date="\"July 2012\""
    2121AC_DEFINE_UNQUOTED(LIBFAC_DATE,$libfac_date)
    2222AC_SUBST(libfac_date)
  • factory/libfac/factor/Factor.cc

    r051432 re9ffa0  
    2727
    2828#include "alg_factor.h"
    29 void out_cf(char *s1,const CanonicalForm &f,char *s2);
     29void out_cf(const char *s1,const CanonicalForm &f,const char *s2);
    3030void out_cff(CFFList &L);
    3131
     
    5252* ( in factorize, alpha.level() must be < 0 )
    5353*/
     54static
    5455CFFList factorize2 ( const CanonicalForm & f,
    5556                     const Variable & alpha, const CanonicalForm & mipo )
     
    6162  else
    6263  {
    63     bool repl=(f.mvar() != alpha);
    6464    //out_cf("f2 - factor:",f,"\n");
    6565    //out_cf("f2 - ext:",alpha,"\n");
     
    6767    Variable X=rootOf(mipo);
    6868    CanonicalForm F=f;
    69     if (repl) F=replacevar(f,alpha,X);
     69    F=replacevar(f,alpha,X);
    7070    //out_cf("call - factor:",F,"\n");
    7171    //out_cf("call - ext:",X,"\n");
     
    7373    CFFList L=factorize(F,X);
    7474    CFFListIterator i=L;
    75     if (repl)
    7675    {
    7776      CFFList Outputlist;
     
    8281        i.getItem().exp()));
    8382      }
     83      //out_cff(Outputlist);
    8484      return Outputlist;
    8585    }
    86     else return L;
    8786  }
    8887}
     
    393392generate_mipo( int degree_of_Extension , const Variable & Extension ){
    394393  FFRandom gen;
    395   if ( degree(Extension) > 0 ) GFRandom gen;
    396   else {
    397     if ( degree(Extension) == 0 ) FFRandom gen;
    398     else
    399     {
    400       factoryError("libfac: evaluate: Extension not inFF() or inGF() !");
    401     }
    402   }
     394  if (degree (Extension) < 0)
     395    factoryError("libfac: evaluate: Extension not inFF() or inGF() !");
    403396  return find_irreducible( degree_of_Extension, gen, Variable(1) );
    404397}
     
    465458
    466459static int
    467 specializePoly(const CanonicalForm & f, Variable & Extension, int deg, SFormList & Substitutionlist, int i,int j){
     460specializePoly(const CanonicalForm & f, Variable & Extension, int deg, SFormList & Substitutionlist, int i,int j)
     461{
    468462  Variable minpoly= Extension;
    469463  int ok,extended= degree(Extension), working_over_extension;
     
    474468  // First try:
    475469  ok = try_specializePoly(f,minpoly,deg,Substitutionlist,i,j);
    476   while ( ! ok ){ // we have to extend!
     470  while ( ! ok ) // we have to extend!
     471  {
     472    SFormList origS=Substitutionlist;
    477473    extended+= 1;
    478     if ( ! working_over_extension ){
    479       minpoly= rootOf(generate_mipo( extended,Extension ));
     474    if ( ! working_over_extension )
     475    {
     476      if (!hasMipo(Extension))
     477        minpoly= rootOf (generate_mipo (extended, Extension));
     478      else
     479      {
     480        setReduce (Extension, false);
     481        setMipo (minpoly, generate_mipo ( extended, Extension));
     482        setReduce (Extension, true);
     483      }
    480484      Extension= minpoly;
    481485      ok= try_specializePoly(f,minpoly,deg,Substitutionlist,i,j);
     486      if (!ok)
     487        Substitutionlist=origS;
    482488    }
    483489    else
     
    804810{
    805811  //out_cf("Factorize ",F,"\n");
    806   CFFList Outputlist,SqrFreeList,Intermediatelist,Outputlist2;
    807   ListIterator<CFFactor> i,j;
    808   CanonicalForm g=1,unit=1,r=1;
    809   Variable minpoly; // dummy
    810   int exp;
    811   CFMap m;
     812  CFFList Outputlist;
    812813
    813814  // INTERRUPTHANDLER
     
    831832    return Outputlist;
    832833  }
     834  CFFList SqrFreeList,Intermediatelist,Outputlist2;
     835  ListIterator<CFFactor> i,j;
     836  CanonicalForm g=1,unit=1,r=1;
     837  Variable minpoly; // dummy
     838  int exp;
     839  CFMap m;
    833840  TIMING_START(factorize_time);
    834841  // search an "optimal" main variavble
  • factory/variable.cc

    r051432 re9ffa0  
    215215}
    216216
    217 /*void setMipo ( const Variable & alpha, const CanonicalForm & mipo)
     217void setMipo ( const Variable & alpha, const CanonicalForm & mipo)
    218218{
    219219    ASSERT( alpha.level() < 0 && alpha.level() != LEVELBASE, "illegal extension" );
    220220    algextensions[-alpha.level()]= ext_entry((InternalPoly*)(conv2mipo( mipo, alpha ).getval()), true );
    221 }*/
     221}
    222222
    223223bool hasMipo( const Variable & alpha )
    224224{
    225     ASSERT( alpha.level() < 0 && alpha.level() != LEVELBASE, "illegal extension" );
    226     return ((algextensions!=NULL) && getReduce(alpha) );
     225    ASSERT( alpha.level() < 0, "illegal extension" );
     226    return (alpha.level() != LEVELBASE && (algextensions!=NULL) && getReduce(alpha) );
    227227}
    228228
  • factory/variable.h

    r051432 re9ffa0  
    7878inline char name( const Variable & v ) { return v.name(); }
    7979
     80void setReduce( const Variable & alpha, bool reduce );
     81void setMipo ( const Variable & alpha, const CanonicalForm & mipo);
    8082CanonicalForm getMipo( const Variable & alpha, const Variable & x );
    8183bool hasMipo( const Variable & alpha );
     
    9395InternalPoly * getInternalMipo ( const Variable & alpha );
    9496bool getReduce( const Variable & alpha );
    95 void setReduce( const Variable & alpha, bool reduce );
    9697
    9798#endif /* ! INCL_VARIABLE_H */
Note: See TracChangeset for help on using the changeset viewer.