Skip to content

Commit e0aad30

Browse files
committed
allow python int/float with default descr
1 parent 499163d commit e0aad30

File tree

1 file changed

+14
-7
lines changed
  • quaddtype/numpy_quaddtype/src

1 file changed

+14
-7
lines changed

quaddtype/numpy_quaddtype/src/dtype.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,21 @@ common_dtype(PyArray_DTypeMeta *cls, PyArray_DTypeMeta *other)
123123
static PyArray_Descr *
124124
quadprec_discover_descriptor_from_pyobject(PyArray_DTypeMeta *NPY_UNUSED(cls), PyObject *obj)
125125
{
126-
if (Py_TYPE(obj) != &QuadPrecision_Type) {
127-
PyErr_SetString(PyExc_TypeError, "Can only store QuadPrecision in a QuadPrecDType array.");
128-
return NULL;
126+
if (Py_TYPE(obj) == &QuadPrecision_Type) {
127+
/* QuadPrecision scalar: use its backend */
128+
QuadPrecisionObject *quad_obj = (QuadPrecisionObject *)obj;
129+
return (PyArray_Descr *)new_quaddtype_instance(quad_obj->backend);
129130
}
130-
131-
QuadPrecisionObject *quad_obj = (QuadPrecisionObject *)obj;
132-
133-
return (PyArray_Descr *)new_quaddtype_instance(quad_obj->backend);
131+
132+
/* For Python int/float/other numeric types: return default descriptor */
133+
/* The casting machinery will handle conversion to QuadPrecision */
134+
if (PyLong_Check(obj) || PyFloat_Check(obj)) {
135+
return (PyArray_Descr *)new_quaddtype_instance(BACKEND_SLEEF);
136+
}
137+
138+
/* Unknown type - let NumPy handle it or raise appropriate error */
139+
PyErr_SetString(PyExc_TypeError, "Can only store QuadPrecision, int, or float in a QuadPrecDType array.");
140+
return NULL;
134141
}
135142

136143
static int

0 commit comments

Comments
 (0)