Changeset 8ca38a7 in git
- Timestamp:
- Mar 10, 2014, 5:32:27 PM (10 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 8f47949874e10c5d14cca8f14dd3bb2c3fe95b05
- Parents:
- ab8e53db4813d82dce3f72da11ab590ecce8a4e7
- git-author:
- Adi Popescu <adi_popescum@yahoo.de>2014-03-10 17:32:27+01:00
- git-committer:
- Adi Popescu <adi_popescum@yahoo.de>2014-05-05 11:08:44+02:00
- Files:
-
- 18 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ipassign.cc
rab8e53d r8ca38a7 36 36 #include <polys/nc/nc.h> 37 37 #include <polys/nc/sca.h> 38 #include <polys/prCopy.h> 38 39 39 40 #include <kernel/polys.h> … … 738 739 } 739 740 740 ring qr ;741 ring qr,origr; 741 742 //qr=(ring)res->Data(); 742 743 //if (qr!=NULL) omFreeBin((ADDRESS)qr, ip_sring_bin); 743 744 assume(res->Data()==NULL); 744 qr=rCopy(currRing); 745 // we have to fill it, but the copy also allocates space 746 idhdl h=(idhdl)res->data; // we have res->rtyp==IDHDL 747 IDRING(h)=qr; 748 745 origr = rCopy(currRing); 746 747 #ifdef HAVE_RINGS 749 748 ideal id=(ideal)a->CopyD(IDEAL_CMD); 750 751 if ((idElem(id)>1) || rIsSCA(currRing) || (currRing->qideal!=NULL)) 752 assumeStdFlag(a); 753 754 #ifdef HAVE_RINGS 755 if (rField_is_Ring(currRing)) 749 if((rField_is_Ring(currRing)) && (idPosConstant(id) != -1)) 756 750 { 757 751 // computing over Rings: handle constant generators of id properly 758 if (idPosConstant(id) != -1)759 {760 mpz_t gcd;761 752 if(nCoeff_is_Ring_ModN(currRing->cf) || 762 753 nCoeff_is_Ring_PtoM(currRing->cf) || … … 764 755 { 765 756 // already computing mod modNumber: use gcd(modNumber,constant entry of id) 757 mpz_t gcd; 766 758 mpz_t newConst; 767 759 mpz_init(newConst); … … 788 780 mpz_mul(baseTokNew, baseTokNew, currRing->cf->modBase); 789 781 } 790 currRing->cf->modExponent = kNew; 791 mpz_set(currRing->cf->modNumber, gcd); 792 mpz_sub_ui(baseTokNew, baseTokNew, 1); 793 mpz_t dummy; 794 mpz_init(dummy); 795 mpz_set_si(dummy, sizeof(unsigned long)); 796 printf("\nmod2mMask = %i \n", currRing->cf->mod2mMask); 797 #if 0 798 if(nCoeff_is_Ring_2toM(currRing->cf)) 799 { 800 // handle shortcut for 2^m appropriately 801 if(mpz_cmp(dummy, baseTokNew) > 0) 802 { 803 idPrint(id); 804 currRing->cf->mod2mMask = mpz_get_ui(baseTokNew); 805 idPrint(id); 806 } 807 } 808 #endif 809 mpz_clear(dummy); 782 qr = rCopyNewCoeff(currRing, currRing->cf->modBase, kNew, currRing->cf->type); 810 783 mpz_clear(baseTokNew); 811 784 } … … 813 786 { 814 787 // previously over modNumber, now over new modNumber 815 mpz_set(currRing->cf->modBase, gcd);816 mpz_set(currRing->cf->modNumber, gcd);817 }818 currRing->cf->ch = mpz_get_ui(gcd);788 qr = rCopyNewCoeff(currRing, gcd, 1, currRing->cf->type); 789 //printf("\nAfter rCopyNewCoeff: \n"); 790 //rWrite(qr); 791 } 819 792 mpz_clear(gcd); 793 //printf("\nAfter mpz_clear: \n"); 794 //rWrite(qr); 820 795 mpz_clear(newConst); 821 796 } … … 825 800 mpz_t newConst; 826 801 mpz_init(newConst); 827 mpz_set_ui(newConst, currRing->cf->cfInt(p_GetCoeff(id->m[idPosConstant(id)], currRing), currRing->cf)); 828 currRing->cf->modExponent = 1; 829 mpz_set(currRing->cf->modBase, newConst); 830 mpz_set(currRing->cf->modNumber, newConst); 831 currRing->cf->ch = mpz_get_ui(newConst); 802 mpz_set_ui(newConst, currRing->cf->cfInt(p_GetCoeff(id->m[idPosConstant(id)], currRing),currRing->cf)); 803 qr= rCopyNewCoeff( currRing, newConst, 1, n_Zn); 832 804 mpz_clear(newConst); 833 currRing->cf->type = n_Zn; 834 } 835 } 836 } 805 } 806 } 807 else 837 808 #endif 838 809 qr=rCopy(currRing); 810 811 // we have to fill it, but the copy also allocates space 812 idhdl h=(idhdl)res->data; // we have res->rtyp==IDHDL 813 IDRING(h)=qr; 814 ideal qid; 815 //rWrite(qr); 816 //printf("\norigr\n"); 817 //rWrite(origr); 818 // printf("\nqr\n"); 819 //rWrite(qr); 820 // printf("\ncurrRing\n"); 821 //rWrite(currRing); 822 #ifdef HAVE_RINGS 823 if((rField_is_Ring(currRing)) && (idPosConstant(id) != -1)) 824 { 825 //rChangeCurrRing(qr); 826 //rWrite(qr); 827 int *perm=NULL; 828 int i; 829 perm=(int *)omAlloc0((qr->N+1)*sizeof(int)); 830 for(i=qr->N;i>0;i--) 831 { 832 perm[i]=i; 833 } 834 nMapFunc nMap = NULL; 835 nMap = n_SetMap(origr->cf, qr->cf); 836 837 qid = idInit(IDELEMS(id),1); 838 for(i = 0; i<IDELEMS(id); i++) 839 { 840 qid->m[i] = p_PermPoly(id->m[i], perm, origr, qr, nMap, NULL, 0); 841 842 } 843 } 844 else 845 #endif 846 qid = idrCopyR(id,currRing,qr); 847 idSkipZeroes(qid); 848 //idPrint(qid); 849 if ((idElem(qid)>1) || rIsSCA(currRing) || (currRing->qideal!=NULL)) 850 assumeStdFlag(a); 851 839 852 if (currRing->qideal!=NULL) /* we are already in a qring! */ 840 853 { 841 ideal tmp=idSimpleAdd( id,currRing->qideal);854 ideal tmp=idSimpleAdd(qid,currRing->qideal); 842 855 // both ideals should be GB, so dSimpleAdd is sufficient 843 idDelete(& id);844 id=tmp;856 idDelete(&qid); 857 qid=tmp; 845 858 // delete the qr copy of quotient ideal!!! 846 859 idDelete(&qr->qideal); 847 860 } 848 if (idElem( id)==0)861 if (idElem(qid)==0) 849 862 { 850 863 qr->qideal = NULL; 851 id_Delete(& id,currRing);864 id_Delete(&qid,currRing); 852 865 IDTYP(h)=RING_CMD; 853 866 } 854 867 else 855 qr->qideal = id;868 qr->qideal = qid; 856 869 857 870 // qr is a copy of currRing with the new qideal! … … 870 883 } 871 884 #endif 885 //rWrite(qr); 872 886 rSetHdl((idhdl)res->data); 873 887 return FALSE; -
Tst/New.lst
rab8e53d r8ca38a7 44 44 New/bug_541_interred.tst 45 45 New/mstd_integer.tst 46 New/bug_std_qring_559.tst 47 New/qring_with_constant.tst 48 New/qring_2tom.tst 49 New/qring_ntom.tst 50 New/qring_ZmtoZmn.tst 51 New/qring_ZmtoZmn_errorCoprime.tst 52 New/qring_ZtoZm.tst -
libpolys/coeffs/rmodulo2m.cc
rab8e53d r8ca38a7 563 563 } 564 564 565 number nr2mMapProject(number from, const coeffs /*src*/, const coeffs dst) 566 { 567 NATNUMBER i = ((NATNUMBER)from) % (dst->mod2mMask + 1); 568 return (number)i; 569 } 570 565 571 number nr2mMapZp(number from, const coeffs /*src*/, const coeffs dst) 566 572 { … … 623 629 { /* i.e. map an integer mod 2^s into Z mod 2^t, where t > s */ 624 630 // to be done 631 return nr2mMapProject; 625 632 } 626 633 if (nCoeff_is_Ring_Z(src)) -
libpolys/polys/monomials/ring.cc
rab8e53d r8ca38a7 22 22 #include <coeffs/numbers.h> 23 23 #include <coeffs/coeffs.h> 24 #include <coeffs/rmodulon.h> 24 25 25 26 #include <polys/monomials/p_polys.h> … … 1600 1601 #endif 1601 1602 1603 return res; 1604 } 1605 1606 /* 1607 * create a copy of the ring r, which must be equivalent to currRing 1608 * used for qring definition, but allows change of coefficients to 1609 * new modulus, e.g. Z to Z/m or Z/n to Z/gcd(m,n) 1610 * otherwise identical to rCopy 1611 */ 1612 ring rCopyNewCoeff(ring r, mpz_t Base, int Exp, n_coeffType typ) 1613 { 1614 if (r == NULL) return NULL; 1615 ring res=rCopy0(r,FALSE,TRUE); 1616 int_number dummy; 1617 dummy = (int_number) omAlloc(sizeof(mpz_t)); 1618 mpz_init_set(dummy, Base); 1619 ZnmInfo info; 1620 info.base = dummy; 1621 info.exp = (unsigned long) Exp; 1622 nKillChar(res->cf); 1623 coeffs cf; 1624 if(typ == n_Zn) 1625 { 1626 cf = nInitChar(n_Zn,(void*) &info); 1627 } 1628 if(typ == n_Znm) 1629 { 1630 cf = nInitChar(n_Znm,(void*) &info); 1631 } 1632 if(typ == n_Z2m) 1633 { 1634 cf = nInitChar(n_Z2m,(void*)(long)Exp); 1635 } 1636 res->cf = cf; 1637 rComplete(res, 1); // res is purely commutative so far 1638 if (r->qideal!=NULL) res->qideal=idrCopyR_NoSort(r->qideal, r, res); 1639 1640 #ifdef HAVE_PLURAL 1641 if (rIsPluralRing(r)) 1642 if( nc_rCopy(res, r, true) ) {} 1643 #endif 1644 //omFreeSize(dummy, sizeof(mpz_t)); 1602 1645 return res; 1603 1646 } -
libpolys/polys/monomials/ring.h
rab8e53d r8ca38a7 346 346 void rWrite(ring r, BOOLEAN details = FALSE); 347 347 ring rCopy(ring r); 348 ring rCopyNewCoeff(ring r, mpz_t Base, int Exp, n_coeffType typ); 348 349 ring rCopy0(const ring r, BOOLEAN copy_qideal = TRUE, BOOLEAN copy_ordering = TRUE); 349 350 ring rCopy0AndAddA(ring r, int64vec *wv64, BOOLEAN copy_qideal = TRUE,
Note: See TracChangeset
for help on using the changeset viewer.