Changeset 8256fd in git for factory/facFqFactorize.cc


Ignore:
Timestamp:
Jul 16, 2012, 11:15:58 AM (12 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
faa1b8d6e411251ef4c85b56aefa21b74f5db582
Parents:
67a39b21729f20cbd2a5d3b6e61a60d67aa387d9
git-author:
Martin Lee <martinlee84@web.de>2012-07-16 11:15:58+02:00
git-committer:
Martin Lee <martinlee84@web.de>2012-09-04 17:25:37+02:00
Message:
fix: possible hang in multivariate factorization
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facFqFactorize.cc

    r67a39b r8256fd  
    11821182    {
    11831183      g= gcd (i.getItem().factor(), j.getItem().factor());
    1184       if (degree (g) > 0)
     1184      if (degree (g,1) > 0)
    11851185      {
    11861186        j.getItem()= CFFactor (j.getItem().factor()/g, j.getItem().exp());
     
    14321432  }
    14331433
    1434   CFMap N;
    1435   CanonicalForm F= compress (LCF, N);
     1434  CFMap N, M;
     1435  CFArray dummy= CFArray (1);
     1436  dummy [0]= LCF;
     1437  compress (dummy, M, N);
     1438  CanonicalForm F= M (LCF);
    14361439  if (LCF.isUnivariate())
    14371440  {
     
    14761479  CFList factors= LCFFactors;
    14771480
    1478   CFMap dummy;
    14791481  for (CFListIterator i= factors; i.hasItem(); i++)
    1480     i.getItem()= compress (i.getItem(), dummy);
     1482    i.getItem()= M (i.getItem());
    14811483
    14821484  CanonicalForm sqrfPartF;
     
    14981500    int lev= 0;
    14991501    // LCF is non-constant here
    1500     for (int i= 1; i <= LCF.level(); i++)
    1501     {
    1502       if(degree (LCF, i) > 0)
    1503       {
    1504         lev= i - 1;
    1505         break;
    1506       }
    1507     }
    15081502    CFList bufBufFactors;
    15091503    CanonicalForm bufF, swap;
     
    15201514            allConstant= false;
    15211515            y= Variable (iter.getItem().level());
     1516            lev= M(y).level();
    15221517          }
    15231518        }
     
    15291524          iter.getItem()= swapvar (iter.getItem(), x, y);
    15301525        bufF= F;
    1531         z= Variable (y.level() - lev);
     1526        z= Variable (lev);
    15321527        bufF= swapvar (bufF, x, z);
    15331528        bufBufFactors= bufFactors;
     
    17001695  else
    17011696  {
    1702     factors= CFList (oldSqrfPartF);
     1697    CanonicalForm contF=content (oldSqrfPartF,1);
     1698    factors= CFList (oldSqrfPartF/contF);
    17031699    interMedResult= recoverFactors (oldSqrfPartF, factors);
    17041700  }
     
    25472543  {
    25482544    A= swapvar (A, y, v);
    2549     for (int i= 0; i < A.level() - 2; i++)
    2550     {
    2551       if (oldAeval[i].isEmpty())
    2552         continue;
    2553       if (oldAeval[i].getFirst().level() == v.level())
    2554       {
    2555         biFactors= CFList();
    2556         for (CFListIterator iter= oldAeval [i]; iter.hasItem(); iter++)
    2557           biFactors.append (swapvar (iter.getItem(), v, y));
    2558       }
    2559     }
    25602545    int i= A.level();
    25612546    CanonicalForm evalPoint;
     
    25692554        evaluation.append (evalPoint);
    25702555        break;
     2556      }
     2557    }
     2558    for (i= 0; i < A.level() - 2; i++)
     2559    {
     2560      if (oldAeval[i].isEmpty())
     2561        continue;
     2562      if (oldAeval[i].getFirst().level() == v.level())
     2563      {
     2564        CFArray tmp= copy (oldAeval[i]);
     2565        for (int ii= 0; ii < tmp.size(); ii++)
     2566          tmp[ii]= swapvar (tmp[ii], v, y);
     2567        CFArray tmp2= CFArray (tmp.size());
     2568        CanonicalForm buf;
     2569        for (int ii= 0; ii < tmp.size(); ii++)
     2570        {
     2571          buf= tmp[ii] (evaluation.getLast(),y);
     2572          buf /= Lc (buf);
     2573          tmp2[findItem (uniFactors, buf)-1]=tmp[ii];
     2574        }
     2575        biFactors= CFList();
     2576        for (int j= 0; j < tmp2.size(); j++)
     2577          biFactors.append (tmp2[j]);
    25712578      }
    25722579    }
Note: See TracChangeset for help on using the changeset viewer.