quantark 0.2.2__tar.gz → 0.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (706) hide show
  1. {quantark-0.2.2 → quantark-0.2.3}/PKG-INFO +1 -1
  2. {quantark-0.2.2 → quantark-0.2.3}/pyproject.toml +1 -1
  3. {quantark-0.2.2 → quantark-0.2.3}/quantark/__init__.py +1 -1
  4. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/event_stats.py +18 -1
  5. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +18 -3
  6. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +18 -5
  7. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +27 -1
  8. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +32 -4
  9. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +336 -2
  10. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +31 -15
  11. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +122 -15
  12. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/param/engine_params.py +13 -0
  13. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/greeks_calculator.py +80 -10
  14. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/event_distribution.py +10 -1
  15. {quantark-0.2.2 → quantark-0.2.3}/.gitignore +0 -0
  16. {quantark-0.2.2 → quantark-0.2.3}/CHANGELOG.md +0 -0
  17. {quantark-0.2.2 → quantark-0.2.3}/LICENSE +0 -0
  18. {quantark-0.2.2 → quantark-0.2.3}/NOTICE +0 -0
  19. {quantark-0.2.2 → quantark-0.2.3}/README.md +0 -0
  20. {quantark-0.2.2 → quantark-0.2.3}/quantark/_compat.py +0 -0
  21. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/__init__.py +0 -0
  22. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/__init__.py +0 -0
  23. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/__init__.py +0 -0
  24. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
  25. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
  26. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
  27. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
  28. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
  29. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
  30. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/discount/__init__.py +0 -0
  31. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
  32. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
  33. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/__init__.py +0 -0
  34. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
  35. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
  36. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
  37. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
  38. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/__init__.py +0 -0
  39. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
  40. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
  41. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
  42. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
  43. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/__init__.py +0 -0
  44. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/base_bond_product.py +0 -0
  45. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/convertible/__init__.py +0 -0
  46. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
  47. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
  48. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
  49. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/couponbond/frn.py +0 -0
  50. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/forward/__init__.py +0 -0
  51. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
  52. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
  53. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/futures/__init__.py +0 -0
  54. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
  55. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/option/__init__.py +0 -0
  56. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
  57. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
  58. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
  59. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/schedule/__init__.py +0 -0
  60. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/bond/schedule/cashflow.py +0 -0
  61. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/__init__.py +0 -0
  62. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/conventions.py +0 -0
  63. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/__init__.py +0 -0
  64. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
  65. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
  66. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
  67. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/mc/__init__.py +0 -0
  68. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
  69. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/engine/schedule.py +0 -0
  70. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/__init__.py +0 -0
  71. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/base_credit_product.py +0 -0
  72. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/basket_cds.py +0 -0
  73. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/product/cds.py +0 -0
  74. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
  75. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
  76. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/__init__.py +0 -0
  77. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/analysis/__init__.py +0 -0
  78. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
  79. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/__init__.py +0 -0
  80. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/__init__.py +0 -0
  81. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +0 -0
  82. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
  83. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +0 -0
  84. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
  85. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
  86. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
  87. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
  88. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
  89. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
  90. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +0 -0
  91. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
  92. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
  93. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
  94. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/base_engine.py +0 -0
  95. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/__init__.py +0 -0
  96. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/accrual_calculator.py +0 -0
  97. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +0 -0
  98. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +0 -0
  99. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +0 -0
  100. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/cashflow/trs_valuation.py +0 -0
  101. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/localvol_greeks.py +0 -0
  102. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/__init__.py +0 -0
  103. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +0 -0
  104. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
  105. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +0 -0
  106. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
  107. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
  108. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
  109. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
  110. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_mc_engine.py +0 -0
  111. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +0 -0
  112. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +0 -0
  113. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
  114. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/sabr_mc_engine.py +0 -0
  115. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
  116. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/__init__.py +0 -0
  117. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
  118. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
  119. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/base_pde_solver.py +0 -0
  120. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
  121. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
  122. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
  123. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_pde_solver.py +0 -0
  124. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +0 -0
  125. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +0 -0
  126. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
  127. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +0 -0
  128. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
  129. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde/time_grid.py +0 -0
  130. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/pde_engine.py +0 -0
  131. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/__init__.py +0 -0
  132. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
  133. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
  134. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
  135. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
  136. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
  137. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
  138. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
  139. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
  140. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
  141. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
  142. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
  143. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
  144. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
  145. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
  146. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
  147. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
  148. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
  149. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
  150. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
  151. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
  152. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
  153. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
  154. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
  155. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/__init__.py +0 -0
  156. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
  157. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/barrier.py +0 -0
  158. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/events.py +0 -0
  159. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/manager.py +0 -0
  160. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/lifecycle/state.py +0 -0
  161. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/param/__init__.py +0 -0
  162. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
  163. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/__init__.py +0 -0
  164. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/__init__.py +0 -0
  165. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
  166. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +0 -0
  167. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
  168. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +0 -0
  169. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_sobol.py +0 -0
  170. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +0 -0
  171. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/sabr/__init__.py +0 -0
  172. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/process/sabr/sabr_process.py +0 -0
  173. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/__init__.py +0 -0
  174. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/base_equity_product.py +0 -0
  175. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
  176. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
  177. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/futures.py +0 -0
  178. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
  179. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/__init__.py +0 -0
  180. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/accumulator_option.py +0 -0
  181. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/american_option.py +0 -0
  182. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/asian_option.py +0 -0
  183. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/barrier_option.py +0 -0
  184. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
  185. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/digital_option.py +0 -0
  186. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
  187. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
  188. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
  189. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
  190. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
  191. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
  192. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
  193. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
  194. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
  195. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
  196. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
  197. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
  198. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
  199. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
  200. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_config.py +0 -0
  201. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_helpers.py +0 -0
  202. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/option/snowball_option.py +0 -0
  203. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/__init__.py +0 -0
  204. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/base_swap.py +0 -0
  205. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/multi_asset_trs.py +0 -0
  206. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs.py +0 -0
  207. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +0 -0
  208. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_event_handler.py +0 -0
  209. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_params.py +0 -0
  210. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/product/swap/trs_schedule.py +0 -0
  211. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/__init__.py +0 -0
  212. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
  213. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/plotting.py +0 -0
  214. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
  215. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/surfaces.py +0 -0
  216. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/report/term_structure.py +0 -0
  217. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/__init__.py +0 -0
  218. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/equity/riskmeasures/vol_model_risk.py +0 -0
  219. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/__init__.py +0 -0
  220. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/__init__.py +0 -0
  221. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/__init__.py +0 -0
  222. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
  223. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +0 -0
  224. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +0 -0
  225. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +0 -0
  226. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
  227. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +0 -0
  228. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
  229. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +0 -0
  230. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +0 -0
  231. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +0 -0
  232. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +0 -0
  233. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +0 -0
  234. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +0 -0
  235. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +0 -0
  236. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +0 -0
  237. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +0 -0
  238. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/base_fx_engine.py +0 -0
  239. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_common.py +0 -0
  240. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/localvol_greeks.py +0 -0
  241. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/__init__.py +0 -0
  242. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +0 -0
  243. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_mc_params.py +0 -0
  244. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +0 -0
  245. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +0 -0
  246. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +0 -0
  247. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +0 -0
  248. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_mc_engine.py +0 -0
  249. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +0 -0
  250. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +0 -0
  251. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/__init__.py +0 -0
  252. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_pde_solver.py +0 -0
  253. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +0 -0
  254. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +0 -0
  255. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/process/__init__.py +0 -0
  256. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/process/fx_gk_path_generator.py +0 -0
  257. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
  258. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/__init__.py +0 -0
  259. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/base_fx_product.py +0 -0
  260. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/currency_pair.py +0 -0
  261. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
  262. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
  263. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
  264. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
  265. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
  266. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/__init__.py +0 -0
  267. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_barrier_option.py +0 -0
  268. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
  269. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +0 -0
  270. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_one_touch_option.py +0 -0
  271. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
  272. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +0 -0
  273. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
  274. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_config.py +0 -0
  275. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_range_accrual_option.py +0 -0
  276. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_sharkfin_option.py +0 -0
  277. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_forward.py +0 -0
  278. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_target_redemption_note.py +0 -0
  279. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
  280. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/report/__init__.py +0 -0
  281. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/report/fx_report.py +0 -0
  282. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/__init__.py +0 -0
  283. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
  284. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/fx/riskmeasures/vol_model_risk.py +0 -0
  285. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/__init__.py +0 -0
  286. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/__init__.py +0 -0
  287. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
  288. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/fra_engine.py +0 -0
  289. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
  290. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/engine/swaption_engine.py +0 -0
  291. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/__init__.py +0 -0
  292. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/cap_floor.py +0 -0
  293. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/fra.py +0 -0
  294. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/irs.py +0 -0
  295. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/rate/product/swaption.py +0 -0
  296. {quantark-0.2.2 → quantark-0.2.3}/quantark/asset/vol_model_risk.py +0 -0
  297. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/__init__.py +0 -0
  298. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/base.py +0 -0
  299. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/__init__.py +0 -0
  300. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/config.py +0 -0
  301. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/engine.py +0 -0
  302. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/credit/results.py +0 -0
  303. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/dashboard.py +0 -0
  304. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/__init__.py +0 -0
  305. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/config.py +0 -0
  306. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/engine.py +0 -0
  307. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/hedge_executor.py +0 -0
  308. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/metrics.py +0 -0
  309. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
  310. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/results.py +0 -0
  311. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/equity/state.py +0 -0
  312. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/__init__.py +0 -0
  313. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/advanced_backtest.py +0 -0
  314. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
  315. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
  316. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/__init__.py +0 -0
  317. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/config.py +0 -0
  318. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/engine.py +0 -0
  319. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/hedge_executor.py +0 -0
  320. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/metrics.py +0 -0
  321. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/results.py +0 -0
  322. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fi/state.py +0 -0
  323. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/__init__.py +0 -0
  324. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/config.py +0 -0
  325. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/engine.py +0 -0
  326. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/fx/results.py +0 -0
  327. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/logger.py +0 -0
  328. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/__init__.py +0 -0
  329. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/_replay.py +0 -0
  330. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/book_engine.py +0 -0
  331. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/config.py +0 -0
  332. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/dashboard.py +0 -0
  333. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/engine.py +0 -0
  334. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/engine_factory.py +0 -0
  335. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/market.py +0 -0
  336. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/results.py +0 -0
  337. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/otc/state.py +0 -0
  338. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/report_generator.py +0 -0
  339. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/__init__.py +0 -0
  340. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
  341. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/base_strategy.py +0 -0
  342. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
  343. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
  344. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
  345. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
  346. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
  347. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/hedge_instruments.py +0 -0
  348. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
  349. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
  350. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
  351. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
  352. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/scenarios.py +0 -0
  353. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
  354. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
  355. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
  356. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/transaction_costs.py +0 -0
  357. {quantark-0.2.2 → quantark-0.2.3}/quantark/backtest/visualizer.py +0 -0
  358. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/__init__.py +0 -0
  359. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/accrual_leg.py +0 -0
  360. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/autocallable_leg.py +0 -0
  361. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/base.py +0 -0
  362. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/base_amount.py +0 -0
  363. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/deterministic_leg.py +0 -0
  364. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/fixed_payoff_leg.py +0 -0
  365. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/leg_schedule.py +0 -0
  366. {quantark-0.2.2 → quantark-0.2.3}/quantark/cashleg/leg_valuator.py +0 -0
  367. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/__init__.py +0 -0
  368. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/base.py +0 -0
  369. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/config.py +0 -0
  370. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/__init__.py +0 -0
  371. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/config.py +0 -0
  372. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/engine.py +0 -0
  373. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/credit/path_library.py +0 -0
  374. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/engine.py +0 -0
  375. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/equity/__init__.py +0 -0
  376. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/__init__.py +0 -0
  377. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/config.py +0 -0
  378. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/engine.py +0 -0
  379. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fi/results.py +0 -0
  380. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/__init__.py +0 -0
  381. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/config.py +0 -0
  382. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/engine.py +0 -0
  383. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/fx/path_library.py +0 -0
  384. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
  385. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/__init__.py +0 -0
  386. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/day_path.py +0 -0
  387. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
  388. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/path_builder.py +0 -0
  389. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/path/path_library.py +0 -0
  390. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/report/__init__.py +0 -0
  391. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
  392. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/report/visualizer.py +0 -0
  393. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/results/__init__.py +0 -0
  394. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
  395. {quantark-0.2.2 → quantark-0.2.3}/quantark/dynamicscenario/results/result_exporter.py +0 -0
  396. {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/__init__.py +0 -0
  397. {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_brownian_bridge.py +0 -0
  398. {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_rqmc_driver.py +0 -0
  399. {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_sobol.py +0 -0
  400. {quantark-0.2.2 → quantark-0.2.3}/quantark/montecarlo/qmc_variance_reduction.py +0 -0
  401. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/__init__.py +0 -0
  402. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/basis/__init__.py +0 -0
  403. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/basis/basis_yield.py +0 -0
  404. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/credit/__init__.py +0 -0
  405. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/credit/ajd_hazard_curve.py +0 -0
  406. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/credit/hazard_curve.py +0 -0
  407. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/div/__init__.py +0 -0
  408. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/div/dividend_yield.py +0 -0
  409. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/index/__init__.py +0 -0
  410. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/index/rate_index.py +0 -0
  411. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/quote/__init__.py +0 -0
  412. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/quote/spot_quote.py +0 -0
  413. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/rrf/__init__.py +0 -0
  414. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/rrf/rate_curve.py +0 -0
  415. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/__init__.py +0 -0
  416. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/collapse_guard.py +0 -0
  417. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/__init__.py +0 -0
  418. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/calibration.py +0 -0
  419. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/diagnostics.py +0 -0
  420. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/hagan.py +0 -0
  421. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/sabr/sabr_surface.py +0 -0
  422. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/__init__.py +0 -0
  423. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/bs_fx.py +0 -0
  424. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/market_conventions.py +0 -0
  425. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/smile_builder.py +0 -0
  426. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_core.py +0 -0
  427. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_surface.py +0 -0
  428. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vannavolga/vv_term_structure.py +0 -0
  429. {quantark-0.2.2 → quantark-0.2.3}/quantark/param/vol/vol_surface.py +0 -0
  430. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/__init__.py +0 -0
  431. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/base.py +0 -0
  432. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/credit/__init__.py +0 -0
  433. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/credit/portfolio.py +0 -0
  434. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/credit/position.py +0 -0
  435. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/__init__.py +0 -0
  436. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/portfolio.py +0 -0
  437. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/position.py +0 -0
  438. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/equity/swap_position.py +0 -0
  439. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fi/__init__.py +0 -0
  440. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fi/portfolio.py +0 -0
  441. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fi/position.py +0 -0
  442. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fx/__init__.py +0 -0
  443. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fx/portfolio.py +0 -0
  444. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/fx/position.py +0 -0
  445. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/portfolio_snapshot.py +0 -0
  446. {quantark-0.2.2 → quantark-0.2.3}/quantark/portfolio/portfolio_storage.py +0 -0
  447. {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/__init__.py +0 -0
  448. {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/credit_pricing_environment.py +0 -0
  449. {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/fx_pricing_environment.py +0 -0
  450. {quantark-0.2.2 → quantark-0.2.3}/quantark/priceenv/pricing_environment.py +0 -0
  451. {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/__init__.py +0 -0
  452. {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/builders.py +0 -0
  453. {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/models.py +0 -0
  454. {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/registry.py +0 -0
  455. {quantark-0.2.2 → quantark-0.2.3}/quantark/rfq/service.py +0 -0
  456. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/__init__.py +0 -0
  457. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/calculator.py +0 -0
  458. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/dashboard.py +0 -0
  459. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/__init__.py +0 -0
  460. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/__init__.py +0 -0
  461. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/base.py +0 -0
  462. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/commodity.py +0 -0
  463. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/credit.py +0 -0
  464. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/equity.py +0 -0
  465. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/fx.py +0 -0
  466. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/addons/interest_rate.py +0 -0
  467. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/maths.py +0 -0
  468. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/pfe.py +0 -0
  469. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/engines/replacement_cost.py +0 -0
  470. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/__init__.py +0 -0
  471. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/enums.py +0 -0
  472. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/netting_set.py +0 -0
  473. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/models/trade.py +0 -0
  474. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/parameters/__init__.py +0 -0
  475. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/parameters/supervisory.py +0 -0
  476. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/results/__init__.py +0 -0
  477. {quantark-0.2.2 → quantark-0.2.3}/quantark/saccr/results/result.py +0 -0
  478. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/__init__.py +0 -0
  479. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/calculator.py +0 -0
  480. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/cva/__init__.py +0 -0
  481. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/cva/engine.py +0 -0
  482. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/dashboard.py +0 -0
  483. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/__init__.py +0 -0
  484. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/base.py +0 -0
  485. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/commodity.py +0 -0
  486. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/correlations.py +0 -0
  487. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/counterparty_credit.py +0 -0
  488. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/equity.py +0 -0
  489. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/fx.py +0 -0
  490. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/interest_rate.py +0 -0
  491. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/engines/reference_credit.py +0 -0
  492. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/__init__.py +0 -0
  493. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/asof.py +0 -0
  494. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/correlation.py +0 -0
  495. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/curves.py +0 -0
  496. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/engine.py +0 -0
  497. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/grid.py +0 -0
  498. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/__init__.py +0 -0
  499. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/calibration.py +0 -0
  500. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/engine.py +0 -0
  501. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/path_generator.py +0 -0
  502. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/pfe.py +0 -0
  503. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/historical/resampling.py +0 -0
  504. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/paths.py +0 -0
  505. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/phoenix_surface.py +0 -0
  506. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/repricer.py +0 -0
  507. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/simulator.py +0 -0
  508. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/snowball_surface.py +0 -0
  509. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/statemachine.py +0 -0
  510. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/exposure/value_surface.py +0 -0
  511. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/__init__.py +0 -0
  512. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/enums.py +0 -0
  513. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/portfolio.py +0 -0
  514. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/models/sensitivity.py +0 -0
  515. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/parameters/__init__.py +0 -0
  516. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/parameters/supervisory.py +0 -0
  517. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/__init__.py +0 -0
  518. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/counterparty.py +0 -0
  519. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/credit_curve.py +0 -0
  520. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/netting.py +0 -0
  521. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/trade.py +0 -0
  522. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/portfolio/trade_portfolio.py +0 -0
  523. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/results/__init__.py +0 -0
  524. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/results/result.py +0 -0
  525. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sacva_engine.py +0 -0
  526. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/__init__.py +0 -0
  527. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/curve_bump.py +0 -0
  528. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/engine.py +0 -0
  529. {quantark-0.2.2 → quantark-0.2.3}/quantark/sacva/sensitivities/shifts.py +0 -0
  530. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/__init__.py +0 -0
  531. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/__init__.py +0 -0
  532. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/accessors.py +0 -0
  533. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/commodity.py +0 -0
  534. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
  535. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/credit_qualifying.py +0 -0
  536. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/cross_risk.py +0 -0
  537. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/equity.py +0 -0
  538. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/fx.py +0 -0
  539. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/ir.py +0 -0
  540. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/calibration/version.py +0 -0
  541. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/config.py +0 -0
  542. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/crif/__init__.py +0 -0
  543. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/crif/models.py +0 -0
  544. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/crif/parser.py +0 -0
  545. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/dashboard.py +0 -0
  546. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/__init__.py +0 -0
  547. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/__init__.py +0 -0
  548. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/addon.py +0 -0
  549. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
  550. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/concentration.py +0 -0
  551. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/correlations.py +0 -0
  552. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
  553. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
  554. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
  555. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
  556. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/base.py +0 -0
  557. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/classification/__init__.py +0 -0
  558. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
  559. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/factory.py +0 -0
  560. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/portfolio_adapter.py +0 -0
  561. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/result.py +0 -0
  562. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/__init__.py +0 -0
  563. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
  564. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
  565. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
  566. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/market_data.py +0 -0
  567. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/__init__.py +0 -0
  568. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/crif_export.py +0 -0
  569. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/excel_generator.py +0 -0
  570. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/report/html_generator.py +0 -0
  571. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/__init__.py +0 -0
  572. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/attribution.py +0 -0
  573. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/simm_result.py +0 -0
  574. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/results/whatif.py +0 -0
  575. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/sensitivity.py +0 -0
  576. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/taxonomy.py +0 -0
  577. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/template/__init__.py +0 -0
  578. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/template/xlsx_loader.py +0 -0
  579. {quantark-0.2.2 → quantark-0.2.3}/quantark/simm/template/xlsx_template.py +0 -0
  580. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/__init__.py +0 -0
  581. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/base.py +0 -0
  582. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/config.py +0 -0
  583. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/__init__.py +0 -0
  584. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/config.py +0 -0
  585. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
  586. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/credit/engine.py +0 -0
  587. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/engine.py +0 -0
  588. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/__init__.py +0 -0
  589. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/config.py +0 -0
  590. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/engine.py +0 -0
  591. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/report/__init__.py +0 -0
  592. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/report/report_generator.py +0 -0
  593. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/report/visualizer.py +0 -0
  594. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/equity/results.py +0 -0
  595. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/__init__.py +0 -0
  596. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/config.py +0 -0
  597. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/engine.py +0 -0
  598. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/metrics.py +0 -0
  599. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fi/results.py +0 -0
  600. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/__init__.py +0 -0
  601. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/config.py +0 -0
  602. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/engine.py +0 -0
  603. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
  604. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/report/__init__.py +0 -0
  605. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/report/report_generator.py +0 -0
  606. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/report/visualizer.py +0 -0
  607. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/__init__.py +0 -0
  608. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/result_aggregator.py +0 -0
  609. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/result_exporter.py +0 -0
  610. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/results/stress_results.py +0 -0
  611. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/__init__.py +0 -0
  612. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario.py +0 -0
  613. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_builder.py +0 -0
  614. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_library.py +0 -0
  615. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/scenario/scenario_storage.py +0 -0
  616. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/stress/__init__.py +0 -0
  617. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/stress/stress_applicator.py +0 -0
  618. {quantark-0.2.2 → quantark-0.2.3}/quantark/stresstest/stress/stress_types.py +0 -0
  619. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/__init__.py +0 -0
  620. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/barrier_shift.py +0 -0
  621. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/__init__.py +0 -0
  622. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/business_calendar.py +0 -0
  623. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/day_counter.py +0 -0
  624. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china.csv +0 -0
  625. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
  626. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/__init__.py +0 -0
  627. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/bond_enums.py +0 -0
  628. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/deltaone_enums.py +0 -0
  629. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/engine_enums.py +0 -0
  630. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/fx_enums.py +0 -0
  631. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/greek_conventions.py +0 -0
  632. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/greeks_enums.py +0 -0
  633. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/enum/option_enums.py +0 -0
  634. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/exceptions.py +0 -0
  635. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/__init__.py +0 -0
  636. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
  637. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
  638. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/converter.py +0 -0
  639. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/example_usage.py +0 -0
  640. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/generator/__init__.py +0 -0
  641. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/generator/mock_generator.py +0 -0
  642. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/models.py +0 -0
  643. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/storage/__init__.py +0 -0
  644. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
  645. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/__init__.py +0 -0
  646. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/comparison.py +0 -0
  647. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/constants.py +0 -0
  648. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/formatting.py +0 -0
  649. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/pnl.py +0 -0
  650. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/safe_math.py +0 -0
  651. {quantark-0.2.2 → quantark-0.2.3}/quantark/util/numerical/validation.py +0 -0
  652. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/__init__.py +0 -0
  653. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/attribution.py +0 -0
  654. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/backtest/__init__.py +0 -0
  655. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/backtest/var_backtester.py +0 -0
  656. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/base.py +0 -0
  657. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/config.py +0 -0
  658. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/__init__.py +0 -0
  659. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/config.py +0 -0
  660. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/engine.py +0 -0
  661. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/credit/revaluation.py +0 -0
  662. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/__init__.py +0 -0
  663. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/historical.py +0 -0
  664. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/monte_carlo.py +0 -0
  665. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/engines/parametric.py +0 -0
  666. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/__init__.py +0 -0
  667. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/config.py +0 -0
  668. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/engine.py +0 -0
  669. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/fx/revaluation.py +0 -0
  670. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/__init__.py +0 -0
  671. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/incremental_var_result.py +0 -0
  672. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/var_report.py +0 -0
  673. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/results/var_result.py +0 -0
  674. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/__init__.py +0 -0
  675. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/base.py +0 -0
  676. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/equity_factors.py +0 -0
  677. {quantark-0.2.2 → quantark-0.2.3}/quantark/var/risk_factors/fi_factors.py +0 -0
  678. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/__init__.py +0 -0
  679. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/black_scholes.py +0 -0
  680. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/curves.py +0 -0
  681. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/__init__.py +0 -0
  682. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/analytical_kernel.py +0 -0
  683. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/calibration.py +0 -0
  684. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/mc_kernel.py +0 -0
  685. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/params.py +0 -0
  686. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/heston/pde_kernel.py +0 -0
  687. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/__init__.py +0 -0
  688. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/dupire.py +0 -0
  689. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/mc_kernel.py +0 -0
  690. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/pde_kernel.py +0 -0
  691. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/localvol/surface.py +0 -0
  692. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/risk/__init__.py +0 -0
  693. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/risk/contracts.py +0 -0
  694. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/risk/scenarios.py +0 -0
  695. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/__init__.py +0 -0
  696. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/__init__.py +0 -0
  697. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/bootstrap.py +0 -0
  698. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/calibration.py +0 -0
  699. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/config.py +0 -0
  700. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/coordinates.py +0 -0
  701. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_operators.py +0 -0
  702. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/fokkerplanck/fp_solver.py +0 -0
  703. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/leverage.py +0 -0
  704. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/slv_mc_kernel.py +0 -0
  705. {quantark-0.2.2 → quantark-0.2.3}/quantark/volmodels/slv/slv_pde_kernel.py +0 -0
  706. {quantark-0.2.2 → quantark-0.2.3}/quantark_compat.pth +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quantark
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Modular derivatives pricing and risk library: options, autocallables, bonds, VaR, SIMM
5
5
  Project-URL: Homepage, https://github.com/deiiiiii93/quantark
6
6
  Project-URL: Repository, https://github.com/deiiiiii93/quantark
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "quantark"
7
- version = "0.2.2"
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.2"
3
+ __version__ = "0.2.3"
@@ -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,
@@ -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)
@@ -427,17 +427,25 @@ class SnowballPDESolver(BasePDESolver):
427
427
  )
428
428
  ko_index_by_tidx[t_idx] = k
429
429
 
430
- # Surface columns: [KO_0..KO_{n-1}, <extra coupon cols>, KI_indicator]
430
+ # Surface columns: [KO_0..KO_{n-1}, <extra coupon cols>, KI_indicator,
431
+ # KI_ever_indicator]. The KI_indicator carries the "settles knocked-in"
432
+ # semantics (absorbed to 0 on any KO). The KI_ever_indicator tracks
433
+ # P(the underlying breaches the KI barrier at any point in [0, T]),
434
+ # independent of KO/autocall — it is a pure first-passage statistic and is
435
+ # therefore EXEMPT from the KO absorption below (matching the QUAD and MC
436
+ # ki_ever definition).
431
437
  n_extra = self._n_extra_event_cols(n_ko)
432
438
  ki_col = n_ko + n_extra
433
- n_cols = n_ko + n_extra + 1
439
+ ki_ever_col = n_ko + n_extra + 1
440
+ n_cols = n_ko + n_extra + 2
434
441
 
435
442
  # Terminal conditions at maturity (t = T):
436
443
  # - KO indicators are zero at maturity (KO only at discrete observations via jumps)
437
- # - KI 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
438
445
  v0_next = np.zeros((num_x, n_cols), dtype=float)
439
446
  v1_next = np.zeros((num_x, n_cols), dtype=float)
440
447
  v1_next[:, ki_col] = 1.0
448
+ v1_next[:, ki_ever_col] = 1.0
441
449
 
442
450
  # Apply terminal KO/KI events at maturity if observation schedules include t=T.
443
451
  terminal_tidx = num_t - 1
@@ -447,6 +455,9 @@ class SnowballPDESolver(BasePDESolver):
447
455
  barrier = float(rec.barrier) if rec.barrier is not None else 0.0
448
456
  mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
449
457
 
458
+ # KI-ever is exempt from KO absorption (pure first-passage statistic).
459
+ ever0 = v0_next[mask_ko, ki_ever_col].copy()
460
+ ever1 = v1_next[mask_ko, ki_ever_col].copy()
450
461
  v0_next[mask_ko, :] = 0.0
451
462
  v1_next[mask_ko, :] = 0.0
452
463
  df_delay = self._cashflow_value_at_time(
@@ -457,6 +468,8 @@ class SnowballPDESolver(BasePDESolver):
457
468
  )
458
469
  v0_next[mask_ko, terminal_ko_idx] = df_delay
459
470
  v1_next[mask_ko, terminal_ko_idx] = df_delay
471
+ v0_next[mask_ko, ki_ever_col] = ever0
472
+ v1_next[mask_ko, ki_ever_col] = ever1
460
473
  self._set_extra_event_indicators(
461
474
  v0_next, v1_next, s_vec, n_ko, terminal_ko_idx, rec,
462
475
  product, pricing_env, t_vec, terminal_tidx,
@@ -559,6 +572,9 @@ class SnowballPDESolver(BasePDESolver):
559
572
  mask_ko = self._get_barrier_mask(s_vec, barrier, product.is_reverse, is_up_barrier=True)
560
573
 
561
574
  # Zero all event surfaces in KO region, then set the KO_i indicator.
575
+ # KI-ever is exempt (pure first-passage statistic, no KO absorption).
576
+ ever0 = v0_cur[mask_ko, ki_ever_col].copy()
577
+ ever1 = v1_cur[mask_ko, ki_ever_col].copy()
562
578
  v0_cur[mask_ko, :] = 0.0
563
579
  v1_cur[mask_ko, :] = 0.0
564
580
  df_delay = self._cashflow_value_at_time(
@@ -569,6 +585,8 @@ class SnowballPDESolver(BasePDESolver):
569
585
  )
570
586
  v0_cur[mask_ko, ko_idx] = df_delay
571
587
  v1_cur[mask_ko, ko_idx] = df_delay
588
+ v0_cur[mask_ko, ki_ever_col] = ever0
589
+ v1_cur[mask_ko, ki_ever_col] = ever1
572
590
  self._set_extra_event_indicators(
573
591
  v0_cur, v1_cur, s_vec, n_ko, ko_idx, rec,
574
592
  product, pricing_env, t_vec, j,
@@ -624,13 +642,16 @@ class SnowballPDESolver(BasePDESolver):
624
642
  ki_survival_probability = np.array([], dtype=float)
625
643
  if already_knocked_in:
626
644
  ki_probability = 1.0
645
+ ki_ever_probability = 1.0
627
646
  ki_times = np.array([0.0], dtype=float)
628
647
  ki_event_probability = np.array([1.0], dtype=float)
629
648
  ki_survival_probability = np.array([0.0], dtype=float)
630
649
  else:
631
- ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
632
650
  df_T = pricing_env.get_discount_factor(float(tau))
651
+ ed_ki = float(np.interp(spot_log, x_vec, initial_grid[:, ki_col]))
633
652
  ki_probability = float(ed_ki / df_T) if df_T > 0.0 else 0.0
653
+ ed_ki_ever = float(np.interp(spot_log, x_vec, initial_grid[:, ki_ever_col]))
654
+ ki_ever_probability = float(ed_ki_ever / df_T) if df_T > 0.0 else 0.0
634
655
 
635
656
  pv = float(self.price(product, pricing_env))
636
657
  expected_discounted_maturity_cf = float(pv - float(np.sum(ed_ko_cf)))
@@ -657,6 +678,13 @@ class SnowballPDESolver(BasePDESolver):
657
678
  ki_times=ki_times,
658
679
  ki_event_probability=ki_event_probability,
659
680
  ki_survival_probability=ki_survival_probability,
681
+ # Two unambiguous, cross-engine-consistent KI fields. The legacy
682
+ # `ki_probability` keeps the PDE's historical "settles knocked-in"
683
+ # meaning (KI indicator absorbed to 0 on any KO), which equals
684
+ # `ki_survive_knocked_in_probability`. `ki_ever_probability` comes from
685
+ # the dedicated KI-ever column that carries no KO absorption.
686
+ ki_ever_probability=ki_ever_probability,
687
+ ki_survive_knocked_in_probability=ki_probability,
660
688
  **extra_fields,
661
689
  )
662
690
 
@@ -13,6 +13,7 @@ from typing import List, Optional, Sequence
13
13
 
14
14
  import numpy as np
15
15
 
16
+ from quantark.asset.equity.engine.event_stats import KOResetEventStats
16
17
  from quantark.asset.equity.engine.quad.snowball_quad_engine import SnowballQuadEngine
17
18
  from quantark.asset.equity.engine.quad.quad_math import QuadratureMath
18
19
  from quantark.asset.equity.param import QuadParams
@@ -317,8 +318,341 @@ class KOResetSnowballQuadEngine(SnowballQuadEngine):
317
318
 
318
319
  def calculate_event_stats(
319
320
  self, product: BaseEquityProduct, pricing_env: PricingEnvironment
320
- ) -> Optional[object]:
321
- return None
321
+ ) -> Optional[KOResetEventStats]:
322
+ if not isinstance(product, KnockOutResetSnowballOption):
323
+ return None
324
+ if pricing_env is None:
325
+ raise PricingError("PricingEnvironment is required for KOResetSnowballQuadEngine.")
326
+ return self._compute_event_stats(product, pricing_env)
327
+
328
+ def _compute_event_stats(
329
+ self,
330
+ product: KnockOutResetSnowballOption,
331
+ pricing_env: PricingEnvironment,
332
+ ) -> Optional[KOResetEventStats]:
333
+ self._validate_product(product)
334
+
335
+ spot = pricing_env.spot
336
+ maturity = product.get_maturity(pricing_env)
337
+ validate_positive(spot, "spot")
338
+ validate_positive(maturity, "maturity", allow_zero=True)
339
+ if is_zero(maturity, tol=Tolerance.ZERO):
340
+ return None
341
+
342
+ rate = pricing_env.get_rate(maturity)
343
+ div = pricing_env.get_div_yield(maturity)
344
+ vol = pricing_env.get_vol(product.strike, maturity)
345
+ validate_positive(vol, "volatility")
346
+ validate_non_negative(div, "dividend_yield")
347
+ if vol > 5.0:
348
+ raise ValidationError(f"Volatility too high for quadrature stability: {vol}")
349
+
350
+ pre_ko_records = self._resolve_ko_records(
351
+ product, pricing_env, product.barrier_config
352
+ )
353
+ pre_ko_records = [
354
+ rec
355
+ for rec in pre_ko_records
356
+ if rec.observation_time <= maturity
357
+ or is_close(rec.observation_time, maturity, abs_tol=Tolerance.PRECISION)
358
+ ]
359
+ if not pre_ko_records:
360
+ return None
361
+
362
+ post_ko_records = self._resolve_ko_records(
363
+ product, pricing_env, product.post_barrier_config
364
+ )
365
+ post_ko_records = [
366
+ rec
367
+ for rec in post_ko_records
368
+ if rec.observation_time <= maturity
369
+ or is_close(rec.observation_time, maturity, abs_tol=Tolerance.PRECISION)
370
+ ]
371
+ if not post_ko_records:
372
+ return None
373
+
374
+ ki_continuous = product.has_ki_barrier and (
375
+ product.barrier_config.ki_continuous
376
+ or product.barrier_config.ki_observation_type == ObservationType.CONTINUOUS
377
+ )
378
+ ki_records: Sequence = []
379
+ if product.has_ki_barrier and not ki_continuous:
380
+ ki_records = product.resolve_ki_observations(pricing_env)
381
+ if not ki_records:
382
+ raise PricingError("KI observation schedule is empty for KOResetSnowballQuadEngine.")
383
+
384
+ times = self._merge_times(
385
+ [rec.observation_time for rec in pre_ko_records]
386
+ + [rec.observation_time for rec in post_ko_records],
387
+ [rec.observation_time for rec in ki_records],
388
+ maturity,
389
+ )
390
+ if not times:
391
+ return None
392
+
393
+ align_log = self._select_alignment_log(spot, product)
394
+ fft_padding_factor = self._resolve_fft_padding_factor()
395
+ fft_filter_alpha, fft_filter_power = self._resolve_fft_filter()
396
+ math_utils = QuadratureMath(
397
+ grid_x=self.params.grid_points,
398
+ spot=spot,
399
+ maturity=maturity,
400
+ vol_max=vol,
401
+ num_std_devs=self.params.num_std_devs,
402
+ align_log=align_log,
403
+ fft_padding_factor=fft_padding_factor,
404
+ fft_filter_alpha=fft_filter_alpha,
405
+ fft_filter_power=fft_filter_power,
406
+ )
407
+ grid = math_utils.grid
408
+ spot_grid = spot * np.exp(grid)
409
+ dt = self._build_dt(times)
410
+ tau = 0.5 * vol * vol * dt
411
+ if np.any(tau[1:] <= 0.0):
412
+ raise ValidationError("time step too small for quadrature solver.")
413
+
414
+ alpha = (rate - div - 0.5 * vol * vol) / (vol * vol)
415
+ beta = (rate - div - 0.5 * vol * vol) ** 2 / (vol**4) + 2.0 * rate / (
416
+ vol * vol
417
+ )
418
+
419
+ n_pre = len(pre_ko_records)
420
+ n_post = len(post_ko_records)
421
+ post_offset = n_pre
422
+ ki_col = n_pre + n_post
423
+ ki_ever_col = ki_col + 1
424
+ n_rows = ki_ever_col + 1
425
+
426
+ v_in = np.zeros((n_rows, grid.size), dtype=float)
427
+ v_out = np.zeros((n_rows, grid.size), dtype=float)
428
+ v_in[ki_col] = 1.0
429
+ v_in[ki_ever_col] = 1.0
430
+
431
+ log_ki_barrier = None
432
+ if product.has_ki_barrier and ki_continuous:
433
+ if product.barrier_config.ki_barrier is None:
434
+ raise PricingError("KI barrier configuration is missing.")
435
+ if isinstance(product.barrier_config.ki_barrier, list):
436
+ raise PricingError("Continuous KI requires scalar ki_barrier.")
437
+ log_ki_barrier = safe_log(product.barrier_config.ki_barrier / spot)
438
+
439
+ knocked_in_at_valuation = self._is_knocked_in_at_valuation(
440
+ product,
441
+ spot,
442
+ pricing_env,
443
+ ki_continuous=ki_continuous,
444
+ ki_records=ki_records,
445
+ )
446
+ full_p_lr, full_p_ur, full_p0 = 0, len(grid) - 1, (len(grid) - 1) % 2
447
+ omega_grid = math_utils.z_grid
448
+ disable_ko_after_ki = product.barrier_config.disable_ko_after_ki
449
+ smoothing_width = self._resolve_event_smoothing_width(math_utils, product)
450
+
451
+ for step_index in range(len(times), 0, -1):
452
+ obs_time = times[step_index - 1]
453
+
454
+ pre_ko_record = self._match_record(obs_time, pre_ko_records)
455
+ if pre_ko_record is not None:
456
+ pre_idx = pre_ko_records.index(pre_ko_record)
457
+ ko_weight = self._smooth_step_weight(
458
+ grid,
459
+ pre_ko_record.barrier,
460
+ spot,
461
+ smoothing_width,
462
+ trigger_is_down=product.is_reverse,
463
+ )
464
+ if ko_weight is None:
465
+ ko_mask = (
466
+ spot_grid <= pre_ko_record.barrier
467
+ if product.is_reverse
468
+ else spot_grid >= pre_ko_record.barrier
469
+ )
470
+ ko_weight = ko_mask.astype(float)
471
+
472
+ ever_before = v_out[ki_ever_col].copy()
473
+ v_out *= 1.0 - ko_weight
474
+ v_out[pre_idx] += ko_weight * float(
475
+ self._ko_discount(rate, obs_time, pre_ko_record.settlement_time)
476
+ )
477
+ v_out[ki_ever_col] = ever_before
478
+
479
+ post_ko_record = self._match_record(obs_time, post_ko_records)
480
+ if post_ko_record is not None and not disable_ko_after_ki:
481
+ post_idx = post_ko_records.index(post_ko_record)
482
+ ko_weight = self._smooth_step_weight(
483
+ grid,
484
+ post_ko_record.barrier,
485
+ spot,
486
+ smoothing_width,
487
+ trigger_is_down=product.is_reverse,
488
+ )
489
+ if ko_weight is None:
490
+ ko_mask = (
491
+ spot_grid <= post_ko_record.barrier
492
+ if product.is_reverse
493
+ else spot_grid >= post_ko_record.barrier
494
+ )
495
+ ko_weight = ko_mask.astype(float)
496
+
497
+ ever_before = v_in[ki_ever_col].copy()
498
+ v_in *= 1.0 - ko_weight
499
+ v_in[post_offset + post_idx] += ko_weight * float(
500
+ self._ko_discount(rate, obs_time, post_ko_record.settlement_time)
501
+ )
502
+ v_in[ki_ever_col] = ever_before
503
+
504
+ if ki_continuous and log_ki_barrier is not None:
505
+ ki_mask = (
506
+ spot_grid >= product.barrier_config.ki_barrier
507
+ if product.is_reverse
508
+ else spot_grid <= product.barrier_config.ki_barrier
509
+ )
510
+ v_out[:, ki_mask] = v_in[:, ki_mask]
511
+ elif ki_records:
512
+ ki_record = self._match_record(obs_time, ki_records)
513
+ if ki_record is not None:
514
+ ki_mask = (
515
+ spot_grid >= ki_record.barrier
516
+ if product.is_reverse
517
+ else spot_grid <= ki_record.barrier
518
+ )
519
+ v_out[:, ki_mask] = v_in[:, ki_mask]
520
+
521
+ tau_step = float(tau[step_index])
522
+ prefactor = math.exp(-beta * tau_step) / math.sqrt(math.pi * tau_step) / 2.0
523
+ omega_array = np.exp(
524
+ -(omega_grid**2) / (4.0 * tau_step) - alpha * omega_grid
525
+ )
526
+
527
+ v_in = self._diffuse_fft(
528
+ v_in,
529
+ math_utils,
530
+ omega_array,
531
+ prefactor,
532
+ full_p_lr,
533
+ full_p_ur,
534
+ full_p0,
535
+ alpha,
536
+ beta,
537
+ tau_step,
538
+ )
539
+
540
+ if ki_continuous and log_ki_barrier is not None:
541
+ v_out = self._diffuse_with_bridge(
542
+ v_out,
543
+ v_in,
544
+ math_utils,
545
+ omega_array,
546
+ prefactor,
547
+ full_p_lr,
548
+ full_p_ur,
549
+ full_p0,
550
+ log_ki_barrier,
551
+ alpha,
552
+ beta,
553
+ vol,
554
+ dt[step_index],
555
+ tau_step,
556
+ product.is_reverse,
557
+ )
558
+ else:
559
+ v_out = self._diffuse_fft(
560
+ v_out,
561
+ math_utils,
562
+ omega_array,
563
+ prefactor,
564
+ full_p_lr,
565
+ full_p_ur,
566
+ full_p0,
567
+ alpha,
568
+ beta,
569
+ tau_step,
570
+ )
571
+
572
+ initial_surface = v_in if knocked_in_at_valuation else v_out
573
+ pre_unit = np.array(
574
+ [math_utils.interpolate(initial_surface[i], x=0.0) for i in range(n_pre)],
575
+ dtype=float,
576
+ )
577
+ post_unit = np.array(
578
+ [
579
+ math_utils.interpolate(initial_surface[post_offset + i], x=0.0)
580
+ for i in range(n_post)
581
+ ],
582
+ dtype=float,
583
+ )
584
+
585
+ pre_times = np.array([rec.observation_time for rec in pre_ko_records], dtype=float)
586
+ post_times = np.array([rec.observation_time for rec in post_ko_records], dtype=float)
587
+ pre_probability = np.zeros(n_pre, dtype=float)
588
+ post_probability = np.zeros(n_post, dtype=float)
589
+ expected_discounted_pre_ko_cashflow = np.zeros(n_pre, dtype=float)
590
+ expected_discounted_post_ko_cashflow = 0.0
591
+
592
+ for i, rec in enumerate(pre_ko_records):
593
+ df_total = math.exp(-rate * float(rec.observation_time)) * float(
594
+ self._ko_discount(rate, float(rec.observation_time), rec.settlement_time)
595
+ )
596
+ if df_total > 0:
597
+ pre_probability[i] = float(pre_unit[i] / df_total)
598
+ payoff = float(rec.payoff) if rec.payoff is not None else 0.0
599
+ expected_discounted_pre_ko_cashflow[i] = float(pre_unit[i] * payoff)
600
+
601
+ for i, rec in enumerate(post_ko_records):
602
+ df_total = math.exp(-rate * float(rec.observation_time)) * float(
603
+ self._ko_discount(rate, float(rec.observation_time), rec.settlement_time)
604
+ )
605
+ if df_total > 0:
606
+ post_probability[i] = float(post_unit[i] / df_total)
607
+ payoff = float(rec.payoff) if rec.payoff is not None else 0.0
608
+ expected_discounted_post_ko_cashflow += float(post_unit[i] * payoff)
609
+
610
+ df_maturity = math.exp(-rate * maturity)
611
+ ki_survive = 0.0
612
+ ki_ever = 0.0
613
+ if df_maturity > 0.0:
614
+ ki_survive = float(
615
+ math_utils.interpolate(initial_surface[ki_col], x=0.0) / df_maturity
616
+ )
617
+ ki_ever = float(
618
+ math_utils.interpolate(initial_surface[ki_ever_col], x=0.0)
619
+ / df_maturity
620
+ )
621
+
622
+ survival_probability = np.ones(n_pre, dtype=float)
623
+ cumulative_pre_ko = 0.0
624
+ for i in range(n_pre):
625
+ cumulative_pre_ko += pre_probability[i]
626
+ survival_probability[i] = max(0.0, 1.0 - cumulative_pre_ko)
627
+
628
+ pv = float(self.price(product, pricing_env))
629
+ expected_discounted_maturity_cashflow = float(
630
+ pv
631
+ - float(np.sum(expected_discounted_pre_ko_cashflow))
632
+ - expected_discounted_post_ko_cashflow
633
+ )
634
+
635
+ return KOResetEventStats(
636
+ pv=pv,
637
+ ko_times=pre_times,
638
+ ko_probability=pre_probability,
639
+ survival_probability=survival_probability,
640
+ expected_discounted_ko_cashflow=expected_discounted_pre_ko_cashflow,
641
+ ki_probability=ki_ever,
642
+ expected_discounted_maturity_cashflow=expected_discounted_maturity_cashflow,
643
+ reconciliation_error=0.0,
644
+ ki_ever_probability=ki_ever,
645
+ ki_survive_knocked_in_probability=ki_survive,
646
+ pre_ko_times=pre_times,
647
+ pre_ko_probability=pre_probability,
648
+ post_ko_times=post_times,
649
+ post_ko_probability=post_probability,
650
+ pre_ko_probability_total=float(np.sum(pre_probability)),
651
+ post_ko_probability_total=float(np.sum(post_probability)),
652
+ expected_discounted_post_ko_cashflow=float(
653
+ expected_discounted_post_ko_cashflow
654
+ ),
655
+ )
322
656
 
323
657
  def _validate_product(self, product: KnockOutResetSnowballOption) -> None:
324
658
  if product.barrier_config.ko_observation_type != ObservationType.DISCRETE: