From 5f41cd9712168f2a5f58d302f16c76f5cd877604 Mon Sep 17 00:00:00 2001 From: Sid Date: Wed, 22 Oct 2025 17:43:33 +0100 Subject: [PATCH] Add degree-based wrappers for TracedRNumber --- src/TracedRNumber.jl | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/TracedRNumber.jl b/src/TracedRNumber.jl index b6b50369d7..1f3eef6ccc 100644 --- a/src/TracedRNumber.jl +++ b/src/TracedRNumber.jl @@ -505,6 +505,31 @@ for (jlop, hloop) in ( @eval $(jlop)(@nospecialize(lhs::TracedRNumber)) = @opcall $(hloop)(lhs) end +# Degree-based trigonometric wrappers for TracedRNumber: + +# These convert to radians internally so Reactant/XLA can lower to StableHLO-supported radian trigonometric operations. + +# --- Basic trigonometric functions --- +Base.sind(x::TracedRNumber) = sin(deg2rad(x)) +Base.cosd(x::TracedRNumber) = cos(deg2rad(x)) +Base.tand(x::TracedRNumber) = tan(deg2rad(x)) +Base.cscd(x::TracedRNumber) = 1 / sind(x) +Base.secd(x::TracedRNumber) = 1 / cosd(x) +Base.cotd(x::TracedRNumber) = 1 / tand(x) + +# --- Inverse trigonometric functions --- +Base.asind(x::TracedRNumber) = rad2deg(asin(x)) +Base.acosd(x::TracedRNumber) = rad2deg(acos(x)) +Base.atand(x::TracedRNumber) = rad2deg(atan(x)) + +# Two-argument atan in degrees +Base.atand(y::TracedRNumber, x::TracedRNumber) = rad2deg(atan(y, x)) + +# Derived inverse functions using trigonometric identities +Base.acscd(x::TracedRNumber) = rad2deg(asin(1 / x)) +Base.asecd(x::TracedRNumber) = rad2deg(acos(1 / x)) +Base.acotd(x::TracedRNumber) = rad2deg(atan(1 / x)) + for (jlop, hloop) in ( (:(Base.sin), :sine), (:(Base.cos), :cosine),