A Python Interface & Extension to Singular
The syngular
library is a Python 3 package for algebraic geometry computations. It provides an intuitive and object-oriented interface to Singular. Furthermore, it extends the numerical capabilities of Singular, providing a numerical solver for arbitrary systems of polynomial equations in tandem with pyadic, and its applicaibility to physics computations, where generic algorithms may be insufficient.
Python classes for 'Ideal', 'Ring' and 'QuotientRing'. Several related functions accessible as attributes or methods. Intuitive operations through magic methods, e.g. Ideal addition '+' and intersection '&'.
Multivariate solver - i.e. points on varieties over $\mathbb{F}_p$ , $\mathbb{Q}_p$ and $\mathbb{C}$ .
The function ideal.point_on_variety
allows to obtain numerical solutions to arbirary systems of polynomial equations in arbitrary polynomial (quotient) rings, over any of the three above mentioned fields. The system of equations may be underconstrained, i.e. the ideal may have any dimension. The
The function ideal.test_primality
allows to test whether an ideal is prime, primary or neither, without performing a full primary decomposition. The algorithm can run also with successively looser degree bounds. It returns True if the idea is prime, False if it is not, or raises an Inconclusive
exception if it cannot decide. If astuple
is True
, then it will return two booleans: (is_primary
, is_prime
). Inconclusive cases should now only happen with a Timeout on the computation.
numpy, sympy, Singular
pip install -e path/to/repo
pytest --cov syngular/ --cov-report html tests/ --verbose
Define an ideal over a ring in two variables
from syngular import Ideal, Ring
I = Ideal(Ring('0', ('x1', 'x2'), 'dp'), ['x1*x2'])
You can now inspect I
to see what methods and attributes are available.
Generate a
field = Field("padic", 2 ** 31 - 1, 8)
ring = Ring('0', ('x', 'y', 'z', ), 'dp')
I = Ideal(ring, ['x*y^2+y^3-z^2', 'x^3+y^3-z^2', ])
The variety associated to I
has 3 branches. In other words, the system of equations has 3 types of solutions.
(Q1, P1), (Q2, P2), (Q3, P3) = I.primary_decomposition
Generate a solution on the first branch
numerical_point = Q1.point_on_variety(field=field, directions=I.generators, valuations=(1, 1, ), )
is a dictionary of numerical values for each variable in the ring.
These are small with valuations (1, 1)
list(map(lambda string: Polynomial(string, field).subs(numerical_point), Q1.generators))
while these are O(1) with valuations (0, 0)
list(map(lambda string: Polynomial(string, field).subs(numerical_point), Q2.generators))
See arXiv:2207.10125 Fig. 1 for a graphical depiction.
If you found this library useful, please consider citing it and Singular
@inproceedings{DeLaurentis:2023qhd,
author = "De Laurentis, Giuseppe",
title = "{Lips: $p$-adic and singular phase space}",
booktitle = "{21th International Workshop on Advanced Computing and Analysis Techniques in Physics Research}: {AI meets Reality}",
eprint = "2305.14075",
archivePrefix = "arXiv",
primaryClass = "hep-th",
reportNumber = "PSI-PR-23-14",
month = "5",
year = "2023"
}
@misc {DGPS,
title = {{\sc Singular} {4-3-0} --- {A} computer algebra system for polynomial computations},
author = {Decker, Wolfram and Greuel, Gert-Martin and Pfister, Gerhard and Sch\"onemann, Hans},
year = {2022},
howpublished = {\url{http://www.singular.uni-kl.de}},
}