Skip to content

Commit bbc99a6

Browse files
committed
fixing constant error
1 parent e53edba commit bbc99a6

File tree

5 files changed

+80
-12
lines changed

5 files changed

+80
-12
lines changed

quaddtype/numpy_quaddtype/__init__.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
from ._quaddtype_main import (
22
QuadPrecision,
33
QuadPrecDType,
4-
is_longdouble_128
4+
is_longdouble_128,
5+
pi, e, log2e, log10e, ln2, ln10,
6+
sqrt2, sqrt3, egamma, phi, quad_max, quad_min, quad_epsilon, quad_denorm_min
57
)
68

7-
__all__ = ['QuadPrecision', 'QuadPrecDType', 'SleefQuadPrecision', 'LongDoubleQuadPrecision',
8-
'SleefQuadPrecDType', 'LongDoubleQuadPrecDType', 'is_longdouble_128']
9-
9+
__all__ = [
10+
'QuadPrecision', 'QuadPrecDType', 'SleefQuadPrecision', 'LongDoubleQuadPrecision',
11+
'SleefQuadPrecDType', 'LongDoubleQuadPrecDType', 'is_longdouble_128',
12+
'pi', 'e', 'log2e', 'log10e', 'ln2', 'ln10',
13+
'sqrt2', 'sqrt3', 'egamma', 'phi',
14+
'quad_max', 'quad_min', 'quad_epsilon', 'quad_denorm_min'
15+
]
1016

1117
def SleefQuadPrecision(value):
1218
return QuadPrecision(value, backend='sleef')
1319

14-
1520
def LongDoubleQuadPrecision(value):
1621
return QuadPrecision(value, backend='longdouble')
1722

18-
1923
def SleefQuadPrecDType():
2024
return QuadPrecDType(backend='sleef')
2125

22-
2326
def LongDoubleQuadPrecDType():
24-
return QuadPrecDType(backend='longdouble')
27+
return QuadPrecDType(backend='longdouble')

quaddtype/numpy_quaddtype/src/quaddtype_main.c

+15
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,21 @@ PyInit__quaddtype_main(void)
6565
goto error;
6666
}
6767

68+
if (PyModule_AddObject(m, "pi", (PyObject *)QuadPrecision_pi) < 0) goto error;
69+
if (PyModule_AddObject(m, "e", (PyObject *)QuadPrecision_e) < 0) goto error;
70+
if (PyModule_AddObject(m, "log2e", (PyObject *)QuadPrecision_log2e) < 0) goto error;
71+
if (PyModule_AddObject(m, "log10e", (PyObject *)QuadPrecision_log10e) < 0) goto error;
72+
if (PyModule_AddObject(m, "ln2", (PyObject *)QuadPrecision_ln2) < 0) goto error;
73+
if (PyModule_AddObject(m, "ln10", (PyObject *)QuadPrecision_ln10) < 0) goto error;
74+
if (PyModule_AddObject(m, "sqrt2", (PyObject *)QuadPrecision_sqrt2) < 0) goto error;
75+
if (PyModule_AddObject(m, "sqrt3", (PyObject *)QuadPrecision_sqrt3) < 0) goto error;
76+
if (PyModule_AddObject(m, "egamma", (PyObject *)QuadPrecision_egamma) < 0) goto error;
77+
if (PyModule_AddObject(m, "phi", (PyObject *)QuadPrecision_phi) < 0) goto error;
78+
if (PyModule_AddObject(m, "quad_max", (PyObject *)QuadPrecision_quad_max) < 0) goto error;
79+
if (PyModule_AddObject(m, "quad_min", (PyObject *)QuadPrecision_quad_min) < 0) goto error;
80+
if (PyModule_AddObject(m, "quad_epsilon", (PyObject *)QuadPrecision_quad_epsilon) < 0) goto error;
81+
if (PyModule_AddObject(m, "quad_denorm_min", (PyObject *)QuadPrecision_quad_denorm_min) < 0) goto error;
82+
6883
return m;
6984

7085
error:

quaddtype/numpy_quaddtype/src/scalar.c

+36-1
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,44 @@ PyTypeObject QuadPrecision_Type = {
248248
.tp_richcompare = (richcmpfunc)quad_richcompare,
249249
};
250250

