1use crate::dual::{Dual, Dual2};
2use crate::splines::{PPSplineDual, PPSplineDual2, PPSplineF64};
3use ndarray::{Array1, Array2};
4use pyo3::{pyclass, FromPyObject, IntoPyObject, PyErr};
5use serde::{Deserialize, Serialize};
6
7#[pyclass(module = "rateslib.rs", eq, eq_int)]
9#[derive(Copy, Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
10pub enum ADOrder {
11 Zero,
13 One,
15 Two,
17}
18
19#[derive(Debug, Clone, FromPyObject, Serialize, Deserialize, IntoPyObject)]
21pub enum Number {
22 Dual(Dual),
23 Dual2(Dual2),
24 F64(f64),
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
29pub enum NumberVec {
30 F64(Vec<f64>),
31 Dual(Vec<Dual>),
32 Dual2(Vec<Dual2>),
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
37pub enum NumberArray1 {
38 F64(Array1<f64>),
39 Dual(Array1<Dual>),
40 Dual2(Array1<Dual2>),
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
45pub enum NumberArray2 {
46 F64(Array2<f64>),
47 Dual(Array2<Dual>),
48 Dual2(Array2<Dual2>),
49}
50
51#[derive(Clone, Serialize, Deserialize, PartialEq, IntoPyObject)]
53pub enum NumberPPSpline {
54 F64(PPSplineF64),
55 Dual(PPSplineDual),
56 Dual2(PPSplineDual2),
57}
58
59pub trait NumberMapping {
65 fn mapped_value(&self, x: &Number) -> Result<Number, PyErr>;
66}