| 307 | // ---------------------------------------------------------------------------- |
| 308 | |
| 309 | void computeNF( ideal stdJ,poly hc,poly wc,spectrumPolyList *NF, const ring r ) |
| 310 | { |
| 311 | int carry,k; |
| 312 | multiCnt C( r->N,0 ); |
| 313 | poly Z = NULL; |
| 314 | |
| 315 | int well = isWell(r); |
| 316 | |
| 317 | do |
| 318 | { |
| 319 | poly m = p_One(r); |
| 320 | setExp( m,C.cnt,r ); |
| 321 | |
| 322 | carry = FALSE; |
| 323 | |
| 324 | k = isLeadMonomial( m,stdJ,r ); |
| 325 | |
| 326 | if( k < 0 ) |
| 327 | { |
| 328 | // --------------------------- |
| 329 | // m is not a lead monomial |
| 330 | // --------------------------- |
| 331 | |
| 332 | NF->insert_node( m,NULL,r ); |
| 333 | } |
| 334 | else if( isMultiple( Z,m,r ) ) |
| 335 | { |
| 336 | // ------------------------------------ |
| 337 | // m is trivially in the ideal stdJ |
| 338 | // ------------------------------------ |
| 339 | |
| 340 | p_Delete( &m,r ); |
| 341 | carry = TRUE; |
| 342 | } |
| 343 | else if( p_Cmp( m,hc,r ) < 0 || p_Cmp( m,wc,r ) < 0 ) |
| 344 | { |
| 345 | // ------------------- |
| 346 | // we do not need m |
| 347 | // ------------------- |
| 348 | |
| 349 | p_Delete( &m,r ); |
| 350 | carry = TRUE; |
| 351 | } |
| 352 | else |
| 353 | { |
| 354 | // -------------------------- |
| 355 | // compute lazy normal form |
| 356 | // -------------------------- |
| 357 | |
| 358 | poly multiplicant = p_MDivide( m,stdJ->m[k],r ); |
| 359 | pGetCoeff( multiplicant ) = n_Init(1,r->cf); |
| 360 | |
| 361 | poly nf = p_Mult_mm( p_Copy( stdJ->m[k],r ), multiplicant,r ); |
| 362 | |
| 363 | p_Delete( &multiplicant,r ); |
| 364 | |
| 365 | nf = normalFormHC( nf,hc,r ); |
| 366 |
no test coverage detected