use crate::op::{Additive, Multiplicative};
use super::Field;
use super::closed::{ClosedDiv, ClosedMul};
pub trait Real:
Field<Additive, Multiplicative>
+ ClosedMul<Self>
+ ClosedDiv<Self>
+ Default
+ PartialOrd
+ core::ops::Neg<Output = Self>
{
fn sqrt(self) -> Self;
fn abs(self) -> Self;
fn acos(self) -> Self;
}
pub trait ComplexField: Field<Additive, Multiplicative> {
type RealField: Real;
fn from_real(re: Self::RealField) -> Self;
fn re(&self) -> Self::RealField;
fn im(&self) -> Self::RealField;
fn conjugate(&self) -> Self;
}