Skip to content

Commit 9b4d83d

Browse files
committed
quad2quad
1 parent 605aa59 commit 9b4d83d

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

quaddtype/numpy_quaddtype/src/casts.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,31 @@ quad_to_quad_resolve_descriptors(PyObject *NPY_UNUSED(self),
3636
QuadPrecDTypeObject *given_descrs[2],
3737
QuadPrecDTypeObject *loop_descrs[2], npy_intp *view_offset)
3838
{
39-
NPY_CASTING casting = NPY_NO_CASTING;
40-
4139
Py_INCREF(given_descrs[0]);
4240
loop_descrs[0] = given_descrs[0];
4341

4442
if (given_descrs[1] == NULL) {
4543
Py_INCREF(given_descrs[0]);
4644
loop_descrs[1] = given_descrs[0];
45+
*view_offset = 0;
46+
return NPY_NO_CASTING;
4747
}
48-
else {
49-
Py_INCREF(given_descrs[1]);
50-
loop_descrs[1] = given_descrs[1];
51-
if (given_descrs[0]->backend != given_descrs[1]->backend) {
52-
casting = NPY_UNSAFE_CASTING;
48+
49+
Py_INCREF(given_descrs[1]);
50+
loop_descrs[1] = given_descrs[1];
51+
52+
if (given_descrs[0]->backend != given_descrs[1]->backend) {
53+
// Different backends require actual conversion, no view possible
54+
*view_offset = NPY_MIN_INTP;
55+
if (given_descrs[0]->backend == BACKEND_SLEEF) {
56+
return NPY_UNSAFE_CASTING; // SLEEF -> long double may lose precision
5357
}
58+
// long double -> SLEEF preserves value exactly
59+
return static_cast<NPY_CASTING>(NPY_SAFE_CASTING | NPY_SAME_VALUE_CASTING_FLAG);
5460
}
5561

5662
*view_offset = 0;
57-
return casting;
63+
return NPY_NO_CASTING;
5864
}
5965

6066
static int

quaddtype/numpy_quaddtype/src/quadblas_interface.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <algorithm>
44

55
#ifndef DISABLE_QUADBLAS
6-
#include "../subprojects/qblas/include/quadblas/quadblas.hpp"
6+
#include "quadblas/quadblas.hpp"
77
#endif // DISABLE_QUADBLAS
88

99
extern "C" {

0 commit comments

Comments
 (0)