跳转到主要内容

FLINT和Arb的绑定

项目描述

Python-FLINT

Python扩展模块,用于封装FLINT(快速数论库)和Arb(任意精度球体算术)。功能

  • 整数、有理数、整数模n
  • 实数和复数,具有严格的错误跟踪
  • 所有上述类型上的多项式、幂级数和矩阵
  • 许多数学函数

文档: http://fredrikj.net/python-flint/

仓库: https://github.com/flintlib/python-flint/

作者: Fredrik Johansson fredrik.johansson@gmail.com

安装

目前python-flint支持CPython版本3.9-3.12。对于Windows(x86-64)或OSX(x86-64或arm64)或Linux(x86-64 manylinux_2_17),在PyPI上提供了python-flint的CPython二进制wheel。对于这些平台,可以使用pip简单安装python-flint

pip install python-flint

另外,也可以使用conda安装python-flint

conda install -c conda-forge python-flint

还可能使用某些PyPy版本使用python-flint。PyPI上不提供此版本的二进制wheel,但可以使用conda安装。

从源码构建

对于其他平台或架构,安装需要从源码构建。首先安装FLINT 3。从python-flint 0.5.0版本开始,不再支持Flint的旧版本,如2.9。请注意,由于Flint 3将Arb合并到Flint中,因此不再需要单独构建Arb。

有关构建FLINT的说明,请参阅此处

Python-FLINT的最新版本可以从源代码构建并安装,使用以下方法:

pip install --no-binary python-flint python-flint

Python-FLINT还可以按照以下方式从git checkout或源存档安装:

pip install .

一个在Ubuntu上测试过的构建和安装FLINT和python-flint的脚本可以在以下git仓库中找到

有关构建和安装python-flint的更多信息,请参阅文档

示例

导入Python-FLINT

>>> from flint import *

数论函数

>>> fmpz(1000).partitions_p()
24061467864032622473692149727991
>>> fmpq.bernoulli(64)
-106783830147866529886385444979142647942017/510

多项式算术

>>> a = fmpz_poly([1,2,3]); b = fmpz_poly([2,3,4]); a.gcd(a * b)
3*x^2 + 2*x + 1
>>> a = fmpz_poly(list(range(10001))); b = fmpz_poly(list(range(10000))); a.gcd(a * b).degree()
10000
>>> x = fmpz_poly([0,1]); ((1-x**2)*(1+x**3)**3*(1+x+2*x)).factor()
(-1, [(3*x + 1, 1), (x + (-1), 1), (x^2 + (-1)*x + 1, 3), (x + 1, 4)])

矩阵算术

>>> fmpz_mat([[1,1],[1,0]]) ** 10
[89, 55]
[55, 34]
>>> fmpq_mat.hilbert(10,10).det()
1/46206893947914691316295628839036278726983680000000000

数值评估

>>> showgood(lambda: (arb.pi() * arb(163).sqrt()).exp() - 640320**3 - 744, dps=25)
-7.499274028018143111206461e-13
>>> showgood(lambda: (arb.pi() * 10**100 + arb(1)/1000).sin(), dps=25)
0.0009999998333333416666664683

数值积分

>>> ctx.dps = 30
>>> acb.integral(lambda x, _: (-x**2).exp(), -100, 100) ** 2
[3.141592653589793238462643383 +/- 3.11e-28]

待办事项

  • 编写更多测试并添加缺少的docstrings
  • 包装缺失的flint类型:有限域、p-adic数、有理函数
  • 向量或数组类型(可能)
  • 许多便利方法
  • 编写针对特定FLINT类型缺失的函数的泛型实现
  • 适当处理各种地方的特殊值(抛出Python异常而不是终止等。)
  • 各种自动转换
  • 与外部类型(numpy、sage、sympy、mpmath、gmpy)之间的转换
  • 改进打印和字符串输入/输出
  • IPython钩子(TeX美式打印等。)

变更日志

