quantark 0.2.2__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantark-0.2.2 → quantark-0.2.3}/PKG-INFO +1 -1
- {quantark-0.2.2 → quantark-0.2.3}/pyproject.toml +1 -1
- {quantark-0.2.2 → quantark-0.2.3}/quantark/__init__.py +1 -1
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/event_stats.py +18 -1
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +18 -3
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +18 -5
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +27 -1
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +32 -4
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +336 -2
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +31 -15
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +122 -15
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/param/engine_params.py +13 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/greeks_calculator.py +80 -10
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/event_distribution.py +10 -1
- {quantark-0.2.2 → quantark-0.2.3}/.gitignore +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/CHANGELOG.md +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/LICENSE +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/NOTICE +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/README.md +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/_compat.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/discount/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/base_bond_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/frn.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/forward/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/futures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/option/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/schedule/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/schedule/cashflow.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/conventions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/mc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/base_credit_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/basket_cds.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/cds.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/analysis/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/base_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/accrual_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_valuation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/localvol_greeks.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/sabr_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/base_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/time_grid.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/barrier.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/events.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/manager.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/param/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_sobol.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/sabr/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/sabr/sabr_process.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/base_equity_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/futures.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/accumulator_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/american_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/asian_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/barrier_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_helpers.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/base_swap.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/multi_asset_trs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_event_handler.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/plotting.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/surfaces.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/term_structure.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/base_fx_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_common.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_greeks.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_mc_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/process/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/process/fx_gk_path_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/base_fx_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/currency_pair.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_barrier_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_one_touch_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_sharkfin_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_note.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/report/fx_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/fra_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/swaption_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/cap_floor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/fra.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/irs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/swaption.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/vol_model_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/hedge_executor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/metrics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/advanced_backtest.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/hedge_executor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/metrics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/logger.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/_replay.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/book_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/engine_factory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/market.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/report_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/base_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/hedge_instruments.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/scenarios.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/transaction_costs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/accrual_leg.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/autocallable_leg.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/base_amount.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/deterministic_leg.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/fixed_payoff_leg.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/leg_schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/leg_valuator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/day_path.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/path_builder.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/report/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/results/result_exporter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_sobol.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_variance_reduction.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/basis/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/basis/basis_yield.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/credit/ajd_hazard_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/credit/hazard_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/div/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/div/dividend_yield.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/index/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/index/rate_index.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/quote/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/quote/spot_quote.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/rrf/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/rrf/rate_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/collapse_guard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/diagnostics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/hagan.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/sabr_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/bs_fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/market_conventions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/smile_builder.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_core.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_term_structure.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vol_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/credit/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/credit/position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/swap_position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fi/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fi/position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fx/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fx/position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/portfolio_snapshot.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/portfolio_storage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/credit_pricing_environment.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/fx_pricing_environment.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/pricing_environment.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/builders.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/models.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/registry.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/service.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/commodity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/credit.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/equity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/interest_rate.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/maths.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/pfe.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/replacement_cost.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/netting_set.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/trade.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/parameters/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/parameters/supervisory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/results/result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/cva/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/cva/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/commodity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/correlations.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/counterparty_credit.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/equity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/interest_rate.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/reference_credit.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/asof.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/correlation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/curves.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/grid.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/path_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/pfe.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/resampling.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/paths.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/phoenix_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/repricer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/simulator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/snowball_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/statemachine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/value_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/sensitivity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/parameters/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/parameters/supervisory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/counterparty.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/credit_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/netting.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/trade.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/trade_portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/results/result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sacva_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/curve_bump.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/shifts.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/accessors.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/commodity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/credit_qualifying.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/cross_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/equity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/ir.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/version.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/crif/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/crif/models.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/crif/parser.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/addon.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/concentration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/correlations.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/classification/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/factory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/portfolio_adapter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/market_data.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/crif_export.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/excel_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/html_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/attribution.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/simm_result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/whatif.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/sensitivity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/taxonomy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/template/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/template/xlsx_loader.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/template/xlsx_template.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/report/report_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/report/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/metrics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/report/report_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/report/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/result_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/result_exporter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/stress_results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_builder.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_storage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/stress/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/stress/stress_applicator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/stress/stress_types.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/barrier_shift.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/business_calendar.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/day_counter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china.csv +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/bond_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/deltaone_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/engine_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/fx_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/greek_conventions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/greeks_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/option_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/exceptions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/converter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/example_usage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/generator/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/generator/mock_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/models.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/storage/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/comparison.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/constants.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/formatting.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/pnl.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/safe_math.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/validation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/attribution.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/backtest/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/backtest/var_backtester.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/revaluation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/historical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/monte_carlo.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/parametric.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/revaluation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/incremental_var_result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/var_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/var_result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/equity_factors.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/fi_factors.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/black_scholes.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/curves.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/analytical_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/mc_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/pde_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/dupire.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/mc_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/pde_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/risk/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/risk/contracts.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/risk/scenarios.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/bootstrap.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/coordinates.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_operators.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/leverage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/slv_mc_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/slv_pde_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.3}/quantark_compat.pth +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantark
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Modular derivatives pricing and risk library: options, autocallables, bonds, VaR, SIMM
|
|
5
5
|
Project-URL: Homepage, https://github.com/deiiiiii93/quantark
|
|
6
6
|
Project-URL: Repository, https://github.com/deiiiiii93/quantark
|
|
@@ -9,6 +9,7 @@ autocallable products (Snowball-first).
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
11
|
from dataclasses import dataclass, field
|
|
12
|
+
from typing import Optional
|
|
12
13
|
|
|
13
14
|
import numpy as np
|
|
14
15
|
|
|
@@ -24,12 +25,26 @@ class AutocallableEventStats:
|
|
|
24
25
|
ko_probability: Probability of KO occurring at each observation time.
|
|
25
26
|
survival_probability: Probability of surviving (not KO'd) up to each observation.
|
|
26
27
|
expected_discounted_ko_cashflow: Expected discounted KO redemption cashflow at each observation.
|
|
27
|
-
ki_probability:
|
|
28
|
+
ki_probability: LEGACY KI probability whose *definition differs by engine* — kept
|
|
29
|
+
for backward compatibility. QUAD/PDE report P(KI ever AND never KO)
|
|
30
|
+
(the KI indicator is absorbed to 0 on any KO), while MC reports
|
|
31
|
+
P(KI ever). Prefer the two unambiguous, cross-engine-consistent fields
|
|
32
|
+
below; ``ki_probability`` is retained only so existing callers do not
|
|
33
|
+
break.
|
|
28
34
|
expected_discounted_maturity_cashflow: Expected discounted maturity cashflow (conditional on no KO).
|
|
29
35
|
reconciliation_error: pv minus sum(expected discounted cashflows) if computed, else 0.0.
|
|
30
36
|
ki_times: KI observation/monitoring times where event probabilities are available.
|
|
31
37
|
ki_event_probability: Probability of first KI occurring at each KI time.
|
|
32
38
|
ki_survival_probability: Probability of surviving without KI up to each KI time.
|
|
39
|
+
ki_ever_probability: P(the KI barrier is breached at any point in the
|
|
40
|
+
path's life, regardless of any subsequent KO/autocall). A *monitoring*
|
|
41
|
+
statistic. ``None`` if the engine does not compute it.
|
|
42
|
+
ki_survive_knocked_in_probability: P(KI breached AND the path reaches
|
|
43
|
+
maturity without ever knocking out) = P(the note settles in the
|
|
44
|
+
knocked-in state). This is the *economically relevant* quantity for
|
|
45
|
+
downside exposure / loss distribution (a path that knocks in and then
|
|
46
|
+
recovers to autocall redeems at par, so it carries no KI loss). Equals
|
|
47
|
+
``ki_ever_probability`` minus P(KI AND KO). ``None`` if not computed.
|
|
33
48
|
"""
|
|
34
49
|
|
|
35
50
|
pv: float
|
|
@@ -43,6 +58,8 @@ class AutocallableEventStats:
|
|
|
43
58
|
ki_times: np.ndarray = field(default_factory=lambda: np.array([]))
|
|
44
59
|
ki_event_probability: np.ndarray = field(default_factory=lambda: np.array([]))
|
|
45
60
|
ki_survival_probability: np.ndarray = field(default_factory=lambda: np.array([]))
|
|
61
|
+
ki_ever_probability: Optional[float] = None
|
|
62
|
+
ki_survive_knocked_in_probability: Optional[float] = None
|
|
46
63
|
|
|
47
64
|
|
|
48
65
|
@dataclass(frozen=True)
|
|
@@ -298,20 +298,35 @@ class PhoenixMCEngine(BaseEngine):
|
|
|
298
298
|
0.0, 1.0 - np.cumsum(ki_event_probability)
|
|
299
299
|
)
|
|
300
300
|
|
|
301
|
+
# Unambiguous, cross-engine-consistent KI definitions (investigation
|
|
302
|
+
# 2026-07-01). `ki_ever` counts any path that touches the KI barrier;
|
|
303
|
+
# `ki_survive` restricts to paths that also reach maturity without KO
|
|
304
|
+
# (i.e. the note settles knocked-in). The legacy `ki_probability` keeps
|
|
305
|
+
# MC's historical "KI ever" meaning.
|
|
306
|
+
if product.has_ki_barrier:
|
|
307
|
+
ki_triggered = np.asarray(stats["ki_triggered"], dtype=bool)
|
|
308
|
+
ki_ever_probability = float(np.mean(ki_triggered))
|
|
309
|
+
ki_survive_knocked_in_probability = float(
|
|
310
|
+
np.mean(ki_triggered & ~is_ko)
|
|
311
|
+
)
|
|
312
|
+
else:
|
|
313
|
+
ki_ever_probability = 0.0
|
|
314
|
+
ki_survive_knocked_in_probability = 0.0
|
|
315
|
+
|
|
301
316
|
return PhoenixEventStats(
|
|
302
317
|
pv=pv,
|
|
303
318
|
ko_times=np.array(ko_times, dtype=float),
|
|
304
319
|
ko_probability=ko_probability,
|
|
305
320
|
survival_probability=survival_probability,
|
|
306
321
|
expected_discounted_ko_cashflow=expected_discounted_ko_cashflow,
|
|
307
|
-
ki_probability=
|
|
308
|
-
if product.has_ki_barrier
|
|
309
|
-
else 0.0,
|
|
322
|
+
ki_probability=ki_ever_probability,
|
|
310
323
|
expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
|
|
311
324
|
reconciliation_error=float(reconciliation_error),
|
|
312
325
|
ki_times=ki_event_times,
|
|
313
326
|
ki_event_probability=ki_event_probability,
|
|
314
327
|
ki_survival_probability=ki_survival_probability,
|
|
328
|
+
ki_ever_probability=ki_ever_probability,
|
|
329
|
+
ki_survive_knocked_in_probability=ki_survive_knocked_in_probability,
|
|
315
330
|
coupon_probability=coupon_probabilities,
|
|
316
331
|
expected_discounted_coupon_cashflow=coupon_cashflows,
|
|
317
332
|
)
|
|
@@ -422,22 +422,31 @@ class SnowballMCEngine(BaseEngine):
|
|
|
422
422
|
)
|
|
423
423
|
reconciliation_error = pv - pv_cashflows
|
|
424
424
|
|
|
425
|
+
# Unambiguous, cross-engine-consistent KI definitions (investigation
|
|
426
|
+
# 2026-07-01): ki_ever = P(KI ever, KO-independent); ki_survive =
|
|
427
|
+
# P(KI ever AND never KO) = settles knocked-in. Legacy ki_probability keeps
|
|
428
|
+
# MC's historical "KI ever" meaning.
|
|
429
|
+
if product.has_ki_barrier or already_knocked_in:
|
|
430
|
+
ki_ever_probability = float(np.mean(ki_triggered))
|
|
431
|
+
ki_survive_knocked_in_probability = float(np.mean(ki_triggered & ~is_ko))
|
|
432
|
+
else:
|
|
433
|
+
ki_ever_probability = 0.0
|
|
434
|
+
ki_survive_knocked_in_probability = 0.0
|
|
435
|
+
|
|
425
436
|
return AutocallableEventStats(
|
|
426
437
|
pv=pv,
|
|
427
438
|
ko_times=ko_times,
|
|
428
439
|
ko_probability=ko_probability,
|
|
429
440
|
survival_probability=survival_probability,
|
|
430
441
|
expected_discounted_ko_cashflow=expected_discounted_ko_cashflow,
|
|
431
|
-
ki_probability=
|
|
432
|
-
float(np.mean(ki_triggered))
|
|
433
|
-
if product.has_ki_barrier or already_knocked_in
|
|
434
|
-
else 0.0
|
|
435
|
-
),
|
|
442
|
+
ki_probability=ki_ever_probability,
|
|
436
443
|
expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
|
|
437
444
|
reconciliation_error=float(reconciliation_error),
|
|
438
445
|
ki_times=ki_event_times,
|
|
439
446
|
ki_event_probability=ki_event_probability,
|
|
440
447
|
ki_survival_probability=ki_survival_probability,
|
|
448
|
+
ki_ever_probability=ki_ever_probability,
|
|
449
|
+
ki_survive_knocked_in_probability=ki_survive_knocked_in_probability,
|
|
441
450
|
)
|
|
442
451
|
|
|
443
452
|
def _calculate_event_stats_ko_reset(
|
|
@@ -551,6 +560,10 @@ class SnowballMCEngine(BaseEngine):
|
|
|
551
560
|
ki_probability=float(np.mean(ki_triggered)),
|
|
552
561
|
expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
|
|
553
562
|
reconciliation_error=float(reconciliation_error),
|
|
563
|
+
# ki_ever = P(KI ever, KO-independent); ki_survive = P(KI ever AND
|
|
564
|
+
# never KO'd, pre- or post-reset). Legacy ki_probability stays "KI ever".
|
|
565
|
+
ki_ever_probability=float(np.mean(ki_triggered)),
|
|
566
|
+
ki_survive_knocked_in_probability=float(np.mean(ki_triggered & ~is_ko)),
|
|
554
567
|
pre_ko_times=pre_times,
|
|
555
568
|
pre_ko_probability=pre_prob,
|
|
556
569
|
post_ko_times=post_times,
|
{quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py
RENAMED
|
@@ -8,6 +8,7 @@ to the V1 surface (ABSOLUTE post-KO mode only).
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
10
|
from collections import OrderedDict
|
|
11
|
+
from dataclasses import replace
|
|
11
12
|
from time import perf_counter
|
|
12
13
|
from typing import Dict, List, Optional, Tuple
|
|
13
14
|
|
|
@@ -15,6 +16,7 @@ import numpy as np
|
|
|
15
16
|
|
|
16
17
|
from quantark.asset.equity.engine.pde.base_pde_solver import PDESolutionResult
|
|
17
18
|
from quantark.asset.equity.engine.pde.snowball_pde_solver import SnowballPDESolver
|
|
19
|
+
from quantark.asset.equity.param import QuadParams
|
|
18
20
|
from quantark.asset.equity.product.option.ko_reset_snowball_option import (
|
|
19
21
|
KnockOutResetSnowballOption,
|
|
20
22
|
)
|
|
@@ -57,7 +59,31 @@ class KOResetSnowballPDESolver(SnowballPDESolver):
|
|
|
57
59
|
def calculate_event_stats(
|
|
58
60
|
self, product: KnockOutResetSnowballOption, pricing_env: PricingEnvironment
|
|
59
61
|
) -> Optional[object]:
|
|
60
|
-
|
|
62
|
+
if not isinstance(product, KnockOutResetSnowballOption):
|
|
63
|
+
return None
|
|
64
|
+
if pricing_env is None:
|
|
65
|
+
return None
|
|
66
|
+
|
|
67
|
+
from quantark.asset.equity.engine.quad.ko_reset_snowball_quad_engine import (
|
|
68
|
+
KOResetSnowballQuadEngine,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
grid_points = max(501, int(getattr(self.params, "grid_size", 0) or 0))
|
|
72
|
+
quad_stats = KOResetSnowballQuadEngine(
|
|
73
|
+
QuadParams(grid_points=grid_points)
|
|
74
|
+
).calculate_event_stats(product, pricing_env)
|
|
75
|
+
if quad_stats is None:
|
|
76
|
+
return None
|
|
77
|
+
|
|
78
|
+
pde_pv = float(self.price(product, pricing_env))
|
|
79
|
+
pv_delta = pde_pv - float(quad_stats.pv)
|
|
80
|
+
return replace(
|
|
81
|
+
quad_stats,
|
|
82
|
+
pv=pde_pv,
|
|
83
|
+
expected_discounted_maturity_cashflow=(
|
|
84
|
+
float(quad_stats.expected_discounted_maturity_cashflow) + pv_delta
|
|
85
|
+
),
|
|
86
|
+
)
|
|
61
87
|
|
|
62
88
|
def _validate_product(self, product: KnockOutResetSnowballOption) -> None:
|
|
63
89
|
super()._validate_product(product)
|
|
@@ -427,17 +427,25 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
427
427
|
)
|
|
428
428
|
ko_index_by_tidx[t_idx] = k
|
|
429
429
|
|
|
430
|
-
# Surface columns: [KO_0..KO_{n-1}, <extra coupon cols>, KI_indicator
|
|
430
|
+
# Surface columns: [KO_0..KO_{n-1}, <extra coupon cols>, KI_indicator,
|
|
431
|
+
# KI_ever_indicator]. The KI_indicator carries the "settles knocked-in"
|
|
432
|
+
# semantics (absorbed to 0 on any KO). The KI_ever_indicator tracks
|
|
433
|
+
# P(the underlying breaches the KI barrier at any point in [0, T]),
|
|
434
|
+
# independent of KO/autocall — it is a pure first-passage statistic and is
|
|
435
|
+
# therefore EXEMPT from the KO absorption below (matching the QUAD and MC
|
|
436
|
+
# ki_ever definition).
|
|
431
437
|
n_extra = self._n_extra_event_cols(n_ko)
|
|
432
438
|
ki_col = n_ko + n_extra
|
|
433
|
-
|
|
439
|
+
ki_ever_col = n_ko + n_extra + 1
|
|
440
|
+
n_cols = n_ko + n_extra + 2
|
|
434
441
|
|
|
435
442
|
# Terminal conditions at maturity (t = T):
|
|
436
443
|
# - KO indicators are zero at maturity (KO only at discrete observations via jumps)
|
|
437
|
-
# - KI
|
|
444
|
+
# - Both KI indicators are 1 on the KI surface and 0 on the no-KI surface
|
|
438
445
|
v0_next = np.zeros((num_x, n_cols), dtype=float)
|
|
439
446
|
v1_next = np.zeros((num_x, n_cols), dtype=float)
|
|
440
447
|
v1_next[:, ki_col] = 1.0
|
|
448
|
+
v1_next[:, ki_ever_col] = 1.0
|
|
441
449
|
|
|
442
450
|
# Apply terminal KO/KI events at maturity if observation schedules include t=T.
|
|
443
451
|
terminal_tidx = num_t - 1
|
|
@@ -447,6 +455,9 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
447
455
|
barrier = float(rec.barrier) if rec.barrier is not None else 0.0
|
|
448
456
|
mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
|
|
449
457
|
|
|
458
|
+
# KI-ever is exempt from KO absorption (pure first-passage statistic).
|
|
459
|
+
ever0 = v0_next[mask_ko, ki_ever_col].copy()
|
|
460
|
+
ever1 = v1_next[mask_ko, ki_ever_col].copy()
|
|
450
461
|
v0_next[mask_ko, :] = 0.0
|
|
451
462
|
v1_next[mask_ko, :] = 0.0
|
|
452
463
|
df_delay = self._cashflow_value_at_time(
|
|
@@ -457,6 +468,8 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
457
468
|
)
|
|
458
469
|
v0_next[mask_ko, terminal_ko_idx] = df_delay
|
|
459
470
|
v1_next[mask_ko, terminal_ko_idx] = df_delay
|
|
471
|
+
v0_next[mask_ko, ki_ever_col] = ever0
|
|
472
|
+
v1_next[mask_ko, ki_ever_col] = ever1
|
|
460
473
|
self._set_extra_event_indicators(
|
|
461
474
|
v0_next, v1_next, s_vec, n_ko, terminal_ko_idx, rec,
|
|
462
475
|
product, pricing_env, t_vec, terminal_tidx,
|
|
@@ -559,6 +572,9 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
559
572
|
mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
|
|
560
573
|
|
|
561
574
|
# Zero all event surfaces in KO region, then set the KO_i indicator.
|
|
575
|
+
# KI-ever is exempt (pure first-passage statistic, no KO absorption).
|
|
576
|
+
ever0 = v0_cur[mask_ko, ki_ever_col].copy()
|
|
577
|
+
ever1 = v1_cur[mask_ko, ki_ever_col].copy()
|
|
562
578
|
v0_cur[mask_ko, :] = 0.0
|
|
563
579
|
v1_cur[mask_ko, :] = 0.0
|
|
564
580
|
df_delay = self._cashflow_value_at_time(
|
|
@@ -569,6 +585,8 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
569
585
|
)
|
|
570
586
|
v0_cur[mask_ko, ko_idx] = df_delay
|
|
571
587
|
v1_cur[mask_ko, ko_idx] = df_delay
|
|
588
|
+
v0_cur[mask_ko, ki_ever_col] = ever0
|
|
589
|
+
v1_cur[mask_ko, ki_ever_col] = ever1
|
|
572
590
|
self._set_extra_event_indicators(
|
|
573
591
|
v0_cur, v1_cur, s_vec, n_ko, ko_idx, rec,
|
|
574
592
|
product, pricing_env, t_vec, j,
|
|
@@ -624,13 +642,16 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
624
642
|
ki_survival_probability = np.array([], dtype=float)
|
|
625
643
|
if already_knocked_in:
|
|
626
644
|
ki_probability = 1.0
|
|
645
|
+
ki_ever_probability = 1.0
|
|
627
646
|
ki_times = np.array([0.0], dtype=float)
|
|
628
647
|
ki_event_probability = np.array([1.0], dtype=float)
|
|
629
648
|
ki_survival_probability = np.array([0.0], dtype=float)
|
|
630
649
|
else:
|
|
631
|
-
ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
|
|
632
650
|
df_T = pricing_env.get_discount_factor(float(tau))
|
|
651
|
+
ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
|
|
633
652
|
ki_probability = float(ed_ki / df_T) if df_T > 0.0 else 0.0
|
|
653
|
+
ed_ki_ever = float(np.interp(spot_log, x_vec, initial_grid[:, ki_ever_col]))
|
|
654
|
+
ki_ever_probability = float(ed_ki_ever / df_T) if df_T > 0.0 else 0.0
|
|
634
655
|
|
|
635
656
|
pv = float(self.price(product, pricing_env))
|
|
636
657
|
expected_discounted_maturity_cf = float(pv - float(np.sum(ed_ko_cf)))
|
|
@@ -657,6 +678,13 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
657
678
|
ki_times=ki_times,
|
|
658
679
|
ki_event_probability=ki_event_probability,
|
|
659
680
|
ki_survival_probability=ki_survival_probability,
|
|
681
|
+
# Two unambiguous, cross-engine-consistent KI fields. The legacy
|
|
682
|
+
# `ki_probability` keeps the PDE's historical "settles knocked-in"
|
|
683
|
+
# meaning (KI indicator absorbed to 0 on any KO), which equals
|
|
684
|
+
# `ki_survive_knocked_in_probability`. `ki_ever_probability` comes from
|
|
685
|
+
# the dedicated KI-ever column that carries no KO absorption.
|
|
686
|
+
ki_ever_probability=ki_ever_probability,
|
|
687
|
+
ki_survive_knocked_in_probability=ki_probability,
|
|
660
688
|
**extra_fields,
|
|
661
689
|
)
|
|
662
690
|
|
{quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py
RENAMED
|
@@ -13,6 +13,7 @@ from typing import List, Optional, Sequence
|
|
|
13
13
|
|
|
14
14
|
import numpy as np
|
|
15
15
|
|
|
16
|
+
from quantark.asset.equity.engine.event_stats import KOResetEventStats
|
|
16
17
|
from quantark.asset.equity.engine.quad.snowball_quad_engine import SnowballQuadEngine
|
|
17
18
|
from quantark.asset.equity.engine.quad.quad_math import QuadratureMath
|
|
18
19
|
from quantark.asset.equity.param import QuadParams
|
|
@@ -317,8 +318,341 @@ class KOResetSnowballQuadEngine(SnowballQuadEngine):
|
|
|
317
318
|
|
|
318
319
|
def calculate_event_stats(
|
|
319
320
|
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
320
|
-
) -> Optional[
|
|
321
|
-
|
|
321
|
+
) -> Optional[KOResetEventStats]:
|
|
322
|
+
if not isinstance(product, KnockOutResetSnowballOption):
|
|
323
|
+
return None
|
|
324
|
+
if pricing_env is None:
|
|
325
|
+
raise PricingError("PricingEnvironment is required for KOResetSnowballQuadEngine.")
|
|
326
|
+
return self._compute_event_stats(product, pricing_env)
|
|
327
|
+
|
|
328
|
+
def _compute_event_stats(
|
|
329
|
+
self,
|
|
330
|
+
product: KnockOutResetSnowballOption,
|
|
331
|
+
pricing_env: PricingEnvironment,
|
|
332
|
+
) -> Optional[KOResetEventStats]:
|
|
333
|
+
self._validate_product(product)
|
|
334
|
+
|
|
335
|
+
spot = pricing_env.spot
|
|
336
|
+
maturity = product.get_maturity(pricing_env)
|
|
337
|
+
validate_positive(spot, "spot")
|
|
338
|
+
validate_positive(maturity, "maturity", allow_zero=True)
|
|
339
|
+
if is_zero(maturity, tol=Tolerance.ZERO):
|
|
340
|
+
return None
|
|
341
|
+
|
|
342
|
+
rate = pricing_env.get_rate(maturity)
|
|
343
|
+
div = pricing_env.get_div_yield(maturity)
|
|
344
|
+
vol = pricing_env.get_vol(product.strike, maturity)
|
|
345
|
+
validate_positive(vol, "volatility")
|
|
346
|
+
validate_non_negative(div, "dividend_yield")
|
|
347
|
+
if vol > 5.0:
|
|
348
|
+
raise ValidationError(f"Volatility too high for quadrature stability: {vol}")
|
|
349
|
+
|
|
350
|
+
pre_ko_records = self._resolve_ko_records(
|
|
351
|
+
product, pricing_env, product.barrier_config
|
|
352
|
+
)
|
|
353
|
+
pre_ko_records = [
|
|
354
|
+
rec
|
|
355
|
+
for rec in pre_ko_records
|
|
356
|
+
if rec.observation_time <= maturity
|
|
357
|
+
or is_close(rec.observation_time, maturity, abs_tol=Tolerance.PRECISION)
|
|
358
|
+
]
|
|
359
|
+
if not pre_ko_records:
|
|
360
|
+
return None
|
|
361
|
+
|
|
362
|
+
post_ko_records = self._resolve_ko_records(
|
|
363
|
+
product, pricing_env, product.post_barrier_config
|
|
364
|
+
)
|
|
365
|
+
post_ko_records = [
|
|
366
|
+
rec
|
|
367
|
+
for rec in post_ko_records
|
|
368
|
+
if rec.observation_time <= maturity
|
|
369
|
+
or is_close(rec.observation_time, maturity, abs_tol=Tolerance.PRECISION)
|
|
370
|
+
]
|
|
371
|
+
if not post_ko_records:
|
|
372
|
+
return None
|
|
373
|
+
|
|
374
|
+
ki_continuous = product.has_ki_barrier and (
|
|
375
|
+
product.barrier_config.ki_continuous
|
|
376
|
+
or product.barrier_config.ki_observation_type == ObservationType.CONTINUOUS
|
|
377
|
+
)
|
|
378
|
+
ki_records: Sequence = []
|
|
379
|
+
if product.has_ki_barrier and not ki_continuous:
|
|
380
|
+
ki_records = product.resolve_ki_observations(pricing_env)
|
|
381
|
+
if not ki_records:
|
|
382
|
+
raise PricingError("KI observation schedule is empty for KOResetSnowballQuadEngine.")
|
|
383
|
+
|
|
384
|
+
times = self._merge_times(
|
|
385
|
+
[rec.observation_time for rec in pre_ko_records]
|
|
386
|
+
+ [rec.observation_time for rec in post_ko_records],
|
|
387
|
+
[rec.observation_time for rec in ki_records],
|
|
388
|
+
maturity,
|
|
389
|
+
)
|
|
390
|
+
if not times:
|
|
391
|
+
return None
|
|
392
|
+
|
|
393
|
+
align_log = self._select_alignment_log(spot, product)
|
|
394
|
+
fft_padding_factor = self._resolve_fft_padding_factor()
|
|
395
|
+
fft_filter_alpha, fft_filter_power = self._resolve_fft_filter()
|
|
396
|
+
math_utils = QuadratureMath(
|
|
397
|
+
grid_x=self.params.grid_points,
|
|
398
|
+
spot=spot,
|
|
399
|
+
maturity=maturity,
|
|
400
|
+
vol_max=vol,
|
|
401
|
+
num_std_devs=self.params.num_std_devs,
|
|
402
|
+
align_log=align_log,
|
|
403
|
+
fft_padding_factor=fft_padding_factor,
|
|
404
|
+
fft_filter_alpha=fft_filter_alpha,
|
|
405
|
+
fft_filter_power=fft_filter_power,
|
|
406
|
+
)
|
|
407
|
+
grid = math_utils.grid
|
|
408
|
+
spot_grid = spot * np.exp(grid)
|
|
409
|
+
dt = self._build_dt(times)
|
|
410
|
+
tau = 0.5 * vol * vol * dt
|
|
411
|
+
if np.any(tau[1:] <= 0.0):
|
|
412
|
+
raise ValidationError("time step too small for quadrature solver.")
|
|
413
|
+
|
|
414
|
+
alpha = (rate - div - 0.5 * vol * vol) / (vol * vol)
|
|
415
|
+
beta = (rate - div - 0.5 * vol * vol) ** 2 / (vol**4) + 2.0 * rate / (
|
|
416
|
+
vol * vol
|
|
417
|
+
)
|
|
418
|
+
|
|
419
|
+
n_pre = len(pre_ko_records)
|
|
420
|
+
n_post = len(post_ko_records)
|
|
421
|
+
post_offset = n_pre
|
|
422
|
+
ki_col = n_pre + n_post
|
|
423
|
+
ki_ever_col = ki_col + 1
|
|
424
|
+
n_rows = ki_ever_col + 1
|
|
425
|
+
|
|
426
|
+
v_in = np.zeros((n_rows, grid.size), dtype=float)
|
|
427
|
+
v_out = np.zeros((n_rows, grid.size), dtype=float)
|
|
428
|
+
v_in[ki_col] = 1.0
|
|
429
|
+
v_in[ki_ever_col] = 1.0
|
|
430
|
+
|
|
431
|
+
log_ki_barrier = None
|
|
432
|
+
if product.has_ki_barrier and ki_continuous:
|
|
433
|
+
if product.barrier_config.ki_barrier is None:
|
|
434
|
+
raise PricingError("KI barrier configuration is missing.")
|
|
435
|
+
if isinstance(product.barrier_config.ki_barrier, list):
|
|
436
|
+
raise PricingError("Continuous KI requires scalar ki_barrier.")
|
|
437
|
+
log_ki_barrier = safe_log(product.barrier_config.ki_barrier / spot)
|
|
438
|
+
|
|
439
|
+
knocked_in_at_valuation = self._is_knocked_in_at_valuation(
|
|
440
|
+
product,
|
|
441
|
+
spot,
|
|
442
|
+
pricing_env,
|
|
443
|
+
ki_continuous=ki_continuous,
|
|
444
|
+
ki_records=ki_records,
|
|
445
|
+
)
|
|
446
|
+
full_p_lr, full_p_ur, full_p0 = 0, len(grid) - 1, (len(grid) - 1) % 2
|
|
447
|
+
omega_grid = math_utils.z_grid
|
|
448
|
+
disable_ko_after_ki = product.barrier_config.disable_ko_after_ki
|
|
449
|
+
smoothing_width = self._resolve_event_smoothing_width(math_utils, product)
|
|
450
|
+
|
|
451
|
+
for step_index in range(len(times), 0, -1):
|
|
452
|
+
obs_time = times[step_index - 1]
|
|
453
|
+
|
|
454
|
+
pre_ko_record = self._match_record(obs_time, pre_ko_records)
|
|
455
|
+
if pre_ko_record is not None:
|
|
456
|
+
pre_idx = pre_ko_records.index(pre_ko_record)
|
|
457
|
+
ko_weight = self._smooth_step_weight(
|
|
458
|
+
grid,
|
|
459
|
+
pre_ko_record.barrier,
|
|
460
|
+
spot,
|
|
461
|
+
smoothing_width,
|
|
462
|
+
trigger_is_down=product.is_reverse,
|
|
463
|
+
)
|
|
464
|
+
if ko_weight is None:
|
|
465
|
+
ko_mask = (
|
|
466
|
+
spot_grid <= pre_ko_record.barrier
|
|
467
|
+
if product.is_reverse
|
|
468
|
+
else spot_grid >= pre_ko_record.barrier
|
|
469
|
+
)
|
|
470
|
+
ko_weight = ko_mask.astype(float)
|
|
471
|
+
|
|
472
|
+
ever_before = v_out[ki_ever_col].copy()
|
|
473
|
+
v_out *= 1.0 - ko_weight
|
|
474
|
+
v_out[pre_idx] += ko_weight * float(
|
|
475
|
+
self._ko_discount(rate, obs_time, pre_ko_record.settlement_time)
|
|
476
|
+
)
|
|
477
|
+
v_out[ki_ever_col] = ever_before
|
|
478
|
+
|
|
479
|
+
post_ko_record = self._match_record(obs_time, post_ko_records)
|
|
480
|
+
if post_ko_record is not None and not disable_ko_after_ki:
|
|
481
|
+
post_idx = post_ko_records.index(post_ko_record)
|
|
482
|
+
ko_weight = self._smooth_step_weight(
|
|
483
|
+
grid,
|
|
484
|
+
post_ko_record.barrier,
|
|
485
|
+
spot,
|
|
486
|
+
smoothing_width,
|
|
487
|
+
trigger_is_down=product.is_reverse,
|
|
488
|
+
)
|
|
489
|
+
if ko_weight is None:
|
|
490
|
+
ko_mask = (
|
|
491
|
+
spot_grid <= post_ko_record.barrier
|
|
492
|
+
if product.is_reverse
|
|
493
|
+
else spot_grid >= post_ko_record.barrier
|
|
494
|
+
)
|
|
495
|
+
ko_weight = ko_mask.astype(float)
|
|
496
|
+
|
|
497
|
+
ever_before = v_in[ki_ever_col].copy()
|
|
498
|
+
v_in *= 1.0 - ko_weight
|
|
499
|
+
v_in[post_offset + post_idx] += ko_weight * float(
|
|
500
|
+
self._ko_discount(rate, obs_time, post_ko_record.settlement_time)
|
|
501
|
+
)
|
|
502
|
+
v_in[ki_ever_col] = ever_before
|
|
503
|
+
|
|
504
|
+
if ki_continuous and log_ki_barrier is not None:
|
|
505
|
+
ki_mask = (
|
|
506
|
+
spot_grid >= product.barrier_config.ki_barrier
|
|
507
|
+
if product.is_reverse
|
|
508
|
+
else spot_grid <= product.barrier_config.ki_barrier
|
|
509
|
+
)
|
|
510
|
+
v_out[:, ki_mask] = v_in[:, ki_mask]
|
|
511
|
+
elif ki_records:
|
|
512
|
+
ki_record = self._match_record(obs_time, ki_records)
|
|
513
|
+
if ki_record is not None:
|
|
514
|
+
ki_mask = (
|
|
515
|
+
spot_grid >= ki_record.barrier
|
|
516
|
+
if product.is_reverse
|
|
517
|
+
else spot_grid <= ki_record.barrier
|
|
518
|
+
)
|
|
519
|
+
v_out[:, ki_mask] = v_in[:, ki_mask]
|
|
520
|
+
|
|
521
|
+
tau_step = float(tau[step_index])
|
|
522
|
+
prefactor = math.exp(-beta * tau_step) / math.sqrt(math.pi * tau_step) / 2.0
|
|
523
|
+
omega_array = np.exp(
|
|
524
|
+
-(omega_grid**2) / (4.0 * tau_step) - alpha * omega_grid
|
|
525
|
+
)
|
|
526
|
+
|
|
527
|
+
v_in = self._diffuse_fft(
|
|
528
|
+
v_in,
|
|
529
|
+
math_utils,
|
|
530
|
+
omega_array,
|
|
531
|
+
prefactor,
|
|
532
|
+
full_p_lr,
|
|
533
|
+
full_p_ur,
|
|
534
|
+
full_p0,
|
|
535
|
+
alpha,
|
|
536
|
+
beta,
|
|
537
|
+
tau_step,
|
|
538
|
+
)
|
|
539
|
+
|
|
540
|
+
if ki_continuous and log_ki_barrier is not None:
|
|
541
|
+
v_out = self._diffuse_with_bridge(
|
|
542
|
+
v_out,
|
|
543
|
+
v_in,
|
|
544
|
+
math_utils,
|
|
545
|
+
omega_array,
|
|
546
|
+
prefactor,
|
|
547
|
+
full_p_lr,
|
|
548
|
+
full_p_ur,
|
|
549
|
+
full_p0,
|
|
550
|
+
log_ki_barrier,
|
|
551
|
+
alpha,
|
|
552
|
+
beta,
|
|
553
|
+
vol,
|
|
554
|
+
dt[step_index],
|
|
555
|
+
tau_step,
|
|
556
|
+
product.is_reverse,
|
|
557
|
+
)
|
|
558
|
+
else:
|
|
559
|
+
v_out = self._diffuse_fft(
|
|
560
|
+
v_out,
|
|
561
|
+
math_utils,
|
|
562
|
+
omega_array,
|
|
563
|
+
prefactor,
|
|
564
|
+
full_p_lr,
|
|
565
|
+
full_p_ur,
|
|
566
|
+
full_p0,
|
|
567
|
+
alpha,
|
|
568
|
+
beta,
|
|
569
|
+
tau_step,
|
|
570
|
+
)
|
|
571
|
+
|
|
572
|
+
initial_surface = v_in if knocked_in_at_valuation else v_out
|
|
573
|
+
pre_unit = np.array(
|
|
574
|
+
[math_utils.interpolate(initial_surface[i], x=0.0) for i in range(n_pre)],
|
|
575
|
+
dtype=float,
|
|
576
|
+
)
|
|
577
|
+
post_unit = np.array(
|
|
578
|
+
[
|
|
579
|
+
math_utils.interpolate(initial_surface[post_offset + i], x=0.0)
|
|
580
|
+
for i in range(n_post)
|
|
581
|
+
],
|
|
582
|
+
dtype=float,
|
|
583
|
+
)
|
|
584
|
+
|
|
585
|
+
pre_times = np.array([rec.observation_time for rec in pre_ko_records], dtype=float)
|
|
586
|
+
post_times = np.array([rec.observation_time for rec in post_ko_records], dtype=float)
|
|
587
|
+
pre_probability = np.zeros(n_pre, dtype=float)
|
|
588
|
+
post_probability = np.zeros(n_post, dtype=float)
|
|
589
|
+
expected_discounted_pre_ko_cashflow = np.zeros(n_pre, dtype=float)
|
|
590
|
+
expected_discounted_post_ko_cashflow = 0.0
|
|
591
|
+
|
|
592
|
+
for i, rec in enumerate(pre_ko_records):
|
|
593
|
+
df_total = math.exp(-rate * float(rec.observation_time)) * float(
|
|
594
|
+
self._ko_discount(rate, float(rec.observation_time), rec.settlement_time)
|
|
595
|
+
)
|
|
596
|
+
if df_total > 0:
|
|
597
|
+
pre_probability[i] = float(pre_unit[i] / df_total)
|
|
598
|
+
payoff = float(rec.payoff) if rec.payoff is not None else 0.0
|
|
599
|
+
expected_discounted_pre_ko_cashflow[i] = float(pre_unit[i] * payoff)
|
|
600
|
+
|
|
601
|
+
for i, rec in enumerate(post_ko_records):
|
|
602
|
+
df_total = math.exp(-rate * float(rec.observation_time)) * float(
|
|
603
|
+
self._ko_discount(rate, float(rec.observation_time), rec.settlement_time)
|
|
604
|
+
)
|
|
605
|
+
if df_total > 0:
|
|
606
|
+
post_probability[i] = float(post_unit[i] / df_total)
|
|
607
|
+
payoff = float(rec.payoff) if rec.payoff is not None else 0.0
|
|
608
|
+
expected_discounted_post_ko_cashflow += float(post_unit[i] * payoff)
|
|
609
|
+
|
|
610
|
+
df_maturity = math.exp(-rate * maturity)
|
|
611
|
+
ki_survive = 0.0
|
|
612
|
+
ki_ever = 0.0
|
|
613
|
+
if df_maturity > 0.0:
|
|
614
|
+
ki_survive = float(
|
|
615
|
+
math_utils.interpolate(initial_surface[ki_col], x=0.0) / df_maturity
|
|
616
|
+
)
|
|
617
|
+
ki_ever = float(
|
|
618
|
+
math_utils.interpolate(initial_surface[ki_ever_col], x=0.0)
|
|
619
|
+
/ df_maturity
|
|
620
|
+
)
|
|
621
|
+
|
|
622
|
+
survival_probability = np.ones(n_pre, dtype=float)
|
|
623
|
+
cumulative_pre_ko = 0.0
|
|
624
|
+
for i in range(n_pre):
|
|
625
|
+
cumulative_pre_ko += pre_probability[i]
|
|
626
|
+
survival_probability[i] = max(0.0, 1.0 - cumulative_pre_ko)
|
|
627
|
+
|
|
628
|
+
pv = float(self.price(product, pricing_env))
|
|
629
|
+
expected_discounted_maturity_cashflow = float(
|
|
630
|
+
pv
|
|
631
|
+
- float(np.sum(expected_discounted_pre_ko_cashflow))
|
|
632
|
+
- expected_discounted_post_ko_cashflow
|
|
633
|
+
)
|
|
634
|
+
|
|
635
|
+
return KOResetEventStats(
|
|
636
|
+
pv=pv,
|
|
637
|
+
ko_times=pre_times,
|
|
638
|
+
ko_probability=pre_probability,
|
|
639
|
+
survival_probability=survival_probability,
|
|
640
|
+
expected_discounted_ko_cashflow=expected_discounted_pre_ko_cashflow,
|
|
641
|
+
ki_probability=ki_ever,
|
|
642
|
+
expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
|
|
643
|
+
reconciliation_error=0.0,
|
|
644
|
+
ki_ever_probability=ki_ever,
|
|
645
|
+
ki_survive_knocked_in_probability=ki_survive,
|
|
646
|
+
pre_ko_times=pre_times,
|
|
647
|
+
pre_ko_probability=pre_probability,
|
|
648
|
+
post_ko_times=post_times,
|
|
649
|
+
post_ko_probability=post_probability,
|
|
650
|
+
pre_ko_probability_total=float(np.sum(pre_probability)),
|
|
651
|
+
post_ko_probability_total=float(np.sum(post_probability)),
|
|
652
|
+
expected_discounted_post_ko_cashflow=float(
|
|
653
|
+
expected_discounted_post_ko_cashflow
|
|
654
|
+
),
|
|
655
|
+
)
|
|
322
656
|
|
|
323
657
|
def _validate_product(self, product: KnockOutResetSnowballOption) -> None:
|
|
324
658
|
if product.barrier_config.ko_observation_type != ObservationType.DISCRETE:
|