| 134 | } |
| 135 | |
| 136 | int scDimIntRing(ideal vid, ideal Q) |
| 137 | { |
| 138 | if (rField_is_Ring(currRing)) |
| 139 | { |
| 140 | int i = idPosConstant(vid); |
| 141 | if ((i != -1) && (n_IsUnit(pGetCoeff(vid->m[i]),currRing->cf))) |
| 142 | { /* ideal v contains unit; dim = -1 */ |
| 143 | return(-1); |
| 144 | } |
| 145 | ideal vv = id_Head(vid,currRing); |
| 146 | idSkipZeroes(vv); |
| 147 | i = idPosConstant(vid); |
| 148 | int d; |
| 149 | if(i == -1) |
| 150 | { |
| 151 | d = scDimInt(vv, Q); |
| 152 | if(rField_is_Z(currRing)) |
| 153 | d++; |
| 154 | } |
| 155 | else |
| 156 | { |
| 157 | if(n_IsUnit(pGetCoeff(vv->m[i]),currRing->cf)) |
| 158 | d = -1; |
| 159 | else |
| 160 | d = scDimInt(vv, Q); |
| 161 | } |
| 162 | //Anne's Idea for std(4,2x) = 0 bug |
| 163 | int dcurr = d; |
| 164 | for(unsigned ii=0;ii<(unsigned)IDELEMS(vv);ii++) |
| 165 | { |
| 166 | if(vv->m[ii] != NULL && !n_IsUnit(pGetCoeff(vv->m[ii]),currRing->cf)) |
| 167 | { |
| 168 | ideal vc = idCopy(vv); |
| 169 | poly c = pInit(); |
| 170 | pSetCoeff0(c,nCopy(pGetCoeff(vv->m[ii]))); |
| 171 | idInsertPoly(vc,c); |
| 172 | idSkipZeroes(vc); |
| 173 | for(unsigned jj = 0;jj<(unsigned)IDELEMS(vc)-1;jj++) |
| 174 | { |
| 175 | if((vc->m[jj]!=NULL) |
| 176 | && (n_DivBy(pGetCoeff(vc->m[jj]),pGetCoeff(c),currRing->cf))) |
| 177 | { |
| 178 | pDelete(&vc->m[jj]); |
| 179 | } |
| 180 | } |
| 181 | idSkipZeroes(vc); |
| 182 | i = idPosConstant(vc); |
| 183 | if (i != -1) pDelete(&vc->m[i]); |
| 184 | dcurr = scDimInt(vc, Q); |
| 185 | // the following assumes the ground rings to be either zero- or one-dimensional |
| 186 | if((i==-1) && rField_is_Z(currRing)) |
| 187 | { |
| 188 | // should also be activated for other euclidean domains as groundfield |
| 189 | dcurr++; |
| 190 | } |
| 191 | idDelete(&vc); |
| 192 | } |
| 193 | if(dcurr > d) |
no test coverage detected