Changeset 782895 in git for factory/facFqFactorize.cc


Ignore:
Timestamp:
Jan 31, 2013, 12:53:57 PM (11 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
04638b5adf8add17417937d338746c4d9e3ef1ea
Parents:
f2341ef871432b85e06790e4045edc08d541f689
git-author:
Martin Lee <martinlee84@web.de>2013-01-31 12:53:57+01:00
git-committer:
Martin Lee <martinlee84@web.de>2013-02-18 14:56:49+01:00
Message:
chg: toying around
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facFqFactorize.cc

    rf2341ef r782895  
    4949TIMING_DEFINE_PRINT(fac_fq_check_mainvar)
    5050TIMING_DEFINE_PRINT(fac_fq_compress)
     51
     52
     53void out_cf(const char *s1,const CanonicalForm &f,const char *s2);
     54void out_cff(CFFList &L);
    5155
    5256static inline
     
    13241328             const CFArray& evalPoint)
    13251329{
     1330  for (int i= 0; i < evalPoint.size(); i++)
     1331    out_cf ("evalPoint= ", evalPoint[i], "\n");
    13261332
    13271333  CanonicalForm F= G;
     
    13401346  CanonicalForm test= evalSqrfPartF.getFirst() (evalPoint[0], 2);
    13411347
     1348  out_cf ("test= ", test, "\n");
     1349  out_cf ("sqrfPartF= ", sqrfPartF, "\n");
    13421350  if (degree (test) != degree (sqrfPartF, 1) || test.inCoeffDomain())
    13431351    return 0;
     
    13811389      for (iter= bufSqrfFactors [i]; iter.hasItem(); iter++)
    13821390      {
     1391        out_cf ("bufSqrfFactors[0]= ", iter.getItem().factor(), "\n");
    13831392        if (iter.getItem().factor().inCoeffDomain())
    13841393          continue;
     
    13911400    else
    13921401    {
     1402      printf ("i= %d\n", i);
    13931403      for (iter= bufSqrfFactors [i]; iter.hasItem(); iter++)
    13941404      {
     
    13981408                                  Lc (iter.getItem().factor()),
    13991409                                  iter.getItem().exp());
     1410        out_cf ("bufSqrfFactors[i]= ", iter.getItem().factor(), "\n");
    14001411        if (!find (factors, iter.getItem().factor()))
    14011412          factors.append (iter.getItem().factor());
     
    14051416
    14061417  test= prod (factors);
     1418  out_cf ("test= ", test, "\n");
    14071419  tmp= evalSqrfPartF.getFirst() (evalPoint[0],2);
     1420  out_cf ("tmp= ", tmp, "\n");
    14081421  if (test/Lc (test) != tmp/Lc (tmp))
    14091422    return 0;
     
    14191432                       )
    14201433{
     1434  out_cf ("LCF= ", LCF, "\n");
     1435  printf ("LCFFactors.length()= %d\n", LCFFactors.length());
     1436  for (CFListIterator iter= evaluation; iter.hasItem(); iter++)
     1437    out_cf ("evaluation= ", iter.getItem(), "\n");
     1438  for (CFListIterator iter= LCFFactors; iter.hasItem(); iter++)
     1439    out_cf ("LCFFactors= ", iter.getItem(), "\n");
     1440
     1441  for (int j= 0; j < lSecondVarLCs; j++)
     1442  {
     1443    printf ("differentSecondVar= ");
     1444    for (CFListIterator iter= differentSecondVarLCs[j]; iter.hasItem(); iter++)
     1445      out_cf ("", iter.getItem(), " ");
     1446    printf ("\n");
     1447  }
    14211448  y= Variable (1);
    14221449  if (LCF.inCoeffDomain())
     
    14251452    for (int i= 1; i <= LCFFactors.length() + 1; i++)
    14261453      result.append (1);
     1454      printf ("exit00\n");
    14271455    return result;
    14281456  }
     
    14711499    else
    14721500    {
    1473       for (CFListIterator i= result; i.hasItem(); i++)
    1474         i.getItem() *= LCF;
     1501      //for (CFListIterator i= result; i.hasItem(); i++)
     1502        //result.append (1);
    14751503      result.insert (LCF);
    14761504    }
     1505      printf ("exit0\n");
    14771506    return result;
    14781507  }
     
    14991528  buf= swap;
    15001529  for (int i= 0; i < evaluation.length() - 1; i++)
     1530  {
     1531    out_cf ("buf[i]= ", buf[i], "\n");
    15011532    evalPoint[i]= buf[i+1];
    1502 
     1533  }
     1534  out_cf ("buf[i]= ", buf[evaluation.length()-1], "\n");
    15031535  int pass= testFactors (F, factors, alpha, sqrfPartF,
    15041536                         bufFactors, bufSqrfFactors, evalSqrfPartF, evalPoint);
     
    15381570        bufBufFactors= bufFactors;
    15391571        evalPoint= CFArray (evaluation.length() - 1);
    1540         for (int k= 0; k < evaluation.length()-1; k++)
     1572        out_cf ("x= ", x, "\n");
     1573        out_cf ("z= ", z, "\n");
     1574        for (int k= 1; k < evaluation.length(); k++)
    15411575        {
    15421576          if (N (Variable (k+1)).level() != y.level())
    1543             evalPoint[k]= buf[k+1];
     1577            evalPoint[k-1]= buf[k];
    15441578          else
    1545             evalPoint[k]= buf[0];
    1546         }
     1579            evalPoint[k-1]= buf[0];
     1580        }
     1581        printf ("swap war nötig\n");
     1582        for (int jj= 0; jj < evalPoint.size(); jj++)
     1583          out_cf ("evalPoint= ", evalPoint[jj], "\n");
    15471584        pass= testFactors (bufF, bufBufFactors, alpha, sqrfPartF, bufFactors,
    15481585                           bufSqrfFactors, evalSqrfPartF, evalPoint);
     1586        //pass= false;
    15491587        if (pass)
    15501588        {
     
    15651603            result.append (1);
    15661604          result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs);
    1567           if (!result.getFirst().inCoeffDomain())
     1605          printf ("this exit\n");
     1606          y= Variable (1);
     1607          /*if (!result.getFirst().inCoeffDomain())
    15681608          {
    15691609            CFListIterator iter= result;
     
    15731613              iter.getItem() *= tmp;
    15741614          }
    1575           y= Variable (1);
     1615          y= Variable (1);*/
    15761616          delete [] bufSqrfFactors;
    15771617          return result;
     
    15871627      result.append (1);
    15881628    result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs);
    1589     if (!result.getFirst().inCoeffDomain())
     1629    printf ("no that exit\n");
     1630    /*if (!result.getFirst().inCoeffDomain())
    15901631    {
    15911632      CFListIterator iter= result;
     
    15941635      for (; iter.hasItem(); iter++)
    15951636        iter.getItem() *= tmp;
    1596     }
     1637    }*/
    15971638    y= Variable (1);
    15981639    delete [] bufSqrfFactors;
     
    17461787  result.insert (N (F));
    17471788
     1789  out_cf ("result.getFirst()= ", result.getFirst(), "\n");
     1790  out_cf ("content (result.getFirst())= ", content (result.getFirst()), "\n");
     1791  printf ("foundDifferent= %d\n", foundDifferent);
     1792    for (int i= 0; i < lSecondVarLCs; i++)
     1793    {
     1794      printf ("differentSecondVarLCs ");
     1795      for (CFListIterator pp= differentSecondVarLCs[i]; pp.hasItem(); pp++)
     1796        out_cf ("", pp.getItem(), " ");
     1797      printf ("\n");
     1798    }
     1799      for (CFListIterator pp= LCFFactors; pp.hasItem(); pp++)
     1800        out_cf ("LCFactors", pp.getItem(), "\n");
     1801  printf ("y.level()= %d\n", y.level());
     1802  printf ("x.level()= %d\n", x.level());
     1803  printf ("z.level()= %d\n", z.level());
     1804
    17481805  result= distributeContent (result, differentSecondVarLCs, lSecondVarLCs);
    17491806
     1807        for (CFListIterator iter= result; iter.hasItem(); iter++)
     1808          out_cf ("result bis kurz vor schluß= ", iter.getItem(), "\n");
     1809
    17501810  if (!result.getFirst().inCoeffDomain())
    17511811  {
    1752     CFListIterator i= result;
     1812    if (foundDifferent)
     1813    {
     1814      for (CFListIterator i= result; i.hasItem(); i++)
     1815        i.getItem()= swapvar (i.getItem(), Variable (2), y);
     1816      CFList l= differentSecondVarLCs [j]; //nasty
     1817      for (CFListIterator i= l; i.hasItem(); i++)
     1818        i.getItem()= swapvar (i.getItem(), y, z);
     1819      differentSecondVarLCs [j]= l;
     1820    }
     1821    printf ("not the whole leading coeff\n");
     1822    out_cf ("result.getFirst()= ", result.getFirst(), "\n");
     1823    out_cf ("y= ", y, "\n");
     1824    out_cf ("LCF= ", LCF, "\n");
     1825    for (int i= 0; i < lSecondVarLCs; i++)
     1826    {
     1827      printf ("differentSecondVarLCs ");
     1828      for (CFListIterator pp= differentSecondVarLCs[i]; pp.hasItem(); pp++)
     1829        out_cf ("", pp.getItem(), " ");
     1830      printf ("\n");
     1831    }
     1832    CFListIterator i; //= result;
    17531833    CanonicalForm tmp;
    1754     if (foundDifferent)
     1834    /*if (foundDifferent)
    17551835      i.getItem()= swapvar (i.getItem(), Variable (2), y);
    17561836
     
    17601840    for (; i.hasItem(); i++)
    17611841    {
     1842      out_cf ("lc= ", i.getItem(), "\n");
    17621843      if (foundDifferent)
    1763         i.getItem()= swapvar (i.getItem(), Variable (2), y)*tmp;
     1844        i.getItem()= swapvar (i.getItem(), Variable (2), y); //*tmp;
     1845    }*/
     1846    for (i=evaluation; i.hasItem(); i++)
     1847      out_cf ("eval= ", i.getItem(), "\n");
     1848    for (int jj= 0; jj < evalPoint.size(); jj++)
     1849      out_cf ("evalPoint= ", evalPoint[jj], "\n");
     1850
     1851    F= result.getFirst();
     1852    int level= 0;
     1853    if (foundDifferent)
     1854      level= y.level() - 2;
     1855    printf ("y.level()= %d\n", y.level());
     1856    printf ("lSecondVarLCs= %d\n", lSecondVarLCs);
     1857backonmygrind:
     1858    if (lSecondVarLCs - level > 0)
     1859    {
     1860      CFList evaluation2= evaluation;
     1861      int j= lSecondVarLCs+2;
     1862      CanonicalForm swap;
     1863      for (i= evaluation2; i.hasItem(); i++, j--)
     1864      {
     1865        if (j==y.level())
     1866        {
     1867          swap= i.getItem();
     1868          i.getItem()= evaluation2.getLast();
     1869          evaluation2.removeLast();
     1870          evaluation2.append (swap);
     1871        }
     1872      }
     1873
     1874      CFList newLCs= differentSecondVarLCs[level];
     1875      if (newLCs.isEmpty())
     1876      {
     1877        level=level+1;
     1878        goto backonmygrind;
     1879      }
     1880      i= newLCs; //kann leer sein!?
     1881      CFListIterator iter= result;
     1882      iter++;
     1883      for (;iter.hasItem(); iter++, i++)
     1884      {
     1885        swap= iter.getItem();
     1886        if (degree (swap, level+3) > 0)
     1887        {
     1888          int count= evaluation.length()+1;
     1889          for (CFListIterator iter2= evaluation2; iter2.hasItem(); iter2++, count--)
     1890          {
     1891            if (count != level+3)
     1892              swap= swap (iter2.getItem(), count);
     1893          }
     1894          i.getItem() /= swap;
     1895        }
     1896      }
     1897      CFList * differentSecondVarLCs2= new CFList [lSecondVarLCs - level - 1];
     1898      for (int j= level+1; j < lSecondVarLCs; j++)
     1899      {
     1900        if (degree (F, j+3) > 0)
     1901        {
     1902          differentSecondVarLCs2[j - level - 1]= differentSecondVarLCs[j];
     1903          i= differentSecondVarLCs2[j-level - 1];
     1904          iter=result;
     1905          iter++;
     1906          for (;iter.hasItem(); iter++, i++)
     1907          {
     1908            swap= iter.getItem();
     1909            if (degree (swap, j+3) > 0)
     1910            {
     1911              int count= evaluation.length()+1;
     1912              for (CFListIterator iter2= evaluation2; iter2.hasItem(); iter2++, count--)
     1913              {
     1914                if (count != j+3)
     1915                  swap= swap (iter2.getItem(), count);
     1916              }
     1917              i.getItem() /= swap;
     1918            }
     1919          }
     1920        }
     1921      }
     1922
     1923      for (int j= 0; j < level+1; j++)
     1924        evaluation2.removeLast();
     1925      Variable dummyvar= Variable (1);
     1926      for (i= evaluation2; i.hasItem(); i++)
     1927        out_cf ("evaluation2= ", i.getItem(), "\n");
     1928      for (i= newLCs; i.hasItem(); i++)
     1929        out_cf ("newLCs= ", i.getItem(), "\n");
     1930
     1931      //// test
     1932      CanonicalForm newLCF= result.getFirst();
     1933      newLCF=swapvar (newLCF, Variable (2), Variable (level+3));
     1934      for (i=newLCs; i.hasItem(); i++)
     1935        i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3));
     1936      for (int j= 0; j < lSecondVarLCs-level-1;j++)
     1937      {
     1938        for (i= differentSecondVarLCs2[j]; i.hasItem(); i++)
     1939          i.getItem()= swapvar (i.getItem(), Variable (2+j+1), Variable (level+3+j+1));
     1940        newLCF= swapvar (newLCF, Variable (2+j+1), Variable (level+3+j+1));
     1941      }
     1942      ////
     1943      for (int j= 0; j < lSecondVarLCs-level-1; j++)
     1944      {
     1945        printf ("differentSecondVarLCs2\n");
     1946        for (i= differentSecondVarLCs2[j]; i.hasItem(); i++)
     1947          out_cf ("", i.getItem(), " ");
     1948        printf ("\n");
     1949      }
     1950      for (i= newLCs; i.hasItem(); i++)
     1951        out_cf ("newLCs= ", i.getItem(), "\n");
     1952      out_cf ("newLCF= ", newLCF, "\n");
     1953      printf ("before recursion\n");
     1954      CFList recursiveResult= precomputeLeadingCoeff(newLCF, newLCs, alpha, evaluation2, differentSecondVarLCs2, lSecondVarLCs - level - 1, dummyvar);
     1955
     1956      if (dummyvar.level() != 1)
     1957      {
     1958        for (i= recursiveResult; i.hasItem(); i++)
     1959          i.getItem()= swapvar (i.getItem(), Variable (2), dummyvar);
     1960      }
     1961      for (i= recursiveResult; i.hasItem(); i++)
     1962      {
     1963        for (int j= lSecondVarLCs-level-1; j > 0; j--)
     1964          i.getItem()=swapvar (i.getItem(), Variable (2+j), Variable (level+3+j));
     1965        i.getItem()= swapvar (i.getItem(), Variable (2), Variable (level+3));
     1966      }
     1967
     1968      out_cf ("recursiveResult.getFirst()= ", recursiveResult.getFirst(), "\n");
     1969      if (recursiveResult.getFirst() == result.getFirst())
     1970      {
     1971        /*i= result;
     1972        i++;
     1973        for (; i.hasItem(); i++)
     1974          i.getItem() *= tmp;*/
     1975        delete [] bufSqrfFactors;
     1976        delete [] differentSecondVarLCs2;
     1977        return result;
     1978      }
    17641979      else
    1765         i.getItem() *= tmp;
     1980      {
     1981        CFListIterator iter=recursiveResult;
     1982        i= result;
     1983        i.getItem()= iter.getItem();
     1984        i++;
     1985        iter++;
     1986        for (; i.hasItem(); i++, iter++)
     1987        {
     1988          i.getItem() *= iter.getItem();
     1989        }
     1990        for (CFListIterator iter= result; iter.hasItem(); iter++)
     1991          out_cf ("result am Ende= ", iter.getItem(), "\n");
     1992      }
    17661993    }
    17671994  }
     
    22562483  CanonicalForm lcmCont= lcmContent (A, contentAi);
    22572484  A /= lcmCont;
     2485  out_cf ("lcmCont= ", lcmCont, "\n");
     2486  for (int i= 1; i <= A.level(); i++)
     2487    out_cf ("LC= ", LC (A,i), "\n");
    22582488  TIMING_END_AND_PRINT (fac_fq_content, "time to extract content over Fq: ");
    22592489
     
    26272857    A *= tmp;
    26282858    tmp= leadingCoeffs.getFirst();
     2859    iter= leadingCoeffs;
     2860    iter++;
     2861    for (;iter.hasItem(); iter++)
     2862      iter.getItem() *= tmp;
    26292863    iter= evaluation;
    26302864    for (int i= A.level(); i > 2; i--, iter++)
     
    26412875
    26422876  CanonicalForm LCmultiplier= leadingCoeffs.getFirst();
     2877  out_cf ("LCmultiplier= ", LCmultiplier, "\n");
    26432878  bool LCmultiplierIsConst= LCmultiplier.inCoeffDomain();
    26442879  leadingCoeffs.removeFirst();
     
    28993134            Variable xx;
    29003135            CFList vars1;
    2901             CFFList sqrfMultiplier= sqrFree (LCmultiplier);
     3136            CFFList sqrfMultiplier= factorize (LCmultiplier); //sqrFree (LCmultiplier);
    29023137            if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    29033138              sqrfMultiplier.removeFirst();
     
    30693304    Variable xx;
    30703305    CFList vars1;
    3071     CFFList sqrfMultiplier= sqrFree (LCmultiplier);
     3306    CFFList sqrfMultiplier= factorize (LCmultiplier); //sqrFree (LCmultiplier);
    30723307    if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    30733308      sqrfMultiplier.removeFirst();
     
    32153450tryAgainWithoutHeu:
    32163451  TIMING_START (fac_fq_shift_to_zero);
     3452  out_cf ("LC (A,1)= ", LC (A,1), "\n");
     3453  out_cf ("LC (oldA,1)= ", LC (oldA,1), "\n");
    32173454  A= shift2Zero (A, Aeval, evaluation);
    32183455
     
    32693506  if (noOneToOne)
    32703507  {
    3271 
     3508    printf ("noOneToOne\n");
    32723509    if (!LCmultiplierIsConst && LCheuristic)
    32733510    {
Note: See TracChangeset for help on using the changeset viewer.