| 1100 | } |
| 1101 | |
| 1102 | lists scIndIndset(ideal S, BOOLEAN all, ideal Q) |
| 1103 | // S mjust eb an ideal, not a module |
| 1104 | { |
| 1105 | int i; |
| 1106 | indset save; |
| 1107 | lists res=(lists)omAlloc0Bin(slists_bin); |
| 1108 | |
| 1109 | hexist = hInit(S, Q, &hNexist); |
| 1110 | if (hNexist == 0) |
| 1111 | { |
| 1112 | intvec *iv=new intvec(rVar(currRing)); |
| 1113 | for(i=0; i<rVar(currRing); i++) (*iv)[i]=1; |
| 1114 | res->Init(1); |
| 1115 | res->m[0].rtyp=INTVEC_CMD; |
| 1116 | res->m[0].data=(intvec*)iv; |
| 1117 | return res; |
| 1118 | } |
| 1119 | save = ISet = (indset)omAlloc0Bin(indlist_bin); |
| 1120 | hMu = 0; |
| 1121 | hwork = (scfmon)omAlloc(hNexist * sizeof(scmon)); |
| 1122 | hvar = (varset)omAlloc((rVar(currRing) + 1) * sizeof(int)); |
| 1123 | hpure = (scmon)omAlloc0((1 + (rVar(currRing) * rVar(currRing))) * sizeof(long)); |
| 1124 | hrad = hexist; |
| 1125 | hNrad = hNexist; |
| 1126 | radmem = hCreate(rVar(currRing) - 1); |
| 1127 | hCo = rVar(currRing) + 1; |
| 1128 | hNvar = rVar(currRing); |
| 1129 | hRadical(hrad, &hNrad, hNvar); |
| 1130 | hSupp(hrad, hNrad, hvar, &hNvar); |
| 1131 | if (hNvar) |
| 1132 | { |
| 1133 | hCo = hNvar; |
| 1134 | hPure(hrad, 0, &hNrad, hvar, hNvar, hpure, &hNpure); |
| 1135 | hLexR(hrad, hNrad, hvar, hNvar); |
| 1136 | hDimSolve(hpure, hNpure, hrad, hNrad, hvar, hNvar); |
| 1137 | } |
| 1138 | if (hCo && (hCo < rVar(currRing))) |
| 1139 | { |
| 1140 | hIndMult(hpure, hNpure, hrad, hNrad, hvar, hNvar); |
| 1141 | } |
| 1142 | if (hMu!=0) |
| 1143 | { |
| 1144 | ISet = save; |
| 1145 | hMu2 = 0; |
| 1146 | if (all && (hCo+1 < rVar(currRing))) |
| 1147 | { |
| 1148 | JSet = (indset)omAlloc0Bin(indlist_bin); |
| 1149 | hIndAllMult(hpure, hNpure, hrad, hNrad, hvar, hNvar); |
| 1150 | i=hMu+hMu2; |
| 1151 | res->Init(i); |
| 1152 | if (hMu2 == 0) |
| 1153 | { |
| 1154 | omFreeBin((ADDRESS)JSet, indlist_bin); |
| 1155 | } |
| 1156 | } |
| 1157 | else |
| 1158 | { |
| 1159 | res->Init(hMu); |
no test coverage detected