Skip to content

Commit b1c8ead

Browse files
committed
pickle support:
1 parent 13d62b1 commit b1c8ead

File tree

2 files changed

+477
-1
lines changed

2 files changed

+477
-1
lines changed

quaddtype/numpy_quaddtype/src/dtype.c

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <Python.h>
2+
#include <structmember.h>
23
#include <sleef.h>
34
#include <sleefquad.h>
45
#include <ctype.h>
@@ -439,13 +440,45 @@ QuadPrecDType_str(QuadPrecDTypeObject *self)
439440
return PyUnicode_FromFormat("QuadPrecDType(backend='%s')", backend_str);
440441
}
441442

443+
444+
static PyObject *
445+
quaddtype__reduce__(QuadPrecDTypeObject *self, PyObject *NPY_UNUSED(args))
446+
{
447+
const char *backend_str = (self->backend == BACKEND_SLEEF) ? "sleef" : "longdouble";
448+
449+
/* Return (type(self), (backend_str,))
450+
* This will call type(self).__new__(type(self), backend_str) followed by __init__
451+
*/
452+
PyObject *result = Py_BuildValue("O(s)", Py_TYPE(self), backend_str);
453+
454+
return result;
455+
}
456+
457+
static PyMethodDef QuadPrecDType_methods[] = {
458+
{
459+
"__reduce__",
460+
(PyCFunction)quaddtype__reduce__,
461+
METH_NOARGS,
462+
"Reduction method for a QuadPrecDType object",
463+
},
464+
{NULL, NULL, 0, NULL},
465+
};
466+
467+
static PyMemberDef QuadPrecDType_members[] = {
468+
{"backend", T_INT, offsetof(QuadPrecDTypeObject, backend), READONLY,
469+
"The backend used for quad precision (0=sleef, 1=longdouble)"},
470+
{NULL, 0, 0, 0, NULL},
471+
};
472+
442473
PyArray_DTypeMeta QuadPrecDType = {
443474
{{
444475
PyVarObject_HEAD_INIT(NULL, 0).tp_name = "numpy_quaddtype.QuadPrecDType",
445476
.tp_basicsize = sizeof(QuadPrecDTypeObject),
446477
.tp_new = QuadPrecDType_new,
447478
.tp_repr = (reprfunc)QuadPrecDType_repr,
448479
.tp_str = (reprfunc)QuadPrecDType_str,
480+
.tp_methods = QuadPrecDType_methods,
481+
.tp_members = QuadPrecDType_members,
449482
}},
450483
};
451484

0 commit comments

Comments
 (0)