Changeset 73659a in git
- Timestamp:
- Mar 17, 2011, 11:52:44 AM (12 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- 9e7acfedffee3f0611f161393bb68d69c175bfff
- Parents:
- a513d10db695283b0b6578322ae02304f8cf82d2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/iparith.cc
ra513d10 r73659a 76 76 #include <kernel/timer.h> 77 77 78 // defaults for all commands: NO_PLURAL | NO_RING | ALLOW_ZERODIVISOR 79 78 80 #ifdef HAVE_PLURAL 79 81 #include <kernel/gring.h> … … 92 94 #ifdef HAVE_RINGS 93 95 #define RING_MASK 4 96 #define ZERODIVISOR_MASK 8 94 97 #else 95 98 #define RING_MASK 0 99 #define ZERODIVISOR_MASK 0 96 100 #endif 97 101 #define ALLOW_RING 4 98 102 #define NO_RING 0 103 #define NO_ZERODIVISOR 8 104 #define ALLOW_ZERODIVISOR 0 105 106 static BOOLEAN check_valid(const int p, const int op); 99 107 100 108 /*=============== types =====================*/ … … 201 209 202 210 #define ii_div_by_0 "div. by 0" 203 #define ii_not_for_plural "not implemented for non-commutative rings"204 #define ii_not_for_ring "not implemented for rings with rings as coeffients"205 211 206 212 int iiOp; /* the current operation*/ … … 1779 1785 /* drop degree zero generator from vv (if any) */ 1780 1786 if (i != -1) pDelete(&vv->m[i]); 1781 long d = (long)scDimInt(vv, ww); 1787 long d = (long)scDimInt(vv, ww); 1782 1788 if (rField_is_Ring_Z(origR) && (i == -1)) d++; 1783 1789 res->data = (char *)d; … … 3652 3658 /* drop degree zero generator from vv (if any) */ 3653 3659 if (i != -1) pDelete(&vv->m[i]); 3654 long d = (long)scDimInt(vv, currQuotient); 3660 long d = (long)scDimInt(vv, currQuotient); 3655 3661 if (rField_is_Ring_Z(origR) && (i == -1)) d++; 3656 3662 res->data = (char *)d; … … 4186 4192 tmp = syMinimize(tmp); // enrich itself! 4187 4193 4188 res->data=(char *)tmp; 4189 4194 res->data=(char *)tmp; 4195 4190 4196 if (weights!=NULL) 4191 4197 atSet(res, omStrDup("isHomog"),ivCopy(weights),INTVEC_CMD); … … 6904 6910 /* compute two factors of h(x,y) modulo x^(d+1) in K[[x]][y], 6905 6911 see a detailed documentation in /kernel/linearAlgebra.h 6906 6912 6907 6913 valid argument lists: 6908 6914 - (poly h, int d), … … 6918 6924 - list with the two factors f and g such that 6919 6925 h(x,y) = f(x,y)*g(x,y) mod x^(d+1) */ 6920 6926 6921 6927 poly h = NULL; 6922 6928 int d = 1; … … 6925 6931 int xIndex = 1; /* default index if none provided */ 6926 6932 int yIndex = 2; /* default index if none provided */ 6927 6933 6928 6934 leftv u = v; int factorsGiven = 0; 6929 6935 if ((u == NULL) || (u->Typ() != POLY_CMD)) … … 6975 6981 return TRUE; 6976 6982 } 6977 6983 6978 6984 /* checks for provided arguments */ 6979 6985 if (pIsConstant(h) || (factorsGiven && (pIsConstant(f0) || pIsConstant(g0)))) … … 6998 7004 return TRUE; 6999 7005 } 7000 7006 7001 7007 /* computation of f0 and g0 if missing */ 7002 7008 if (factorsGiven == 0) … … 7012 7018 7013 7019 idTest(i); 7014 7020 7015 7021 if ((v->rows() != 3) || ((*v)[0] =! 1) || (!nIsOne(pGetCoeff(i->m[0])))) 7016 7022 { … … 7026 7032 #endif 7027 7033 } 7028 7034 7029 7035 poly f; poly g; 7030 7036 henselFactors(xIndex, yIndex, h, f0, g0, d, f, g); … … 7259 7265 if (currRing!=NULL) 7260 7266 { 7261 #ifdef HAVE_PLURAL 7262 if (rIsPluralRing(currRing)) 7263 { 7264 if ((dArith2[i].valid_for & PLURAL_MASK)==0 /*NO_PLURAL*/) 7265 { 7266 WerrorS(ii_not_for_plural); 7267 break; 7268 } 7269 else if ((dArith2[i].valid_for & PLURAL_MASK)==2 /*, COMM_PLURAL */) 7270 { 7271 Warn("assume commutative subalgebra for cmd `%s`",Tok2Cmdname(i)); 7272 } 7273 /* else, ALLOW_PLURAL */ 7274 } 7275 #endif 7276 #ifdef HAVE_RINGS 7277 if (rField_is_Ring(currRing)) 7278 { 7279 if ((dArith2[i].valid_for & RING_MASK)==0 /*NO_RING*/) 7280 { 7281 WerrorS(ii_not_for_ring); 7282 break; 7283 } 7284 /* else ALLOW_RING */ 7285 } 7286 #endif 7267 if (check_valid(dArith2[i].valid_for,op)) break; 7287 7268 } 7288 7269 if (TEST_V_ALLWARN) … … 7318 7299 if (currRing!=NULL) 7319 7300 { 7320 #ifdef HAVE_PLURAL 7321 if (rIsPluralRing(currRing)) 7322 { 7323 if ((dArith2[i].valid_for & PLURAL_MASK)==0 /*NO_PLURAL*/) 7324 { 7325 WerrorS(ii_not_for_plural); 7326 break; 7327 } 7328 else if ((dArith2[i].valid_for &PLURAL_MASK)==2 /*, COMM_PLURAL */) 7329 { 7330 Warn("assume commutative subalgebra for cmd `%s`", 7331 Tok2Cmdname(i)); 7332 } 7333 /* else, ALLOW_PLURAL */ 7334 } 7335 #endif 7336 #ifdef HAVE_RINGS 7337 if (rField_is_Ring(currRing)) 7338 { 7339 if ((dArith2[i].valid_for & RING_MASK)==0 /*NO_RING*/) 7340 { 7341 WerrorS(ii_not_for_ring); 7342 break; 7343 } 7344 /* else ALLOW_RING */ 7345 } 7346 #endif 7301 if (check_valid(dArith2[i].valid_for,op)) break; 7347 7302 } 7348 7303 if (TEST_V_ALLWARN) … … 7477 7432 if (currRing!=NULL) 7478 7433 { 7479 #ifdef HAVE_PLURAL 7480 if ((currRing!=NULL) && (rIsPluralRing(currRing))) 7481 { 7482 if ((dArith1[i].valid_for &PLURAL_MASK)==0 /*NO_PLURAL*/) 7483 { 7484 WerrorS(ii_not_for_plural); 7485 break; 7486 } 7487 else if ((dArith1[i].valid_for &PLURAL_MASK)==2 /*, COMM_PLURAL */) 7488 { 7489 Warn("assume commutative subalgebra for cmd `%s`",Tok2Cmdname(i)); 7490 } 7491 /* else, ALLOW_PLURAL */ 7492 } 7493 #endif 7494 #ifdef HAVE_RINGS 7495 if (rField_is_Ring(currRing)) 7496 { 7497 if ((dArith1[i].valid_for & RING_MASK)==0 /*NO_RING*/) 7498 { 7499 WerrorS(ii_not_for_ring); 7500 break; 7501 } 7502 /* else ALLOW_RING */ 7503 } 7504 #endif 7434 if (check_valid(dArith1[i].valid_for,op)) break; 7505 7435 } 7506 7436 if (TEST_V_ALLWARN) … … 7542 7472 { 7543 7473 int r=res->rtyp=dArith1[i].res; 7544 #ifdef HAVE_PLURAL 7545 if ((currRing!=NULL) && (rIsPluralRing(currRing))) 7474 if (currRing!=NULL) 7546 7475 { 7547 if ((dArith1[i].valid_for &PLURAL_MASK)==0 /*NO_PLURAL*/) 7548 { 7549 WerrorS(ii_not_for_plural); 7550 break; 7551 } 7552 else if ((dArith1[i].valid_for &PLURAL_MASK)==2 /*, COMM_PLURAL */) 7553 { 7554 Warn("assume commutative subalgebra for cmd `%s`",Tok2Cmdname(i)); 7555 } 7556 /* else, ALLOW_PLURAL */ 7476 if (check_valid(dArith1[i].valid_for,op)) break; 7557 7477 } 7558 #endif7559 7478 if (r<0) 7560 7479 { … … 7685 7604 if (currRing!=NULL) 7686 7605 { 7687 #ifdef HAVE_PLURAL 7688 if (rIsPluralRing(currRing)) 7689 { 7690 if ((dArith3[i].valid_for &PLURAL_MASK)==0 /*NO_PLURAL*/) 7691 { 7692 WerrorS(ii_not_for_plural); 7693 break; 7694 } 7695 else if ((dArith3[i].valid_for &PLURAL_MASK)==2 /*, COMM_PLURAL */) 7696 { 7697 Warn("assume commutative subalgebra for cmd `%s`",Tok2Cmdname(i)); 7698 } 7699 /* else, ALLOW_PLURAL */ 7700 } 7701 #endif 7702 #ifdef HAVE_RINGS 7703 if (rField_is_Ring(currRing)) 7704 { 7705 if ((dArith3[i].valid_for & RING_MASK)==0 /*NO_RING*/) 7706 { 7707 WerrorS(ii_not_for_ring); 7708 break; 7709 } 7710 /* else ALLOW_RING */ 7711 } 7712 #endif 7606 if (check_valid(dArith3[i].valid_for,op)) break; 7713 7607 } 7714 7608 if (TEST_V_ALLWARN) … … 7745 7639 { 7746 7640 res->rtyp=dArith3[i].res; 7747 #ifdef HAVE_PLURAL 7748 if ((currRing!=NULL) 7749 && (rIsPluralRing(currRing))) 7641 if (currRing!=NULL) 7750 7642 { 7751 if ((dArith3[i].valid_for &PLURAL_MASK)==0 /*NO_PLURAL*/) 7752 { 7753 WerrorS(ii_not_for_plural); 7754 break; 7755 } 7756 else if ((dArith3[i].valid_for &PLURAL_MASK)==2 /*, COMM_PLURAL */) 7757 { 7758 Warn("assume commutative subalgebra for cmd `%s`",Tok2Cmdname(i)); 7759 } 7760 /* else, ALLOW_PLURAL */ 7643 if (check_valid(dArith3[i].valid_for,op)) break; 7761 7644 } 7762 #endif7763 7645 if (TEST_V_ALLWARN) 7764 7646 Print("call %s(%s,%s,%s)\n", … … 7942 7824 if (currRing!=NULL) 7943 7825 { 7944 #ifdef HAVE_PLURAL 7945 if (rIsPluralRing(currRing)) 7946 { 7947 if ((dArithM[i].valid_for &PLURAL_MASK)==0 /*NO_PLURAL*/) 7948 { 7949 WerrorS(ii_not_for_plural); 7950 break; 7951 } 7952 else if ((dArithM[i].valid_for &PLURAL_MASK)==2 /*, COMM_PLURAL */) 7953 { 7954 Warn("assume commutative subalgebra for cmd `%s`",Tok2Cmdname(i)); 7955 } 7956 /* else ALLOW_PLURAL */ 7957 } 7958 #endif 7959 #ifdef HAVE_RINGS 7960 if (rField_is_Ring(currRing)) 7961 { 7962 if ((dArithM[i].valid_for & RING_MASK)==0 /*NO_RING*/) 7963 { 7964 WerrorS(ii_not_for_ring); 7965 break; 7966 } 7967 /* else ALLOW_RING */ 7968 } 7969 #endif 7826 if (check_valid(dArithM[i].valid_for,op)) break; 7970 7827 } 7971 7828 if (TEST_V_ALLWARN) … … 8428 8285 return 0; 8429 8286 } 8287 8288 static BOOLEAN check_valid(const int p, const int op) 8289 { 8290 #ifdef HAVE_PLURAL 8291 if (rIsPluralRing(currRing)) 8292 { 8293 if ((p & PLURAL_MASK)==0 /*NO_PLURAL*/) 8294 { 8295 WerrorS("not implemented for non-commutative rings"); 8296 return TRUE; 8297 } 8298 else if ((p & PLURAL_MASK)==2 /*, COMM_PLURAL */) 8299 { 8300 Warn("assume commutative subalgebra for cmd `%s`",Tok2Cmdname(op)); 8301 return FALSE; 8302 } 8303 /* else, ALLOW_PLURAL */ 8304 } 8305 #endif 8306 #ifdef HAVE_RINGS 8307 if (rField_is_Ring(currRing)) 8308 { 8309 if ((p & RING_MASK)==0 /*NO_RING*/) 8310 { 8311 WerrorS("not implemented for rings with rings as coeffients"); 8312 return TRUE; 8313 } 8314 /* else ALLOW_RING */ 8315 else if (((p & ZERODIVISOR_MASK)==NO_ZERODIVISOR) 8316 &&(!rField_is_Domain(currRing))) 8317 { 8318 WerrorS("domain required as coeffients"); 8319 return TRUE; 8320 } 8321 /* else ALLOW_ZERODIVISOR */ 8322 } 8323 #endif 8324 return FALSE; 8325 }
Note: See TracChangeset
for help on using the changeset viewer.