Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

The correct way is to define the polynomial ring in which your polynomial lives, and then use the method dict(). For instance:

sage: R.<x0,x1,x2,x3,x4> = QQ[] # polynomials in x0, ..., x4 over the field of rational numbers
sage: p = x0*x2*x3*x4 + x1*x2*x3*x4 - x0*x2*x3 - x1*x2*x3 - x0*x3*x4 - x1*x3*x4 + x2*x3*x4 + x0*x3 + x1*x3 - x2*x3 - x3*x4 + x3
sage: p.dict()
{(0, 0, 0, 1, 0): 1,
 (0, 0, 0, 1, 1): -1,
 (0, 0, 1, 1, 0): -1,
 (0, 0, 1, 1, 1): 1,
 (0, 1, 0, 1, 0): 1,
 (0, 1, 0, 1, 1): -1,
 (0, 1, 1, 1, 0): -1,
 (0, 1, 1, 1, 1): 1,
 (1, 0, 0, 1, 0): 1,
 (1, 0, 0, 1, 1): -1,
 (1, 0, 1, 1, 0): -1,
 (1, 0, 1, 1, 1): 1}

Now you can parse the ductionary to replace (1,0,0,1,0) by (0,3) for instance.

sage: dict1 = p.dict()
sage: dict2 = { tuple(i for i in range(5) if k[i] == 1): dict1[k] for k in dict1 }
sage: dict2
{(0, 2, 3): -1,
 (0, 2, 3, 4): 1,
 (0, 3): 1,
 (0, 3, 4): -1,
 (1, 2, 3): -1,
 (1, 2, 3, 4): 1,
 (1, 3): 1,
 (1, 3, 4): -1,
 (2, 3): -1,
 (2, 3, 4): 1,
 (3,): 1,
 (3, 4): -1}