quantark 0.2.1__tar.gz → 0.2.2__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.2}/CHANGELOG.md +8 -0
- {quantark-0.2.1 → quantark-0.2.2}/PKG-INFO +1 -1
- {quantark-0.2.1 → quantark-0.2.2}/pyproject.toml +1 -1
- {quantark-0.2.1 → quantark-0.2.2}/quantark/__init__.py +1 -1
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/base_engine.py +12 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/base_pde_solver.py +30 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +92 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +61 -12
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde_engine.py +12 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +70 -9
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +72 -11
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/riskmeasures/greeks_calculator.py +35 -12
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/__init__.py +10 -0
- quantark-0.2.2/quantark/cashleg/autocallable_leg.py +198 -0
- {quantark-0.2.1 → quantark-0.2.2}/.gitignore +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/LICENSE +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/NOTICE +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/README.md +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/_compat.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/discount/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/pde/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/tree/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/base_bond_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/convertible/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/couponbond/frn.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/forward/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/futures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/option/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/schedule/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/bond/schedule/cashflow.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/conventions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/engine/mc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/engine/schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/product/base_credit_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/product/basket_cds.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/product/cds.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/analysis/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/cashflow/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/cashflow/accrual_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/cashflow/trs_valuation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/event_stats.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/localvol_greeks.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/sabr_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/pde/time_grid.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/lifecycle/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/lifecycle/barrier.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/lifecycle/events.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/lifecycle/manager.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/lifecycle/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/param/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/param/engine_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/bsm/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/bsm/qmc_sobol.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/sabr/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/process/sabr/sabr_process.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/base_equity_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/deltaone/futures.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/accumulator_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/american_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/asian_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/barrier_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/snowball_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/snowball_helpers.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/option/snowball_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/base_swap.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/multi_asset_trs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/one_asset_trs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/trs_event_handler.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/trs_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/product/swap/trs_schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/report/plotting.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/report/surfaces.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/report/term_structure.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/equity/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/base_fx_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/localvol_common.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/localvol_greeks.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/fx_mc_params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/pde/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/process/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/process/fx_gk_path_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/base_fx_product.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/currency_pair.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_barrier_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_one_touch_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_range_accrual_config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_range_accrual_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_sharkfin_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_target_redemption_forward.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_target_redemption_note.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/report/fx_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/riskmeasures/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/fx/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/engine/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/engine/fra_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/engine/swaption_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/product/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/product/cap_floor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/product/fra.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/product/irs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/rate/product/swaption.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/asset/vol_model_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/credit/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/hedge_executor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/metrics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/equity/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/examples/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/examples/advanced_backtest.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fi/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fi/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fi/hedge_executor.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fi/metrics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fi/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fi/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/fx/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/logger.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/_replay.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/book_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/engine_factory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/market.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/otc/state.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/report_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/base_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/hedge_instruments.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/scenarios.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/transaction_costs.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/backtest/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/accrual_leg.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/base_amount.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/deterministic_leg.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/event_distribution.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/fixed_payoff_leg.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/leg_schedule.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/cashleg/leg_valuator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/credit/path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fi/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fi/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fi/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/fx/path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/path/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/path/day_path.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/path/path_builder.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/path/path_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/report/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/dynamicscenario/results/result_exporter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/montecarlo/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/montecarlo/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/montecarlo/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/montecarlo/qmc_sobol.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/montecarlo/qmc_variance_reduction.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/basis/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/basis/basis_yield.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/credit/ajd_hazard_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/credit/hazard_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/div/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/div/dividend_yield.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/index/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/index/rate_index.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/quote/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/quote/spot_quote.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/rrf/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/rrf/rate_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/collapse_guard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/sabr/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/sabr/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/sabr/diagnostics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/sabr/hagan.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/sabr/sabr_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vannavolga/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vannavolga/bs_fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vannavolga/market_conventions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vannavolga/smile_builder.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vannavolga/vv_core.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vannavolga/vv_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vannavolga/vv_term_structure.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/param/vol/vol_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/credit/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/credit/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/equity/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/equity/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/equity/swap_position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/fi/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/fi/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/fx/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/fx/position.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/portfolio_snapshot.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/portfolio/portfolio_storage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/priceenv/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/priceenv/credit_pricing_environment.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/priceenv/fx_pricing_environment.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/priceenv/pricing_environment.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/rfq/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/rfq/builders.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/rfq/models.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/rfq/registry.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/rfq/service.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/addons/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/addons/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/addons/commodity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/addons/credit.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/addons/equity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/addons/fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/addons/interest_rate.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/maths.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/pfe.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/engines/replacement_cost.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/models/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/models/enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/models/netting_set.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/models/trade.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/parameters/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/parameters/supervisory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/saccr/results/result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/cva/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/cva/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/commodity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/correlations.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/counterparty_credit.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/equity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/interest_rate.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/engines/reference_credit.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/asof.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/correlation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/curves.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/grid.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/historical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/historical/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/historical/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/historical/path_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/historical/pfe.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/historical/resampling.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/paths.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/phoenix_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/repricer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/simulator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/snowball_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/statemachine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/exposure/value_surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/models/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/models/enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/models/portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/models/sensitivity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/parameters/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/parameters/supervisory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/portfolio/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/portfolio/counterparty.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/portfolio/credit_curve.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/portfolio/netting.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/portfolio/trade.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/portfolio/trade_portfolio.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/results/result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/sacva_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/sensitivities/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/sensitivities/curve_bump.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/sensitivities/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/sacva/sensitivities/shifts.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/accessors.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/commodity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/credit_qualifying.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/cross_risk.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/equity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/fx.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/ir.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/calibration/version.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/crif/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/crif/models.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/crif/parser.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/dashboard.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/addon.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/concentration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/correlations.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/classification/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/factory.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/portfolio_adapter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/risk_class/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/market_data.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/report/crif_export.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/report/excel_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/report/html_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/results/attribution.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/results/simm_result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/results/whatif.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/sensitivity.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/taxonomy.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/template/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/template/xlsx_loader.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/simm/template/xlsx_template.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/equity/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/equity/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/equity/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/equity/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/equity/report/report_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/equity/report/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/equity/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fi/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fi/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fi/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fi/metrics.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fi/results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/report/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/report/report_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/report/visualizer.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/results/result_aggregator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/results/result_exporter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/results/stress_results.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/scenario/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/scenario/scenario.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/scenario/scenario_builder.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/scenario/scenario_library.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/scenario/scenario_storage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/stress/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/stress/stress_applicator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/stresstest/stress/stress_types.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/barrier_shift.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/calendar/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/calendar/business_calendar.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/calendar/day_counter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/calendar/holidayfile/china.csv +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/bond_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/deltaone_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/engine_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/fx_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/greek_conventions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/greeks_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/enum/option_enums.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/exceptions.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/converter.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/example_usage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/generator/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/generator/mock_generator.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/models.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/storage/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/numerical/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/numerical/comparison.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/numerical/constants.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/numerical/formatting.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/numerical/pnl.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/numerical/safe_math.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/util/numerical/validation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/attribution.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/backtest/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/backtest/var_backtester.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/credit/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/credit/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/credit/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/credit/revaluation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/engines/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/engines/historical.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/engines/monte_carlo.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/engines/parametric.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/fx/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/fx/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/fx/engine.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/fx/revaluation.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/results/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/results/incremental_var_result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/results/var_report.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/results/var_result.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/risk_factors/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/risk_factors/base.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/risk_factors/equity_factors.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/var/risk_factors/fi_factors.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/black_scholes.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/curves.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/heston/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/heston/analytical_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/heston/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/heston/mc_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/heston/params.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/heston/pde_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/localvol/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/localvol/dupire.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/localvol/mc_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/localvol/pde_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/localvol/surface.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/risk/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/risk/contracts.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/risk/scenarios.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/fokkerplanck/__init__.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/fokkerplanck/bootstrap.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/fokkerplanck/calibration.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/fokkerplanck/config.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/fokkerplanck/coordinates.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/fokkerplanck/fp_operators.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/fokkerplanck/fp_solver.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/leverage.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/slv_mc_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/quantark/volmodels/slv/slv_pde_kernel.py +0 -0
- {quantark-0.2.1 → quantark-0.2.2}/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.2
|
|
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,
|
|
@@ -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
|
|
@@ -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) ---
|
|
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 {}
|
|
328
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,9 +427,10 @@ 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
|
+
n_extra = self._n_extra_event_cols(n_ko)
|
|
432
|
+
ki_col = n_ko + n_extra
|
|
433
|
+
n_cols = n_ko + n_extra + 1
|
|
404
434
|
|
|
405
435
|
# Terminal conditions at maturity (t = T):
|
|
406
436
|
# - KO indicators are zero at maturity (KO only at discrete observations via jumps)
|
|
@@ -427,6 +457,10 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
427
457
|
)
|
|
428
458
|
v0_next[mask_ko, terminal_ko_idx] = df_delay
|
|
429
459
|
v1_next[mask_ko, terminal_ko_idx] = df_delay
|
|
460
|
+
self._set_extra_event_indicators(
|
|
461
|
+
v0_next, v1_next, s_vec, n_ko, terminal_ko_idx, rec,
|
|
462
|
+
product, pricing_env, t_vec, terminal_tidx,
|
|
463
|
+
)
|
|
430
464
|
|
|
431
465
|
is_terminal_ki = product.has_ki_barrier and (
|
|
432
466
|
self._ki_continuous or terminal_tidx in self._ki_observation_indices
|
|
@@ -535,6 +569,10 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
535
569
|
)
|
|
536
570
|
v0_cur[mask_ko, ko_idx] = df_delay
|
|
537
571
|
v1_cur[mask_ko, ko_idx] = df_delay
|
|
572
|
+
self._set_extra_event_indicators(
|
|
573
|
+
v0_cur, v1_cur, s_vec, n_ko, ko_idx, rec,
|
|
574
|
+
product, pricing_env, t_vec, j,
|
|
575
|
+
)
|
|
538
576
|
|
|
539
577
|
# Apply KI jump (continuous or discrete at observation indices).
|
|
540
578
|
if product.has_ki_barrier:
|
|
@@ -597,7 +635,17 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
597
635
|
pv = float(self.price(product, pricing_env))
|
|
598
636
|
expected_discounted_maturity_cf = float(pv - float(np.sum(ed_ko_cf)))
|
|
599
637
|
|
|
600
|
-
|
|
638
|
+
extra_fields = self._extract_extra_event_stats(
|
|
639
|
+
initial_grid, x_vec, spot_log, n_ko, ko_records, pricing_env, product
|
|
640
|
+
)
|
|
641
|
+
# The maturity cashflow is pv minus KO cashflows; for products with extra
|
|
642
|
+
# cashflow streams (Phoenix coupons) also remove those so the decomposition
|
|
643
|
+
# pv = sum(ko) + sum(coupon) + maturity stays correctly classified.
|
|
644
|
+
coupon_cf = extra_fields.get("expected_discounted_coupon_cashflow")
|
|
645
|
+
if coupon_cf is not None:
|
|
646
|
+
expected_discounted_maturity_cf -= float(np.sum(coupon_cf))
|
|
647
|
+
|
|
648
|
+
return self._make_event_stats(
|
|
601
649
|
pv=pv,
|
|
602
650
|
ko_times=ko_times,
|
|
603
651
|
ko_probability=ko_probability,
|
|
@@ -609,6 +657,7 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
609
657
|
ki_times=ki_times,
|
|
610
658
|
ki_event_probability=ki_event_probability,
|
|
611
659
|
ki_survival_probability=ki_survival_probability,
|
|
660
|
+
**extra_fields,
|
|
612
661
|
)
|
|
613
662
|
|
|
614
663
|
def calculate_greeks(
|
|
@@ -1620,7 +1669,7 @@ class SnowballPDESolver(BasePDESolver):
|
|
|
1620
1669
|
)
|
|
1621
1670
|
|
|
1622
1671
|
# Boundary fallback: use next scheduled KO record (ignore past observations).
|
|
1623
|
-
ko_records =
|
|
1672
|
+
ko_records = self._get_cached_ko_records(pricing_env, product)
|
|
1624
1673
|
future_records = [
|
|
1625
1674
|
rec for rec in ko_records if self._record_is_non_negative_time(rec)
|
|
1626
1675
|
]
|
|
@@ -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]:
|
|
@@ -14,7 +14,7 @@ import numpy as np
|
|
|
14
14
|
|
|
15
15
|
from quantark.asset.equity.engine.quad.quad_math import QuadratureMath
|
|
16
16
|
from quantark.asset.equity.engine.quad.snowball_quad_engine import SnowballQuadEngine
|
|
17
|
-
from quantark.asset.equity.param import
|
|
17
|
+
from quantark.asset.equity.param import QuadParams
|
|
18
18
|
from quantark.asset.equity.product.base_equity_product import BaseEquityProduct
|
|
19
19
|
from quantark.asset.equity.product.option.phoenix_option import PhoenixOption
|
|
20
20
|
from quantark.priceenv import PricingEnvironment
|
|
@@ -483,16 +483,77 @@ class PhoenixQuadEngine(SnowballQuadEngine):
|
|
|
483
483
|
self._last_spot_greeks_grid = (spot_grid.copy(), value_surface.copy())
|
|
484
484
|
return math_utils.interpolate(value_surface, x=0.0)
|
|
485
485
|
|
|
486
|
-
def
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
486
|
+
def _event_stats_product_type(self) -> type:
|
|
487
|
+
return PhoenixOption
|
|
488
|
+
|
|
489
|
+
def _make_event_stats(self, **fields):
|
|
490
|
+
from quantark.asset.equity.engine.event_stats import PhoenixEventStats
|
|
491
491
|
|
|
492
|
-
|
|
492
|
+
return PhoenixEventStats(**fields)
|
|
493
493
|
|
|
494
|
-
|
|
495
|
-
|
|
494
|
+
def _n_extra_quad_rows(self, n_ko: int) -> int:
|
|
495
|
+
# One coupon-trigger indicator row per observation.
|
|
496
|
+
return n_ko
|
|
497
|
+
|
|
498
|
+
def _coupon_barrier_for_obs(self, product, obs_index: int) -> float:
|
|
499
|
+
cb = product.coupon_config.coupon_barrier
|
|
500
|
+
if isinstance(cb, list):
|
|
501
|
+
return float(cb[obs_index])
|
|
502
|
+
return float(cb)
|
|
503
|
+
|
|
504
|
+
def _set_extra_quad_indicators(
|
|
505
|
+
self, v_in, v_out, spot_grid, n_ko, ko_index, ko_record, obs_time,
|
|
506
|
+
rate, product, disable_ko_after_ki,
|
|
507
|
+
) -> None:
|
|
508
|
+
barrier = self._coupon_barrier_for_obs(product, ko_index)
|
|
509
|
+
pay_mask = (
|
|
510
|
+
spot_grid <= barrier if product.is_reverse else spot_grid >= barrier
|
|
511
|
+
)
|
|
512
|
+
coup_row = n_ko + ko_index
|
|
513
|
+
# Undiscounted coupon-hit indicator (1.0 at the observation); the
|
|
514
|
+
# probability is recovered by dividing by exp(-r*obs) at extraction,
|
|
515
|
+
# matching the Phoenix MC reference (coupon_probability = mean(coupon_hit)).
|
|
516
|
+
# Coupons are paid while ALIVE regardless of KI state, so set BOTH surfaces:
|
|
517
|
+
# disable_ko_after_ki only suppresses future KO, never coupons.
|
|
518
|
+
# LIMITATION: under CONTINUOUS KI the coupon rows ride the same Brownian-
|
|
519
|
+
# bridge diffusion as the value surfaces, which leaves a ~5-7% coupon-
|
|
520
|
+
# probability approximation vs MC (KO/survival remain tight). Prefer the MC
|
|
521
|
+
# engine for tight continuous-KI coupon valuation.
|
|
522
|
+
v_out[coup_row, pay_mask] = 1.0
|
|
523
|
+
v_in[coup_row, pay_mask] = 1.0
|
|
524
|
+
|
|
525
|
+
def _extract_extra_quad_stats(
|
|
526
|
+
self, initial_surface, math_utils, n_ko, ko_records, rate, product, maturity
|
|
527
|
+
) -> dict:
|
|
528
|
+
coupon_probability = np.zeros(n_ko, dtype=float)
|
|
529
|
+
for i, rec in enumerate(ko_records):
|
|
530
|
+
obs_time = float(rec.observation_time)
|
|
531
|
+
# Coupon row was set to 1.0 (undiscounted indicator) at the observation,
|
|
532
|
+
# so ed_coup = E[DF(0->obs) * 1{coupon, alive}].
|
|
533
|
+
ed_coup = float(math_utils.interpolate(initial_surface[n_ko + i], x=0.0))
|
|
534
|
+
df_obs = math.exp(-rate * obs_time)
|
|
535
|
+
if df_obs > 0.0:
|
|
536
|
+
coupon_probability[i] = float(ed_coup / df_obs)
|
|
537
|
+
result = {"coupon_probability": coupon_probability}
|
|
538
|
+
# Expected discounted coupon cashflow only for non-memory coupons (the paid
|
|
539
|
+
# amount is path-dependent under memory). With a deterministic amount and
|
|
540
|
+
# settlement, E[DF*amount*1{coupon}] = DF(0->settle)*amount*P(coupon).
|
|
541
|
+
if not product.has_memory_coupon:
|
|
542
|
+
ko_times = [float(rec.observation_time) for rec in ko_records]
|
|
543
|
+
period_yf = product.get_coupon_period_year_fractions(ko_times)
|
|
544
|
+
coupon_amounts = [
|
|
545
|
+
float(product.get_coupon_payoff(i, year_fraction=period_yf[i]))
|
|
546
|
+
for i in range(n_ko)
|
|
547
|
+
]
|
|
548
|
+
expiry = product.coupon_config.coupon_pay_type == CouponPayType.EXPIRY
|
|
549
|
+
ecc = np.zeros(n_ko, dtype=float)
|
|
550
|
+
for i in range(n_ko):
|
|
551
|
+
settle = float(maturity) if expiry else ko_times[i]
|
|
552
|
+
ecc[i] = float(
|
|
553
|
+
math.exp(-rate * settle) * coupon_amounts[i] * coupon_probability[i]
|
|
554
|
+
)
|
|
555
|
+
result["expected_discounted_coupon_cashflow"] = ecc
|
|
556
|
+
return result
|
|
496
557
|
|
|
497
558
|
def __repr__(self):
|
|
498
559
|
return "PhoenixQuadEngine()"
|
|
@@ -366,18 +366,60 @@ class SnowballQuadEngine(BaseEngine):
|
|
|
366
366
|
def calculate_event_stats(
|
|
367
367
|
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
368
368
|
) -> Optional[AutocallableEventStats]:
|
|
369
|
-
"""
|
|
370
|
-
Provide per-observation KO probabilities and expected discounted cashflows.
|
|
369
|
+
"""Provide per-observation KO probabilities and expected discounted cashflows.
|
|
371
370
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
for risk-neutral event stats.
|
|
371
|
+
Runs a single quadrature recursion over stacked indicator surfaces; usually
|
|
372
|
+
much faster than MC for risk-neutral event stats.
|
|
375
373
|
"""
|
|
376
|
-
if not isinstance(product,
|
|
374
|
+
if not isinstance(product, self._event_stats_product_type()):
|
|
377
375
|
return None
|
|
378
376
|
if pricing_env is None:
|
|
379
377
|
raise PricingError("PricingEnvironment is required for SnowballQuadEngine.")
|
|
378
|
+
return self._compute_event_stats(product, pricing_env)
|
|
379
|
+
|
|
380
|
+
def _event_stats_product_type(self) -> type:
|
|
381
|
+
"""Product type accepted by ``calculate_event_stats`` (overridable)."""
|
|
382
|
+
return SnowballOption
|
|
383
|
+
|
|
384
|
+
def _make_event_stats(self, **fields) -> AutocallableEventStats:
|
|
385
|
+
"""Construct the event-stats dataclass (overridable by subclasses)."""
|
|
386
|
+
return AutocallableEventStats(**fields)
|
|
387
|
+
|
|
388
|
+
def _event_stats_alignment_log(
|
|
389
|
+
self, spot: float, product, ki_barrier_override: Optional[float] = None
|
|
390
|
+
) -> Optional[float]:
|
|
391
|
+
"""Grid-alignment log used by event stats.
|
|
392
|
+
|
|
393
|
+
Calls the Snowball implementation explicitly so a subclass that overrides
|
|
394
|
+
the price-path ``_select_alignment_log`` (e.g. PhoenixQuadEngine, with a
|
|
395
|
+
different signature) does not intercept the event-stats recursion.
|
|
396
|
+
"""
|
|
397
|
+
return SnowballQuadEngine._select_alignment_log(
|
|
398
|
+
self, spot, product, ki_barrier_override=ki_barrier_override
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
# --- Extra indicator-row hooks (overridden by Phoenix for coupons) ---
|
|
402
|
+
|
|
403
|
+
def _n_extra_quad_rows(self, n_ko: int) -> int:
|
|
404
|
+
"""Extra stacked indicator rows beyond the ``n_ko`` KO rows."""
|
|
405
|
+
return 0
|
|
380
406
|
|
|
407
|
+
def _set_extra_quad_indicators(
|
|
408
|
+
self, v_in, v_out, spot_grid, n_ko, ko_index, ko_record, obs_time,
|
|
409
|
+
rate, product, disable_ko_after_ki,
|
|
410
|
+
) -> None:
|
|
411
|
+
"""Set extra indicator rows at a KO observation (no-op for Snowball)."""
|
|
412
|
+
return None
|
|
413
|
+
|
|
414
|
+
def _extract_extra_quad_stats(
|
|
415
|
+
self, initial_surface, math_utils, n_ko, ko_records, rate, product, maturity
|
|
416
|
+
) -> dict:
|
|
417
|
+
"""Extra event-stats fields from the extra rows (none for Snowball)."""
|
|
418
|
+
return {}
|
|
419
|
+
|
|
420
|
+
def _compute_event_stats(
|
|
421
|
+
self, product: BaseEquityProduct, pricing_env: PricingEnvironment
|
|
422
|
+
) -> Optional[AutocallableEventStats]:
|
|
381
423
|
self._validate_product(product)
|
|
382
424
|
|
|
383
425
|
spot = pricing_env.spot
|
|
@@ -447,7 +489,7 @@ class SnowballQuadEngine(BaseEngine):
|
|
|
447
489
|
)
|
|
448
490
|
dt = self._build_dt(times)
|
|
449
491
|
|
|
450
|
-
align_log = self.
|
|
492
|
+
align_log = self._event_stats_alignment_log(
|
|
451
493
|
spot, product, ki_barrier_override=ki_barrier_continuous
|
|
452
494
|
)
|
|
453
495
|
fft_padding_factor = self._resolve_fft_padding_factor()
|
|
@@ -480,9 +522,12 @@ class SnowballQuadEngine(BaseEngine):
|
|
|
480
522
|
disable_ko_after_ki = product.barrier_config.disable_ko_after_ki
|
|
481
523
|
|
|
482
524
|
# --- KO indicator recursion (stacked over KO observations) ---
|
|
525
|
+
# Rows [0..n_ko-1] are KO indicators; subclasses may append extra rows
|
|
526
|
+
# (e.g. Phoenix coupon-trigger rows) that ride the same diffusion/jumps.
|
|
483
527
|
n_ko = len(ko_records)
|
|
484
|
-
|
|
485
|
-
|
|
528
|
+
n_rows = n_ko + self._n_extra_quad_rows(n_ko)
|
|
529
|
+
v_in = np.zeros((n_rows, grid.size), dtype=float)
|
|
530
|
+
v_out = np.zeros((n_rows, grid.size), dtype=float)
|
|
486
531
|
|
|
487
532
|
for step_index in range(len(times), 0, -1):
|
|
488
533
|
obs_time = times[step_index - 1]
|
|
@@ -511,6 +556,12 @@ class SnowballQuadEngine(BaseEngine):
|
|
|
511
556
|
if not disable_ko_after_ki:
|
|
512
557
|
v_in[:, ko_mask] = 0.0
|
|
513
558
|
v_in[int(ko_index), ko_mask] = float(discount_delay)
|
|
559
|
+
# Extra rows (coupon) are set AFTER the KO zeroing so a coupon at a
|
|
560
|
+
# simultaneous KO is retained; future-coupon rows stay zeroed by KO.
|
|
561
|
+
self._set_extra_quad_indicators(
|
|
562
|
+
v_in, v_out, spot_grid, n_ko, int(ko_index), ko_record,
|
|
563
|
+
obs_time, rate, product, disable_ko_after_ki,
|
|
564
|
+
)
|
|
514
565
|
|
|
515
566
|
if ki_continuous:
|
|
516
567
|
# KI transition handled via Brownian bridge in diffusion step.
|
|
@@ -700,7 +751,16 @@ class SnowballQuadEngine(BaseEngine):
|
|
|
700
751
|
if df_T > 0:
|
|
701
752
|
ki_probability = float(pv_ki_no_ko / df_T)
|
|
702
753
|
|
|
703
|
-
|
|
754
|
+
extra_fields = self._extract_extra_quad_stats(
|
|
755
|
+
initial_surface, math_utils, n_ko, ko_records, rate, product, maturity
|
|
756
|
+
)
|
|
757
|
+
# Remove extra cashflow streams (Phoenix coupons) from the maturity field
|
|
758
|
+
# so pv = sum(ko) + sum(coupon) + maturity stays correctly classified.
|
|
759
|
+
coupon_cf = extra_fields.get("expected_discounted_coupon_cashflow")
|
|
760
|
+
if coupon_cf is not None:
|
|
761
|
+
expected_discounted_maturity_cf -= float(np.sum(coupon_cf))
|
|
762
|
+
|
|
763
|
+
return self._make_event_stats(
|
|
704
764
|
pv=pv,
|
|
705
765
|
ko_times=ko_times,
|
|
706
766
|
ko_probability=ko_prob,
|
|
@@ -712,6 +772,7 @@ class SnowballQuadEngine(BaseEngine):
|
|
|
712
772
|
ki_times=ki_times,
|
|
713
773
|
ki_event_probability=ki_event_probability,
|
|
714
774
|
ki_survival_probability=ki_survival_probability,
|
|
775
|
+
**extra_fields,
|
|
715
776
|
)
|
|
716
777
|
|
|
717
778
|
def _validate_product(self, product: SnowballOption) -> None:
|
|
@@ -1218,7 +1279,7 @@ class SnowballQuadEngine(BaseEngine):
|
|
|
1218
1279
|
ki_event_probability = np.array([1.0], dtype=float)
|
|
1219
1280
|
ki_survival_probability = np.array([0.0], dtype=float)
|
|
1220
1281
|
|
|
1221
|
-
return
|
|
1282
|
+
return self._make_event_stats(
|
|
1222
1283
|
pv=pv,
|
|
1223
1284
|
ko_times=ko_times,
|
|
1224
1285
|
ko_probability=ko_probability,
|