python - 从 Python 调用 PARI/GP

标签 python linux pari-gp

我想调用PARI/GP从 Python 仅计算函数 nextprime(n) 我定义的不同 n。不幸的是我无法获得pari-python安装所以我想我会在 Python 中通过 os.system 使用命令行调用它。但是,我在手册页中看不到如何让 PARI/GP 在非交互模式下运行。有办法实现吗?

最佳答案

您可以像这样通过管道将输入输入到 gp 的标准输入中,使用 -q 标志来取消冗长:

senderle:~ $ echo "print(isprime(5))" | gp -q
1

但是,创建一个简单的 python 扩展并不难,它允许您将字符串传递给 pari 的内部解析器并返回结果(作为字符串)。这是我前段时间写的一个基本版本,这样我就可以调用 pari 的 APRT test 实现。来自 python 。您可以进一步扩展它以进行适当的转换等。

//pariparse.c

#include<Python.h>
#include<pari/pari.h>

static PyObject * pariparse_run(PyObject *self, PyObject *args) {
    pari_init(40000000, 2);
    const char *pari_code;
    char *outstr;

    if (!PyArg_ParseTuple(args, "s", &pari_code)) { return NULL; }
    outstr = GENtostr(gp_read_str(pari_code));
    pari_close();
    return Py_BuildValue("s", outstr);
}

static PyMethodDef PariparseMethods[] = {
    {"run", pariparse_run, METH_VARARGS, "Run a pari command."},
    {NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC initpariparse(void) {
    (void) Py_InitModule("pariparse", PariparseMethods);
}

和安装文件:

#setup.py

from distutils.core import setup, Extension

module1 = Extension('pariparse',
                    include_dirs = ['/usr/include', '/usr/local/include'],
                    libraries = ['pari'],
                    library_dirs = ['/usr/lib', '/usr/local/lib'],
                    sources = ['pariparse.c'])

setup (name = 'pariparse',
       version = '0.01a',
       description = 'A super tiny python-pari interface',
       ext_modules = [module1])

然后只需键入 python setup.py build 即可构建扩展。然后你可以这样调用它:

>>> pariparse.run('nextprime(5280)')
'5281'

我刚刚测试了它,它为我编译了最新版本的 pari,可通过自制软件(在 OS X 上)获得。 YMMV!

关于python - 从 Python 调用 PARI/GP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14943507/

相关文章:

Python - 通过json解析在Cloud Storage中创建Json文件

python - 无法从云存储更改时触发的云功能触发 Composer /气流 dag

python - 如何绘制多个图形并使用 [matplotlib] 中的导航按钮

linux - Expo xde 没有在 centOS 上启动?

python - 终止后获取进程信息

algorithm - 如何在 bnfinit() 中构造字段?

python - 如何在客户端模式下使用 pyspark 和 spark standalone 加载 --jars

linux - 在 Linux 上使用 GLFW3 构建程序

c - 识别索引 vector 上的循环;制作 list ,减去旋转