Skip to content

Commit 6d18443

Browse files
committed
fixing conflicts
2 parents f7d84b7 + 120f01f commit 6d18443

File tree

4 files changed

+70
-4
lines changed

4 files changed

+70
-4
lines changed

quaddtype/numpy_quaddtype/src/ops.hpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,15 @@ quad_degrees(const Sleef_quad *op)
252252
return Sleef_mulq1_u05(*op, ratio);
253253
}
254254

255+
static inline Sleef_quad
256+
quad_radians(const Sleef_quad *op)
257+
{
258+
// radians = degrees * π / 180
259+
static const Sleef_quad one_eighty = sleef_q(+0x1680000000000LL, 0x0000000000000000ULL, 7);
260+
Sleef_quad ratio = Sleef_divq1_u05(SLEEF_M_PIq, one_eighty);
261+
return Sleef_mulq1_u05(*op, ratio);
262+
}
263+
255264
// Unary long double operations
256265
typedef long double (*unary_op_longdouble_def)(const long double *);
257266

@@ -465,6 +474,16 @@ ld_degrees(const long double *op)
465474
return (*op) * (180.0L / static_cast<long double>(M_PI));
466475
}
467476

477+
static inline long double
478+
ld_radians(const long double *op)
479+
{
480+
// radians = degrees * π / 180
481+
#ifndef M_PI
482+
#define M_PI 3.14159265358979323846
483+
#endif
484+
return (*op) * (static_cast<long double>(M_PI) / 180.0L);
485+
}
486+
468487
// Unary Quad properties
469488
typedef npy_bool (*unary_prop_quad_def)(const Sleef_quad *);
470489

quaddtype/numpy_quaddtype/src/umath/unary_ops.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,5 +256,11 @@ init_quad_unary_ops(PyObject *numpy)
256256
if (create_quad_unary_ufunc<quad_degrees, ld_degrees>(numpy, "rad2deg") < 0) {
257257
return -1;
258258
}
259+
if (create_quad_unary_ufunc<quad_radians, ld_radians>(numpy, "radians") < 0) {
260+
return -1;
261+
}
262+
if (create_quad_unary_ufunc<quad_radians, ld_radians>(numpy, "deg2rad") < 0) {
263+
return -1;
264+
}
259265
return 0;
260266
}

quaddtype/release_tracker.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@
5555
| arccosh |||
5656
| arctanh |||
5757
| degrees |||
58-
| radians | | |
59-
| deg2rad | | |
58+
| radians | | |
59+
| deg2rad | | |
6060
| rad2deg |||
6161
| greater |||
6262
| greater_equal |||

quaddtype/tests/test_quaddtype.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1931,9 +1931,9 @@ def test_degrees_rad2deg(op, radians, expected_degrees):
19311931
"""Test degrees and rad2deg ufuncs convert radians to degrees"""
19321932
q_rad = QuadPrecision(radians)
19331933
result = op(q_rad)
1934-
1934+
19351935
assert isinstance(result, QuadPrecision)
1936-
1936+
19371937
if np.isnan(expected_degrees):
19381938
assert np.isnan(float(result))
19391939
elif np.isinf(expected_degrees):
@@ -1945,3 +1945,44 @@ def test_degrees_rad2deg(op, radians, expected_degrees):
19451945
else:
19461946
np.testing.assert_allclose(float(result), expected_degrees, rtol=1e-13)
19471947

1948+
1949+
@pytest.mark.parametrize("op", [np.radians, np.deg2rad])
1950+
@pytest.mark.parametrize("degrees,expected_radians", [
1951+
# Basic conversions
1952+
(0.0, 0.0),
1953+
(30.0, np.pi / 6),
1954+
(45.0, np.pi / 4),
1955+
(60.0, np.pi / 3),
1956+
(90.0, np.pi / 2),
1957+
(180.0, np.pi),
1958+
(270.0, 3 * np.pi / 2),
1959+
(360.0, 2 * np.pi),
1960+
# Negative values
1961+
(-90.0, -np.pi / 2),
1962+
(-180.0, -np.pi),
1963+
# Special values
1964+
(np.inf, np.inf),
1965+
(-np.inf, -np.inf),
1966+
(np.nan, np.nan),
1967+
# Edge cases
1968+
(0.0, 0.0),
1969+
(-0.0, -0.0),
1970+
])
1971+
def test_radians(op, degrees, expected_radians):
1972+
"""Test radians and deg2rad ufuncs convert degrees to radians"""
1973+
q_deg = QuadPrecision(degrees)
1974+
result = op(q_deg)
1975+
1976+
assert isinstance(result, QuadPrecision)
1977+
1978+
if np.isnan(expected_radians):
1979+
assert np.isnan(float(result))
1980+
elif np.isinf(expected_radians):
1981+
assert np.isinf(float(result))
1982+
if expected_radians > 0:
1983+
assert float(result) > 0
1984+
else:
1985+
assert float(result) < 0
1986+
else:
1987+
np.testing.assert_allclose(float(result), expected_radians, rtol=1e-13)
1988+

0 commit comments

Comments
 (0)