X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb-python/blobdiff_plain/8d771c4aaff5da72521c1af4746e482c95c8c8e4..dc0757504af5097a4bb323d64e429a99f86d1076:/mp.c diff --git a/mp.c b/mp.c index ceb9142..cb63a4f 100644 --- a/mp.c +++ b/mp.c @@ -1,7 +1,5 @@ /* -*-c-*- * - * $Id$ - * * Multiprecision arithmetic * * (c) 2004 Straylight/Edgeware @@ -850,7 +848,7 @@ static PyNumberMethods mp_pynumber = { static PyTypeObject mp_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.MP", /* @tp_name@ */ + "MP", /* @tp_name@ */ sizeof(mp_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -929,6 +927,25 @@ end: return (z); } +static PyObject *meth__MP_factorial(PyObject *me, PyObject *arg) +{ + unsigned long i; + mp *x; + if (!PyArg_ParseTuple(arg, "OO&:factorial", &me, convulong, &i)) + return (0); + x = mp_factorial(i); + return mp_pywrap(x); +} + +static PyObject *meth__MP_fibonacci(PyObject *me, PyObject *arg) +{ + long i; + mp *x; + if (!PyArg_ParseTuple(arg, "Ol:fibonacci", &me, &i)) return (0); + x = mp_fibonacci(i); + return mp_pywrap(x); +} + #define LOADOP(pre, py, name) \ static PyObject *meth__##py##_##name(PyObject *me, PyObject *arg) \ { \ @@ -1043,7 +1060,7 @@ static PyMethodDef mpmul_pymethods[] = { static PyTypeObject *mpmul_pytype, mpmul_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.MPMul", /* @tp_name@ */ + "MPMul", /* @tp_name@ */ sizeof(mpmul_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1310,7 +1327,7 @@ B.mexp([(X0, N0), (X1, N1), ...]) = X0^N0 X1^N1 mod B.m\n\ static PyTypeObject *mpmont_pytype, mpmont_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.MPMont", /* @tp_name@ */ + "MPMont", /* @tp_name@ */ sizeof(mpmont_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1449,7 +1466,7 @@ B.mexp([(X0, N0), (X1, N1), ...]) = X0^N0 X1^N1 mod B.m\n\ static PyTypeObject *mpbarrett_pytype, mpbarrett_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.MPBarrett", /* @tp_name@ */ + "MPBarrett", /* @tp_name@ */ sizeof(mpbarrett_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1577,7 +1594,7 @@ static PyMethodDef mpreduce_pymethods[] = { static PyTypeObject *mpreduce_pytype, mpreduce_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.MPReduce", /* @tp_name@ */ + "MPReduce", /* @tp_name@ */ sizeof(mpreduce_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -1746,7 +1763,7 @@ static PyMethodDef mpcrt_pymethods[] = { static PyTypeObject *mpcrt_pytype, mpcrt_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.MPCRT", /* @tp_name@ */ + "MPCRT", /* @tp_name@ */ sizeof(mpcrt_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -2028,7 +2045,7 @@ static PyNumberMethods gf_pynumber = { static PyTypeObject gf_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.GF", /* @tp_name@ */ + "GF", /* @tp_name@ */ sizeof(mp_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -2251,7 +2268,7 @@ static PyMethodDef gfreduce_pymethods[] = { static PyTypeObject *gfreduce_pytype, gfreduce_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.GFReduce", /* @tp_name@ */ + "GFReduce", /* @tp_name@ */ sizeof(gfreduce_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -2385,7 +2402,7 @@ static PyMethodDef gfn_pymethods[] = { static PyTypeObject gfn_pytype_skel = { PyObject_HEAD_INIT(0) 0, /* Header */ - "catacomb.GFN", /* @tp_name@ */ + "GFN", /* @tp_name@ */ sizeof(gfn_pyobj), /* @tp_basicsize@ */ 0, /* @tp_itemsize@ */ @@ -2448,6 +2465,10 @@ fromstring(STR, radix = 0) -> (X, REST)\n\ Parse STR as a binary polynomial, according to radix. If radix is zero,\n\ read a prefix from STR to decide radix: allow `0' for octal, `0x' for hex\n\ or `R_' for other radix R.") + METH (_MP_factorial, "\ +factorial(I) -> I!: compute factorial") + METH (_MP_fibonacci, "\ +fibonacci(I) -> F(I): compute Fibonacci number") METH (_MP_loadl, "\ loadl(STR) -> X: read little-endian bytes") METH (_MP_loadb, "\