Skip to content

Commit cc70134

Browse files
committed
fixing conflicts
2 parents 2b3016c + d9b1154 commit cc70134

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

quaddtype/numpy_quaddtype/src/scalar_ops.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,23 @@ QuadPrecision_int(QuadPrecisionObject *self)
231231
}
232232
}
233233

234+
template <binary_op_quad_def sleef_op, binary_op_longdouble_def longdouble_op>
235+
static PyObject *
236+
quad_ternary_power_func(PyObject *op1, PyObject *op2, PyObject *mod)
237+
{
238+
if (mod != Py_None) {
239+
PyErr_SetString(PyExc_TypeError,
240+
"pow() 3rd argument not allowed unless all arguments are integers");
241+
return NULL;
242+
}
243+
return quad_binary_func<sleef_op, longdouble_op>(op1, op2);
244+
}
245+
234246
PyNumberMethods quad_as_scalar = {
235247
.nb_add = (binaryfunc)quad_binary_func<quad_add, ld_add>,
236248
.nb_subtract = (binaryfunc)quad_binary_func<quad_sub, ld_sub>,
237249
.nb_multiply = (binaryfunc)quad_binary_func<quad_mul, ld_mul>,
238-
.nb_power = (ternaryfunc)quad_binary_func<quad_pow, ld_pow>,
250+
.nb_power = (ternaryfunc)quad_ternary_power_func<quad_pow, ld_pow>,
239251
.nb_negative = (unaryfunc)quad_unary_func<quad_negative, ld_negative>,
240252
.nb_positive = (unaryfunc)quad_unary_func<quad_positive, ld_positive>,
241253
.nb_absolute = (unaryfunc)quad_unary_func<quad_absolute, ld_absolute>,

quaddtype/tests/test_quaddtype.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5679,3 +5679,12 @@ def test_float_to_quad_sign_preserve(dtype, val):
56795679
assert np.isnan(result), f"NaN failed for {dtype}"
56805680
else:
56815681
assert result == val, f"{val} failed for {dtype}"
5682+
5683+
@pytest.mark.parametrize("val, pow", [(2, 112), (2, -112), (10, 34), (10, -34)])
5684+
def test_quadprecision_large_exponents(val, pow):
5685+
mp.prec = 113
5686+
mp_value = mp.mpf(val) ** pow
5687+
value = QuadPrecision(val) ** pow
5688+
value_str = mp.nstr(mp.mpf(str(value)), 33)
5689+
expected_str = mp.nstr(mp_value, 33)
5690+
assert value_str == expected_str, f"QuadPrecision({val}) ** {pow} = {value_str}, expected {expected_str}"

0 commit comments

Comments
 (0)