use crate::argmin_param::ArgminParam;
use argmin::core::ArgminFloat;
use argmin_math::ArgminMul;
use ndarray::{Dimension, Ix1, Ix2, NdFloat};
use num_traits::FromPrimitive;
pub trait Float:
ArgminFloat
+ NdFloat
+ Default
+ Clone
+ FromPrimitive
+ ArgminMul<ArgminParam<Self, Ix1>, ArgminParam<Self, Ix1>>
+ ArgminMul<ArgminParam<Self, Ix2>, ArgminParam<Self, Ix2>>
+ linfa::Float
{
const POSITIVE_LABEL: Self;
const NEGATIVE_LABEL: Self;
}
impl<D: Dimension> ArgminMul<ArgminParam<Self, D>, ArgminParam<Self, D>> for f64 {
fn mul(&self, other: &ArgminParam<Self, D>) -> ArgminParam<Self, D> {
ArgminParam(&other.0 * *self)
}
}
impl<D: Dimension> ArgminMul<ArgminParam<Self, D>, ArgminParam<Self, D>> for f32 {
fn mul(&self, other: &ArgminParam<Self, D>) -> ArgminParam<Self, D> {
ArgminParam(&other.0 * *self)
}
}
impl Float for f32 {
const POSITIVE_LABEL: Self = 1.0;
const NEGATIVE_LABEL: Self = -1.0;
}
impl Float for f64 {
const POSITIVE_LABEL: Self = 1.0;
const NEGATIVE_LABEL: Self = -1.0;
}