{ "info": { "author": "Louis Abraham", "author_email": "louis.abraham@yahoo.fr", "bugtrack_url": null, "classifiers": [ "Topic :: Scientific/Engineering :: Mathematics" ], "description": "![travis](https://travis-ci.org/louisabraham/algnuth.svg?branch=master)\n\nAlgebraic Number Theory package\n===============================\n\n**Louis Abraham** and **Yassir Akram**\n\nInstallation\n------------\n\n pip install --upgrade algnuth\n\nor get the development version with:\n\n pip install --upgrade git+https://github.com/louisabraham/algnuth\n\nFeatures\n--------\n\n### Jacobi symbol\n\n``` pycon\n>>> from algnuth.jacobi import jacobi\n>>> jacobi(3763, 20353)\n-1\n```\n\n### Solovay-Strassen primality test\n\n``` pycon\n>>> from algnuth.jacobi import solovay_strassen\n>>> p = 12779877140635552275193974526927174906313992988726945426212616053383820179306398832891367199026816638983953765799977121840616466620283861630627224899026453\n>>> q = 12779877140635552275193974526927174906313992988726945426212616053383820179306398832891367199026816638983953765799977121840616466620283861630627224899027521\n>>> n = p * q\n>>> solovay_strassen(p)\nTrue\n>>> solovay_strassen(q)\nTrue\n>>> solovay_strassen(n)\nFalse\n```\n\n### Quadratic forms\n\n``` pycon\n>>> from algnuth.quadratic import *\n>>> display_classes(-44)\nx^2 + 11\u22c5y^2\n2\u22c5x^2 + 2\u22c5xy + 6\u22c5y^2\n3\u22c5x^2 - 2\u22c5xy + 4\u22c5y^2\n3\u22c5x^2 + 2\u22c5xy + 4\u22c5y^2\n>>> display_primitive_forms(-44)\nx^2 + 11\u22c5y^2\n3\u22c5x^2 - 2\u22c5xy + 4\u22c5y^2\n3\u22c5x^2 + 2\u22c5xy + 4\u22c5y^2\n>>> display_ambiguous_classes(-44)\nx^2 + 11\u22c5y^2\n2\u22c5x^2 + 2\u22c5xy + 6\u22c5y^2\n>>> display(*reduced(18, -10, 2))\n2\u22c5x^2 + 2\u22c5xy + 6\u22c5y^2\n```\n\n### Real polynomials\n\n``` pycon\n>>> from algnuth.polynom import Polynomial\n>>> P = Polynomial([0] * 10 + [-1, 0, 1])\n>>> print(P)\nX^12-X^10\n>>> P(2)\n3072\n>>> P.disc\n0\n>>> P.sturm() # Number of distinct real roots\n3\n>>> P.r1 # Number of real roots with multiplicity\n12\n```\n\n### Modular arithmetic\n\n``` pycon\n>>> P = Polynomial([1, 2, 3])\n>>> Pmodp = P % 41\n>>> print(Pmodp ** 3)\n27\u22c5X^6+13\u22c5X^5+22\u22c5X^4+3\u22c5X^3+21\u22c5X^2+6\u22c5X+1\n>>> print((P ** 3) % 41)\n27\u22c5X^6+13\u22c5X^5+22\u22c5X^4+3\u22c5X^3+21\u22c5X^2+6\u22c5X+1\n```\n\n### Polynomial division\n\n``` pycon\n>>> A = Polynomial([1, 2, 3, 4]) % 7\n>>> B = Polynomial([0, 1, 2]) % 7\n>>> print(A)\n4\u22c5X^3+3\u22c5X^2+2\u22c5X+1\n>>> print(B)\n2\u22c5X^2+X\n>>> print(A % B)\n5\u22c5X+1\n>>> print(A // B)\n2\u22c5X+4\n>>> print((A // B) * B + A % B)\n4\u22c5X^3+3\u22c5X^2+2\u22c5X+1\n```\n\n### Berlekamp's factorization algorithm\n\n``` pycon\n>>> P = Polynomial([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])\n>>> Pmodp = P % 41\n>>> print(Polynomial.ppfactors(Pmodp.factor()))\n12\u22c5(X+31)\u22c5X\u22c5(X^2+40\u22c5X+24)\u22c5(X^2+36\u22c5X+13)\u22c5(X^6+34\u22c5X^5+26\u22c5X^4+13\u22c5X^3+25\u22c5X^2+26\u22c5X+35)\n```\n\n### Unique Factorization of Ideals\n\n``` pycon\n>>> from algnuth.ideals import factorIdeals\n>>> factorIdeals(Polynomial([4, 0, 0, 1]))\nX^3+4 mod 2 = X^3\n(2) = (2, \u03b1)^3\nX^3+4 mod 3 = (X+1)^3\n(3) = (3, \u03b1+1)^3\nX^3+4 mod 5 = (X+4)\u22c5(X^2+X+1)\n(5) = (5, \u03b1+4)\u22c5(5, \u03b1^2+\u03b1+1)\n```\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/louisabraham/algnuth", "keywords": "algebra", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "algnuth", "package_url": "https://pypi.org/project/algnuth/", "platform": "", "project_url": "https://pypi.org/project/algnuth/", "project_urls": { "Homepage": "https://github.com/louisabraham/algnuth" }, "release_url": "https://pypi.org/project/algnuth/0.0.3/", "requires_dist": [ "numpy" ], "requires_python": "", "summary": "Algebraic Number Theory package", "version": "0.0.3" }, "last_serial": 4179968, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "89ad70eaf4e799747370873c2b7ca53f", "sha256": "3f6e8f539d45cd5998f21e639a7c1fa038c1a740a8a377673d5f3d5959f061fc" }, "downloads": -1, "filename": "algnuth-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "89ad70eaf4e799747370873c2b7ca53f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10639, "upload_time": "2018-02-06T23:27:11", "url": "https://files.pythonhosted.org/packages/7b/99/d3aab75afce09e521154c38084ad4429a6fe299a960aff67d5f37f2ef4a9/algnuth-0.0.2-py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "9fd6ae3cd3bded989c7d99a3f413258d", "sha256": "f7c2c5b1e70ea7337dc36a4400a4320acfc4e54213024da5b26d77173c61d086" }, "downloads": -1, "filename": "algnuth-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "9fd6ae3cd3bded989c7d99a3f413258d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8887, "upload_time": "2018-08-17T11:51:59", "url": "https://files.pythonhosted.org/packages/a7/e2/a7d427276dc976c40637c818e95c62adb9846dd2ccb7101b57f0ffb65450/algnuth-0.0.3-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9fd6ae3cd3bded989c7d99a3f413258d", "sha256": "f7c2c5b1e70ea7337dc36a4400a4320acfc4e54213024da5b26d77173c61d086" }, "downloads": -1, "filename": "algnuth-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "9fd6ae3cd3bded989c7d99a3f413258d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8887, "upload_time": "2018-08-17T11:51:59", "url": "https://files.pythonhosted.org/packages/a7/e2/a7d427276dc976c40637c818e95c62adb9846dd2ccb7101b57f0ffb65450/algnuth-0.0.3-py3-none-any.whl" } ] }