Полиномы SymPy над конечными полями

import sympy as S 
F = S.FiniteField(101)

Когда я звоню f = S.poly(y ** 2 - x ** 3 - x - 1,F), я получаю следующую ошибку:

Объект «FiniteField» не имеет атрибута «is_commutative»

Но конечные поля коммутативны по определению! Так что я не совсем уверен, что эта ошибка должна означать!

Кто-нибудь сталкивался с этим раньше? Как вы объявляете многочлены над конечным полем?


person Kevin Johnson    schedule 01.05.2015    source источник
comment
Из моих экспериментов вы можете сделать многочлены над конечными полями, например, sympy.poly(x**2 + y - 1, x, y, domain=sympy.FF(101)). Однако, похоже, это не работает с другими функциями sympy, такими как решение уравнений. Я открыл вопрос здесь: github.com/sympy/sympy/issues/9821   -  person JeremyKun    schedule 13.08.2015


Ответы (1)


is_commutative является атрибутом операторов в целом. . Он не реализован для доменов (в отличие от is_numeric и т. д.).

e.g.

>>> F = sympy.RealField() #returns the same error
>>> f = sympy.poly(y ** 2 - x ** 3 - x - 1, F)

AttributeError: 'RealField' object has no attribute 'is_commutative'

Следовательно, poly интерпретирует ваш позиционный аргумент не как домен. Чтобы получить предполагаемое поведение с polyfactor и т. д.), вы должны использовать ссылку domain (или аналогичный) kwarg, т.е.:

f = sympy.poly(y ** 2 - x ** 3 - x - 1, domain=F)
person iacob    schedule 06.04.2021