Skip to content

Commit c182ddb

Browse files
authored
Merge pull request #246 from SwayamInSync/same-value
FEAT: Implementing `same_value` casting rule in quaddtype
2 parents 5cc8069 + a388f3e commit c182ddb

File tree

15 files changed

+552
-175
lines changed

15 files changed

+552
-175
lines changed

quaddtype/numpy_quaddtype/src/casts.cpp

Lines changed: 268 additions & 150 deletions
Large diffs are not rendered by default.

quaddtype/numpy_quaddtype/src/dragon4.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Modifications are specific to support the SLEEF_QUAD
1717
#define PY_ARRAY_UNIQUE_SYMBOL QuadPrecType_ARRAY_API
1818
#define PY_UFUNC_UNIQUE_SYMBOL QuadPrecType_UFUNC_API
1919
#define NPY_NO_DEPRECATED_API NPY_2_0_API_VERSION
20-
#define NPY_TARGET_VERSION NPY_2_0_API_VERSION
20+
#define NPY_TARGET_VERSION NPY_2_4_API_VERSION
2121
#define NO_IMPORT_ARRAY
2222
#define NO_IMPORT_UFUNC
2323

quaddtype/numpy_quaddtype/src/dtype.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#define PY_ARRAY_UNIQUE_SYMBOL QuadPrecType_ARRAY_API
88
#define PY_UFUNC_UNIQUE_SYMBOL QuadPrecType_UFUNC_API
99
#define NPY_NO_DEPRECATED_API NPY_2_0_API_VERSION
10-
#define NPY_TARGET_VERSION NPY_2_0_API_VERSION
10+
#define NPY_TARGET_VERSION NPY_2_4_API_VERSION
1111
#define NO_IMPORT_ARRAY
1212
#define NO_IMPORT_UFUNC
1313
#include "numpy/arrayobject.h"

quaddtype/numpy_quaddtype/src/ops.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1669,4 +1669,4 @@ cast_sleef_to_double(const Sleef_quad in)
16691669
return quad_signbit(&in) ? -0.0 : 0.0;
16701670
}
16711671
return Sleef_cast_to_doubleq1(in);
1672-
}
1672+
}

quaddtype/numpy_quaddtype/src/quaddtype_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#define PY_ARRAY_UNIQUE_SYMBOL QuadPrecType_ARRAY_API
77
#define PY_UFUNC_UNIQUE_SYMBOL QuadPrecType_UFUNC_API
88
#define NPY_NO_DEPRECATED_API NPY_2_0_API_VERSION
9-
#define NPY_TARGET_VERSION NPY_2_0_API_VERSION
9+
#define NPY_TARGET_VERSION NPY_2_4_API_VERSION
1010

1111
#include "numpy/arrayobject.h"
1212
#include "numpy/dtype_api.h"

quaddtype/numpy_quaddtype/src/scalar.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ QuadPrecision_from_object(PyObject *value, QuadBackendType backend)
104104
}
105105
double dval = PyFloat_AsDouble(py_float);
106106
Py_DECREF(py_float);
107-
108107
if (backend == BACKEND_SLEEF) {
109108
self->value.sleef_value = Sleef_cast_from_doubleq1(dval);
110109
}
@@ -484,14 +483,9 @@ PyObject* quad_to_pylong(Sleef_quad value)
484483
PyErr_SetString(PyExc_RuntimeError, "Failed to convert quad to string");
485484
return NULL;
486485
}
487-
488-
PyObject *result = PyLong_FromString(buffer, NULL, 10);
489-
490-
if (result == NULL) {
491-
PyErr_SetString(PyExc_RuntimeError, "Failed to parse integer string");
492-
return NULL;
493-
}
494486

487+
// Already raises ValueError and returns NULL on failure
488+
PyObject *result = PyLong_FromString(buffer, NULL, 10);
495489
return result;
496490
}
497491

quaddtype/numpy_quaddtype/src/scalar_ops.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#define PY_ARRAY_UNIQUE_SYMBOL QuadPrecType_ARRAY_API
22
#define NPY_NO_DEPRECATED_API NPY_2_0_API_VERSION
3-
#define NPY_TARGET_VERSION NPY_2_0_API_VERSION
3+
#define NPY_TARGET_VERSION NPY_2_4_API_VERSION
44
#define NO_IMPORT_ARRAY
55

66
extern "C" {
@@ -134,6 +134,9 @@ quad_richcompare(QuadPrecisionObject *self, PyObject *other, int cmp_op)
134134
Py_INCREF(other);
135135
other_quad = (QuadPrecisionObject *)other;
136136
if (other_quad->backend != backend) {
137+
// we could allow, but this will be bad
138+
// Two values that are different in quad precision,
139+
// might appear equal when converted to double.
137140
PyErr_SetString(PyExc_TypeError,
138141
"Cannot compare QuadPrecision objects with different backends");
139142
Py_DECREF(other_quad);

quaddtype/numpy_quaddtype/src/umath/binary_ops.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#define PY_ARRAY_UNIQUE_SYMBOL QuadPrecType_ARRAY_API
22
#define PY_UFUNC_UNIQUE_SYMBOL QuadPrecType_UFUNC_API
33
#define NPY_NO_DEPRECATED_API NPY_2_0_API_VERSION
4-
#define NPY_TARGET_VERSION NPY_2_0_API_VERSION
4+
#define NPY_TARGET_VERSION NPY_2_4_API_VERSION
55
#define NO_IMPORT_ARRAY
66
#define NO_IMPORT_UFUNC
77

quaddtype/numpy_quaddtype/src/umath/comparison_ops.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#define PY_ARRAY_UNIQUE_SYMBOL QuadPrecType_ARRAY_API
22
#define PY_UFUNC_UNIQUE_SYMBOL QuadPrecType_UFUNC_API
33
#define NPY_NO_DEPRECATED_API NPY_2_0_API_VERSION
4-
#define NPY_TARGET_VERSION NPY_2_0_API_VERSION
4+
#define NPY_TARGET_VERSION NPY_2_4_API_VERSION
55
#define NO_IMPORT_ARRAY
66
#define NO_IMPORT_UFUNC
77

quaddtype/numpy_quaddtype/src/umath/matmul.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#define PY_ARRAY_UNIQUE_SYMBOL QuadPrecType_ARRAY_API
22
#define PY_UFUNC_UNIQUE_SYMBOL QuadPrecType_UFUNC_API
33
#define NPY_NO_DEPRECATED_API NPY_2_0_API_VERSION
4-
#define NPY_TARGET_VERSION NPY_2_0_API_VERSION
4+
#define NPY_TARGET_VERSION NPY_2_4_API_VERSION
55
#define NO_IMPORT_ARRAY
66
#define NO_IMPORT_UFUNC
77

0 commit comments

Comments
 (0)