quantark 0.2.1__tar.gz → 0.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (706) hide show
  1. {quantark-0.2.1 → quantark-0.2.3}/CHANGELOG.md +8 -0
  2. {quantark-0.2.1 → quantark-0.2.3}/PKG-INFO +1 -1
  3. {quantark-0.2.1 → quantark-0.2.3}/pyproject.toml +1 -1
  4. {quantark-0.2.1 → quantark-0.2.3}/quantark/__init__.py +1 -1
  5. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/base_engine.py +12 -0
  6. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/event_stats.py +18 -1
  7. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +18 -3
  8. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +18 -5
  9. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/base_pde_solver.py +30 -0
  10. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +27 -1
  11. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +92 -0
  12. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +91 -14
  13. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde_engine.py +12 -0
  14. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +336 -2
  15. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +88 -11
  16. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +191 -23
  17. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/param/engine_params.py +13 -0
  18. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/greeks_calculator.py +115 -22
  19. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/__init__.py +10 -0
  20. quantark-0.2.3/quantark/cashleg/autocallable_leg.py +198 -0
  21. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/event_distribution.py +10 -1
  22. {quantark-0.2.1 → quantark-0.2.3}/.gitignore +0 -0
  23. {quantark-0.2.1 → quantark-0.2.3}/LICENSE +0 -0
  24. {quantark-0.2.1 → quantark-0.2.3}/NOTICE +0 -0
  25. {quantark-0.2.1 → quantark-0.2.3}/README.md +0 -0
  26. {quantark-0.2.1 → quantark-0.2.3}/quantark/_compat.py +0 -0
  27. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/__init__.py +0 -0
  28. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/__init__.py +0 -0
  29. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/__init__.py +0 -0
  30. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
  31. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
  32. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
  33. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
  34. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
  35. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
  36. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/discount/__init__.py +0 -0
  37. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
  38. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
  39. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/__init__.py +0 -0
  40. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
  41. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
  42. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
  43. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
  44. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/__init__.py +0 -0
  45. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
  46. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
  47. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
  48. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
  49. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/__init__.py +0 -0
  50. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/base_bond_product.py +0 -0
  51. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/convertible/__init__.py +0 -0
  52. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
  53. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
  54. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
  55. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/frn.py +0 -0
  56. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/forward/__init__.py +0 -0
  57. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
  58. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
  59. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/futures/__init__.py +0 -0
  60. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
  61. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/option/__init__.py +0 -0
  62. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
  63. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
  64. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
  65. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/schedule/__init__.py +0 -0
  66. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/bond/schedule/cashflow.py +0 -0
  67. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/__init__.py +0 -0
  68. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/conventions.py +0 -0
  69. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/__init__.py +0 -0
  70. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
  71. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
  72. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
  73. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/mc/__init__.py +0 -0
  74. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
  75. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/engine/schedule.py +0 -0
  76. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/__init__.py +0 -0
  77. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/base_credit_product.py +0 -0
  78. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/basket_cds.py +0 -0
  79. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/product/cds.py +0 -0
  80. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
  81. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
  82. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/__init__.py +0 -0
  83. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/analysis/__init__.py +0 -0
  84. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
  85. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/__init__.py +0 -0
  86. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/__init__.py +0 -0
  87. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +0 -0
  88. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
  89. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +0 -0
  90. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
  91. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
  92. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
  93. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
  94. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
  95. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
  96. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +0 -0
  97. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
  98. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
  99. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
  100. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/__init__.py +0 -0
  101. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/accrual_calculator.py +0 -0
  102. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +0 -0
  103. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +0 -0
  104. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +0 -0
  105. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_valuation.py +0 -0
  106. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/localvol_greeks.py +0 -0
  107. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/__init__.py +0 -0
  108. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +0 -0
  109. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
  110. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +0 -0
  111. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
  112. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
  113. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
  114. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
  115. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_mc_engine.py +0 -0
  116. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +0 -0
  117. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +0 -0
  118. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
  119. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/sabr_mc_engine.py +0 -0
  120. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
  121. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/__init__.py +0 -0
  122. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
  123. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
  124. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
  125. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
  126. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
  127. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_pde_solver.py +0 -0
  128. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +0 -0
  129. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +0 -0
  130. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
  131. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
  132. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/pde/time_grid.py +0 -0
  133. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/__init__.py +0 -0
  134. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
  135. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
  136. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
  137. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
  138. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
  139. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
  140. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
  141. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
  142. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
  143. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
  144. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
  145. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
  146. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
  147. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
  148. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
  149. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
  150. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
  151. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
  152. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
  153. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
  154. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
  155. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
  156. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
  157. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/__init__.py +0 -0
  158. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
  159. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/barrier.py +0 -0
  160. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/events.py +0 -0
  161. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/manager.py +0 -0
  162. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/lifecycle/state.py +0 -0
  163. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/param/__init__.py +0 -0
  164. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
  165. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/__init__.py +0 -0
  166. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/__init__.py +0 -0
  167. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
  168. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +0 -0
  169. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
  170. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +0 -0
  171. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_sobol.py +0 -0
  172. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +0 -0
  173. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/sabr/__init__.py +0 -0
  174. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/process/sabr/sabr_process.py +0 -0
  175. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/__init__.py +0 -0
  176. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/base_equity_product.py +0 -0
  177. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
  178. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
  179. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/futures.py +0 -0
  180. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
  181. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/__init__.py +0 -0
  182. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/accumulator_option.py +0 -0
  183. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/american_option.py +0 -0
  184. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/asian_option.py +0 -0
  185. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/barrier_option.py +0 -0
  186. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
  187. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/digital_option.py +0 -0
  188. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
  189. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
  190. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
  191. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
  192. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
  193. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
  194. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
  195. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
  196. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
  197. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
  198. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
  199. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
  200. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
  201. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
  202. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_config.py +0 -0
  203. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_helpers.py +0 -0
  204. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_option.py +0 -0
  205. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/__init__.py +0 -0
  206. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/base_swap.py +0 -0
  207. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/multi_asset_trs.py +0 -0
  208. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs.py +0 -0
  209. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +0 -0
  210. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_event_handler.py +0 -0
  211. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_params.py +0 -0
  212. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_schedule.py +0 -0
  213. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/__init__.py +0 -0
  214. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
  215. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/plotting.py +0 -0
  216. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
  217. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/surfaces.py +0 -0
  218. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/report/term_structure.py +0 -0
  219. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/__init__.py +0 -0
  220. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/vol_model_risk.py +0 -0
  221. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/__init__.py +0 -0
  222. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/__init__.py +0 -0
  223. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/__init__.py +0 -0
  224. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
  225. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +0 -0
  226. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +0 -0
  227. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +0 -0
  228. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
  229. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +0 -0
  230. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
  231. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +0 -0
  232. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +0 -0
  233. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +0 -0
  234. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +0 -0
  235. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +0 -0
  236. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +0 -0
  237. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +0 -0
  238. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +0 -0
  239. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +0 -0
  240. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/base_fx_engine.py +0 -0
  241. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_common.py +0 -0
  242. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_greeks.py +0 -0
  243. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/__init__.py +0 -0
  244. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +0 -0
  245. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_mc_params.py +0 -0
  246. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +0 -0
  247. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +0 -0
  248. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +0 -0
  249. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +0 -0
  250. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_mc_engine.py +0 -0
  251. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +0 -0
  252. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +0 -0
  253. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/__init__.py +0 -0
  254. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_pde_solver.py +0 -0
  255. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +0 -0
  256. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +0 -0
  257. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/process/__init__.py +0 -0
  258. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/process/fx_gk_path_generator.py +0 -0
  259. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
  260. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/__init__.py +0 -0
  261. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/base_fx_product.py +0 -0
  262. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/currency_pair.py +0 -0
  263. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
  264. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
  265. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
  266. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
  267. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
  268. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/__init__.py +0 -0
  269. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_barrier_option.py +0 -0
  270. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
  271. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +0 -0
  272. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_one_touch_option.py +0 -0
  273. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
  274. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +0 -0
  275. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
  276. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_config.py +0 -0
  277. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_option.py +0 -0
  278. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_sharkfin_option.py +0 -0
  279. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_forward.py +0 -0
  280. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_note.py +0 -0
  281. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
  282. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/report/__init__.py +0 -0
  283. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/report/fx_report.py +0 -0
  284. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/__init__.py +0 -0
  285. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
  286. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/vol_model_risk.py +0 -0
  287. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/__init__.py +0 -0
  288. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/__init__.py +0 -0
  289. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
  290. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/fra_engine.py +0 -0
  291. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
  292. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/engine/swaption_engine.py +0 -0
  293. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/__init__.py +0 -0
  294. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/cap_floor.py +0 -0
  295. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/fra.py +0 -0
  296. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/irs.py +0 -0
  297. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/rate/product/swaption.py +0 -0
  298. {quantark-0.2.1 → quantark-0.2.3}/quantark/asset/vol_model_risk.py +0 -0
  299. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/__init__.py +0 -0
  300. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/base.py +0 -0
  301. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/__init__.py +0 -0
  302. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/config.py +0 -0
  303. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/engine.py +0 -0
  304. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/credit/results.py +0 -0
  305. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/dashboard.py +0 -0
  306. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/__init__.py +0 -0
  307. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/config.py +0 -0
  308. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/engine.py +0 -0
  309. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/hedge_executor.py +0 -0
  310. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/metrics.py +0 -0
  311. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
  312. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/results.py +0 -0
  313. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/equity/state.py +0 -0
  314. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/__init__.py +0 -0
  315. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/advanced_backtest.py +0 -0
  316. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
  317. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
  318. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/__init__.py +0 -0
  319. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/config.py +0 -0
  320. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/engine.py +0 -0
  321. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/hedge_executor.py +0 -0
  322. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/metrics.py +0 -0
  323. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/results.py +0 -0
  324. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fi/state.py +0 -0
  325. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/__init__.py +0 -0
  326. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/config.py +0 -0
  327. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/engine.py +0 -0
  328. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/fx/results.py +0 -0
  329. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/logger.py +0 -0
  330. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/__init__.py +0 -0
  331. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/_replay.py +0 -0
  332. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/book_engine.py +0 -0
  333. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/config.py +0 -0
  334. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/dashboard.py +0 -0
  335. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/engine.py +0 -0
  336. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/engine_factory.py +0 -0
  337. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/market.py +0 -0
  338. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/results.py +0 -0
  339. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/otc/state.py +0 -0
  340. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/report_generator.py +0 -0
  341. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/__init__.py +0 -0
  342. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
  343. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/base_strategy.py +0 -0
  344. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
  345. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
  346. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
  347. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
  348. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
  349. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/hedge_instruments.py +0 -0
  350. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
  351. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
  352. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
  353. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
  354. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/scenarios.py +0 -0
  355. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
  356. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
  357. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
  358. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/transaction_costs.py +0 -0
  359. {quantark-0.2.1 → quantark-0.2.3}/quantark/backtest/visualizer.py +0 -0
  360. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/accrual_leg.py +0 -0
  361. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/base.py +0 -0
  362. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/base_amount.py +0 -0
  363. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/deterministic_leg.py +0 -0
  364. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/fixed_payoff_leg.py +0 -0
  365. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/leg_schedule.py +0 -0
  366. {quantark-0.2.1 → quantark-0.2.3}/quantark/cashleg/leg_valuator.py +0 -0
  367. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/__init__.py +0 -0
  368. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/base.py +0 -0
  369. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/config.py +0 -0
  370. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/__init__.py +0 -0
  371. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/config.py +0 -0
  372. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/engine.py +0 -0
  373. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/credit/path_library.py +0 -0
  374. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/engine.py +0 -0
  375. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/equity/__init__.py +0 -0
  376. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/__init__.py +0 -0
  377. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/config.py +0 -0
  378. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/engine.py +0 -0
  379. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fi/results.py +0 -0
  380. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/__init__.py +0 -0
  381. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/config.py +0 -0
  382. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/engine.py +0 -0
  383. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/fx/path_library.py +0 -0
  384. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
  385. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/__init__.py +0 -0
  386. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/day_path.py +0 -0
  387. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
  388. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/path_builder.py +0 -0
  389. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/path/path_library.py +0 -0
  390. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/report/__init__.py +0 -0
  391. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
  392. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/report/visualizer.py +0 -0
  393. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/results/__init__.py +0 -0
  394. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
  395. {quantark-0.2.1 → quantark-0.2.3}/quantark/dynamicscenario/results/result_exporter.py +0 -0
  396. {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/__init__.py +0 -0
  397. {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_brownian_bridge.py +0 -0
  398. {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_rqmc_driver.py +0 -0
  399. {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_sobol.py +0 -0
  400. {quantark-0.2.1 → quantark-0.2.3}/quantark/montecarlo/qmc_variance_reduction.py +0 -0
  401. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/__init__.py +0 -0
  402. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/basis/__init__.py +0 -0
  403. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/basis/basis_yield.py +0 -0
  404. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/credit/__init__.py +0 -0
  405. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/credit/ajd_hazard_curve.py +0 -0
  406. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/credit/hazard_curve.py +0 -0
  407. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/div/__init__.py +0 -0
  408. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/div/dividend_yield.py +0 -0
  409. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/index/__init__.py +0 -0
  410. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/index/rate_index.py +0 -0
  411. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/quote/__init__.py +0 -0
  412. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/quote/spot_quote.py +0 -0
  413. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/rrf/__init__.py +0 -0
  414. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/rrf/rate_curve.py +0 -0
  415. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/__init__.py +0 -0
  416. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/collapse_guard.py +0 -0
  417. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/__init__.py +0 -0
  418. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/calibration.py +0 -0
  419. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/diagnostics.py +0 -0
  420. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/hagan.py +0 -0
  421. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/sabr/sabr_surface.py +0 -0
  422. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/__init__.py +0 -0
  423. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/bs_fx.py +0 -0
  424. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/market_conventions.py +0 -0
  425. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/smile_builder.py +0 -0
  426. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_core.py +0 -0
  427. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_surface.py +0 -0
  428. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_term_structure.py +0 -0
  429. {quantark-0.2.1 → quantark-0.2.3}/quantark/param/vol/vol_surface.py +0 -0
  430. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/__init__.py +0 -0
  431. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/base.py +0 -0
  432. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/credit/__init__.py +0 -0
  433. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/credit/portfolio.py +0 -0
  434. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/credit/position.py +0 -0
  435. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/__init__.py +0 -0
  436. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/portfolio.py +0 -0
  437. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/position.py +0 -0
  438. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/equity/swap_position.py +0 -0
  439. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fi/__init__.py +0 -0
  440. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fi/portfolio.py +0 -0
  441. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fi/position.py +0 -0
  442. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fx/__init__.py +0 -0
  443. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fx/portfolio.py +0 -0
  444. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/fx/position.py +0 -0
  445. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/portfolio_snapshot.py +0 -0
  446. {quantark-0.2.1 → quantark-0.2.3}/quantark/portfolio/portfolio_storage.py +0 -0
  447. {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/__init__.py +0 -0
  448. {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/credit_pricing_environment.py +0 -0
  449. {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/fx_pricing_environment.py +0 -0
  450. {quantark-0.2.1 → quantark-0.2.3}/quantark/priceenv/pricing_environment.py +0 -0
  451. {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/__init__.py +0 -0
  452. {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/builders.py +0 -0
  453. {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/models.py +0 -0
  454. {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/registry.py +0 -0
  455. {quantark-0.2.1 → quantark-0.2.3}/quantark/rfq/service.py +0 -0
  456. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/__init__.py +0 -0
  457. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/calculator.py +0 -0
  458. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/dashboard.py +0 -0
  459. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/__init__.py +0 -0
  460. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/__init__.py +0 -0
  461. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/base.py +0 -0
  462. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/commodity.py +0 -0
  463. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/credit.py +0 -0
  464. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/equity.py +0 -0
  465. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/fx.py +0 -0
  466. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/addons/interest_rate.py +0 -0
  467. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/maths.py +0 -0
  468. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/pfe.py +0 -0
  469. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/engines/replacement_cost.py +0 -0
  470. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/__init__.py +0 -0
  471. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/enums.py +0 -0
  472. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/netting_set.py +0 -0
  473. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/models/trade.py +0 -0
  474. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/parameters/__init__.py +0 -0
  475. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/parameters/supervisory.py +0 -0
  476. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/results/__init__.py +0 -0
  477. {quantark-0.2.1 → quantark-0.2.3}/quantark/saccr/results/result.py +0 -0
  478. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/__init__.py +0 -0
  479. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/calculator.py +0 -0
  480. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/cva/__init__.py +0 -0
  481. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/cva/engine.py +0 -0
  482. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/dashboard.py +0 -0
  483. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/__init__.py +0 -0
  484. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/base.py +0 -0
  485. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/commodity.py +0 -0
  486. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/correlations.py +0 -0
  487. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/counterparty_credit.py +0 -0
  488. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/equity.py +0 -0
  489. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/fx.py +0 -0
  490. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/interest_rate.py +0 -0
  491. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/engines/reference_credit.py +0 -0
  492. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/__init__.py +0 -0
  493. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/asof.py +0 -0
  494. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/correlation.py +0 -0
  495. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/curves.py +0 -0
  496. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/engine.py +0 -0
  497. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/grid.py +0 -0
  498. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/__init__.py +0 -0
  499. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/calibration.py +0 -0
  500. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/engine.py +0 -0
  501. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/path_generator.py +0 -0
  502. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/pfe.py +0 -0
  503. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/historical/resampling.py +0 -0
  504. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/paths.py +0 -0
  505. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/phoenix_surface.py +0 -0
  506. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/repricer.py +0 -0
  507. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/simulator.py +0 -0
  508. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/snowball_surface.py +0 -0
  509. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/statemachine.py +0 -0
  510. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/exposure/value_surface.py +0 -0
  511. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/__init__.py +0 -0
  512. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/enums.py +0 -0
  513. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/portfolio.py +0 -0
  514. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/models/sensitivity.py +0 -0
  515. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/parameters/__init__.py +0 -0
  516. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/parameters/supervisory.py +0 -0
  517. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/__init__.py +0 -0
  518. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/counterparty.py +0 -0
  519. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/credit_curve.py +0 -0
  520. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/netting.py +0 -0
  521. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/trade.py +0 -0
  522. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/portfolio/trade_portfolio.py +0 -0
  523. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/results/__init__.py +0 -0
  524. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/results/result.py +0 -0
  525. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sacva_engine.py +0 -0
  526. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/__init__.py +0 -0
  527. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/curve_bump.py +0 -0
  528. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/engine.py +0 -0
  529. {quantark-0.2.1 → quantark-0.2.3}/quantark/sacva/sensitivities/shifts.py +0 -0
  530. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/__init__.py +0 -0
  531. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/__init__.py +0 -0
  532. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/accessors.py +0 -0
  533. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/commodity.py +0 -0
  534. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
  535. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/credit_qualifying.py +0 -0
  536. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/cross_risk.py +0 -0
  537. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/equity.py +0 -0
  538. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/fx.py +0 -0
  539. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/ir.py +0 -0
  540. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/calibration/version.py +0 -0
  541. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/config.py +0 -0
  542. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/crif/__init__.py +0 -0
  543. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/crif/models.py +0 -0
  544. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/crif/parser.py +0 -0
  545. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/dashboard.py +0 -0
  546. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/__init__.py +0 -0
  547. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/__init__.py +0 -0
  548. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/addon.py +0 -0
  549. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
  550. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/concentration.py +0 -0
  551. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/correlations.py +0 -0
  552. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
  553. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
  554. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
  555. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
  556. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/base.py +0 -0
  557. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/classification/__init__.py +0 -0
  558. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
  559. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/factory.py +0 -0
  560. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/portfolio_adapter.py +0 -0
  561. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/result.py +0 -0
  562. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/__init__.py +0 -0
  563. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
  564. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
  565. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
  566. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/market_data.py +0 -0
  567. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/__init__.py +0 -0
  568. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/crif_export.py +0 -0
  569. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/excel_generator.py +0 -0
  570. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/report/html_generator.py +0 -0
  571. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/__init__.py +0 -0
  572. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/attribution.py +0 -0
  573. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/simm_result.py +0 -0
  574. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/results/whatif.py +0 -0
  575. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/sensitivity.py +0 -0
  576. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/taxonomy.py +0 -0
  577. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/template/__init__.py +0 -0
  578. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/template/xlsx_loader.py +0 -0
  579. {quantark-0.2.1 → quantark-0.2.3}/quantark/simm/template/xlsx_template.py +0 -0
  580. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/__init__.py +0 -0
  581. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/base.py +0 -0
  582. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/config.py +0 -0
  583. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/__init__.py +0 -0
  584. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/config.py +0 -0
  585. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
  586. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/credit/engine.py +0 -0
  587. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/engine.py +0 -0
  588. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/__init__.py +0 -0
  589. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/config.py +0 -0
  590. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/engine.py +0 -0
  591. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/report/__init__.py +0 -0
  592. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/report/report_generator.py +0 -0
  593. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/report/visualizer.py +0 -0
  594. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/equity/results.py +0 -0
  595. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/__init__.py +0 -0
  596. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/config.py +0 -0
  597. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/engine.py +0 -0
  598. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/metrics.py +0 -0
  599. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fi/results.py +0 -0
  600. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/__init__.py +0 -0
  601. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/config.py +0 -0
  602. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/engine.py +0 -0
  603. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
  604. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/report/__init__.py +0 -0
  605. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/report/report_generator.py +0 -0
  606. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/report/visualizer.py +0 -0
  607. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/__init__.py +0 -0
  608. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/result_aggregator.py +0 -0
  609. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/result_exporter.py +0 -0
  610. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/results/stress_results.py +0 -0
  611. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/__init__.py +0 -0
  612. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario.py +0 -0
  613. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_builder.py +0 -0
  614. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_library.py +0 -0
  615. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_storage.py +0 -0
  616. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/stress/__init__.py +0 -0
  617. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/stress/stress_applicator.py +0 -0
  618. {quantark-0.2.1 → quantark-0.2.3}/quantark/stresstest/stress/stress_types.py +0 -0
  619. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/__init__.py +0 -0
  620. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/barrier_shift.py +0 -0
  621. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/__init__.py +0 -0
  622. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/business_calendar.py +0 -0
  623. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/day_counter.py +0 -0
  624. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china.csv +0 -0
  625. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
  626. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/__init__.py +0 -0
  627. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/bond_enums.py +0 -0
  628. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/deltaone_enums.py +0 -0
  629. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/engine_enums.py +0 -0
  630. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/fx_enums.py +0 -0
  631. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/greek_conventions.py +0 -0
  632. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/greeks_enums.py +0 -0
  633. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/enum/option_enums.py +0 -0
  634. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/exceptions.py +0 -0
  635. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/__init__.py +0 -0
  636. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
  637. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
  638. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/converter.py +0 -0
  639. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/example_usage.py +0 -0
  640. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/generator/__init__.py +0 -0
  641. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/generator/mock_generator.py +0 -0
  642. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/models.py +0 -0
  643. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/storage/__init__.py +0 -0
  644. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
  645. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/__init__.py +0 -0
  646. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/comparison.py +0 -0
  647. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/constants.py +0 -0
  648. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/formatting.py +0 -0
  649. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/pnl.py +0 -0
  650. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/safe_math.py +0 -0
  651. {quantark-0.2.1 → quantark-0.2.3}/quantark/util/numerical/validation.py +0 -0
  652. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/__init__.py +0 -0
  653. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/attribution.py +0 -0
  654. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/backtest/__init__.py +0 -0
  655. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/backtest/var_backtester.py +0 -0
  656. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/base.py +0 -0
  657. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/config.py +0 -0
  658. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/__init__.py +0 -0
  659. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/config.py +0 -0
  660. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/engine.py +0 -0
  661. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/credit/revaluation.py +0 -0
  662. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/__init__.py +0 -0
  663. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/historical.py +0 -0
  664. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/monte_carlo.py +0 -0
  665. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/engines/parametric.py +0 -0
  666. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/__init__.py +0 -0
  667. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/config.py +0 -0
  668. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/engine.py +0 -0
  669. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/fx/revaluation.py +0 -0
  670. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/__init__.py +0 -0
  671. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/incremental_var_result.py +0 -0
  672. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/var_report.py +0 -0
  673. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/results/var_result.py +0 -0
  674. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/__init__.py +0 -0
  675. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/base.py +0 -0
  676. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/equity_factors.py +0 -0
  677. {quantark-0.2.1 → quantark-0.2.3}/quantark/var/risk_factors/fi_factors.py +0 -0
  678. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/__init__.py +0 -0
  679. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/black_scholes.py +0 -0
  680. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/curves.py +0 -0
  681. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/__init__.py +0 -0
  682. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/analytical_kernel.py +0 -0
  683. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/calibration.py +0 -0
  684. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/mc_kernel.py +0 -0
  685. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/params.py +0 -0
  686. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/heston/pde_kernel.py +0 -0
  687. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/__init__.py +0 -0
  688. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/dupire.py +0 -0
  689. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/mc_kernel.py +0 -0
  690. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/pde_kernel.py +0 -0
  691. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/localvol/surface.py +0 -0
  692. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/risk/__init__.py +0 -0
  693. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/risk/contracts.py +0 -0
  694. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/risk/scenarios.py +0 -0
  695. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/__init__.py +0 -0
  696. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/__init__.py +0 -0
  697. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/bootstrap.py +0 -0
  698. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/calibration.py +0 -0
  699. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/config.py +0 -0
  700. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/coordinates.py +0 -0
  701. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_operators.py +0 -0
  702. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_solver.py +0 -0
  703. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/leverage.py +0 -0
  704. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/slv_mc_kernel.py +0 -0
  705. {quantark-0.2.1 → quantark-0.2.3}/quantark/volmodels/slv/slv_pde_kernel.py +0 -0
  706. {quantark-0.2.1 → quantark-0.2.3}/quantark_compat.pth +0 -0
@@ -5,6 +5,14 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
5
  and the project adheres to [Semantic Versioning](https://semver.org/).
6
6
  During 0.x the public API may still change between minor versions.
7
7
 
8
+ ## [0.2.2] - 2026-07-01
9
+
10
+ ### Fixed
11
+ - PDE numerical Greeks: freeze the base spatial domain for finite-difference
12
+ bump repricing so rho and dividend rho measure market sensitivity without
13
+ contamination from auto-grid/domain movement under bumped rate, dividend,
14
+ volatility, or time inputs.
15
+
8
16
  ## [0.2.1] - 2026-06-30
9
17
 
10
18
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quantark
3
- Version: 0.2.1
3
+ Version: 0.2.3
4
4
  Summary: Modular derivatives pricing and risk library: options, autocallables, bonds, VaR, SIMM
5
5
  Project-URL: Homepage, https://github.com/deiiiiii93/quantark
6
6
  Project-URL: Repository, https://github.com/deiiiiii93/quantark
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "quantark"
7
- version = "0.2.1"
7
+ version = "0.2.3"
8
8
  description = "Modular derivatives pricing and risk library: options, autocallables, bonds, VaR, SIMM"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,3 +1,3 @@
1
1
  """QuantArk: professional financial derivatives pricing library."""
2
2
 
3
- __version__ = "0.2.1"
3
+ __version__ = "0.2.3"
@@ -52,6 +52,18 @@ class BaseEngine(ABC):
52
52
  """
53
53
  pass
54
54
 
55
+ def create_bump_context(
56
+ self, product: BaseEquityProduct, pricing_env: PricingEnvironment
57
+ ) -> "BaseEngine":
58
+ """
59
+ Return an engine context for finite-difference bump repricing.
60
+
61
+ Engines with market-dependent numerical grids can override this hook to
62
+ freeze the base valuation grid/domain before bumped repricing. Engines
63
+ without such state explicitly fall back to the current repricing engine.
64
+ """
65
+ return self
66
+
55
67
  def price_with_events(
56
68
  self,
57
69
  product: BaseEquityProduct,
@@ -9,6 +9,7 @@ autocallable products (Snowball-first).
9
9
  from __future__ import annotations
10
10
 
11
11
  from dataclasses import dataclass, field
12
+ from typing import Optional
12
13
 
13
14
  import numpy as np
14
15
 
@@ -24,12 +25,26 @@ class AutocallableEventStats:
24
25
  ko_probability: Probability of KO occurring at each observation time.
25
26
  survival_probability: Probability of surviving (not KO'd) up to each observation.
26
27
  expected_discounted_ko_cashflow: Expected discounted KO redemption cashflow at each observation.
27
- ki_probability: Probability that KI occurred at least once before maturity (if applicable).
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=float(np.mean(stats["ki_triggered"]))
308
- if product.has_ki_barrier
309
- else 0.0,
322
+ ki_probability=ki_ever_probability,
310
323
  expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
311
324
  reconciliation_error=float(reconciliation_error),
312
325
  ki_times=ki_event_times,
313
326
  ki_event_probability=ki_event_probability,
314
327
  ki_survival_probability=ki_survival_probability,
328
+ ki_ever_probability=ki_ever_probability,
329
+ ki_survive_knocked_in_probability=ki_survive_knocked_in_probability,
315
330
  coupon_probability=coupon_probabilities,
316
331
  expected_discounted_coupon_cashflow=coupon_cashflows,
317
332
  )
@@ -422,22 +422,31 @@ class SnowballMCEngine(BaseEngine):
422
422
  )
423
423
  reconciliation_error = pv - pv_cashflows
424
424
 
425
+ # Unambiguous, cross-engine-consistent KI definitions (investigation
426
+ # 2026-07-01): ki_ever = P(KI ever, KO-independent); ki_survive =
427
+ # P(KI ever AND never KO) = settles knocked-in. Legacy ki_probability keeps
428
+ # MC's historical "KI ever" meaning.
429
+ if product.has_ki_barrier or already_knocked_in:
430
+ ki_ever_probability = float(np.mean(ki_triggered))
431
+ ki_survive_knocked_in_probability = float(np.mean(ki_triggered & ~is_ko))
432
+ else:
433
+ ki_ever_probability = 0.0
434
+ ki_survive_knocked_in_probability = 0.0
435
+
425
436
  return AutocallableEventStats(
426
437
  pv=pv,
427
438
  ko_times=ko_times,
428
439
  ko_probability=ko_probability,
429
440
  survival_probability=survival_probability,
430
441
  expected_discounted_ko_cashflow=expected_discounted_ko_cashflow,
431
- ki_probability=(
432
- float(np.mean(ki_triggered))
433
- if product.has_ki_barrier or already_knocked_in
434
- else 0.0
435
- ),
442
+ ki_probability=ki_ever_probability,
436
443
  expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
437
444
  reconciliation_error=float(reconciliation_error),
438
445
  ki_times=ki_event_times,
439
446
  ki_event_probability=ki_event_probability,
440
447
  ki_survival_probability=ki_survival_probability,
448
+ ki_ever_probability=ki_ever_probability,
449
+ ki_survive_knocked_in_probability=ki_survive_knocked_in_probability,
441
450
  )
442
451
 
443
452
  def _calculate_event_stats_ko_reset(
@@ -551,6 +560,10 @@ class SnowballMCEngine(BaseEngine):
551
560
  ki_probability=float(np.mean(ki_triggered)),
552
561
  expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
553
562
  reconciliation_error=float(reconciliation_error),
563
+ # ki_ever = P(KI ever, KO-independent); ki_survive = P(KI ever AND
564
+ # never KO'd, pre- or post-reset). Legacy ki_probability stays "KI ever".
565
+ ki_ever_probability=float(np.mean(ki_triggered)),
566
+ ki_survive_knocked_in_probability=float(np.mean(ki_triggered & ~is_ko)),
554
567
  pre_ko_times=pre_times,
555
568
  pre_ko_probability=pre_prob,
556
569
  post_ko_times=post_times,
@@ -7,6 +7,7 @@ backward in time, with support for Rannacher smoothing.
7
7
 
8
8
  from abc import abstractmethod
9
9
  from collections import OrderedDict
10
+ from copy import deepcopy
10
11
  import math
11
12
  import threading
12
13
  from typing import Dict, Optional, Tuple, List, NamedTuple, Sequence
@@ -131,6 +132,35 @@ class BasePDESolver(BaseEngine):
131
132
  strategy = self._cache_strategy
132
133
  return strategy
133
134
 
135
+ def create_bump_context(
136
+ self, product: BaseEquityProduct, pricing_env: PricingEnvironment
137
+ ) -> "BasePDESolver":
138
+ """
139
+ Return a PDE solver clone with the base spatial domain frozen.
140
+
141
+ Auto spatial bounds depend on market drift/volatility. Freezing the
142
+ base valuation bounds keeps rate, dividend, volatility, and theta bumps
143
+ from mixing true market sensitivity with domain movement noise.
144
+ """
145
+ spot = pricing_env.spot
146
+ tau = product.get_maturity(pricing_env)
147
+ if tau <= 0:
148
+ return self
149
+
150
+ strike = getattr(product, "strike", spot)
151
+ r = pricing_env.get_rate(tau)
152
+ q = pricing_env.get_div_yield(tau)
153
+ sigma = pricing_env.get_vol(strike, tau)
154
+ barriers = self._get_barriers(product)
155
+ s_min, s_max = self._resolve_spatial_bounds(
156
+ product, spot, sigma, tau, r, q, barriers
157
+ )
158
+
159
+ fixed_params = deepcopy(self.params)
160
+ fixed_params.s_min = float(s_min)
161
+ fixed_params.s_max = float(s_max)
162
+ return type(self)(params=fixed_params)
163
+
134
164
  def _freeze_cache_value(self, value):
135
165
  if value is None or isinstance(value, (str, int, float, bool)):
136
166
  return value
@@ -8,6 +8,7 @@ to the V1 surface (ABSOLUTE post-KO mode only).
8
8
  from __future__ import annotations
9
9
 
10
10
  from collections import OrderedDict
11
+ from dataclasses import replace
11
12
  from time import perf_counter
12
13
  from typing import Dict, List, Optional, Tuple
13
14
 
@@ -15,6 +16,7 @@ import numpy as np
15
16
 
16
17
  from quantark.asset.equity.engine.pde.base_pde_solver import PDESolutionResult
17
18
  from quantark.asset.equity.engine.pde.snowball_pde_solver import SnowballPDESolver
19
+ from quantark.asset.equity.param import QuadParams
18
20
  from quantark.asset.equity.product.option.ko_reset_snowball_option import (
19
21
  KnockOutResetSnowballOption,
20
22
  )
@@ -57,7 +59,31 @@ class KOResetSnowballPDESolver(SnowballPDESolver):
57
59
  def calculate_event_stats(
58
60
  self, product: KnockOutResetSnowballOption, pricing_env: PricingEnvironment
59
61
  ) -> Optional[object]:
60
- return None
62
+ if not isinstance(product, KnockOutResetSnowballOption):
63
+ return None
64
+ if pricing_env is None:
65
+ return None
66
+
67
+ from quantark.asset.equity.engine.quad.ko_reset_snowball_quad_engine import (
68
+ KOResetSnowballQuadEngine,
69
+ )
70
+
71
+ grid_points = max(501, int(getattr(self.params, "grid_size", 0) or 0))
72
+ quad_stats = KOResetSnowballQuadEngine(
73
+ QuadParams(grid_points=grid_points)
74
+ ).calculate_event_stats(product, pricing_env)
75
+ if quad_stats is None:
76
+ return None
77
+
78
+ pde_pv = float(self.price(product, pricing_env))
79
+ pv_delta = pde_pv - float(quad_stats.pv)
80
+ return replace(
81
+ quad_stats,
82
+ pv=pde_pv,
83
+ expected_discounted_maturity_cashflow=(
84
+ float(quad_stats.expected_discounted_maturity_cashflow) + pv_delta
85
+ ),
86
+ )
61
87
 
62
88
  def _validate_product(self, product: KnockOutResetSnowballOption) -> None:
63
89
  super()._validate_product(product)
@@ -43,6 +43,98 @@ class PhoenixPDESolver(SnowballPDESolver):
43
43
  self._coupon_amounts: np.ndarray = np.array([])
44
44
  self._coupon_cumulative: np.ndarray = np.array([])
45
45
 
46
+ # --- Native event stats (no MC): reuse the Snowball KO/KI machinery ---
47
+
48
+ def _event_stats_product_type(self) -> type:
49
+ return PhoenixOption
50
+
51
+ def _make_event_stats(self, **fields):
52
+ from quantark.asset.equity.engine.event_stats import PhoenixEventStats
53
+
54
+ return PhoenixEventStats(**fields)
55
+
56
+ def _n_extra_event_cols(self, n_ko: int) -> int:
57
+ # One coupon-trigger indicator column per observation.
58
+ return n_ko
59
+
60
+ def _set_extra_event_indicators(
61
+ self, v0, v1, s_vec, n_ko, ko_idx, rec, product, pricing_env, t_vec, t_idx
62
+ ) -> None:
63
+ # Set the coupon-trigger column on the coupon-pay mask AFTER the KO jump,
64
+ # so a coupon at a simultaneous KO is still counted (matches the Phoenix MC
65
+ # reference: coupon_hit gated on "alive entering obs i", incl. first_ko_idx==i).
66
+ if ko_idx is None or ko_idx >= self._coupon_barriers.shape[0]:
67
+ return
68
+ coupon_barrier = float(self._coupon_barriers[ko_idx])
69
+ pay_mask = self._get_barrier_mask(
70
+ s_vec, coupon_barrier, product.is_reverse, is_up_barrier=True
71
+ )
72
+ df_delay = self._cashflow_value_at_time(
73
+ pricing_env=pricing_env,
74
+ cashflow=1.0,
75
+ current_time=float(t_vec[t_idx]),
76
+ settlement_time=rec.settlement_time,
77
+ )
78
+ coup_col = n_ko + ko_idx
79
+ v0[pay_mask, coup_col] = df_delay
80
+ v1[pay_mask, coup_col] = df_delay
81
+
82
+ def _extract_extra_event_stats(
83
+ self, initial_grid, x_vec, spot_log, n_ko, ko_records, pricing_env, product
84
+ ) -> dict:
85
+ ed_coup = np.array(
86
+ [
87
+ float(np.interp(spot_log, x_vec, initial_grid[:, n_ko + i]))
88
+ for i in range(n_ko)
89
+ ],
90
+ dtype=float,
91
+ )
92
+ coupon_probability = np.zeros(n_ko, dtype=float)
93
+ for i, rec in enumerate(ko_records):
94
+ obs_time = float(rec.observation_time)
95
+ settle = float(
96
+ rec.settlement_time if rec.settlement_time is not None else obs_time
97
+ )
98
+ df0 = pricing_env.get_discount_factor(settle)
99
+ if df0 > 0.0:
100
+ coupon_probability[i] = float(ed_coup[i] / df0)
101
+ result = {"coupon_probability": coupon_probability}
102
+ ecc = self._coupon_cashflow_from_probability(
103
+ coupon_probability, n_ko, ko_records, pricing_env, product
104
+ )
105
+ if ecc is not None:
106
+ result["expected_discounted_coupon_cashflow"] = ecc
107
+ return result
108
+
109
+ def _coupon_cashflow_from_probability(
110
+ self, coupon_probability, n_ko, ko_records, pricing_env, product
111
+ ):
112
+ """Expected discounted coupon cashflow for non-memory coupons, else None.
113
+
114
+ With a deterministic per-period coupon amount and a deterministic
115
+ settlement time, E[DF(0->settle) * amount * 1{coupon}] factors exactly as
116
+ DF(0->settle) * amount * P(coupon). For memory coupons the paid amount is
117
+ path-dependent and cannot be recovered from the trigger indicator, so we
118
+ omit the field (probability stays correct) rather than report a wrong value.
119
+ """
120
+ if product.has_memory_coupon:
121
+ return None
122
+ expiry = product.coupon_config.coupon_pay_type == CouponPayType.EXPIRY
123
+ maturity = float(product.get_maturity(pricing_env))
124
+ ecc = np.zeros(n_ko, dtype=float)
125
+ for i, rec in enumerate(ko_records):
126
+ obs_time = float(rec.observation_time)
127
+ settle = maturity if expiry else obs_time
128
+ amt = (
129
+ float(self._coupon_amounts[i])
130
+ if i < self._coupon_amounts.shape[0]
131
+ else 0.0
132
+ )
133
+ ecc[i] = float(
134
+ pricing_env.get_discount_factor(settle) * amt * coupon_probability[i]
135
+ )
136
+ return ecc
137
+
46
138
  # price() and calculate_greeks() are inherited from SnowballPDESolver
47
139
  # The _check_product_type() method uses _supported_product_type to validate
48
140
 
@@ -323,20 +323,49 @@ class SnowballPDESolver(BasePDESolver):
323
323
  def calculate_event_stats(
324
324
  self, product: BaseEquityProduct, pricing_env: PricingEnvironment
325
325
  ) -> Optional[AutocallableEventStats]:
326
- """
327
- Provide per-observation KO probabilities and expected discounted cashflows.
326
+ """Provide per-observation KO probabilities and expected discounted cashflows."""
327
+ if not isinstance(product, self._event_stats_product_type()):
328
+ return None
329
+ if pricing_env is None:
330
+ return None
331
+ return self._compute_event_stats(product, pricing_env)
332
+
333
+ def _event_stats_product_type(self) -> type:
334
+ """Product type accepted by ``calculate_event_stats`` (overridable)."""
335
+ return SnowballOption
336
+
337
+ def _make_event_stats(self, **fields) -> AutocallableEventStats:
338
+ """Construct the event-stats dataclass (overridable by subclasses)."""
339
+ return AutocallableEventStats(**fields)
340
+
341
+ # --- Extra indicator-surface hooks (overridden by Phoenix for coupons) ---
328
342
 
343
+ def _n_extra_event_cols(self, n_ko: int) -> int:
344
+ """Extra stacked indicator columns beyond ``[KO_0..KO_{n-1}]``."""
345
+ return 0
346
+
347
+ def _set_extra_event_indicators(
348
+ self, v0, v1, s_vec, n_ko, ko_idx, rec, product, pricing_env, t_vec, t_idx
349
+ ) -> None:
350
+ """Set extra indicator columns at an observation (no-op for Snowball)."""
351
+ return None
352
+
353
+ def _extract_extra_event_stats(
354
+ self, initial_grid, x_vec, spot_log, n_ko, ko_records, pricing_env, product
355
+ ) -> dict:
356
+ """Extra event-stats fields from the extra columns (none for Snowball)."""
357
+ return {}
358
+
359
+ def _compute_event_stats(
360
+ self, product: BaseEquityProduct, pricing_env: PricingEnvironment
361
+ ) -> Optional[AutocallableEventStats]:
362
+ """
329
363
  Native PDE implementation:
330
364
  - Propagates stacked indicator surfaces through the same backward PDE stepping.
331
365
  - Applies KO/KI jumps to all indicator surfaces at observation times.
332
366
  - Returns KO per-observation probabilities (by dividing discounted indicators by
333
367
  discount factors) and expected discounted KO cashflows.
334
368
  """
335
- if not isinstance(product, SnowballOption):
336
- return None
337
- if pricing_env is None:
338
- return None
339
-
340
369
  spot = pricing_env.spot
341
370
  tau = product.get_maturity(pricing_env)
342
371
  if tau <= 0 or is_zero(tau):
@@ -398,16 +427,25 @@ class SnowballPDESolver(BasePDESolver):
398
427
  )
399
428
  ko_index_by_tidx[t_idx] = k
400
429
 
401
- # Surface columns: [KO_0, ..., KO_{n_ko-1}, KI_indicator]
402
- ki_col = n_ko
403
- n_cols = n_ko + 1
430
+ # Surface columns: [KO_0..KO_{n-1}, <extra coupon cols>, KI_indicator,
431
+ # KI_ever_indicator]. The KI_indicator carries the "settles knocked-in"
432
+ # semantics (absorbed to 0 on any KO). The KI_ever_indicator tracks
433
+ # P(the underlying breaches the KI barrier at any point in [0, T]),
434
+ # independent of KO/autocall — it is a pure first-passage statistic and is
435
+ # therefore EXEMPT from the KO absorption below (matching the QUAD and MC
436
+ # ki_ever definition).
437
+ n_extra = self._n_extra_event_cols(n_ko)
438
+ ki_col = n_ko + n_extra
439
+ ki_ever_col = n_ko + n_extra + 1
440
+ n_cols = n_ko + n_extra + 2
404
441
 
405
442
  # Terminal conditions at maturity (t = T):
406
443
  # - KO indicators are zero at maturity (KO only at discrete observations via jumps)
407
- # - KI indicator is 1 on the KI surface and 0 on the no-KI surface
444
+ # - Both KI indicators are 1 on the KI surface and 0 on the no-KI surface
408
445
  v0_next = np.zeros((num_x, n_cols), dtype=float)
409
446
  v1_next = np.zeros((num_x, n_cols), dtype=float)
410
447
  v1_next[:, ki_col] = 1.0
448
+ v1_next[:, ki_ever_col] = 1.0
411
449
 
412
450
  # Apply terminal KO/KI events at maturity if observation schedules include t=T.
413
451
  terminal_tidx = num_t - 1
@@ -417,6 +455,9 @@ class SnowballPDESolver(BasePDESolver):
417
455
  barrier = float(rec.barrier) if rec.barrier is not None else 0.0
418
456
  mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
419
457
 
458
+ # KI-ever is exempt from KO absorption (pure first-passage statistic).
459
+ ever0 = v0_next[mask_ko, ki_ever_col].copy()
460
+ ever1 = v1_next[mask_ko, ki_ever_col].copy()
420
461
  v0_next[mask_ko, :] = 0.0
421
462
  v1_next[mask_ko, :] = 0.0
422
463
  df_delay = self._cashflow_value_at_time(
@@ -427,6 +468,12 @@ class SnowballPDESolver(BasePDESolver):
427
468
  )
428
469
  v0_next[mask_ko, terminal_ko_idx] = df_delay
429
470
  v1_next[mask_ko, terminal_ko_idx] = df_delay
471
+ v0_next[mask_ko, ki_ever_col] = ever0
472
+ v1_next[mask_ko, ki_ever_col] = ever1
473
+ self._set_extra_event_indicators(
474
+ v0_next, v1_next, s_vec, n_ko, terminal_ko_idx, rec,
475
+ product, pricing_env, t_vec, terminal_tidx,
476
+ )
430
477
 
431
478
  is_terminal_ki = product.has_ki_barrier and (
432
479
  self._ki_continuous or terminal_tidx in self._ki_observation_indices
@@ -525,6 +572,9 @@ class SnowballPDESolver(BasePDESolver):
525
572
  mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
526
573
 
527
574
  # Zero all event surfaces in KO region, then set the KO_i indicator.
575
+ # KI-ever is exempt (pure first-passage statistic, no KO absorption).
576
+ ever0 = v0_cur[mask_ko, ki_ever_col].copy()
577
+ ever1 = v1_cur[mask_ko, ki_ever_col].copy()
528
578
  v0_cur[mask_ko, :] = 0.0
529
579
  v1_cur[mask_ko, :] = 0.0
530
580
  df_delay = self._cashflow_value_at_time(
@@ -535,6 +585,12 @@ class SnowballPDESolver(BasePDESolver):
535
585
  )
536
586
  v0_cur[mask_ko, ko_idx] = df_delay
537
587
  v1_cur[mask_ko, ko_idx] = df_delay
588
+ v0_cur[mask_ko, ki_ever_col] = ever0
589
+ v1_cur[mask_ko, ki_ever_col] = ever1
590
+ self._set_extra_event_indicators(
591
+ v0_cur, v1_cur, s_vec, n_ko, ko_idx, rec,
592
+ product, pricing_env, t_vec, j,
593
+ )
538
594
 
539
595
  # Apply KI jump (continuous or discrete at observation indices).
540
596
  if product.has_ki_barrier:
@@ -586,18 +642,31 @@ class SnowballPDESolver(BasePDESolver):
586
642
  ki_survival_probability = np.array([], dtype=float)
587
643
  if already_knocked_in:
588
644
  ki_probability = 1.0
645
+ ki_ever_probability = 1.0
589
646
  ki_times = np.array([0.0], dtype=float)
590
647
  ki_event_probability = np.array([1.0], dtype=float)
591
648
  ki_survival_probability = np.array([0.0], dtype=float)
592
649
  else:
593
- ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
594
650
  df_T = pricing_env.get_discount_factor(float(tau))
651
+ ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
595
652
  ki_probability = float(ed_ki / df_T) if df_T > 0.0 else 0.0
653
+ ed_ki_ever = float(np.interp(spot_log, x_vec, initial_grid[:, ki_ever_col]))
654
+ ki_ever_probability = float(ed_ki_ever / df_T) if df_T > 0.0 else 0.0
596
655
 
597
656
  pv = float(self.price(product, pricing_env))
598
657
  expected_discounted_maturity_cf = float(pv - float(np.sum(ed_ko_cf)))
599
658
 
600
- return AutocallableEventStats(
659
+ extra_fields = self._extract_extra_event_stats(
660
+ initial_grid, x_vec, spot_log, n_ko, ko_records, pricing_env, product
661
+ )
662
+ # The maturity cashflow is pv minus KO cashflows; for products with extra
663
+ # cashflow streams (Phoenix coupons) also remove those so the decomposition
664
+ # pv = sum(ko) + sum(coupon) + maturity stays correctly classified.
665
+ coupon_cf = extra_fields.get("expected_discounted_coupon_cashflow")
666
+ if coupon_cf is not None:
667
+ expected_discounted_maturity_cf -= float(np.sum(coupon_cf))
668
+
669
+ return self._make_event_stats(
601
670
  pv=pv,
602
671
  ko_times=ko_times,
603
672
  ko_probability=ko_probability,
@@ -609,6 +678,14 @@ class SnowballPDESolver(BasePDESolver):
609
678
  ki_times=ki_times,
610
679
  ki_event_probability=ki_event_probability,
611
680
  ki_survival_probability=ki_survival_probability,
681
+ # Two unambiguous, cross-engine-consistent KI fields. The legacy
682
+ # `ki_probability` keeps the PDE's historical "settles knocked-in"
683
+ # meaning (KI indicator absorbed to 0 on any KO), which equals
684
+ # `ki_survive_knocked_in_probability`. `ki_ever_probability` comes from
685
+ # the dedicated KI-ever column that carries no KO absorption.
686
+ ki_ever_probability=ki_ever_probability,
687
+ ki_survive_knocked_in_probability=ki_probability,
688
+ **extra_fields,
612
689
  )
613
690
 
614
691
  def calculate_greeks(
@@ -1620,7 +1697,7 @@ class SnowballPDESolver(BasePDESolver):
1620
1697
  )
1621
1698
 
1622
1699
  # Boundary fallback: use next scheduled KO record (ignore past observations).
1623
- ko_records = product.resolve_ko_observations(pricing_env)
1700
+ ko_records = self._get_cached_ko_records(pricing_env, product)
1624
1701
  future_records = [
1625
1702
  rec for rec in ko_records if self._record_is_non_negative_time(rec)
1626
1703
  ]
@@ -213,6 +213,18 @@ class PDEEngine(BaseEngine):
213
213
  solver = self._get_solver(product)
214
214
  return solver.price(product, pricing_env)
215
215
 
216
+ def create_bump_context(
217
+ self, product: BaseEquityProduct, pricing_env: PricingEnvironment
218
+ ) -> "PDEEngine":
219
+ """
220
+ Return a facade engine whose dispatched solver uses fixed bump bounds.
221
+ """
222
+ solver = self._get_solver(product)
223
+ fixed_solver = solver.create_bump_context(product, pricing_env)
224
+ if fixed_solver is solver:
225
+ return self
226
+ return type(self)(params=fixed_solver.params, method=self.method)
227
+
216
228
  def calculate_greeks(
217
229
  self, product: BaseEquityProduct, pricing_env: PricingEnvironment
218
230
  ) -> Dict[str, float]: