Changeset 83f9fe in git
- Timestamp:
- Jun 6, 2020, 6:52:26 PM (4 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 0d01545670bb6a3fa6190c1d2d50ba0984746eff
- Parents:
- 209d2cb3c5aadb53e72b37269b979e9c22e2fd48
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ipassign.cc
r209d2c r83f9fe 276 276 return r; 277 277 } 278 278 279 static BOOLEAN jjMINPOLY(leftv, leftv a) 279 280 { 280 return (jjSetMinpoly(currRing,(number)a->Data(),TRUE)==NULL); 281 } 281 if( !nCoeff_is_transExt(currRing->cf) && (currRing->idroot == NULL) && n_IsZero((number)a->Data(), currRing->cf) ) 282 { 283 #ifndef SING_NDEBUG 284 WarnS("Set minpoly over non-transcendental ground field to 0?!"); 285 Warn("in >>%s<<",my_yylinebuf); 286 #endif 287 return FALSE; 288 } 289 290 291 if ( !nCoeff_is_transExt(currRing->cf) ) 292 { 293 WarnS("Trying to set minpoly over non-transcendental ground field..."); 294 if(!nCoeff_is_algExt(currRing->cf) ) 295 { 296 WerrorS("cannot set minpoly for these coeffients"); 297 return TRUE; 298 } 299 } 300 if ((rVar(currRing->cf->extRing)!=1) 301 && !n_IsZero((number)a->Data(), currRing->cf) ) 302 { 303 WerrorS("only univarite minpoly allowed"); 304 return TRUE; 305 } 306 307 BOOLEAN redefine_from_algext=FALSE; 308 if ( currRing->idroot != NULL ) 309 { 310 redefine_from_algext=(currRing->cf->extRing->qideal!=NULL); 311 // return TRUE; 312 #ifndef SING_NDEBUG 313 idhdl p = currRing->idroot; 314 315 WarnS("no minpoly allowed if there are local objects belonging to the basering: "); 316 317 while(p != NULL) 318 { 319 PrintS(p->String(TRUE)); Print("(%s)\n",IDID(p)); 320 p = p->next; 321 } 322 #endif 323 } 324 325 // assume (currRing->idroot==NULL); 326 327 number p = (number)a->CopyD(NUMBER_CMD); 328 n_Normalize(p, currRing->cf); 329 330 if (n_IsZero(p, currRing->cf)) 331 { 332 n_Delete(&p, currRing->cf); 333 if( nCoeff_is_transExt(currRing->cf) ) 334 { 335 #ifndef SING_NDEBUG 336 WarnS("minpoly is already 0..."); 337 #endif 338 return FALSE; 339 } 340 WarnS("cannot set minpoly to 0 / alg. extension?"); 341 return TRUE; 342 } 343 344 // remove all object currently in the ring 345 while(currRing->idroot!=NULL) 346 { 347 #ifndef SING_NDEBUG 348 Warn("killing a local object due to minpoly change: %s", IDID(currRing->idroot)); 349 #endif 350 killhdl2(currRing->idroot,&(currRing->idroot),currRing); 351 } 352 353 AlgExtInfo A; 354 355 A.r = rCopy(currRing->cf->extRing); // Copy ground field! 356 // if minpoly was already set: 357 if( currRing->cf->extRing->qideal != NULL ) id_Delete(&(A.r->qideal),A.r); 358 ideal q = idInit(1,1); 359 if ((p==NULL) ||(NUM((fraction)p)==NULL)) 360 { 361 WerrorS("Could not construct the alg. extension: minpoly==0"); 362 // cleanup A: TODO 363 rDelete( A.r ); 364 return TRUE; 365 } 366 if (!redefine_from_algext && (DEN((fraction)(p)) != NULL)) // minpoly must be a fraction with poly numerator...!! 367 { 368 poly n=DEN((fraction)(p)); 369 if(!p_IsConstantPoly(n,currRing->cf->extRing)) 370 { 371 WarnS("denominator must be constant - ignoring it"); 372 } 373 p_Delete(&n,currRing->cf->extRing); 374 DEN((fraction)(p))=NULL; 375 } 376 377 if (redefine_from_algext) q->m[0]=(poly)p; 378 else q->m[0] = NUM((fraction)p); 379 A.r->qideal = q; 380 381 #if 0 382 PrintS("\nTrying to conver the currRing into an algebraic field: "); 383 PrintS("Ground poly. ring: \n"); 384 rWrite( A.r ); 385 PrintS("\nGiven MinPOLY: "); 386 p_Write( A.i->m[0], A.r ); 387 #endif 388 389 // :( 390 // NUM((fractionObject *)p) = NULL; // makes 0/ NULL fraction - which should not happen! 391 // n_Delete(&p, currRing->cf); // doesn't expect 0/ NULL :( 392 if (!redefine_from_algext) 393 { 394 EXTERN_VAR omBin fractionObjectBin; 395 NUM((fractionObject *)p) = NULL; // not necessary, but still... 396 omFreeBin((ADDRESS)p, fractionObjectBin); 397 } 398 399 coeffs new_cf = nInitChar(n_algExt, &A); 400 if (new_cf==NULL) 401 { 402 WerrorS("Could not construct the alg. extension: llegal minpoly?"); 403 // cleanup A: TODO 404 rDelete( A.r ); 405 return TRUE; 406 } 407 else 408 { 409 nKillChar(currRing->cf); currRing->cf=new_cf; 410 } 411 return FALSE; 412 } 413 282 414 283 415 static BOOLEAN jjNOETHER(leftv, leftv a)
Note: See TracChangeset
for help on using the changeset viewer.