Assigning values error
I am trying to program a toy buchberger algorithm but got stuck.
import itertools
R.<x,y,z> = PolynomialRing(QQ, order="Degrevlex")
I=ideal(x^3-2*x*y+y^4,x^2*y-2*y^2+x);
def s_poly(f1,f2):
return lcm(f1.lm(),f2.lm())*(1/f1.lt()*f1-1/f2.lt()*f2)
def buchberger(G):
F = list(G.gens())
pairs=list(itertools.combinations(F, r=2))
while pairs:
f1,f2 = pairs.pop()
h = s_poly(f1, f2).reduce()
if h != 0:
pairs.append((f, h) for f in F)
F.append(h)
return F
B=buchberger(I)
It throws an error:
ValueError: too many values to unpack (expected 2)
At the line where I .pop the elements. Weird thing is that if I just run the commands:
pairs=[(x**2,x**3)]
f,g =pairs.pop()
I get f=x^2, g=x^3 as a result an no error message.
When pairs is empty it notifies me that I can't pop from an empty list.
You example is not complete, for which
G
do you get an error ? Also, how iss_poly
defined ?should be
pairs.extend((f, h) for f in F)
, no ?Added the s_poly and the which G I use.
Thanks, then i could answer your question.
Another error not yet pointed out: it should be
s_poly(f1, f2).reduce(F)
(ands_poly
should be defined by manually expanding the parentheses and using polynomial division//
, so that you don't land in the fraction field).