Как распознать подозрительное применение синтаксиса библиотекой Sagemath в Python - PullRequest
4 голосов
/ 26 мая 2020

Я использую Sagemath / Cocal c (не стесняйтесь запускать его в своем браузере , регистрация не требуется, ничего не требуется). Насколько я понимаю, Sagemath - это просто библиотека поверх Python, а блокнот Sagemath неявно импортирует многие вещи из библиотеки Sagemath.

Что меня озадачивает, так это следующий синтаксис:

R.<x,y> = AA[]
I = R.ideal(x^2 * y - 18,x * y^3  - 24, x * y - 6)
I.variety()

(Это решает систему многочленов x^2 * y - 18=0, x * y^3 - 24=, x * y - 6=0 и возвращает x=2,y=3, красиво!)

Running type(AA), я вижу, что это

<class 'sage.rings.qqbar.AlgebraicRealField_with_category'>. 

Running type(R), я вижу, что это

<class 'sage.rings.polynomial.multi_polynomial_ring.MPolynomialRing_polydict_domain_with_category'>

Хорошо, б что значит в Python использовать скобки [] в классе, т.е. AA[]?

Что означает в синтаксисе Python выполнить R.<x,y>? Имейте в виду, я ранее не определял x и y как строки или что-то еще, поэтому этот синтаксис мне кажется очень странным.

1 Ответ

3 голосов
/ 18 июня 2020

SageMath построен на основе Python, но предварительно анализирует ввод, и это пример. В SageMath:

sage: preparse('R.<x,y> = AA[]')
"R = AA['x, y']; (x, y,) = R._first_ngens(2)"
  • Команда preparse сообщает вам, как Sage преобразует строку, прежде чем оценивать ее как стандартную Python.
  • Метод __getitem__ (который это то, что вызывается, когда вы выполняете AA[args]) для колец, таких как AA, создает кольцо полиномов с именованными генераторами.
  • Итак, R.<x,y> = AA[] создает кольцо полиномов, а также определяет R, x и y как кольцо и два его генератора.

Вы можете добиться того же, R.<x,y> = PolynomialRing(AA).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...