libitofin 0.35.0

A ground-up Rust port of QuantLib: quantitative-finance primitives for pricing, risk, and numerical methods.
Documentation
//! Independent QuantLib 1.43 values for pinned GJR-GARCH source contract.
//! Generated from the native oracle, not from the Rust implementation.

pub(super) const MATRIX: [[(i32, f64, f64, f64); 12]; 3] = [
    [
        (90, 35.0, 15.431040844905644, 0.0021830715301121018),
        (90, 40.0, 10.554690304370828, 0.06456713479879284),
        (90, 45.0, 5.962092917136372, 0.41070435136783345),
        (90, 50.0, 2.328046464730164, 1.7153925027651127),
        (90, 55.0, 0.5406824963524928, 4.86676313819094),
        (90, 60.0, 0.08336414792584855, 9.34817939356779),
        (180, 35.0, 15.895153938943379, 0.04269322047186108),
        (180, 40.0, 11.215495881576947, 0.24125506046664213),
        (180, 45.0, 6.909990281867267, 0.8139693581181717),
        (180, 50.0, 3.478349778932519, 2.2605487525446364),
        (180, 55.0, 1.37657748901291, 5.03699635998624),
        (180, 60.0, 0.4352148752178468, 8.973853643552388),
    ],
    [
        (90, 35.0, 15.453986174617617, 0.025128401242085374),
        (90, 40.0, 10.691240023599372, 0.20111685402733315),
        (90, 45.0, 6.2368261484066085, 0.6854375826380661),
        (90, 50.0, 2.6825307437814323, 2.069876781816383),
        (90, 55.0, 0.7818091894804816, 5.1078898313189285),
        (90, 60.0, 0.17350679853829146, 9.438322044180232),
        (180, 35.0, 16.04974686519113, 0.19728614671960543),
        (180, 40.0, 11.525522080867944, 0.5512812597576371),
        (180, 45.0, 7.3109760027180215, 1.2149550789689272),
        (180, 50.0, 3.903707729898533, 2.6859067035106534),
        (180, 55.0, 1.7255023012192303, 5.38592117219256),
        (180, 60.0, 0.6547581498238052, 9.19339691815835),
    ],
    [
        (90, 35.0, 15.78358723238972, 0.3547294590141874),
        (90, 40.0, 11.258534771284525, 0.7684116017124865),
        (90, 45.0, 7.025860841126486, 1.4744722753579467),
        (90, 50.0, 3.6684902181093433, 3.055836256144289),
        (90, 55.0, 1.581593949644232, 5.9076745914826745),
        (90, 60.0, 0.5895393798704623, 9.8543546255124),
        (180, 35.0, 16.780904476053323, 0.9284437575818032),
        (180, 40.0, 12.186917556218477, 1.2126767351081682),
        (180, 45.0, 7.932706541478142, 1.8366856177290458),
        (180, 50.0, 4.549127359763925, 3.3313263333760403),
        (180, 55.0, 2.2757542076827963, 5.936173078656125),
        (180, 60.0, 1.0059758850936353, 9.544614653428177),
    ],
];

pub(super) struct Case {
    pub name: &'static str,
    pub days: i32,
    pub parameters: [f64; 7],
    pub rates: [f64; 2],
    pub call: f64,
    pub put: f64,
}

pub(super) const CASES: [Case; 12] = [
    Case {
        name: "base",
        days: 30,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 1.9716700045188926,
        put: 1.8074214786494167,
    },
    Case {
        name: "ninety",
        days: 90,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 2.8789192933036944,
        put: 2.386982599940012,
    },
    Case {
        name: "one_eighty",
        days: 180,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 3.778638631218509,
        put: 2.797185261593924,
    },
    Case {
        name: "one_year",
        days: 365,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 5.316599738704635,
        put: 3.336467069380163,
    },
    Case {
        name: "positive_lambda",
        days: 90,
        parameters: [2e-06, 0.04, 0.88, 0.08, 0.3, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 3.2531807492449336,
        put: 2.7612440558812494,
    },
    Case {
        name: "zero_lambda",
        days: 90,
        parameters: [2e-06, 0.04, 0.88, 0.08, 0.0, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 3.0821210743197587,
        put: 2.5901843809560745,
    },
    Case {
        name: "negative_gamma",
        days: 90,
        parameters: [2e-06, 0.04, 0.88, -0.02, 0.3, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 2.362430076938076,
        put: 1.8704933835743986,
    },
    Case {
        name: "noninteger_days",
        days: 91,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.5],
        rates: [0.03, 0.01],
        call: 2.8948908321546556,
        put: 2.3975017915521875,
    },
    Case {
        name: "negative_rate",
        days: 30,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [-0.01, 0.01],
        call: 1.8076321583378827,
        put: 1.9721509038215999,
    },
    Case {
        name: "high_dividend",
        days: 90,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.08],
        call: 2.0741656446504115,
        put: 3.3146736109890327,
    },
    Case {
        name: "nonstationary",
        days: 30,
        parameters: [2e-06, 0.04, 0.99, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 3.271736288583927,
        put: 3.1074877627144417,
    },
    Case {
        name: "one_day",
        days: 1,
        parameters: [2e-06, 0.04, 0.88, 0.08, -0.4, 0.00015873015873015873, 252.0],
        rates: [0.03, 0.01],
        call: 0.5065798144041416,
        put: 0.5011005124685681,
    },
];