0.6.0

  • gh-112gh-111gh-110gh-108:添加pyproject.toml和构建依赖项。这意味着python-flint可以不带--no-build-isolation从源代码构建。
  • gh-109:对于非域域使用精确除法。现在fmpz(6)/fmpz(3)返回精确结果fmpz(2)或在无法得到精确结果时引发错误。对于fmpz_poly/fmpzfmpz_mat/fmpz以及使用fmpz_polyfmpq_polynmod_polyfmpz_mod_poly进行多项式除法,也有类似的变化。
  • gh-106:添加fmpz_mod_mat,用于整数模n的矩阵,其中n大于字长。
  • gh-104:将Flint从3.0.0提升到3.0.1

0.5.0

重要的兼容性更改

  • gh-80gh-94gh-98:从Flint 2.9切换到Flint 3。
  • gh-100:通过使用setuptools而不是numpy.distutils来支持Python 3.12。

新功能

  • gh-87:添加了用于fmpz_mod上多项式的fmpz_mod_poly类型。
  • gh-85:向fmpz_mod添加了离散对数。
  • gh-83:引入了用于多精度整数模的fmpz_mod类型。

错误修复

  • gh-93:修复了pow(int, int, fmpz)的错误,该错误以前给出了错误的结果。
  • gh-78gh-79:对nmod类型进行了小的修复。

0.4.4

  • gh-75gh-77:完成了将python-flint重构为子模块的大部分工作
  • gh-72:不支持arb_poly的roots方法。使用complex_roots方法或acb_roots(p).roots()来获取旧行为,即返回复数根。现在,在fmpz_polyfmpq_poly上,roots方法分别返回整数根和有理根。要访问这些类型的复数根,请使用complex_roots方法。对于acb_poly,roots和complex_roots的行为相同
  • gh-71:包括sdist中的文件并修复问题gh-70
  • gh-67:继续重构工作,将子模块引入到 python-flint

0.4.3

  • gh-63:不再支持 arb_polynmod_polyroots 方法。使用 acb_roots(p).roots() 获取旧的行为,即返回作为 acb 的根。注意,fmpz_polyfmpq_polyroots 方法目前返回多项式的复数根。
  • gh-61:开始重构工作,将子模块引入到 python-flint

0.4.2

  • gh-57:添加许多 manylinux 轮子

0.4.1

  • gh-47:删除 Linux 轮子,更新从源代码构建的说明。

0.4.0

  • gh-45:添加 Windows、OSX 和 manylinux 轮子,但 Linux 轮子损坏。

许可证

Python-FLINT 采用 MIT 许可证。FLINT 和 Arb 采用 LGPL v2.1+。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

python-flint-0.6.0.tar.gz (3.1 MB 查看散列值)

上传时间 源代码

构建分发

python_flint-0.6.0-cp312-cp312-win_amd64.whl (14.0 MB 查看散列值)

上传时间 CPython 3.12 Windows x86-64

python_flint-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.7 MB 查看散列值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

python_flint-0.6.0-cp312-cp312-macosx_11_0_arm64.whl (9.8 MB 查看散列值)

上传时间 CPython 3.12 macOS 11.0+ ARM64

python_flint-0.6.0-cp312-cp312-macosx_10_9_x86_64.whl (10.8 MB 查看散列值)

上传于 CPython 3.12 macOS 10.9+ x86-64

python_flint-0.6.0-cp311-cp311-win_amd64.whl (16.5 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

python_flint-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.8 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

python_flint-0.6.0-cp311-cp311-macosx_11_0_arm64.whl (9.8 MB 查看哈希值)

上传于 CPython 3.11 macOS 11.0+ ARM64

python_flint-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl (10.8 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

python_flint-0.6.0-cp310-cp310-win_amd64.whl (16.5 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

python_flint-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.1 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

python_flint-0.6.0-cp310-cp310-macosx_11_0_arm64.whl (9.8 MB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

python_flint-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl (10.8 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

python_flint-0.6.0-cp39-cp39-win_amd64.whl (16.5 MB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

python_flint-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.2 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

python_flint-0.6.0-cp39-cp39-macosx_11_0_arm64.whl (9.8 MB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

python_flint-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl (10.8 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

由以下提供支持