2013-10-02 6 views
1

sage 함수를 작성하려고합니다.sage BooleanPolynomialRing의 변수 허용

아래에서 코드 블록 B는 x0, x1, x2, x3과 같은 변수를 사용합니다. 코드 블록 B를 코드 블록 A로 일반화하려는 Im 코드 블록 A의 res [1]은 4 개의 변수를 포함하는 목록입니다. 그러나 실행 중 다음 오류가 발생합니다.

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

코드 블록에서 목록 요소를 허용 할 수있는 방법이 있습니까?

참고 degreeAndMonomialsCalculate()는 단지 입술 [0]과 입술에 고유 monomials (변수) [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 

답변

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 

은 유효 뭔가에 세이지 preparses 잘못된 파이썬 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? 

을 참조하십시오.