251+
QuadPrecisionObject* initialize_constants(const Sleef_quad value, QuadBackendType backend)
252+
{
253+
QuadPrecisionObject * obj = QuadPrecision_raw_new(backend);
254+
if (backend == BACKEND_SLEEF) {
255+
obj->value.sleef_value = value;
256+
}
257+
else {
258+
obj->value.longdouble_value = Sleef_cast_to_doubleq1(value);
259+
}
260+
261+
return obj;
262+
}
263+
251264
int
252265
init_quadprecision_scalar(void)
253266
{
254-
// QuadPrecision_Type.tp_base = &PyFloatingArrType_Type;
267+
QuadPrecisionObject* QuadPrecision_pi = initialize_constants(SLEEF_M_PIq, BACKEND_SLEEF);
268+
QuadPrecisionObject* QuadPrecision_e = initialize_constants(SLEEF_M_Eq, BACKEND_SLEEF);
269+
QuadPrecisionObject* QuadPrecision_log2e = initialize_constants(SLEEF_M_LOG2Eq, BACKEND_SLEEF);
270+
QuadPrecisionObject* QuadPrecision_log10e = initialize_constants(SLEEF_M_LOG10Eq, BACKEND_SLEEF);
271+
QuadPrecisionObject* QuadPrecision_ln2 = initialize_constants(SLEEF_M_LN2q, BACKEND_SLEEF);
272+
QuadPrecisionObject* QuadPrecision_ln10 = initialize_constants(SLEEF_M_LN10q, BACKEND_SLEEF);
273+
QuadPrecisionObject* QuadPrecision_sqrt2 = initialize_constants(SLEEF_M_SQRT2q, BACKEND_SLEEF);
274+
QuadPrecisionObject* QuadPrecision_sqrt3 = initialize_constants(SLEEF_M_SQRT3q, BACKEND_SLEEF);
275+
QuadPrecisionObject* QuadPrecision_egamma = initialize_constants(SLEEF_M_EGAMMAq, BACKEND_SLEEF);
276+
QuadPrecisionObject* QuadPrecision_phi = initialize_constants(SLEEF_M_PHIq, BACKEND_SLEEF);
277+
QuadPrecisionObject* QuadPrecision_quad_max = initialize_constants(SLEEF_QUAD_MAX, BACKEND_SLEEF);
278+
QuadPrecisionObject* QuadPrecision_quad_min = initialize_constants(SLEEF_QUAD_MIN, BACKEND_SLEEF);
279+
QuadPrecisionObject* QuadPrecision_quad_epsilon = initialize_constants(SLEEF_QUAD_EPSILON, BACKEND_SLEEF);
280+
QuadPrecisionObject* QuadPrecision_quad_denorm_min = initialize_constants(SLEEF_QUAD_DENORM_MIN, BACKEND_SLEEF);
281+
282+
if (!QuadPrecision_pi || !QuadPrecision_e || !QuadPrecision_log2e || !QuadPrecision_log10e ||
283+
!QuadPrecision_ln2 || !QuadPrecision_ln10|| !QuadPrecision_sqrt2 || !QuadPrecision_sqrt3 ||
284+
!QuadPrecision_egamma || !QuadPrecision_phi || !QuadPrecision_quad_max || !QuadPrecision_quad_min ||
285+
!QuadPrecision_quad_epsilon || !QuadPrecision_quad_denorm_min) {
286+
PyErr_SetString(PyExc_RuntimeError, "Failed to initialize QuadPrecision constants");
287+
return -1;
288+
}
289+
255290
return PyType_Ready(&QuadPrecision_Type);
256291
}

quaddtype/numpy_quaddtype/src/scalar.h

+18
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,24 @@ init_quadprecision_scalar(void);
3434
#define PyArray_IsScalar(obj, QuadPrecDType) PyObject_TypeCheck(obj, &QuadPrecision_Type)
3535
#define PyArrayScalar_VAL(obj, QuadPrecDType) (((QuadPrecisionObject *)obj)->value)
3636

37+
QuadPrecisionObject* initialize_constants(const Sleef_quad value, QuadBackendType backend);
38+
39+
// constant objects
40+
extern QuadPrecisionObject *QuadPrecision_pi;
41+
extern QuadPrecisionObject *QuadPrecision_e;
42+
extern QuadPrecisionObject *QuadPrecision_log2e;
43+
extern QuadPrecisionObject *QuadPrecision_log10e;
44+
extern QuadPrecisionObject *QuadPrecision_ln2;
45+
extern QuadPrecisionObject *QuadPrecision_ln10;
46+
extern QuadPrecisionObject *QuadPrecision_sqrt2;
47+
extern QuadPrecisionObject *QuadPrecision_sqrt3;
48+
extern QuadPrecisionObject *QuadPrecision_egamma;
49+
extern QuadPrecisionObject *QuadPrecision_phi;
50+
extern QuadPrecisionObject *QuadPrecision_quad_max;
51+
extern QuadPrecisionObject *QuadPrecision_quad_min;
52+
extern QuadPrecisionObject *QuadPrecision_quad_epsilon;
53+
extern QuadPrecisionObject *QuadPrecision_quad_denorm_min;
54+
3755
#ifdef __cplusplus
3856
}
3957
#endif

quaddtype/numpy_quaddtype/src/umath.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -658,9 +658,6 @@ quad_generic_comp_strided_loop_aligned(PyArrayMethod_Context *context, char *con
658658

659659
QuadPrecDTypeObject *descr = (QuadPrecDTypeObject *)context->descriptors[0];
660660
QuadBackendType backend = descr->backend;
661-
size_t elem_size = (backend == BACKEND_SLEEF) ? sizeof(Sleef_quad) : sizeof(long double);
662-
663-
quad_value in1, in2;
664661
while (N--)
665662
{
666663
quad_value in1 = *(quad_value *)in1_ptr;

0 commit comments

Comments
 (0)