quantark 0.2.2__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantark-0.2.2 → quantark-0.2.4}/PKG-INFO +1 -1
- {quantark-0.2.2 → quantark-0.2.4}/pyproject.toml +1 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/__init__.py +1 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/base_engine.py +5 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/event_stats.py +18 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +18 -3
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +18 -5
- quantark-0.2.4/quantark/asset/equity/engine/pde/backward_operator.py +137 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/base_pde_solver.py +97 -17
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +60 -14
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +13 -2
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +373 -61
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/time_grid.py +76 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +336 -2
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +31 -15
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +122 -15
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/param/engine_params.py +52 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/riskmeasures/greeks_calculator.py +80 -10
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/__init__.py +7 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/accrual_leg.py +8 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/autocallable_leg.py +54 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/base.py +11 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/deterministic_leg.py +5 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/event_distribution.py +10 -1
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/fixed_payoff_leg.py +9 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/leg_valuator.py +14 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/position.py +197 -3
- {quantark-0.2.2 → quantark-0.2.4}/.gitignore +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/CHANGELOG.md +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/LICENSE +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/NOTICE +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/README.md +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/_compat.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/discount/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/base_bond_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/convertible/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/couponbond/frn.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/forward/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/futures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/option/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/schedule/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/schedule/cashflow.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/conventions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/mc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/base_credit_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/basket_cds.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/cds.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/analysis/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/accrual_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/trs_valuation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/localvol_greeks.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/sabr_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/barrier.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/events.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/manager.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/param/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_sobol.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/sabr/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/sabr/sabr_process.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/base_equity_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/futures.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/accumulator_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/american_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/asian_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/barrier_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/snowball_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/snowball_helpers.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/snowball_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/base_swap.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/multi_asset_trs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/one_asset_trs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/trs_event_handler.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/trs_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/trs_schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/plotting.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/surfaces.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/term_structure.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/base_fx_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/localvol_common.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/localvol_greeks.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_mc_params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/heston_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/heston_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/process/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/process/fx_gk_path_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/base_fx_product.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/currency_pair.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_barrier_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_one_touch_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_range_accrual_config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_range_accrual_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_sharkfin_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_target_redemption_forward.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_target_redemption_note.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/report/fx_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/riskmeasures/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/riskmeasures/vol_model_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/fra_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/swaption_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/cap_floor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/fra.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/irs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/swaption.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/vol_model_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/hedge_executor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/metrics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/advanced_backtest.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/hedge_executor.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/metrics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/logger.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/_replay.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/book_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/engine_factory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/market.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/state.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/report_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/base_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/hedge_instruments.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/scenarios.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/transaction_costs.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/base_amount.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/leg_schedule.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/day_path.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/path_builder.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/path_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/report/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/results/result_exporter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_brownian_bridge.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_rqmc_driver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_sobol.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_variance_reduction.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/basis/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/basis/basis_yield.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/credit/ajd_hazard_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/credit/hazard_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/div/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/div/dividend_yield.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/index/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/index/rate_index.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/quote/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/quote/spot_quote.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/rrf/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/rrf/rate_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/collapse_guard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/diagnostics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/hagan.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/sabr_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/bs_fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/market_conventions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/smile_builder.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/vv_core.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/vv_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/vv_term_structure.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vol_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/credit/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/credit/position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/swap_position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fi/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fi/position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fx/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fx/position.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/portfolio_snapshot.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/portfolio_storage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/credit_pricing_environment.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/fx_pricing_environment.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/pricing_environment.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/builders.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/models.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/registry.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/service.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/commodity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/credit.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/equity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/interest_rate.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/maths.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/pfe.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/replacement_cost.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/netting_set.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/trade.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/parameters/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/parameters/supervisory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/results/result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/cva/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/cva/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/commodity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/correlations.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/counterparty_credit.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/equity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/interest_rate.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/reference_credit.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/asof.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/correlation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/curves.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/grid.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/path_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/pfe.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/resampling.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/paths.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/phoenix_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/repricer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/simulator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/snowball_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/statemachine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/value_surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/sensitivity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/parameters/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/parameters/supervisory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/counterparty.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/credit_curve.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/netting.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/trade.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/trade_portfolio.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/results/result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sacva_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/curve_bump.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/shifts.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/accessors.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/commodity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/credit_qualifying.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/cross_risk.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/equity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/fx.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/ir.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/version.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/crif/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/crif/models.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/crif/parser.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/dashboard.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/addon.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/concentration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/correlations.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/classification/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/factory.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/portfolio_adapter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/market_data.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/crif_export.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/excel_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/html_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/attribution.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/simm_result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/whatif.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/sensitivity.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/taxonomy.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/template/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/template/xlsx_loader.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/template/xlsx_template.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/report/report_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/report/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/metrics.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/report/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/report/report_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/report/visualizer.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/result_aggregator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/result_exporter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/stress_results.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario_builder.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario_library.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario_storage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/stress/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/stress/stress_applicator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/stress/stress_types.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/barrier_shift.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/business_calendar.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/day_counter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/holidayfile/china.csv +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/bond_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/deltaone_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/engine_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/fx_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/greek_conventions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/greeks_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/option_enums.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/exceptions.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/converter.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/example_usage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/generator/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/generator/mock_generator.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/models.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/storage/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/comparison.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/constants.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/formatting.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/pnl.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/safe_math.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/validation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/attribution.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/backtest/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/backtest/var_backtester.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/revaluation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/historical.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/monte_carlo.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/parametric.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/engine.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/revaluation.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/incremental_var_result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/var_report.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/var_result.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/base.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/equity_factors.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/fi_factors.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/black_scholes.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/curves.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/analytical_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/mc_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/params.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/pde_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/dupire.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/mc_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/pde_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/surface.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/risk/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/risk/contracts.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/risk/scenarios.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/__init__.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/bootstrap.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/calibration.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/config.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/coordinates.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/fp_operators.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/fp_solver.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/leverage.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/slv_mc_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/slv_pde_kernel.py +0 -0
- {quantark-0.2.2 → quantark-0.2.4}/quantark_compat.pth +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantark
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
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
|
|
@@ -69,6 +69,7 @@ class BaseEngine(ABC):
|
|
|
69
69
|
product: BaseEquityProduct,
|
|
70
70
|
pricing_env: PricingEnvironment,
|
|
71
71
|
emit_distribution: bool = True,
|
|
72
|
+
streams: "Optional[frozenset]" = None,
|
|
72
73
|
) -> "PricingResult":
|
|
73
74
|
"""
|
|
74
75
|
Return product NPV and an event distribution for cash-leg valuation.
|
|
@@ -77,6 +78,10 @@ class BaseEngine(ABC):
|
|
|
77
78
|
generalized EventDistribution. Engines without event stats fall back to
|
|
78
79
|
a maturity-only distribution, which is sufficient for deterministic and
|
|
79
80
|
full-schedule cash legs.
|
|
81
|
+
|
|
82
|
+
``streams`` (the EventType set the caller needs, [§11.1]) is honored by
|
|
83
|
+
engines that support column pruning (the PDE autocallable solvers);
|
|
84
|
+
other engines ignore it and return the full distribution.
|
|
80
85
|
"""
|
|
81
86
|
from quantark.cashleg.event_distribution import EventDistribution, PricingResult
|
|
82
87
|
|
|
@@ -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,
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Shared backward-in-time Crank-Nicolson interior operator.
|
|
2
|
+
|
|
3
|
+
``BackwardOperator`` owns the tridiagonal INTERIOR operator (l, c, u) for a fixed
|
|
4
|
+
spatial grid and produces, per (dt, theta), the banded LHS system and the RHS
|
|
5
|
+
tridiagonal coefficients — cached, so a factorization is built once and reused
|
|
6
|
+
across every column solved on the same step.
|
|
7
|
+
|
|
8
|
+
Boundary conditions live in the RHS/boundary rows, NOT in this interior matrix,
|
|
9
|
+
so the value sweep (Dirichlet value BCs) and the indicator sweep (Neumann /
|
|
10
|
+
zero-slope BCs) can share ONE factorization [§11.2]. The per-step damping
|
|
11
|
+
schedule (``theta_by_step``) is also owned here so both sweeps run the identical
|
|
12
|
+
Rannacher schedule — required for price/probability consistency and for the
|
|
13
|
+
factorization to be shareable across sweeps.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from collections import OrderedDict
|
|
19
|
+
from typing import Optional, Sequence, Tuple
|
|
20
|
+
|
|
21
|
+
import numpy as np
|
|
22
|
+
|
|
23
|
+
from quantark.util.numerical import is_close
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class BackwardOperator:
|
|
27
|
+
"""Fixed interior tridiagonal operator with a per-(dt, theta) banded cache."""
|
|
28
|
+
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
l: np.ndarray,
|
|
32
|
+
c: np.ndarray,
|
|
33
|
+
u: np.ndarray,
|
|
34
|
+
*,
|
|
35
|
+
use_banded: bool = True,
|
|
36
|
+
cache_enabled: bool = True,
|
|
37
|
+
cache_max_entries: int = 512,
|
|
38
|
+
) -> None:
|
|
39
|
+
self._l = np.asarray(l, dtype=float)
|
|
40
|
+
self._c = np.asarray(c, dtype=float)
|
|
41
|
+
self._u = np.asarray(u, dtype=float)
|
|
42
|
+
self.use_banded = use_banded
|
|
43
|
+
self._cache_enabled = cache_enabled
|
|
44
|
+
self._cache_max_entries = max(1, int(cache_max_entries))
|
|
45
|
+
self._banded_cache: "OrderedDict[Tuple[float, float], Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]]" = (
|
|
46
|
+
OrderedDict()
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
def _build(
|
|
50
|
+
self, dt: float, theta: float
|
|
51
|
+
) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
|
|
52
|
+
l, c, u = self._l, self._c, self._u
|
|
53
|
+
lower = -theta * dt * l[2:-1]
|
|
54
|
+
main = 1.0 - theta * dt * c[1:-1]
|
|
55
|
+
upper = -theta * dt * u[1:-2]
|
|
56
|
+
|
|
57
|
+
banded = np.zeros((3, len(main)))
|
|
58
|
+
banded[0, 1:] = upper
|
|
59
|
+
banded[1, :] = main
|
|
60
|
+
banded[2, :-1] = lower
|
|
61
|
+
|
|
62
|
+
lower1 = (1.0 - theta) * dt * l[2:-1]
|
|
63
|
+
main1 = 1.0 + (1.0 - theta) * dt * c[1:-1]
|
|
64
|
+
upper1 = (1.0 - theta) * dt * u[1:-2]
|
|
65
|
+
return banded, lower1, main1, upper1
|
|
66
|
+
|
|
67
|
+
def banded_system(
|
|
68
|
+
self, dt: float, theta: float
|
|
69
|
+
) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
|
|
70
|
+
"""Return ``(banded, lower1, main1, upper1)`` for the CN step at (dt, theta).
|
|
71
|
+
|
|
72
|
+
``banded`` is the LHS ``I - theta*dt*A`` in scipy banded form; the three
|
|
73
|
+
1-D vectors are the RHS ``I + (1-theta)*dt*A`` tridiagonals. Identical to
|
|
74
|
+
the former ``SnowballPDESolver._get_banded_system`` output.
|
|
75
|
+
"""
|
|
76
|
+
if not self._cache_enabled:
|
|
77
|
+
return self._build(dt, theta)
|
|
78
|
+
|
|
79
|
+
key = (round(dt, 12), round(theta, 12))
|
|
80
|
+
cached = self._banded_cache.get(key)
|
|
81
|
+
if cached is not None:
|
|
82
|
+
self._banded_cache.move_to_end(key)
|
|
83
|
+
return cached
|
|
84
|
+
|
|
85
|
+
result = self._build(dt, theta)
|
|
86
|
+
self._banded_cache[key] = result
|
|
87
|
+
self._banded_cache.move_to_end(key)
|
|
88
|
+
if len(self._banded_cache) > self._cache_max_entries:
|
|
89
|
+
self._banded_cache.popitem(last=False)
|
|
90
|
+
return result
|
|
91
|
+
|
|
92
|
+
def clear_cache(self) -> None:
|
|
93
|
+
self._banded_cache.clear()
|
|
94
|
+
|
|
95
|
+
@staticmethod
|
|
96
|
+
def theta_by_step(
|
|
97
|
+
t_vec: np.ndarray,
|
|
98
|
+
dt_vec: np.ndarray,
|
|
99
|
+
params,
|
|
100
|
+
discontinuity_times: Optional[Sequence[float]],
|
|
101
|
+
) -> np.ndarray:
|
|
102
|
+
"""Per-step Crank-Nicolson theta (length ``len(t_vec) - 1``) [§11.2].
|
|
103
|
+
|
|
104
|
+
Reproduces the pricing sweep's Rannacher rule exactly: step ``j`` (the
|
|
105
|
+
backward step from ``t_vec[j+1]`` to ``t_vec[j]``) uses backward-Euler
|
|
106
|
+
(``theta = 1``) within ``rannacher_steps`` of the terminal payoff, else
|
|
107
|
+
``event_theta`` for the ``event_rannacher_steps`` steps immediately
|
|
108
|
+
before each discontinuity node, else ``params.theta``.
|
|
109
|
+
|
|
110
|
+
Depends only on ``discontinuity_times`` (always KO ∪ KI ∪ coupon), so the
|
|
111
|
+
schedule is identical regardless of which streams a downstream consumer
|
|
112
|
+
selects — a prerequisite for sharing the factorization across sweeps.
|
|
113
|
+
"""
|
|
114
|
+
t_vec = np.asarray(t_vec, dtype=float)
|
|
115
|
+
num_t = len(t_vec)
|
|
116
|
+
n_steps = num_t - 1
|
|
117
|
+
theta = np.full(n_steps, float(params.theta), dtype=float)
|
|
118
|
+
if not params.use_rannacher:
|
|
119
|
+
return theta
|
|
120
|
+
|
|
121
|
+
smooth_js: set = set()
|
|
122
|
+
if params.auto_grid and params.rannacher_at_events and discontinuity_times:
|
|
123
|
+
for et in discontinuity_times:
|
|
124
|
+
idx = int(np.argmin(np.abs(t_vec - et)))
|
|
125
|
+
if 0 < idx < num_t - 1 and is_close(float(t_vec[idx]), float(et)):
|
|
126
|
+
for k in range(int(params.event_rannacher_steps)):
|
|
127
|
+
sj = idx - 1 - k
|
|
128
|
+
if sj >= 0:
|
|
129
|
+
smooth_js.add(sj)
|
|
130
|
+
|
|
131
|
+
for j in range(n_steps):
|
|
132
|
+
steps_from_end = num_t - 1 - j
|
|
133
|
+
if steps_from_end < params.rannacher_steps:
|
|
134
|
+
theta[j] = 1.0
|
|
135
|
+
elif j in smooth_js:
|
|
136
|
+
theta[j] = float(params.event_theta)
|
|
137
|
+
return theta
|
|
@@ -8,6 +8,7 @@ backward in time, with support for Rannacher smoothing.
|
|
|
8
8
|
from abc import abstractmethod
|
|
9
9
|
from collections import OrderedDict
|
|
10
10
|
from copy import deepcopy
|
|
11
|
+
from dataclasses import dataclass, field
|
|
11
12
|
import math
|
|
12
13
|
import threading
|
|
13
14
|
from typing import Dict, Optional, Tuple, List, NamedTuple, Sequence
|
|
@@ -28,6 +29,24 @@ from .time_grid import TimeGrid
|
|
|
28
29
|
from .spatial_grid import SpatialGrid
|
|
29
30
|
|
|
30
31
|
|
|
32
|
+
@dataclass(frozen=True)
|
|
33
|
+
class TimeGridSpec:
|
|
34
|
+
"""The three orthogonal time-grid concerns (spec §4 Component 1).
|
|
35
|
+
|
|
36
|
+
* ``align_times`` — times that MUST be grid nodes exactly: KO/coupon
|
|
37
|
+
observation dates. They drive both node alignment and the
|
|
38
|
+
event-distribution resets, so a misalignment here is a correctness bug.
|
|
39
|
+
* ``monitor_times`` — extra nodes that improve resolution of a monitored
|
|
40
|
+
feature (daily-discrete KI) but are not alignment-critical for the
|
|
41
|
+
value/cashflow. Empty for European/continuous/no-KI regimes.
|
|
42
|
+
* ``steps_per_day`` — resolution: fill density between mandatory nodes.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
align_times: list
|
|
46
|
+
monitor_times: list = field(default_factory=list)
|
|
47
|
+
steps_per_day: float = 1.0
|
|
48
|
+
|
|
49
|
+
|
|
31
50
|
class PDESolutionResult(NamedTuple):
|
|
32
51
|
"""
|
|
33
52
|
Result from PDE solving containing solution and grid data.
|
|
@@ -155,10 +174,17 @@ class BasePDESolver(BaseEngine):
|
|
|
155
174
|
s_min, s_max = self._resolve_spatial_bounds(
|
|
156
175
|
product, spot, sigma, tau, r, q, barriers
|
|
157
176
|
)
|
|
177
|
+
# Freeze the critical points at the base spot too [§11.4]: otherwise
|
|
178
|
+
# include_spot_in_critical_points re-snaps the grid to a bumped spot,
|
|
179
|
+
# so a spot bump mixes true delta/gamma with grid-movement noise.
|
|
180
|
+
frozen_critical = tuple(
|
|
181
|
+
self._resolve_critical_points(product, pricing_env, spot, barriers)
|
|
182
|
+
)
|
|
158
183
|
|
|
159
184
|
fixed_params = deepcopy(self.params)
|
|
160
185
|
fixed_params.s_min = float(s_min)
|
|
161
186
|
fixed_params.s_max = float(s_max)
|
|
187
|
+
fixed_params.frozen_critical_points = frozen_critical
|
|
162
188
|
return type(self)(params=fixed_params)
|
|
163
189
|
|
|
164
190
|
def _freeze_cache_value(self, value):
|
|
@@ -252,6 +278,8 @@ class BasePDESolver(BaseEngine):
|
|
|
252
278
|
params.theta,
|
|
253
279
|
params.use_rannacher,
|
|
254
280
|
params.rannacher_steps,
|
|
281
|
+
params.frozen_critical_points,
|
|
282
|
+
getattr(params, "ki_monitoring_mode", None),
|
|
255
283
|
)
|
|
256
284
|
|
|
257
285
|
def _grid_cache_key(
|
|
@@ -619,6 +647,14 @@ class BasePDESolver(BaseEngine):
|
|
|
619
647
|
) -> List[float]:
|
|
620
648
|
"""Merge raw critical points with dynamic points (spot/barriers)."""
|
|
621
649
|
params: PDEParams = self.params
|
|
650
|
+
|
|
651
|
+
# Frozen (bump-context) critical points are used verbatim so the grid is
|
|
652
|
+
# invariant to spot/vol/rate/div bumps [§11.4].
|
|
653
|
+
if params.frozen_critical_points is not None:
|
|
654
|
+
return sorted(
|
|
655
|
+
{float(p) for p in params.frozen_critical_points if p is not None and p > 0}
|
|
656
|
+
)
|
|
657
|
+
|
|
622
658
|
points = list(raw_points)
|
|
623
659
|
|
|
624
660
|
if params.auto_grid:
|
|
@@ -659,25 +695,80 @@ class BasePDESolver(BaseEngine):
|
|
|
659
695
|
|
|
660
696
|
return size, adaptive
|
|
661
697
|
|
|
698
|
+
def _time_grid_spec(self, product, tau) -> "TimeGridSpec":
|
|
699
|
+
"""Decoupled time-grid concerns for this product (spec §4 Component 1).
|
|
700
|
+
|
|
701
|
+
Base default: align to the generic observation schedule; no KI-monitor
|
|
702
|
+
concept (that belongs to autocallable solvers, which override this);
|
|
703
|
+
resolution from params. Returns interior times only (0 < t < tau).
|
|
704
|
+
"""
|
|
705
|
+
align = [
|
|
706
|
+
t for t in (self._get_event_times(product, tau) or []) if 0.0 < t < tau
|
|
707
|
+
]
|
|
708
|
+
return TimeGridSpec(
|
|
709
|
+
align_times=sorted(set(align)),
|
|
710
|
+
monitor_times=[],
|
|
711
|
+
steps_per_day=float(self.params.event_steps_per_day),
|
|
712
|
+
)
|
|
713
|
+
|
|
662
714
|
def _resolve_time_grid(
|
|
663
715
|
self, product, tau, barriers
|
|
664
716
|
) -> Tuple[np.ndarray, np.ndarray]:
|
|
665
|
-
"""
|
|
717
|
+
"""Build the time grid from the decoupled ``_time_grid_spec`` seam.
|
|
718
|
+
|
|
719
|
+
When the product has mandatory event nodes (KO/coupon alignment plus any
|
|
720
|
+
KI-monitor times), the grid is built by ``TimeGrid.build_mandatory``:
|
|
721
|
+
every event time lands on a node exactly, and resolution between nodes is
|
|
722
|
+
set solely by ``steps_per_day`` (no per-interval floor). This path is
|
|
723
|
+
market-independent — it depends only on ``tau``, the schedule,
|
|
724
|
+
``steps_per_day`` and params — so spot/vol/rate/div bumps reprice on an
|
|
725
|
+
identical grid [§4.5], and it always feeds the day-based resolution
|
|
726
|
+
params, fixing the historical ``auto_grid=False`` param drop (root cause
|
|
727
|
+
2) that inflated daily-KI grids ~10x.
|
|
728
|
+
|
|
729
|
+
When there are no discrete event nodes (continuous barriers, American,
|
|
730
|
+
European), the base resolution heuristics are preserved unchanged.
|
|
731
|
+
"""
|
|
666
732
|
params: PDEParams = self.params
|
|
733
|
+
spec = self._time_grid_spec(product, tau)
|
|
734
|
+
mandatory = sorted(
|
|
735
|
+
{
|
|
736
|
+
t
|
|
737
|
+
for t in (list(spec.align_times) + list(spec.monitor_times))
|
|
738
|
+
if 0.0 < t < tau
|
|
739
|
+
}
|
|
740
|
+
)
|
|
741
|
+
|
|
742
|
+
# Event alignment engages when the config wants an event-aligned grid:
|
|
743
|
+
# auto_grid (auto-selects alignment when events exist, as before) or an
|
|
744
|
+
# explicit event grid type. An explicit auto_grid=False + uniform/graded
|
|
745
|
+
# request is honored literally (plain grid), matching prior behavior.
|
|
746
|
+
want_event_aligned = params.auto_grid or params.time_grid_type in (
|
|
747
|
+
"event_aligned",
|
|
748
|
+
"event_clustered",
|
|
749
|
+
)
|
|
750
|
+
if mandatory and want_event_aligned:
|
|
751
|
+
return TimeGrid.build_mandatory(
|
|
752
|
+
tau,
|
|
753
|
+
mandatory,
|
|
754
|
+
steps_per_day=spec.steps_per_day,
|
|
755
|
+
day_count=int(params.bus_days_in_year),
|
|
756
|
+
max_steps_total=params.max_time_steps,
|
|
757
|
+
)
|
|
758
|
+
|
|
759
|
+
# No event alignment requested: preserve the base resolution heuristics.
|
|
667
760
|
obs_type = getattr(product, "observation_type", None)
|
|
668
761
|
has_barriers = len(barriers) > 0
|
|
669
|
-
event_times = self._get_event_times(product, tau)
|
|
670
762
|
|
|
671
763
|
if not params.auto_grid:
|
|
672
764
|
return TimeGrid.build(
|
|
673
765
|
tau,
|
|
674
766
|
params.time_steps,
|
|
675
767
|
method=params.time_grid_type,
|
|
676
|
-
event_times=
|
|
768
|
+
event_times=None,
|
|
677
769
|
grade_exponent=params.grade_exponent,
|
|
678
770
|
)
|
|
679
771
|
|
|
680
|
-
# Logic for suggested time steps
|
|
681
772
|
days = max(1, int(round(tau * float(params.bus_days_in_year))))
|
|
682
773
|
suggested = days
|
|
683
774
|
if has_barriers:
|
|
@@ -689,24 +780,13 @@ class BasePDESolver(BaseEngine):
|
|
|
689
780
|
suggested = int(round(1.5 * float(days)))
|
|
690
781
|
|
|
691
782
|
steps = min(max(params.time_steps, suggested), params.max_time_steps)
|
|
692
|
-
|
|
693
|
-
# Decide method
|
|
694
|
-
method = "uniform"
|
|
695
|
-
if event_times and (has_barriers or obs_type == ObservationType.DISCRETE):
|
|
696
|
-
method = "event_aligned"
|
|
697
|
-
elif params.time_grid_type != "uniform":
|
|
698
|
-
method = params.time_grid_type
|
|
699
|
-
|
|
783
|
+
method = params.time_grid_type if params.time_grid_type != "uniform" else "uniform"
|
|
700
784
|
return TimeGrid.build(
|
|
701
785
|
tau,
|
|
702
786
|
steps,
|
|
703
787
|
method=method,
|
|
704
|
-
event_times=
|
|
788
|
+
event_times=None,
|
|
705
789
|
grade_exponent=params.grade_exponent,
|
|
706
|
-
steps_per_day=params.event_steps_per_day,
|
|
707
|
-
day_count=params.bus_days_in_year,
|
|
708
|
-
min_steps_per_interval=params.event_min_steps_per_interval,
|
|
709
|
-
max_steps_total=params.max_time_steps,
|
|
710
790
|
)
|
|
711
791
|
|
|
712
792
|
def _calculate_coefficients(
|
{quantark-0.2.2 → quantark-0.2.4}/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
|
)
|
|
@@ -55,9 +57,42 @@ class KOResetSnowballPDESolver(SnowballPDESolver):
|
|
|
55
57
|
# price() is inherited from SnowballPDESolver using _check_product_type()
|
|
56
58
|
|
|
57
59
|
def calculate_event_stats(
|
|
58
|
-
self,
|
|
60
|
+
self,
|
|
61
|
+
product: KnockOutResetSnowballOption,
|
|
62
|
+
pricing_env: PricingEnvironment,
|
|
63
|
+
*,
|
|
64
|
+
npv: Optional[float] = None,
|
|
65
|
+
streams: Optional[frozenset] = None,
|
|
59
66
|
) -> Optional[object]:
|
|
60
|
-
|
|
67
|
+
# streams is ignored: the KO-reset stats are QUAD-delegated (full
|
|
68
|
+
# distribution), not a prunable PDE indicator sweep. npv, when supplied
|
|
69
|
+
# by the single-pass price_with_events, is the PDE value used for the
|
|
70
|
+
# reconciliation residual (avoids a redundant self.price() solve).
|
|
71
|
+
if not isinstance(product, KnockOutResetSnowballOption):
|
|
72
|
+
return None
|
|
73
|
+
if pricing_env is None:
|
|
74
|
+
return None
|
|
75
|
+
|
|
76
|
+
from quantark.asset.equity.engine.quad.ko_reset_snowball_quad_engine import (
|
|
77
|
+
KOResetSnowballQuadEngine,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
grid_points = max(501, int(getattr(self.params, "grid_size", 0) or 0))
|
|
81
|
+
quad_stats = KOResetSnowballQuadEngine(
|
|
82
|
+
QuadParams(grid_points=grid_points)
|
|
83
|
+
).calculate_event_stats(product, pricing_env)
|
|
84
|
+
if quad_stats is None:
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
pde_pv = float(npv) if npv is not None else float(self.price(product, pricing_env))
|
|
88
|
+
pv_delta = pde_pv - float(quad_stats.pv)
|
|
89
|
+
return replace(
|
|
90
|
+
quad_stats,
|
|
91
|
+
pv=pde_pv,
|
|
92
|
+
expected_discounted_maturity_cashflow=(
|
|
93
|
+
float(quad_stats.expected_discounted_maturity_cashflow) + pv_delta
|
|
94
|
+
),
|
|
95
|
+
)
|
|
61
96
|
|
|
62
97
|
def _validate_product(self, product: KnockOutResetSnowballOption) -> None:
|
|
63
98
|
super()._validate_product(product)
|
|
@@ -206,22 +241,33 @@ class KOResetSnowballPDESolver(SnowballPDESolver):
|
|
|
206
241
|
|
|
207
242
|
return result
|
|
208
243
|
|
|
209
|
-
def
|
|
244
|
+
def _post_ki_ko_times(
|
|
210
245
|
self, product: KnockOutResetSnowballOption, tau: float
|
|
211
|
-
) ->
|
|
212
|
-
|
|
246
|
+
) -> List[float]:
|
|
247
|
+
"""Post-KI (reset) KO observation times, interior to (0, tau).
|
|
248
|
+
|
|
249
|
+
In the two-surface KO-reset PDE the post-KI KO schedule fires on the V1
|
|
250
|
+
(knocked-in) surface; those dates must be grid nodes exactly [§11.7].
|
|
251
|
+
"""
|
|
252
|
+
out = []
|
|
213
253
|
post_schedule = product.post_barrier_config.ko_observation_schedule
|
|
214
254
|
if post_schedule is not None:
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
255
|
+
out += [
|
|
256
|
+
rec.observation_time
|
|
257
|
+
for rec in post_schedule.records
|
|
258
|
+
if rec.observation_time is not None
|
|
259
|
+
]
|
|
220
260
|
elif product.post_barrier_config.ko_observation_dates is not None:
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
261
|
+
out += list(product.post_barrier_config.ko_observation_dates)
|
|
262
|
+
return sorted({float(t) for t in out if t is not None and 0.0 < float(t) < tau})
|
|
263
|
+
|
|
264
|
+
def _ko_coupon_align_times(
|
|
265
|
+
self, product: KnockOutResetSnowballOption, tau: float
|
|
266
|
+
) -> List[float]:
|
|
267
|
+
"""Pre-KI KO ∪ post-KI (reset) KO — both must align exactly [§11.7]."""
|
|
268
|
+
pre = super()._ko_coupon_align_times(product, tau)
|
|
269
|
+
post = self._post_ki_ko_times(product, tau)
|
|
270
|
+
return sorted(set(pre) | set(post))
|
|
225
271
|
|
|
226
272
|
def get_critical_points(
|
|
227
273
|
self, product: KnockOutResetSnowballOption, pricing_env: PricingEnvironment
|
|
@@ -236,6 +236,9 @@ class PhoenixPDESolver(SnowballPDESolver):
|
|
|
236
236
|
else:
|
|
237
237
|
self._ki_barrier = ki_barrier
|
|
238
238
|
|
|
239
|
+
# Resolve BGK state before grids so the time grid drops interior KI nodes.
|
|
240
|
+
self._configure_bgk(product, pricing_env, sigma, tau)
|
|
241
|
+
|
|
239
242
|
if self._profile_enabled:
|
|
240
243
|
self._reset_profile_stats()
|
|
241
244
|
|
|
@@ -288,7 +291,11 @@ class PhoenixPDESolver(SnowballPDESolver):
|
|
|
288
291
|
)
|
|
289
292
|
|
|
290
293
|
if product.has_ki_barrier:
|
|
291
|
-
should_apply_ki =
|
|
294
|
+
should_apply_ki = (
|
|
295
|
+
self._ki_continuous
|
|
296
|
+
or self._bgk_active
|
|
297
|
+
or terminal_tidx in self._ki_observation_indices
|
|
298
|
+
)
|
|
292
299
|
if should_apply_ki:
|
|
293
300
|
for k in range(len(grid_v0_list)):
|
|
294
301
|
self._apply_ki_jump(grid_v0_list[k], grid_v1_list[k], s_vec, terminal_tidx, product)
|
|
@@ -583,7 +590,11 @@ class PhoenixPDESolver(SnowballPDESolver):
|
|
|
583
590
|
|
|
584
591
|
# 2. KI Jump
|
|
585
592
|
if product.has_ki_barrier:
|
|
586
|
-
should_apply_ki =
|
|
593
|
+
should_apply_ki = (
|
|
594
|
+
self._ki_continuous
|
|
595
|
+
or self._bgk_active
|
|
596
|
+
or t_idx in self._ki_observation_indices
|
|
597
|
+
)
|
|
587
598
|
if should_apply_ki:
|
|
588
599
|
# Apply to all states
|
|
589
600
|
for k in range(len(grid_v0_list)):
|