quantark 0.2.1__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.1 → quantark-0.2.3}/CHANGELOG.md +8 -0
- {quantark-0.2.1 → quantark-0.2.3}/PKG-INFO +1 -1
- {quantark-0.2.1 → quantark-0.2.3}/pyproject.toml +1 -1
- {quantark-0.2.1 → quantark-0.2.3}/quantark/__init__.py +1 -1
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/base_engine.py +12 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/event_stats.py +18 -1
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +18 -3
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +18 -5
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/base_pde_solver.py +30 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +27 -1
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +92 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +91 -14
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde_engine.py +12 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +336 -2
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +88 -11
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +191 -23
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/param/engine_params.py +13 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/greeks_calculator.py +115 -22
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/__init__.py +10 -0
- quantark-0.2.3/quantark/cashleg/autocallable_leg.py +198 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/event_distribution.py +10 -1
- {quantark-0.2.1 → quantark-0.2.3}/.gitignore +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/LICENSE +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/NOTICE +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/README.md +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/_compat.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/discount/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/base_bond_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/frn.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/forward/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/futures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/option/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/schedule/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/schedule/cashflow.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/conventions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/mc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/base_credit_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/basket_cds.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/cds.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/analysis/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/accrual_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_valuation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/localvol_greeks.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/sabr_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/time_grid.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/barrier.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/events.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/manager.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/param/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_sobol.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/sabr/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/sabr/sabr_process.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/base_equity_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/futures.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/accumulator_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/american_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/asian_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/barrier_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_helpers.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/base_swap.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/multi_asset_trs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_event_handler.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/plotting.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/surfaces.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/term_structure.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/base_fx_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_common.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_greeks.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_mc_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/process/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/process/fx_gk_path_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/base_fx_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/currency_pair.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_barrier_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_one_touch_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_sharkfin_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_note.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/report/fx_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/fra_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/swaption_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/cap_floor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/fra.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/irs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/swaption.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/vol_model_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/hedge_executor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/metrics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/advanced_backtest.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/hedge_executor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/metrics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/logger.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/_replay.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/book_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/engine_factory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/market.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/report_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/base_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/hedge_instruments.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/scenarios.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/transaction_costs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/accrual_leg.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/base_amount.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/deterministic_leg.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/fixed_payoff_leg.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/leg_schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/leg_valuator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/day_path.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/path_builder.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/report/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/results/result_exporter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_sobol.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_variance_reduction.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/basis/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/basis/basis_yield.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/credit/ajd_hazard_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/credit/hazard_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/div/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/div/dividend_yield.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/index/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/index/rate_index.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/quote/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/quote/spot_quote.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/rrf/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/rrf/rate_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/collapse_guard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/diagnostics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/hagan.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/sabr_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/bs_fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/market_conventions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/smile_builder.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_core.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_term_structure.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vol_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/credit/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/credit/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/swap_position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fi/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fi/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fx/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fx/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/portfolio_snapshot.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/portfolio_storage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/credit_pricing_environment.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/fx_pricing_environment.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/pricing_environment.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/builders.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/models.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/registry.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/service.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/commodity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/credit.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/equity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/interest_rate.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/maths.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/pfe.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/replacement_cost.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/netting_set.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/trade.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/parameters/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/parameters/supervisory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/results/result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/cva/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/cva/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/commodity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/correlations.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/counterparty_credit.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/equity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/interest_rate.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/reference_credit.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/asof.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/correlation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/curves.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/grid.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/path_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/pfe.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/resampling.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/paths.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/phoenix_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/repricer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/simulator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/snowball_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/statemachine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/value_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/sensitivity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/parameters/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/parameters/supervisory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/counterparty.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/credit_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/netting.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/trade.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/trade_portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/results/result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sacva_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/curve_bump.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/shifts.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/accessors.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/commodity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/credit_qualifying.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/cross_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/equity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/ir.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/version.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/crif/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/crif/models.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/crif/parser.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/addon.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/concentration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/correlations.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/classification/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/factory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/portfolio_adapter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/market_data.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/crif_export.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/excel_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/html_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/attribution.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/simm_result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/whatif.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/sensitivity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/taxonomy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/template/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/template/xlsx_loader.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/template/xlsx_template.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/report/report_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/report/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/metrics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/report/report_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/report/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/result_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/result_exporter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/stress_results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_builder.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_storage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/stress/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/stress/stress_applicator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/stress/stress_types.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/barrier_shift.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/business_calendar.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/day_counter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china.csv +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/bond_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/deltaone_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/engine_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/fx_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/greek_conventions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/greeks_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/option_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/exceptions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/converter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/example_usage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/generator/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/generator/mock_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/models.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/storage/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/comparison.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/constants.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/formatting.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/pnl.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/safe_math.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/validation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/attribution.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/backtest/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/backtest/var_backtester.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/revaluation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/historical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/monte_carlo.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/parametric.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/revaluation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/incremental_var_result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/var_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/var_result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/equity_factors.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/fi_factors.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/black_scholes.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/curves.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/analytical_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/mc_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/pde_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/dupire.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/mc_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/pde_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/risk/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/risk/contracts.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/risk/scenarios.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/bootstrap.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/coordinates.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_operators.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/leverage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/slv_mc_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/slv_pde_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.3}/quantark_compat.pth +0 -0
|
@@ -5,6 +5,14 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
5
5
|
and the project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
6
|
During 0.x the public API may still change between minor versions.
|
|
7
7
|
|
|
8
|
+
## [0.2.2] - 2026-07-01
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- PDE numerical Greeks: freeze the base spatial domain for finite-difference
|
|
12
|
+
bump repricing so rho and dividend rho measure market sensitivity without
|
|
13
|
+
contamination from auto-grid/domain movement under bumped rate, dividend,
|
|
14
|
+
volatility, or time inputs.
|
|
15
|
+
|
|
8
16
|
## [0.2.1] - 2026-06-30
|
|
9
17
|
|
|
10
18
|
### Fixed
|
|
@@ -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
|
|
@@ -52,6 +52,18 @@ class BaseEngine(ABC):
|
|
|
52
52
|
"""
|
|
53
53
|
pass
|
|
54
54
|
|
|
55
|
+
def create_bump_context(
|
|
56
|
+
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
57
|
+
) -> "BaseEngine":
|
|
58
|
+
"""
|
|
59
|
+
Return an engine context for finite-difference bump repricing.
|
|
60
|
+
|
|
61
|
+
Engines with market-dependent numerical grids can override this hook to
|
|
62
|
+
freeze the base valuation grid/domain before bumped repricing. Engines
|
|
63
|
+
without such state explicitly fall back to the current repricing engine.
|
|
64
|
+
"""
|
|
65
|
+
return self
|
|
66
|
+
|
|
55
67
|
def price_with_events(
|
|
56
68
|
self,
|
|
57
69
|
product: BaseEquityProduct,
|
|
@@ -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,
|
|
@@ -7,6 +7,7 @@ backward in time, with support for Rannacher smoothing.
|
|
|
7
7
|
|
|
8
8
|
from abc import abstractmethod
|
|
9
9
|
from collections import OrderedDict
|
|
10
|
+
from copy import deepcopy
|
|
10
11
|
import math
|
|
11
12
|
import threading
|
|
12
13
|
from typing import Dict, Optional, Tuple, List, NamedTuple, Sequence
|
|
@@ -131,6 +132,35 @@ class BasePDESolver(BaseEngine):
|
|
|
131
132
|
strategy = self._cache_strategy
|
|
132
133
|
return strategy
|
|
133
134
|
|
|
135
|
+
def create_bump_context(
|
|
136
|
+
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
137
|
+
) -> "BasePDESolver":
|
|
138
|
+
"""
|
|
139
|
+
Return a PDE solver clone with the base spatial domain frozen.
|
|
140
|
+
|
|
141
|
+
Auto spatial bounds depend on market drift/volatility. Freezing the
|
|
142
|
+
base valuation bounds keeps rate, dividend, volatility, and theta bumps
|
|
143
|
+
from mixing true market sensitivity with domain movement noise.
|
|
144
|
+
"""
|
|
145
|
+
spot = pricing_env.spot
|
|
146
|
+
tau = product.get_maturity(pricing_env)
|
|
147
|
+
if tau <= 0:
|
|
148
|
+
return self
|
|
149
|
+
|
|
150
|
+
strike = getattr(product, "strike", spot)
|
|
151
|
+
r = pricing_env.get_rate(tau)
|
|
152
|
+
q = pricing_env.get_div_yield(tau)
|
|
153
|
+
sigma = pricing_env.get_vol(strike, tau)
|
|
154
|
+
barriers = self._get_barriers(product)
|
|
155
|
+
s_min, s_max = self._resolve_spatial_bounds(
|
|
156
|
+
product, spot, sigma, tau, r, q, barriers
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
fixed_params = deepcopy(self.params)
|
|
160
|
+
fixed_params.s_min = float(s_min)
|
|
161
|
+
fixed_params.s_max = float(s_max)
|
|
162
|
+
return type(self)(params=fixed_params)
|
|
163
|
+
|
|
134
164
|
def _freeze_cache_value(self, value):
|
|
135
165
|
if value is None or isinstance(value, (str, int, float, bool)):
|
|
136
166
|
return value
|
{quantark-0.2.1 → 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)
|
|
@@ -43,6 +43,98 @@ class PhoenixPDESolver(SnowballPDESolver):
|
|
|
43
43
|
self._coupon_amounts: np.ndarray = np.array([])
|
|
44
44
|
self._coupon_cumulative: np.ndarray = np.array([])
|
|
45
45
|
|
|
46
|
+
# --- Native event stats (no MC): reuse the Snowball KO/KI machinery ---
|
|
47
|
+
|
|
48
|
+
def _event_stats_product_type(self) -> type:
|
|
49
|
+
return PhoenixOption
|
|
50
|
+
|
|
51
|
+
def _make_event_stats(self, **fields):
|
|
52
|
+
from quantark.asset.equity.engine.event_stats import PhoenixEventStats
|
|
53
|
+
|
|
54
|
+
return PhoenixEventStats(**fields)
|
|
55
|
+
|
|
56
|
+
def _n_extra_event_cols(self, n_ko: int) -> int:
|
|
57
|
+
# One coupon-trigger indicator column per observation.
|
|
58
|
+
return n_ko
|
|
59
|
+
|
|
60
|
+
def _set_extra_event_indicators(
|
|
61
|
+
self, v0, v1, s_vec, n_ko, ko_idx, rec, product, pricing_env, t_vec, t_idx
|
|
62
|
+
) -> None:
|
|
63
|
+
# Set the coupon-trigger column on the coupon-pay mask AFTER the KO jump,
|
|
64
|
+
# so a coupon at a simultaneous KO is still counted (matches the Phoenix MC
|
|
65
|
+
# reference: coupon_hit gated on "alive entering obs i", incl. first_ko_idx==i).
|
|
66
|
+
if ko_idx is None or ko_idx >= self._coupon_barriers.shape[0]:
|
|
67
|
+
return
|
|
68
|
+
coupon_barrier = float(self._coupon_barriers[ko_idx])
|
|
69
|
+
pay_mask = self._get_barrier_mask(
|
|
70
|
+
s_vec, coupon_barrier, product.is_reverse, is_up_barrier=True
|
|
71
|
+
)
|
|
72
|
+
df_delay = self._cashflow_value_at_time(
|
|
73
|
+
pricing_env=pricing_env,
|
|
74
|
+
cashflow=1.0,
|
|
75
|
+
current_time=float(t_vec[t_idx]),
|
|
76
|
+
settlement_time=rec.settlement_time,
|
|
77
|
+
)
|
|
78
|
+
coup_col = n_ko + ko_idx
|
|
79
|
+
v0[pay_mask, coup_col] = df_delay
|
|
80
|
+
v1[pay_mask, coup_col] = df_delay
|
|
81
|
+
|
|
82
|
+
def _extract_extra_event_stats(
|
|
83
|
+
self, initial_grid, x_vec, spot_log, n_ko, ko_records, pricing_env, product
|
|
84
|
+
) -> dict:
|
|
85
|
+
ed_coup = np.array(
|
|
86
|
+
[
|
|
87
|
+
float(np.interp(spot_log, x_vec, initial_grid[:, n_ko + i]))
|
|
88
|
+
for i in range(n_ko)
|
|
89
|
+
],
|
|
90
|
+
dtype=float,
|
|
91
|
+
)
|
|
92
|
+
coupon_probability = np.zeros(n_ko, dtype=float)
|
|
93
|
+
for i, rec in enumerate(ko_records):
|
|
94
|
+
obs_time = float(rec.observation_time)
|
|
95
|
+
settle = float(
|
|
96
|
+
rec.settlement_time if rec.settlement_time is not None else obs_time
|
|
97
|
+
)
|
|
98
|
+
df0 = pricing_env.get_discount_factor(settle)
|
|
99
|
+
if df0 > 0.0:
|
|
100
|
+
coupon_probability[i] = float(ed_coup[i] / df0)
|
|
101
|
+
result = {"coupon_probability": coupon_probability}
|
|
102
|
+
ecc = self._coupon_cashflow_from_probability(
|
|
103
|
+
coupon_probability, n_ko, ko_records, pricing_env, product
|
|
104
|
+
)
|
|
105
|
+
if ecc is not None:
|
|
106
|
+
result["expected_discounted_coupon_cashflow"] = ecc
|
|
107
|
+
return result
|
|
108
|
+
|
|
109
|
+
def _coupon_cashflow_from_probability(
|
|
110
|
+
self, coupon_probability, n_ko, ko_records, pricing_env, product
|
|
111
|
+
):
|
|
112
|
+
"""Expected discounted coupon cashflow for non-memory coupons, else None.
|
|
113
|
+
|
|
114
|
+
With a deterministic per-period coupon amount and a deterministic
|
|
115
|
+
settlement time, E[DF(0->settle) * amount * 1{coupon}] factors exactly as
|
|
116
|
+
DF(0->settle) * amount * P(coupon). For memory coupons the paid amount is
|
|
117
|
+
path-dependent and cannot be recovered from the trigger indicator, so we
|
|
118
|
+
omit the field (probability stays correct) rather than report a wrong value.
|
|
119
|
+
"""
|
|
120
|
+
if product.has_memory_coupon:
|
|
121
|
+
return None
|
|
122
|
+
expiry = product.coupon_config.coupon_pay_type == CouponPayType.EXPIRY
|
|
123
|
+
maturity = float(product.get_maturity(pricing_env))
|
|
124
|
+
ecc = np.zeros(n_ko, dtype=float)
|
|
125
|
+
for i, rec in enumerate(ko_records):
|
|
126
|
+
obs_time = float(rec.observation_time)
|
|
127
|
+
settle = maturity if expiry else obs_time
|
|
128
|
+
amt = (
|
|
129
|
+
float(self._coupon_amounts[i])
|
|
130
|
+
if i < self._coupon_amounts.shape[0]
|
|
131
|
+
else 0.0
|
|
132
|
+
)
|
|
133
|
+
ecc[i] = float(
|
|
134
|
+
pricing_env.get_discount_factor(settle) * amt * coupon_probability[i]
|
|
135
|
+
)
|
|
136
|
+
return ecc
|
|
137
|
+
|
|
46
138
|
# price() and calculate_greeks() are inherited from SnowballPDESolver
|
|
47
139
|
# The _check_product_type() method uses _supported_product_type to validate
|
|
48
140
|
|
|
@@ -323,20 +323,49 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
323
323
|
def calculate_event_stats(
|
|
324
324
|
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
325
325
|
) -> Optional[AutocallableEventStats]:
|
|
326
|
-
"""
|
|
327
|
-
|
|
326
|
+
"""Provide per-observation KO probabilities and expected discounted cashflows."""
|
|
327
|
+
if not isinstance(product, self._event_stats_product_type()):
|
|
328
|
+
return None
|
|
329
|
+
if pricing_env is None:
|
|
330
|
+
return None
|
|
331
|
+
return self._compute_event_stats(product, pricing_env)
|
|
332
|
+
|
|
333
|
+
def _event_stats_product_type(self) -> type:
|
|
334
|
+
"""Product type accepted by ``calculate_event_stats`` (overridable)."""
|
|
335
|
+
return SnowballOption
|
|
336
|
+
|
|
337
|
+
def _make_event_stats(self, **fields) -> AutocallableEventStats:
|
|
338
|
+
"""Construct the event-stats dataclass (overridable by subclasses)."""
|
|
339
|
+
return AutocallableEventStats(**fields)
|
|
340
|
+
|
|
341
|
+
# --- Extra indicator-surface hooks (overridden by Phoenix for coupons) ---
|
|
328
342
|
|
|
343
|
+
def _n_extra_event_cols(self, n_ko: int) -> int:
|
|
344
|
+
"""Extra stacked indicator columns beyond ``[KO_0..KO_{n-1}]``."""
|
|
345
|
+
return 0
|
|
346
|
+
|
|
347
|
+
def _set_extra_event_indicators(
|
|
348
|
+
self, v0, v1, s_vec, n_ko, ko_idx, rec, product, pricing_env, t_vec, t_idx
|
|
349
|
+
) -> None:
|
|
350
|
+
"""Set extra indicator columns at an observation (no-op for Snowball)."""
|
|
351
|
+
return None
|
|
352
|
+
|
|
353
|
+
def _extract_extra_event_stats(
|
|
354
|
+
self, initial_grid, x_vec, spot_log, n_ko, ko_records, pricing_env, product
|
|
355
|
+
) -> dict:
|
|
356
|
+
"""Extra event-stats fields from the extra columns (none for Snowball)."""
|
|
357
|
+
return {}
|
|
358
|
+
|
|
359
|
+
def _compute_event_stats(
|
|
360
|
+
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
361
|
+
) -> Optional[AutocallableEventStats]:
|
|
362
|
+
"""
|
|
329
363
|
Native PDE implementation:
|
|
330
364
|
- Propagates stacked indicator surfaces through the same backward PDE stepping.
|
|
331
365
|
- Applies KO/KI jumps to all indicator surfaces at observation times.
|
|
332
366
|
- Returns KO per-observation probabilities (by dividing discounted indicators by
|
|
333
367
|
discount factors) and expected discounted KO cashflows.
|
|
334
368
|
"""
|
|
335
|
-
if not isinstance(product, SnowballOption):
|
|
336
|
-
return None
|
|
337
|
-
if pricing_env is None:
|
|
338
|
-
return None
|
|
339
|
-
|
|
340
369
|
spot = pricing_env.spot
|
|
341
370
|
tau = product.get_maturity(pricing_env)
|
|
342
371
|
if tau <= 0 or is_zero(tau):
|
|
@@ -398,16 +427,25 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
398
427
|
)
|
|
399
428
|
ko_index_by_tidx[t_idx] = k
|
|
400
429
|
|
|
401
|
-
# Surface columns: [KO_0
|
|
402
|
-
|
|
403
|
-
|
|
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).
|
|
437
|
+
n_extra = self._n_extra_event_cols(n_ko)
|
|
438
|
+
ki_col = n_ko + n_extra
|
|
439
|
+
ki_ever_col = n_ko + n_extra + 1
|
|
440
|
+
n_cols = n_ko + n_extra + 2
|
|
404
441
|
|
|
405
442
|
# Terminal conditions at maturity (t = T):
|
|
406
443
|
# - KO indicators are zero at maturity (KO only at discrete observations via jumps)
|
|
407
|
-
# - KI
|
|
444
|
+
# - Both KI indicators are 1 on the KI surface and 0 on the no-KI surface
|
|
408
445
|
v0_next = np.zeros((num_x, n_cols), dtype=float)
|
|
409
446
|
v1_next = np.zeros((num_x, n_cols), dtype=float)
|
|
410
447
|
v1_next[:, ki_col] = 1.0
|
|
448
|
+
v1_next[:, ki_ever_col] = 1.0
|
|
411
449
|
|
|
412
450
|
# Apply terminal KO/KI events at maturity if observation schedules include t=T.
|
|
413
451
|
terminal_tidx = num_t - 1
|
|
@@ -417,6 +455,9 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
417
455
|
barrier = float(rec.barrier) if rec.barrier is not None else 0.0
|
|
418
456
|
mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
|
|
419
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()
|
|
420
461
|
v0_next[mask_ko, :] = 0.0
|
|
421
462
|
v1_next[mask_ko, :] = 0.0
|
|
422
463
|
df_delay = self._cashflow_value_at_time(
|
|
@@ -427,6 +468,12 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
427
468
|
)
|
|
428
469
|
v0_next[mask_ko, terminal_ko_idx] = df_delay
|
|
429
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
|
|
473
|
+
self._set_extra_event_indicators(
|
|
474
|
+
v0_next, v1_next, s_vec, n_ko, terminal_ko_idx, rec,
|
|
475
|
+
product, pricing_env, t_vec, terminal_tidx,
|
|
476
|
+
)
|
|
430
477
|
|
|
431
478
|
is_terminal_ki = product.has_ki_barrier and (
|
|
432
479
|
self._ki_continuous or terminal_tidx in self._ki_observation_indices
|
|
@@ -525,6 +572,9 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
525
572
|
mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
|
|
526
573
|
|
|
527
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()
|
|
528
578
|
v0_cur[mask_ko, :] = 0.0
|
|
529
579
|
v1_cur[mask_ko, :] = 0.0
|
|
530
580
|
df_delay = self._cashflow_value_at_time(
|
|
@@ -535,6 +585,12 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
535
585
|
)
|
|
536
586
|
v0_cur[mask_ko, ko_idx] = df_delay
|
|
537
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
|
|
590
|
+
self._set_extra_event_indicators(
|
|
591
|
+
v0_cur, v1_cur, s_vec, n_ko, ko_idx, rec,
|
|
592
|
+
product, pricing_env, t_vec, j,
|
|
593
|
+
)
|
|
538
594
|
|
|
539
595
|
# Apply KI jump (continuous or discrete at observation indices).
|
|
540
596
|
if product.has_ki_barrier:
|
|
@@ -586,18 +642,31 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
586
642
|
ki_survival_probability = np.array([], dtype=float)
|
|
587
643
|
if already_knocked_in:
|
|
588
644
|
ki_probability = 1.0
|
|
645
|
+
ki_ever_probability = 1.0
|
|
589
646
|
ki_times = np.array([0.0], dtype=float)
|
|
590
647
|
ki_event_probability = np.array([1.0], dtype=float)
|
|
591
648
|
ki_survival_probability = np.array([0.0], dtype=float)
|
|
592
649
|
else:
|
|
593
|
-
ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
|
|
594
650
|
df_T = pricing_env.get_discount_factor(float(tau))
|
|
651
|
+
ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
|
|
595
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
|
|
596
655
|
|
|
597
656
|
pv = float(self.price(product, pricing_env))
|
|
598
657
|
expected_discounted_maturity_cf = float(pv - float(np.sum(ed_ko_cf)))
|
|
599
658
|
|
|
600
|
-
|
|
659
|
+
extra_fields = self._extract_extra_event_stats(
|
|
660
|
+
initial_grid, x_vec, spot_log, n_ko, ko_records, pricing_env, product
|
|
661
|
+
)
|
|
662
|
+
# The maturity cashflow is pv minus KO cashflows; for products with extra
|
|
663
|
+
# cashflow streams (Phoenix coupons) also remove those so the decomposition
|
|
664
|
+
# pv = sum(ko) + sum(coupon) + maturity stays correctly classified.
|
|
665
|
+
coupon_cf = extra_fields.get("expected_discounted_coupon_cashflow")
|
|
666
|
+
if coupon_cf is not None:
|
|
667
|
+
expected_discounted_maturity_cf -= float(np.sum(coupon_cf))
|
|
668
|
+
|
|
669
|
+
return self._make_event_stats(
|
|
601
670
|
pv=pv,
|
|
602
671
|
ko_times=ko_times,
|
|
603
672
|
ko_probability=ko_probability,
|
|
@@ -609,6 +678,14 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
609
678
|
ki_times=ki_times,
|
|
610
679
|
ki_event_probability=ki_event_probability,
|
|
611
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,
|
|
688
|
+
**extra_fields,
|
|
612
689
|
)
|
|
613
690
|
|
|
614
691
|
def calculate_greeks(
|
|
@@ -1620,7 +1697,7 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
1620
1697
|
)
|
|
1621
1698
|
|
|
1622
1699
|
# Boundary fallback: use next scheduled KO record (ignore past observations).
|
|
1623
|
-
ko_records =
|
|
1700
|
+
ko_records = self._get_cached_ko_records(pricing_env, product)
|
|
1624
1701
|
future_records = [
|
|
1625
1702
|
rec for rec in ko_records if self._record_is_non_negative_time(rec)
|
|
1626
1703
|
]
|
|
@@ -213,6 +213,18 @@ class PDEEngine(BaseEngine):
|
|
|
213
213
|
solver = self._get_solver(product)
|
|
214
214
|
return solver.price(product, pricing_env)
|
|
215
215
|
|
|
216
|
+
def create_bump_context(
|
|
217
|
+
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
218
|
+
) -> "PDEEngine":
|
|
219
|
+
"""
|
|
220
|
+
Return a facade engine whose dispatched solver uses fixed bump bounds.
|
|
221
|
+
"""
|
|
222
|
+
solver = self._get_solver(product)
|
|
223
|
+
fixed_solver = solver.create_bump_context(product, pricing_env)
|
|
224
|
+
if fixed_solver is solver:
|
|
225
|
+
return self
|
|
226
|
+
return type(self)(params=fixed_solver.params, method=self.method)
|
|
227
|
+
|
|
216
228
|
def calculate_greeks(
|
|
217
229
|
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
218
230
|
) -> Dict[str, float]:
|