Skip to content

Commit 72807f2

Browse files
committed
conflict fix
2 parents 3a83274 + 6f59499 commit 72807f2

File tree

4 files changed

+69
-10
lines changed

4 files changed

+69
-10
lines changed

quaddtype/numpy_quaddtype/src/ops.hpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,15 @@ quad_atanh(const Sleef_quad *op)
243243
return Sleef_atanhq1_u10(*op);
244244
}
245245

246+
static inline Sleef_quad
247+
quad_degrees(const Sleef_quad *op)
248+
{
249+
// degrees = radians * 180 / π
250+
static const Sleef_quad one_eighty = sleef_q(+0x1680000000000LL, 0x0000000000000000ULL, 7); // 180.0 in quad
251+
Sleef_quad ratio = Sleef_divq1_u05(one_eighty, SLEEF_M_PIq);
252+
return Sleef_mulq1_u05(*op, ratio);
253+
}
254+
246255
static inline Sleef_quad
247256
quad_radians(const Sleef_quad *op)
248257
{
@@ -455,6 +464,16 @@ ld_atanh(const long double *op)
455464
return atanhl(*op);
456465
}
457466

467+
static inline long double
468+
ld_degrees(const long double *op)
469+
{
470+
// degrees = radians * 180 / π
471+
#ifndef M_PI
472+
#define M_PI 3.14159265358979323846
473+
#endif
474+
return (*op) * (180.0L / static_cast<long double>(M_PI));
475+
}
476+
458477
static inline long double
459478
ld_radians(const long double *op)
460479
{

quaddtype/numpy_quaddtype/src/umath/unary_ops.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,12 @@ init_quad_unary_ops(PyObject *numpy)
373373
if (create_quad_unary_ufunc<quad_atanh, ld_atanh>(numpy, "arctanh") < 0) {
374374
return -1;
375375
}
376+
if (create_quad_unary_ufunc<quad_degrees, ld_degrees>(numpy, "degrees") < 0) {
377+
return -1;
378+
}
379+
if (create_quad_unary_ufunc<quad_degrees, ld_degrees>(numpy, "rad2deg") < 0) {
380+
return -1;
381+
}
376382
if (create_quad_unary_ufunc<quad_radians, ld_radians>(numpy, "radians") < 0) {
377383
return -1;
378384
}

quaddtype/release_tracker.md

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,10 @@
5454
| arcsinh |||
5555
| arccosh |||
5656
| arctanh |||
57-
| degrees | | |
57+
| degrees | | |
5858
| radians |||
5959
| deg2rad |||
60-
| rad2deg | | |
61-
| bitwise_and | | |
62-
| bitwise_or | | |
63-
| bitwise_xor | | |
64-
| invert | | |
65-
| left_shift | | |
66-
| right_shift | | |
60+
| rad2deg |||
6761
| greater |||
6862
| greater_equal |||
6963
| less |||

quaddtype/tests/test_quaddtype.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1985,6 +1985,46 @@ def test_hypot(x1, x2, expected):
19851985
np.testing.assert_allclose(float(result), expected, rtol=1e-13)
19861986

19871987

1988+
@pytest.mark.parametrize("op", [np.degrees, np.rad2deg])
1989+
@pytest.mark.parametrize("radians,expected_degrees", [
1990+
# Basic conversions
1991+
(0.0, 0.0),
1992+
(np.pi / 6, 30.0),
1993+
(np.pi / 4, 45.0),
1994+
(np.pi / 3, 60.0),
1995+
(np.pi / 2, 90.0),
1996+
(np.pi, 180.0),
1997+
(3 * np.pi / 2, 270.0),
1998+
(2 * np.pi, 360.0),
1999+
# Negative values
2000+
(-np.pi / 2, -90.0),
2001+
(-np.pi, -180.0),
2002+
# Special values
2003+
(np.inf, np.inf),
2004+
(-np.inf, -np.inf),
2005+
(np.nan, np.nan),
2006+
# Edge cases
2007+
(-0.0, -0.0),
2008+
])
2009+
def test_degrees_rad2deg(op, radians, expected_degrees):
2010+
"""Test degrees and rad2deg ufuncs convert radians to degrees"""
2011+
q_rad = QuadPrecision(radians)
2012+
result = op(q_rad)
2013+
2014+
assert isinstance(result, QuadPrecision)
2015+
2016+
if np.isnan(expected_degrees):
2017+
assert np.isnan(float(result))
2018+
elif np.isinf(expected_degrees):
2019+
assert np.isinf(float(result))
2020+
if expected_degrees > 0:
2021+
assert float(result) > 0
2022+
else:
2023+
assert float(result) < 0
2024+
else:
2025+
np.testing.assert_allclose(float(result), expected_degrees, rtol=1e-13)
2026+
2027+
19882028
@pytest.mark.parametrize("op", [np.radians, np.deg2rad])
19892029
@pytest.mark.parametrize("degrees,expected_radians", [
19902030
# Basic conversions
@@ -2011,9 +2051,9 @@ def test_radians(op, degrees, expected_radians):
20112051
"""Test radians and deg2rad ufuncs convert degrees to radians"""
20122052
q_deg = QuadPrecision(degrees)
20132053
result = op(q_deg)
2014-
2054+
20152055
assert isinstance(result, QuadPrecision)
2016-
2056+
20172057
if np.isnan(expected_radians):
20182058
assert np.isnan(float(result))
20192059
elif np.isinf(expected_radians):

0 commit comments

Comments
 (0)