在sage BooleanPolynomialRing中接受变量

时间:2013-10-02 13:05:02

标签: python sage

我正在尝试编写一个sage函数。

在下文中,代码块B使用诸如x0,x1,x2,x3之类的变量。我试图将代码块B概括为代码块A.代码块A中的res [1]是包含四个变量的列表。但是,在执行时,我收到以下错误:

**ValueError: variable names must be alphanumeric, but one is 'res[_sage_const_1 ]' which is not.** 

有什么办法可以让代码块接受列表元素吗?

注意:degreeAndMonomialsCalculate()只是一个函数,它返回res [0]中函数的次数及其在res [1]中的唯一单项式(变量)

代码块A

def annihilatorReturn(function):
    res=degreeAndMonomialsCalculate(function)
    A.<res[1]>=BooleanPolynomialRing(len(res[1]))
    X=BooleanFunction(function)
    B=X.annihilator(res[0])
    return B

代码块B

def annihilatorReturn():
    A.<x0,x1,x2,x3>=BooleanPolynomialRing(4)
    Y=x0*x1*x2+x2*x1+x2*x3+x3*x1
    X=BooleanFunction(Y)
    B=X.annihilator(3)
    return B

1 个答案:

答案 0 :(得分:0)

通常情况下,有一个“最小的工作示例”,所以我们不需要你的额外功能。

这里有两个问题。首先,即使你避免了错误,你也会得到这个错误。

def test():
    res = ['x1','x2']
    A.<res> = BooleanPolynomialRing(len(res))
    return A
....: 
sage: test()
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<snip>
IndexError: the number of names must equal the number of generators

这是因为Sage 将无效的Python A.<res> ...预先到其他有效的内容中。

sage: preparse("A.<res> = BooleanPolynomialRing(len(res))")
"A = BooleanPolynomialRing(len(res), names=('res',)); (res,) = A._first_ngens(1)"

这也会导致您的问题:

sage: res = ['x','y']
sage: A.<res> = BooleanPolynomialRing(len(res))
<snip>
ValueError: variable names must be alphanumeric, but one is 'res[Integer(1)]' which is not.

我并没有看到这种语法的简单方法。然而,

sage: res = [2,['x','y']]
sage: A = BooleanPolynomialRing(names=res[1])
sage: A
Boolean PolynomialRing in x, y

似乎应该做的工作。见

sage: BooleanPolynomialRing?

了解更多信息。