use cas_attrs::builtin;
use rug::{Complex, Float};
#[derive(Debug)]
pub struct Re;
#[cfg_attr(feature = "numerical", builtin)]
impl Re {
pub fn eval_static(n: Complex) -> Float {
n.into_real_imag().0
}
}
#[derive(Debug)]
pub struct Im;
#[cfg_attr(feature = "numerical", builtin)]
impl Im {
pub fn eval_static(n: Complex) -> Float {
n.into_real_imag().1
}
}
#[derive(Debug)]
pub struct Arg;
#[cfg_attr(feature = "numerical", builtin(radian = output))]
impl Arg {
pub fn eval_static(n: Complex) -> Float {
n.arg().into_real_imag().0 }
}
#[derive(Debug)]
pub struct Conj;
#[cfg_attr(feature = "numerical", builtin)]
impl Conj {
pub fn eval_static(n: Complex) -> Complex {
n.conj()
}
}