Skip to main content

An Object-Oriented Python Interface and Extension to Singular

Project description

A Python Interface & Extension to Singular

CI Lint CI Test Coverage Docs PyPI PyPI Downloads Binder DOI Python

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.

Interface

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 '&'.

Extension

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 $p$-adic and complex solutions can be requested as not exact, meaning the point may lie close to but not exactly on the associated variety. This is essential for numerical computations where otherwise division-by-zero erros may occur when using exact solutions. The limitation is that Singular must be able to compute an indepednent set for the semi-numerical ideals of low dimension.

Primality test (lighter than a primary decomposition).

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.

Requirements

numpy, sympy, Singular

Installation

pip install -e path/to/repo

Testing

pytest --cov syngular/ --cov-report html tests/ --verbose

Quick Start

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.

Solving arbitrary systems of polynomial equations

Generate a $p$-adic solution to a system of 2 polynomial equations in 3 variables, controlling the precision to which they are solved.

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.

Citation

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}},
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

syngular-0.6.0.tar.gz (52.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

syngular-0.6.0-py3-none-any.whl (47.6 kB view details)

Uploaded Python 3

File details

Details for the file syngular-0.6.0.tar.gz.

File metadata

  • Download URL: syngular-0.6.0.tar.gz
  • Upload date:
  • Size: 52.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.3

File hashes

Hashes for syngular-0.6.0.tar.gz
Algorithm Hash digest
SHA256 8bb4b5bbb3082a1046709533dc6091f924a204bdb48353ead42279407d260aba
MD5 20ce9504093f0e34faf6715bae86913e
BLAKE2b-256 381a06f3d96c700d179a8cc2881dc7dca84697f8abf7d71fb9c45d88982ca920

See more details on using hashes here.

File details

Details for the file syngular-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: syngular-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 47.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.3

File hashes

Hashes for syngular-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2a0497a8e6915fb81c21be2d81df6b94341a4db4dc7f3ffcb3c7adfaae48f24c
MD5 784d6c25051270e75b83b3eebc8c9657
BLAKE2b-256 f54bba529d33caf3b45b923c51aec98c71196b73a08f0c6a93cb79c8292b02e1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page