quantark 0.2.2__tar.gz → 0.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (707) hide show
  1. {quantark-0.2.2 → quantark-0.2.4}/PKG-INFO +1 -1
  2. {quantark-0.2.2 → quantark-0.2.4}/pyproject.toml +1 -1
  3. {quantark-0.2.2 → quantark-0.2.4}/quantark/__init__.py +1 -1
  4. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/base_engine.py +5 -0
  5. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/event_stats.py +18 -1
  6. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +18 -3
  7. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +18 -5
  8. quantark-0.2.4/quantark/asset/equity/engine/pde/backward_operator.py +137 -0
  9. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/base_pde_solver.py +97 -17
  10. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +60 -14
  11. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +13 -2
  12. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +373 -61
  13. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/time_grid.py +76 -0
  14. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +336 -2
  15. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +31 -15
  16. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +122 -15
  17. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/param/engine_params.py +52 -0
  18. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/riskmeasures/greeks_calculator.py +80 -10
  19. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/__init__.py +7 -1
  20. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/accrual_leg.py +8 -1
  21. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/autocallable_leg.py +54 -1
  22. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/base.py +11 -1
  23. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/deterministic_leg.py +5 -0
  24. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/event_distribution.py +10 -1
  25. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/fixed_payoff_leg.py +9 -0
  26. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/leg_valuator.py +14 -0
  27. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/position.py +197 -3
  28. {quantark-0.2.2 → quantark-0.2.4}/.gitignore +0 -0
  29. {quantark-0.2.2 → quantark-0.2.4}/CHANGELOG.md +0 -0
  30. {quantark-0.2.2 → quantark-0.2.4}/LICENSE +0 -0
  31. {quantark-0.2.2 → quantark-0.2.4}/NOTICE +0 -0
  32. {quantark-0.2.2 → quantark-0.2.4}/README.md +0 -0
  33. {quantark-0.2.2 → quantark-0.2.4}/quantark/_compat.py +0 -0
  34. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/__init__.py +0 -0
  35. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/__init__.py +0 -0
  36. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/__init__.py +0 -0
  37. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
  38. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
  39. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
  40. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
  41. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
  42. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
  43. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/discount/__init__.py +0 -0
  44. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
  45. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
  46. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/__init__.py +0 -0
  47. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
  48. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
  49. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
  50. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
  51. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/__init__.py +0 -0
  52. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
  53. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
  54. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
  55. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
  56. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/__init__.py +0 -0
  57. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/base_bond_product.py +0 -0
  58. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/convertible/__init__.py +0 -0
  59. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
  60. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
  61. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
  62. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/couponbond/frn.py +0 -0
  63. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/forward/__init__.py +0 -0
  64. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
  65. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
  66. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/futures/__init__.py +0 -0
  67. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
  68. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/option/__init__.py +0 -0
  69. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
  70. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
  71. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
  72. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/schedule/__init__.py +0 -0
  73. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/bond/schedule/cashflow.py +0 -0
  74. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/__init__.py +0 -0
  75. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/conventions.py +0 -0
  76. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/__init__.py +0 -0
  77. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
  78. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
  79. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
  80. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/mc/__init__.py +0 -0
  81. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
  82. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/engine/schedule.py +0 -0
  83. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/__init__.py +0 -0
  84. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/base_credit_product.py +0 -0
  85. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/basket_cds.py +0 -0
  86. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/product/cds.py +0 -0
  87. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
  88. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
  89. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/__init__.py +0 -0
  90. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/analysis/__init__.py +0 -0
  91. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
  92. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/__init__.py +0 -0
  93. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/__init__.py +0 -0
  94. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +0 -0
  95. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
  96. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +0 -0
  97. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
  98. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
  99. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
  100. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
  101. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
  102. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
  103. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +0 -0
  104. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
  105. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
  106. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
  107. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/__init__.py +0 -0
  108. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/accrual_calculator.py +0 -0
  109. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +0 -0
  110. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +0 -0
  111. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +0 -0
  112. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/cashflow/trs_valuation.py +0 -0
  113. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/localvol_greeks.py +0 -0
  114. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/__init__.py +0 -0
  115. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +0 -0
  116. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
  117. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +0 -0
  118. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
  119. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
  120. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
  121. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
  122. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/heston_mc_engine.py +0 -0
  123. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +0 -0
  124. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +0 -0
  125. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
  126. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/sabr_mc_engine.py +0 -0
  127. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
  128. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/__init__.py +0 -0
  129. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
  130. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
  131. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
  132. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
  133. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
  134. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/heston_pde_solver.py +0 -0
  135. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +0 -0
  136. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +0 -0
  137. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
  138. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
  139. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/pde_engine.py +0 -0
  140. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/__init__.py +0 -0
  141. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
  142. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
  143. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
  144. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
  145. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
  146. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
  147. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
  148. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
  149. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
  150. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
  151. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
  152. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
  153. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
  154. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
  155. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
  156. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
  157. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
  158. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
  159. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
  160. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
  161. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
  162. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
  163. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
  164. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/__init__.py +0 -0
  165. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
  166. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/barrier.py +0 -0
  167. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/events.py +0 -0
  168. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/manager.py +0 -0
  169. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/lifecycle/state.py +0 -0
  170. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/param/__init__.py +0 -0
  171. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
  172. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/__init__.py +0 -0
  173. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/__init__.py +0 -0
  174. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
  175. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +0 -0
  176. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
  177. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +0 -0
  178. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_sobol.py +0 -0
  179. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +0 -0
  180. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/sabr/__init__.py +0 -0
  181. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/process/sabr/sabr_process.py +0 -0
  182. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/__init__.py +0 -0
  183. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/base_equity_product.py +0 -0
  184. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
  185. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
  186. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/futures.py +0 -0
  187. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
  188. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/__init__.py +0 -0
  189. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/accumulator_option.py +0 -0
  190. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/american_option.py +0 -0
  191. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/asian_option.py +0 -0
  192. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/barrier_option.py +0 -0
  193. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
  194. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/digital_option.py +0 -0
  195. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
  196. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
  197. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
  198. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
  199. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
  200. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
  201. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
  202. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
  203. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
  204. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
  205. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
  206. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
  207. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
  208. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
  209. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/snowball_config.py +0 -0
  210. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/snowball_helpers.py +0 -0
  211. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/option/snowball_option.py +0 -0
  212. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/__init__.py +0 -0
  213. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/base_swap.py +0 -0
  214. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/multi_asset_trs.py +0 -0
  215. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/one_asset_trs.py +0 -0
  216. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +0 -0
  217. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/trs_event_handler.py +0 -0
  218. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/trs_params.py +0 -0
  219. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/product/swap/trs_schedule.py +0 -0
  220. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/__init__.py +0 -0
  221. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
  222. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/plotting.py +0 -0
  223. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
  224. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/surfaces.py +0 -0
  225. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/report/term_structure.py +0 -0
  226. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/riskmeasures/__init__.py +0 -0
  227. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/equity/riskmeasures/vol_model_risk.py +0 -0
  228. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/__init__.py +0 -0
  229. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/__init__.py +0 -0
  230. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/__init__.py +0 -0
  231. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
  232. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +0 -0
  233. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +0 -0
  234. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +0 -0
  235. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
  236. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +0 -0
  237. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
  238. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +0 -0
  239. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +0 -0
  240. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +0 -0
  241. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +0 -0
  242. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +0 -0
  243. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +0 -0
  244. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +0 -0
  245. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +0 -0
  246. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +0 -0
  247. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/base_fx_engine.py +0 -0
  248. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/localvol_common.py +0 -0
  249. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/localvol_greeks.py +0 -0
  250. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/__init__.py +0 -0
  251. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +0 -0
  252. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_mc_params.py +0 -0
  253. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +0 -0
  254. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +0 -0
  255. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +0 -0
  256. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +0 -0
  257. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/heston_mc_engine.py +0 -0
  258. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +0 -0
  259. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +0 -0
  260. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/__init__.py +0 -0
  261. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/heston_pde_solver.py +0 -0
  262. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +0 -0
  263. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +0 -0
  264. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/process/__init__.py +0 -0
  265. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/process/fx_gk_path_generator.py +0 -0
  266. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
  267. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/__init__.py +0 -0
  268. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/base_fx_product.py +0 -0
  269. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/currency_pair.py +0 -0
  270. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
  271. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
  272. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
  273. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
  274. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
  275. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/__init__.py +0 -0
  276. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_barrier_option.py +0 -0
  277. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
  278. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +0 -0
  279. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_one_touch_option.py +0 -0
  280. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
  281. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +0 -0
  282. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
  283. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_range_accrual_config.py +0 -0
  284. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_range_accrual_option.py +0 -0
  285. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_sharkfin_option.py +0 -0
  286. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_target_redemption_forward.py +0 -0
  287. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_target_redemption_note.py +0 -0
  288. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
  289. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/report/__init__.py +0 -0
  290. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/report/fx_report.py +0 -0
  291. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/riskmeasures/__init__.py +0 -0
  292. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
  293. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/fx/riskmeasures/vol_model_risk.py +0 -0
  294. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/__init__.py +0 -0
  295. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/__init__.py +0 -0
  296. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
  297. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/fra_engine.py +0 -0
  298. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
  299. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/engine/swaption_engine.py +0 -0
  300. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/__init__.py +0 -0
  301. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/cap_floor.py +0 -0
  302. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/fra.py +0 -0
  303. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/irs.py +0 -0
  304. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/rate/product/swaption.py +0 -0
  305. {quantark-0.2.2 → quantark-0.2.4}/quantark/asset/vol_model_risk.py +0 -0
  306. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/__init__.py +0 -0
  307. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/base.py +0 -0
  308. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/__init__.py +0 -0
  309. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/config.py +0 -0
  310. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/engine.py +0 -0
  311. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/credit/results.py +0 -0
  312. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/dashboard.py +0 -0
  313. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/__init__.py +0 -0
  314. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/config.py +0 -0
  315. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/engine.py +0 -0
  316. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/hedge_executor.py +0 -0
  317. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/metrics.py +0 -0
  318. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
  319. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/results.py +0 -0
  320. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/equity/state.py +0 -0
  321. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/__init__.py +0 -0
  322. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/advanced_backtest.py +0 -0
  323. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
  324. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
  325. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/__init__.py +0 -0
  326. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/config.py +0 -0
  327. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/engine.py +0 -0
  328. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/hedge_executor.py +0 -0
  329. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/metrics.py +0 -0
  330. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/results.py +0 -0
  331. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fi/state.py +0 -0
  332. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/__init__.py +0 -0
  333. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/config.py +0 -0
  334. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/engine.py +0 -0
  335. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/fx/results.py +0 -0
  336. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/logger.py +0 -0
  337. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/__init__.py +0 -0
  338. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/_replay.py +0 -0
  339. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/book_engine.py +0 -0
  340. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/config.py +0 -0
  341. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/dashboard.py +0 -0
  342. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/engine.py +0 -0
  343. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/engine_factory.py +0 -0
  344. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/market.py +0 -0
  345. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/results.py +0 -0
  346. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/otc/state.py +0 -0
  347. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/report_generator.py +0 -0
  348. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/__init__.py +0 -0
  349. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
  350. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/base_strategy.py +0 -0
  351. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
  352. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
  353. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
  354. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
  355. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
  356. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/hedge_instruments.py +0 -0
  357. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
  358. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
  359. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
  360. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
  361. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/scenarios.py +0 -0
  362. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
  363. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
  364. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
  365. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/transaction_costs.py +0 -0
  366. {quantark-0.2.2 → quantark-0.2.4}/quantark/backtest/visualizer.py +0 -0
  367. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/base_amount.py +0 -0
  368. {quantark-0.2.2 → quantark-0.2.4}/quantark/cashleg/leg_schedule.py +0 -0
  369. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/__init__.py +0 -0
  370. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/base.py +0 -0
  371. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/config.py +0 -0
  372. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/__init__.py +0 -0
  373. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/config.py +0 -0
  374. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/engine.py +0 -0
  375. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/credit/path_library.py +0 -0
  376. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/engine.py +0 -0
  377. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/equity/__init__.py +0 -0
  378. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/__init__.py +0 -0
  379. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/config.py +0 -0
  380. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/engine.py +0 -0
  381. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fi/results.py +0 -0
  382. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/__init__.py +0 -0
  383. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/config.py +0 -0
  384. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/engine.py +0 -0
  385. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/fx/path_library.py +0 -0
  386. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
  387. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/__init__.py +0 -0
  388. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/day_path.py +0 -0
  389. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
  390. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/path_builder.py +0 -0
  391. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/path/path_library.py +0 -0
  392. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/report/__init__.py +0 -0
  393. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
  394. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/report/visualizer.py +0 -0
  395. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/results/__init__.py +0 -0
  396. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
  397. {quantark-0.2.2 → quantark-0.2.4}/quantark/dynamicscenario/results/result_exporter.py +0 -0
  398. {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/__init__.py +0 -0
  399. {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_brownian_bridge.py +0 -0
  400. {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_rqmc_driver.py +0 -0
  401. {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_sobol.py +0 -0
  402. {quantark-0.2.2 → quantark-0.2.4}/quantark/montecarlo/qmc_variance_reduction.py +0 -0
  403. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/__init__.py +0 -0
  404. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/basis/__init__.py +0 -0
  405. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/basis/basis_yield.py +0 -0
  406. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/credit/__init__.py +0 -0
  407. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/credit/ajd_hazard_curve.py +0 -0
  408. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/credit/hazard_curve.py +0 -0
  409. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/div/__init__.py +0 -0
  410. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/div/dividend_yield.py +0 -0
  411. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/index/__init__.py +0 -0
  412. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/index/rate_index.py +0 -0
  413. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/quote/__init__.py +0 -0
  414. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/quote/spot_quote.py +0 -0
  415. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/rrf/__init__.py +0 -0
  416. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/rrf/rate_curve.py +0 -0
  417. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/__init__.py +0 -0
  418. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/collapse_guard.py +0 -0
  419. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/__init__.py +0 -0
  420. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/calibration.py +0 -0
  421. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/diagnostics.py +0 -0
  422. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/hagan.py +0 -0
  423. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/sabr/sabr_surface.py +0 -0
  424. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/__init__.py +0 -0
  425. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/bs_fx.py +0 -0
  426. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/market_conventions.py +0 -0
  427. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/smile_builder.py +0 -0
  428. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/vv_core.py +0 -0
  429. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/vv_surface.py +0 -0
  430. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vannavolga/vv_term_structure.py +0 -0
  431. {quantark-0.2.2 → quantark-0.2.4}/quantark/param/vol/vol_surface.py +0 -0
  432. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/__init__.py +0 -0
  433. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/base.py +0 -0
  434. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/credit/__init__.py +0 -0
  435. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/credit/portfolio.py +0 -0
  436. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/credit/position.py +0 -0
  437. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/__init__.py +0 -0
  438. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/portfolio.py +0 -0
  439. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/equity/swap_position.py +0 -0
  440. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fi/__init__.py +0 -0
  441. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fi/portfolio.py +0 -0
  442. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fi/position.py +0 -0
  443. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fx/__init__.py +0 -0
  444. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fx/portfolio.py +0 -0
  445. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/fx/position.py +0 -0
  446. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/portfolio_snapshot.py +0 -0
  447. {quantark-0.2.2 → quantark-0.2.4}/quantark/portfolio/portfolio_storage.py +0 -0
  448. {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/__init__.py +0 -0
  449. {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/credit_pricing_environment.py +0 -0
  450. {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/fx_pricing_environment.py +0 -0
  451. {quantark-0.2.2 → quantark-0.2.4}/quantark/priceenv/pricing_environment.py +0 -0
  452. {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/__init__.py +0 -0
  453. {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/builders.py +0 -0
  454. {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/models.py +0 -0
  455. {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/registry.py +0 -0
  456. {quantark-0.2.2 → quantark-0.2.4}/quantark/rfq/service.py +0 -0
  457. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/__init__.py +0 -0
  458. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/calculator.py +0 -0
  459. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/dashboard.py +0 -0
  460. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/__init__.py +0 -0
  461. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/__init__.py +0 -0
  462. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/base.py +0 -0
  463. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/commodity.py +0 -0
  464. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/credit.py +0 -0
  465. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/equity.py +0 -0
  466. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/fx.py +0 -0
  467. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/addons/interest_rate.py +0 -0
  468. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/maths.py +0 -0
  469. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/pfe.py +0 -0
  470. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/engines/replacement_cost.py +0 -0
  471. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/__init__.py +0 -0
  472. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/enums.py +0 -0
  473. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/netting_set.py +0 -0
  474. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/models/trade.py +0 -0
  475. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/parameters/__init__.py +0 -0
  476. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/parameters/supervisory.py +0 -0
  477. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/results/__init__.py +0 -0
  478. {quantark-0.2.2 → quantark-0.2.4}/quantark/saccr/results/result.py +0 -0
  479. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/__init__.py +0 -0
  480. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/calculator.py +0 -0
  481. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/cva/__init__.py +0 -0
  482. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/cva/engine.py +0 -0
  483. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/dashboard.py +0 -0
  484. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/__init__.py +0 -0
  485. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/base.py +0 -0
  486. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/commodity.py +0 -0
  487. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/correlations.py +0 -0
  488. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/counterparty_credit.py +0 -0
  489. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/equity.py +0 -0
  490. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/fx.py +0 -0
  491. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/interest_rate.py +0 -0
  492. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/engines/reference_credit.py +0 -0
  493. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/__init__.py +0 -0
  494. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/asof.py +0 -0
  495. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/correlation.py +0 -0
  496. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/curves.py +0 -0
  497. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/engine.py +0 -0
  498. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/grid.py +0 -0
  499. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/__init__.py +0 -0
  500. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/calibration.py +0 -0
  501. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/engine.py +0 -0
  502. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/path_generator.py +0 -0
  503. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/pfe.py +0 -0
  504. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/historical/resampling.py +0 -0
  505. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/paths.py +0 -0
  506. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/phoenix_surface.py +0 -0
  507. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/repricer.py +0 -0
  508. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/simulator.py +0 -0
  509. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/snowball_surface.py +0 -0
  510. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/statemachine.py +0 -0
  511. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/exposure/value_surface.py +0 -0
  512. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/__init__.py +0 -0
  513. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/enums.py +0 -0
  514. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/portfolio.py +0 -0
  515. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/models/sensitivity.py +0 -0
  516. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/parameters/__init__.py +0 -0
  517. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/parameters/supervisory.py +0 -0
  518. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/__init__.py +0 -0
  519. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/counterparty.py +0 -0
  520. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/credit_curve.py +0 -0
  521. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/netting.py +0 -0
  522. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/trade.py +0 -0
  523. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/portfolio/trade_portfolio.py +0 -0
  524. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/results/__init__.py +0 -0
  525. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/results/result.py +0 -0
  526. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sacva_engine.py +0 -0
  527. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/__init__.py +0 -0
  528. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/curve_bump.py +0 -0
  529. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/engine.py +0 -0
  530. {quantark-0.2.2 → quantark-0.2.4}/quantark/sacva/sensitivities/shifts.py +0 -0
  531. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/__init__.py +0 -0
  532. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/__init__.py +0 -0
  533. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/accessors.py +0 -0
  534. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/commodity.py +0 -0
  535. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
  536. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/credit_qualifying.py +0 -0
  537. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/cross_risk.py +0 -0
  538. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/equity.py +0 -0
  539. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/fx.py +0 -0
  540. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/ir.py +0 -0
  541. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/calibration/version.py +0 -0
  542. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/config.py +0 -0
  543. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/crif/__init__.py +0 -0
  544. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/crif/models.py +0 -0
  545. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/crif/parser.py +0 -0
  546. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/dashboard.py +0 -0
  547. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/__init__.py +0 -0
  548. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/__init__.py +0 -0
  549. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/addon.py +0 -0
  550. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
  551. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/concentration.py +0 -0
  552. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/correlations.py +0 -0
  553. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
  554. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
  555. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
  556. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
  557. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/base.py +0 -0
  558. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/classification/__init__.py +0 -0
  559. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
  560. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/factory.py +0 -0
  561. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/portfolio_adapter.py +0 -0
  562. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/result.py +0 -0
  563. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/__init__.py +0 -0
  564. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
  565. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
  566. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
  567. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/market_data.py +0 -0
  568. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/__init__.py +0 -0
  569. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/crif_export.py +0 -0
  570. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/excel_generator.py +0 -0
  571. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/report/html_generator.py +0 -0
  572. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/__init__.py +0 -0
  573. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/attribution.py +0 -0
  574. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/simm_result.py +0 -0
  575. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/results/whatif.py +0 -0
  576. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/sensitivity.py +0 -0
  577. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/taxonomy.py +0 -0
  578. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/template/__init__.py +0 -0
  579. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/template/xlsx_loader.py +0 -0
  580. {quantark-0.2.2 → quantark-0.2.4}/quantark/simm/template/xlsx_template.py +0 -0
  581. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/__init__.py +0 -0
  582. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/base.py +0 -0
  583. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/config.py +0 -0
  584. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/__init__.py +0 -0
  585. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/config.py +0 -0
  586. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
  587. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/credit/engine.py +0 -0
  588. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/engine.py +0 -0
  589. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/__init__.py +0 -0
  590. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/config.py +0 -0
  591. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/engine.py +0 -0
  592. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/report/__init__.py +0 -0
  593. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/report/report_generator.py +0 -0
  594. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/report/visualizer.py +0 -0
  595. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/equity/results.py +0 -0
  596. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/__init__.py +0 -0
  597. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/config.py +0 -0
  598. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/engine.py +0 -0
  599. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/metrics.py +0 -0
  600. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fi/results.py +0 -0
  601. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/__init__.py +0 -0
  602. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/config.py +0 -0
  603. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/engine.py +0 -0
  604. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
  605. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/report/__init__.py +0 -0
  606. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/report/report_generator.py +0 -0
  607. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/report/visualizer.py +0 -0
  608. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/__init__.py +0 -0
  609. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/result_aggregator.py +0 -0
  610. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/result_exporter.py +0 -0
  611. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/results/stress_results.py +0 -0
  612. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/__init__.py +0 -0
  613. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario.py +0 -0
  614. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario_builder.py +0 -0
  615. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario_library.py +0 -0
  616. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/scenario/scenario_storage.py +0 -0
  617. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/stress/__init__.py +0 -0
  618. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/stress/stress_applicator.py +0 -0
  619. {quantark-0.2.2 → quantark-0.2.4}/quantark/stresstest/stress/stress_types.py +0 -0
  620. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/__init__.py +0 -0
  621. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/barrier_shift.py +0 -0
  622. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/__init__.py +0 -0
  623. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/business_calendar.py +0 -0
  624. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/day_counter.py +0 -0
  625. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/holidayfile/china.csv +0 -0
  626. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
  627. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/__init__.py +0 -0
  628. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/bond_enums.py +0 -0
  629. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/deltaone_enums.py +0 -0
  630. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/engine_enums.py +0 -0
  631. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/fx_enums.py +0 -0
  632. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/greek_conventions.py +0 -0
  633. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/greeks_enums.py +0 -0
  634. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/enum/option_enums.py +0 -0
  635. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/exceptions.py +0 -0
  636. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/__init__.py +0 -0
  637. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
  638. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
  639. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/converter.py +0 -0
  640. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/example_usage.py +0 -0
  641. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/generator/__init__.py +0 -0
  642. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/generator/mock_generator.py +0 -0
  643. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/models.py +0 -0
  644. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/storage/__init__.py +0 -0
  645. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
  646. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/__init__.py +0 -0
  647. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/comparison.py +0 -0
  648. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/constants.py +0 -0
  649. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/formatting.py +0 -0
  650. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/pnl.py +0 -0
  651. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/safe_math.py +0 -0
  652. {quantark-0.2.2 → quantark-0.2.4}/quantark/util/numerical/validation.py +0 -0
  653. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/__init__.py +0 -0
  654. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/attribution.py +0 -0
  655. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/backtest/__init__.py +0 -0
  656. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/backtest/var_backtester.py +0 -0
  657. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/base.py +0 -0
  658. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/config.py +0 -0
  659. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/__init__.py +0 -0
  660. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/config.py +0 -0
  661. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/engine.py +0 -0
  662. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/credit/revaluation.py +0 -0
  663. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/__init__.py +0 -0
  664. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/historical.py +0 -0
  665. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/monte_carlo.py +0 -0
  666. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/engines/parametric.py +0 -0
  667. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/__init__.py +0 -0
  668. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/config.py +0 -0
  669. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/engine.py +0 -0
  670. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/fx/revaluation.py +0 -0
  671. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/__init__.py +0 -0
  672. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/incremental_var_result.py +0 -0
  673. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/var_report.py +0 -0
  674. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/results/var_result.py +0 -0
  675. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/__init__.py +0 -0
  676. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/base.py +0 -0
  677. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/equity_factors.py +0 -0
  678. {quantark-0.2.2 → quantark-0.2.4}/quantark/var/risk_factors/fi_factors.py +0 -0
  679. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/__init__.py +0 -0
  680. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/black_scholes.py +0 -0
  681. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/curves.py +0 -0
  682. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/__init__.py +0 -0
  683. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/analytical_kernel.py +0 -0
  684. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/calibration.py +0 -0
  685. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/mc_kernel.py +0 -0
  686. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/params.py +0 -0
  687. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/heston/pde_kernel.py +0 -0
  688. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/__init__.py +0 -0
  689. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/dupire.py +0 -0
  690. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/mc_kernel.py +0 -0
  691. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/pde_kernel.py +0 -0
  692. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/localvol/surface.py +0 -0
  693. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/risk/__init__.py +0 -0
  694. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/risk/contracts.py +0 -0
  695. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/risk/scenarios.py +0 -0
  696. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/__init__.py +0 -0
  697. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/__init__.py +0 -0
  698. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/bootstrap.py +0 -0
  699. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/calibration.py +0 -0
  700. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/config.py +0 -0
  701. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/coordinates.py +0 -0
  702. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/fp_operators.py +0 -0
  703. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/fokkerplanck/fp_solver.py +0 -0
  704. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/leverage.py +0 -0
  705. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/slv_mc_kernel.py +0 -0
  706. {quantark-0.2.2 → quantark-0.2.4}/quantark/volmodels/slv/slv_pde_kernel.py +0 -0
  707. {quantark-0.2.2 → quantark-0.2.4}/quantark_compat.pth +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quantark
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: Modular derivatives pricing and risk library: options, autocallables, bonds, VaR, SIMM
5
5
  Project-URL: Homepage, https://github.com/deiiiiii93/quantark
6
6
  Project-URL: Repository, https://github.com/deiiiiii93/quantark
@@ -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.4"
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.4"
@@ -69,6 +69,7 @@ class BaseEngine(ABC):
69
69
  product: BaseEquityProduct,
70
70
  pricing_env: PricingEnvironment,
71
71
  emit_distribution: bool = True,
72
+ streams: "Optional[frozenset]" = None,
72
73
  ) -> "PricingResult":
73
74
  """
74
75
  Return product NPV and an event distribution for cash-leg valuation.
@@ -77,6 +78,10 @@ class BaseEngine(ABC):
77
78
  generalized EventDistribution. Engines without event stats fall back to
78
79
  a maturity-only distribution, which is sufficient for deterministic and
79
80
  full-schedule cash legs.
81
+
82
+ ``streams`` (the EventType set the caller needs, [§11.1]) is honored by
83
+ engines that support column pruning (the PDE autocallable solvers);
84
+ other engines ignore it and return the full distribution.
80
85
  """
81
86
  from quantark.cashleg.event_distribution import EventDistribution, PricingResult
82
87
 
@@ -9,6 +9,7 @@ autocallable products (Snowball-first).
9
9
  from __future__ import annotations
10
10
 
11
11
  from dataclasses import dataclass, field
12
+ from typing import Optional
12
13
 
13
14
  import numpy as np
14
15
 
@@ -24,12 +25,26 @@ class AutocallableEventStats:
24
25
  ko_probability: Probability of KO occurring at each observation time.
25
26
  survival_probability: Probability of surviving (not KO'd) up to each observation.
26
27
  expected_discounted_ko_cashflow: Expected discounted KO redemption cashflow at each observation.
27
- ki_probability: 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,
@@ -0,0 +1,137 @@
1
+ """Shared backward-in-time Crank-Nicolson interior operator.
2
+
3
+ ``BackwardOperator`` owns the tridiagonal INTERIOR operator (l, c, u) for a fixed
4
+ spatial grid and produces, per (dt, theta), the banded LHS system and the RHS
5
+ tridiagonal coefficients — cached, so a factorization is built once and reused
6
+ across every column solved on the same step.
7
+
8
+ Boundary conditions live in the RHS/boundary rows, NOT in this interior matrix,
9
+ so the value sweep (Dirichlet value BCs) and the indicator sweep (Neumann /
10
+ zero-slope BCs) can share ONE factorization [§11.2]. The per-step damping
11
+ schedule (``theta_by_step``) is also owned here so both sweeps run the identical
12
+ Rannacher schedule — required for price/probability consistency and for the
13
+ factorization to be shareable across sweeps.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ from collections import OrderedDict
19
+ from typing import Optional, Sequence, Tuple
20
+
21
+ import numpy as np
22
+
23
+ from quantark.util.numerical import is_close
24
+
25
+
26
+ class BackwardOperator:
27
+ """Fixed interior tridiagonal operator with a per-(dt, theta) banded cache."""
28
+
29
+ def __init__(
30
+ self,
31
+ l: np.ndarray,
32
+ c: np.ndarray,
33
+ u: np.ndarray,
34
+ *,
35
+ use_banded: bool = True,
36
+ cache_enabled: bool = True,
37
+ cache_max_entries: int = 512,
38
+ ) -> None:
39
+ self._l = np.asarray(l, dtype=float)
40
+ self._c = np.asarray(c, dtype=float)
41
+ self._u = np.asarray(u, dtype=float)
42
+ self.use_banded = use_banded
43
+ self._cache_enabled = cache_enabled
44
+ self._cache_max_entries = max(1, int(cache_max_entries))
45
+ self._banded_cache: "OrderedDict[Tuple[float, float], Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]]" = (
46
+ OrderedDict()
47
+ )
48
+
49
+ def _build(
50
+ self, dt: float, theta: float
51
+ ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
52
+ l, c, u = self._l, self._c, self._u
53
+ lower = -theta * dt * l[2:-1]
54
+ main = 1.0 - theta * dt * c[1:-1]
55
+ upper = -theta * dt * u[1:-2]
56
+
57
+ banded = np.zeros((3, len(main)))
58
+ banded[0, 1:] = upper
59
+ banded[1, :] = main
60
+ banded[2, :-1] = lower
61
+
62
+ lower1 = (1.0 - theta) * dt * l[2:-1]
63
+ main1 = 1.0 + (1.0 - theta) * dt * c[1:-1]
64
+ upper1 = (1.0 - theta) * dt * u[1:-2]
65
+ return banded, lower1, main1, upper1
66
+
67
+ def banded_system(
68
+ self, dt: float, theta: float
69
+ ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
70
+ """Return ``(banded, lower1, main1, upper1)`` for the CN step at (dt, theta).
71
+
72
+ ``banded`` is the LHS ``I - theta*dt*A`` in scipy banded form; the three
73
+ 1-D vectors are the RHS ``I + (1-theta)*dt*A`` tridiagonals. Identical to
74
+ the former ``SnowballPDESolver._get_banded_system`` output.
75
+ """
76
+ if not self._cache_enabled:
77
+ return self._build(dt, theta)
78
+
79
+ key = (round(dt, 12), round(theta, 12))
80
+ cached = self._banded_cache.get(key)
81
+ if cached is not None:
82
+ self._banded_cache.move_to_end(key)
83
+ return cached
84
+
85
+ result = self._build(dt, theta)
86
+ self._banded_cache[key] = result
87
+ self._banded_cache.move_to_end(key)
88
+ if len(self._banded_cache) > self._cache_max_entries:
89
+ self._banded_cache.popitem(last=False)
90
+ return result
91
+
92
+ def clear_cache(self) -> None:
93
+ self._banded_cache.clear()
94
+
95
+ @staticmethod
96
+ def theta_by_step(
97
+ t_vec: np.ndarray,
98
+ dt_vec: np.ndarray,
99
+ params,
100
+ discontinuity_times: Optional[Sequence[float]],
101
+ ) -> np.ndarray:
102
+ """Per-step Crank-Nicolson theta (length ``len(t_vec) - 1``) [§11.2].
103
+
104
+ Reproduces the pricing sweep's Rannacher rule exactly: step ``j`` (the
105
+ backward step from ``t_vec[j+1]`` to ``t_vec[j]``) uses backward-Euler
106
+ (``theta = 1``) within ``rannacher_steps`` of the terminal payoff, else
107
+ ``event_theta`` for the ``event_rannacher_steps`` steps immediately
108
+ before each discontinuity node, else ``params.theta``.
109
+
110
+ Depends only on ``discontinuity_times`` (always KO ∪ KI ∪ coupon), so the
111
+ schedule is identical regardless of which streams a downstream consumer
112
+ selects — a prerequisite for sharing the factorization across sweeps.
113
+ """
114
+ t_vec = np.asarray(t_vec, dtype=float)
115
+ num_t = len(t_vec)
116
+ n_steps = num_t - 1
117
+ theta = np.full(n_steps, float(params.theta), dtype=float)
118
+ if not params.use_rannacher:
119
+ return theta
120
+
121
+ smooth_js: set = set()
122
+ if params.auto_grid and params.rannacher_at_events and discontinuity_times:
123
+ for et in discontinuity_times:
124
+ idx = int(np.argmin(np.abs(t_vec - et)))
125
+ if 0 < idx < num_t - 1 and is_close(float(t_vec[idx]), float(et)):
126
+ for k in range(int(params.event_rannacher_steps)):
127
+ sj = idx - 1 - k
128
+ if sj >= 0:
129
+ smooth_js.add(sj)
130
+
131
+ for j in range(n_steps):
132
+ steps_from_end = num_t - 1 - j
133
+ if steps_from_end < params.rannacher_steps:
134
+ theta[j] = 1.0
135
+ elif j in smooth_js:
136
+ theta[j] = float(params.event_theta)
137
+ return theta
@@ -8,6 +8,7 @@ backward in time, with support for Rannacher smoothing.
8
8
  from abc import abstractmethod
9
9
  from collections import OrderedDict
10
10
  from copy import deepcopy
11
+ from dataclasses import dataclass, field
11
12
  import math
12
13
  import threading
13
14
  from typing import Dict, Optional, Tuple, List, NamedTuple, Sequence
@@ -28,6 +29,24 @@ from .time_grid import TimeGrid
28
29
  from .spatial_grid import SpatialGrid
29
30
 
30
31
 
32
+ @dataclass(frozen=True)
33
+ class TimeGridSpec:
34
+ """The three orthogonal time-grid concerns (spec §4 Component 1).
35
+
36
+ * ``align_times`` — times that MUST be grid nodes exactly: KO/coupon
37
+ observation dates. They drive both node alignment and the
38
+ event-distribution resets, so a misalignment here is a correctness bug.
39
+ * ``monitor_times`` — extra nodes that improve resolution of a monitored
40
+ feature (daily-discrete KI) but are not alignment-critical for the
41
+ value/cashflow. Empty for European/continuous/no-KI regimes.
42
+ * ``steps_per_day`` — resolution: fill density between mandatory nodes.
43
+ """
44
+
45
+ align_times: list
46
+ monitor_times: list = field(default_factory=list)
47
+ steps_per_day: float = 1.0
48
+
49
+
31
50
  class PDESolutionResult(NamedTuple):
32
51
  """
33
52
  Result from PDE solving containing solution and grid data.
@@ -155,10 +174,17 @@ class BasePDESolver(BaseEngine):
155
174
  s_min, s_max = self._resolve_spatial_bounds(
156
175
  product, spot, sigma, tau, r, q, barriers
157
176
  )
177
+ # Freeze the critical points at the base spot too [§11.4]: otherwise
178
+ # include_spot_in_critical_points re-snaps the grid to a bumped spot,
179
+ # so a spot bump mixes true delta/gamma with grid-movement noise.
180
+ frozen_critical = tuple(
181
+ self._resolve_critical_points(product, pricing_env, spot, barriers)
182
+ )
158
183
 
159
184
  fixed_params = deepcopy(self.params)
160
185
  fixed_params.s_min = float(s_min)
161
186
  fixed_params.s_max = float(s_max)
187
+ fixed_params.frozen_critical_points = frozen_critical
162
188
  return type(self)(params=fixed_params)
163
189
 
164
190
  def _freeze_cache_value(self, value):
@@ -252,6 +278,8 @@ class BasePDESolver(BaseEngine):
252
278
  params.theta,
253
279
  params.use_rannacher,
254
280
  params.rannacher_steps,
281
+ params.frozen_critical_points,
282
+ getattr(params, "ki_monitoring_mode", None),
255
283
  )
256
284
 
257
285
  def _grid_cache_key(
@@ -619,6 +647,14 @@ class BasePDESolver(BaseEngine):
619
647
  ) -> List[float]:
620
648
  """Merge raw critical points with dynamic points (spot/barriers)."""
621
649
  params: PDEParams = self.params
650
+
651
+ # Frozen (bump-context) critical points are used verbatim so the grid is
652
+ # invariant to spot/vol/rate/div bumps [§11.4].
653
+ if params.frozen_critical_points is not None:
654
+ return sorted(
655
+ {float(p) for p in params.frozen_critical_points if p is not None and p > 0}
656
+ )
657
+
622
658
  points = list(raw_points)
623
659
 
624
660
  if params.auto_grid:
@@ -659,25 +695,80 @@ class BasePDESolver(BaseEngine):
659
695
 
660
696
  return size, adaptive
661
697
 
698
+ def _time_grid_spec(self, product, tau) -> "TimeGridSpec":
699
+ """Decoupled time-grid concerns for this product (spec §4 Component 1).
700
+
701
+ Base default: align to the generic observation schedule; no KI-monitor
702
+ concept (that belongs to autocallable solvers, which override this);
703
+ resolution from params. Returns interior times only (0 < t < tau).
704
+ """
705
+ align = [
706
+ t for t in (self._get_event_times(product, tau) or []) if 0.0 < t < tau
707
+ ]
708
+ return TimeGridSpec(
709
+ align_times=sorted(set(align)),
710
+ monitor_times=[],
711
+ steps_per_day=float(self.params.event_steps_per_day),
712
+ )
713
+
662
714
  def _resolve_time_grid(
663
715
  self, product, tau, barriers
664
716
  ) -> Tuple[np.ndarray, np.ndarray]:
665
- """Determine time grid type and number of steps."""
717
+ """Build the time grid from the decoupled ``_time_grid_spec`` seam.
718
+
719
+ When the product has mandatory event nodes (KO/coupon alignment plus any
720
+ KI-monitor times), the grid is built by ``TimeGrid.build_mandatory``:
721
+ every event time lands on a node exactly, and resolution between nodes is
722
+ set solely by ``steps_per_day`` (no per-interval floor). This path is
723
+ market-independent — it depends only on ``tau``, the schedule,
724
+ ``steps_per_day`` and params — so spot/vol/rate/div bumps reprice on an
725
+ identical grid [§4.5], and it always feeds the day-based resolution
726
+ params, fixing the historical ``auto_grid=False`` param drop (root cause
727
+ 2) that inflated daily-KI grids ~10x.
728
+
729
+ When there are no discrete event nodes (continuous barriers, American,
730
+ European), the base resolution heuristics are preserved unchanged.
731
+ """
666
732
  params: PDEParams = self.params
733
+ spec = self._time_grid_spec(product, tau)
734
+ mandatory = sorted(
735
+ {
736
+ t
737
+ for t in (list(spec.align_times) + list(spec.monitor_times))
738
+ if 0.0 < t < tau
739
+ }
740
+ )
741
+
742
+ # Event alignment engages when the config wants an event-aligned grid:
743
+ # auto_grid (auto-selects alignment when events exist, as before) or an
744
+ # explicit event grid type. An explicit auto_grid=False + uniform/graded
745
+ # request is honored literally (plain grid), matching prior behavior.
746
+ want_event_aligned = params.auto_grid or params.time_grid_type in (
747
+ "event_aligned",
748
+ "event_clustered",
749
+ )
750
+ if mandatory and want_event_aligned:
751
+ return TimeGrid.build_mandatory(
752
+ tau,
753
+ mandatory,
754
+ steps_per_day=spec.steps_per_day,
755
+ day_count=int(params.bus_days_in_year),
756
+ max_steps_total=params.max_time_steps,
757
+ )
758
+
759
+ # No event alignment requested: preserve the base resolution heuristics.
667
760
  obs_type = getattr(product, "observation_type", None)
668
761
  has_barriers = len(barriers) > 0
669
- event_times = self._get_event_times(product, tau)
670
762
 
671
763
  if not params.auto_grid:
672
764
  return TimeGrid.build(
673
765
  tau,
674
766
  params.time_steps,
675
767
  method=params.time_grid_type,
676
- event_times=event_times,
768
+ event_times=None,
677
769
  grade_exponent=params.grade_exponent,
678
770
  )
679
771
 
680
- # Logic for suggested time steps
681
772
  days = max(1, int(round(tau * float(params.bus_days_in_year))))
682
773
  suggested = days
683
774
  if has_barriers:
@@ -689,24 +780,13 @@ class BasePDESolver(BaseEngine):
689
780
  suggested = int(round(1.5 * float(days)))
690
781
 
691
782
  steps = min(max(params.time_steps, suggested), params.max_time_steps)
692
-
693
- # Decide method
694
- method = "uniform"
695
- if event_times and (has_barriers or obs_type == ObservationType.DISCRETE):
696
- method = "event_aligned"
697
- elif params.time_grid_type != "uniform":
698
- method = params.time_grid_type
699
-
783
+ method = params.time_grid_type if params.time_grid_type != "uniform" else "uniform"
700
784
  return TimeGrid.build(
701
785
  tau,
702
786
  steps,
703
787
  method=method,
704
- event_times=event_times,
788
+ event_times=None,
705
789
  grade_exponent=params.grade_exponent,
706
- steps_per_day=params.event_steps_per_day,
707
- day_count=params.bus_days_in_year,
708
- min_steps_per_interval=params.event_min_steps_per_interval,
709
- max_steps_total=params.max_time_steps,
710
790
  )
711
791
 
712
792
  def _calculate_coefficients(
@@ -8,6 +8,7 @@ to the V1 surface (ABSOLUTE post-KO mode only).
8
8
  from __future__ import annotations
9
9
 
10
10
  from collections import OrderedDict
11
+ from dataclasses import replace
11
12
  from time import perf_counter
12
13
  from typing import Dict, List, Optional, Tuple
13
14
 
@@ -15,6 +16,7 @@ import numpy as np
15
16
 
16
17
  from quantark.asset.equity.engine.pde.base_pde_solver import PDESolutionResult
17
18
  from quantark.asset.equity.engine.pde.snowball_pde_solver import SnowballPDESolver
19
+ from quantark.asset.equity.param import QuadParams
18
20
  from quantark.asset.equity.product.option.ko_reset_snowball_option import (
19
21
  KnockOutResetSnowballOption,
20
22
  )
@@ -55,9 +57,42 @@ class KOResetSnowballPDESolver(SnowballPDESolver):
55
57
  # price() is inherited from SnowballPDESolver using _check_product_type()
56
58
 
57
59
  def calculate_event_stats(
58
- self, product: KnockOutResetSnowballOption, pricing_env: PricingEnvironment
60
+ self,
61
+ product: KnockOutResetSnowballOption,
62
+ pricing_env: PricingEnvironment,
63
+ *,
64
+ npv: Optional[float] = None,
65
+ streams: Optional[frozenset] = None,
59
66
  ) -> Optional[object]:
60
- return None
67
+ # streams is ignored: the KO-reset stats are QUAD-delegated (full
68
+ # distribution), not a prunable PDE indicator sweep. npv, when supplied
69
+ # by the single-pass price_with_events, is the PDE value used for the
70
+ # reconciliation residual (avoids a redundant self.price() solve).
71
+ if not isinstance(product, KnockOutResetSnowballOption):
72
+ return None
73
+ if pricing_env is None:
74
+ return None
75
+
76
+ from quantark.asset.equity.engine.quad.ko_reset_snowball_quad_engine import (
77
+ KOResetSnowballQuadEngine,
78
+ )
79
+
80
+ grid_points = max(501, int(getattr(self.params, "grid_size", 0) or 0))
81
+ quad_stats = KOResetSnowballQuadEngine(
82
+ QuadParams(grid_points=grid_points)
83
+ ).calculate_event_stats(product, pricing_env)
84
+ if quad_stats is None:
85
+ return None
86
+
87
+ pde_pv = float(npv) if npv is not None else float(self.price(product, pricing_env))
88
+ pv_delta = pde_pv - float(quad_stats.pv)
89
+ return replace(
90
+ quad_stats,
91
+ pv=pde_pv,
92
+ expected_discounted_maturity_cashflow=(
93
+ float(quad_stats.expected_discounted_maturity_cashflow) + pv_delta
94
+ ),
95
+ )
61
96
 
62
97
  def _validate_product(self, product: KnockOutResetSnowballOption) -> None:
63
98
  super()._validate_product(product)
@@ -206,22 +241,33 @@ class KOResetSnowballPDESolver(SnowballPDESolver):
206
241
 
207
242
  return result
208
243
 
209
- def _get_event_times(
244
+ def _post_ki_ko_times(
210
245
  self, product: KnockOutResetSnowballOption, tau: float
211
- ) -> Optional[List[float]]:
212
- event_times = super()._get_event_times(product, tau) or []
246
+ ) -> List[float]:
247
+ """Post-KI (reset) KO observation times, interior to (0, tau).
248
+
249
+ In the two-surface KO-reset PDE the post-KI KO schedule fires on the V1
250
+ (knocked-in) surface; those dates must be grid nodes exactly [§11.7].
251
+ """
252
+ out = []
213
253
  post_schedule = product.post_barrier_config.ko_observation_schedule
214
254
  if post_schedule is not None:
215
- for rec in post_schedule.records:
216
- if rec.observation_time is not None:
217
- t = rec.observation_time
218
- if 0 < t < tau:
219
- event_times.append(t)
255
+ out += [
256
+ rec.observation_time
257
+ for rec in post_schedule.records
258
+ if rec.observation_time is not None
259
+ ]
220
260
  elif product.post_barrier_config.ko_observation_dates is not None:
221
- for t in product.post_barrier_config.ko_observation_dates:
222
- if 0 < t < tau:
223
- event_times.append(t)
224
- return sorted(set(event_times)) if event_times else None
261
+ out += list(product.post_barrier_config.ko_observation_dates)
262
+ return sorted({float(t) for t in out if t is not None and 0.0 < float(t) < tau})
263
+
264
+ def _ko_coupon_align_times(
265
+ self, product: KnockOutResetSnowballOption, tau: float
266
+ ) -> List[float]:
267
+ """Pre-KI KO ∪ post-KI (reset) KO — both must align exactly [§11.7]."""
268
+ pre = super()._ko_coupon_align_times(product, tau)
269
+ post = self._post_ki_ko_times(product, tau)
270
+ return sorted(set(pre) | set(post))
225
271
 
226
272
  def get_critical_points(
227
273
  self, product: KnockOutResetSnowballOption, pricing_env: PricingEnvironment
@@ -236,6 +236,9 @@ class PhoenixPDESolver(SnowballPDESolver):
236
236
  else:
237
237
  self._ki_barrier = ki_barrier
238
238
 
239
+ # Resolve BGK state before grids so the time grid drops interior KI nodes.
240
+ self._configure_bgk(product, pricing_env, sigma, tau)
241
+
239
242
  if self._profile_enabled:
240
243
  self._reset_profile_stats()
241
244
 
@@ -288,7 +291,11 @@ class PhoenixPDESolver(SnowballPDESolver):
288
291
  )
289
292
 
290
293
  if product.has_ki_barrier:
291
- should_apply_ki = self._ki_continuous or terminal_tidx in self._ki_observation_indices
294
+ should_apply_ki = (
295
+ self._ki_continuous
296
+ or self._bgk_active
297
+ or terminal_tidx in self._ki_observation_indices
298
+ )
292
299
  if should_apply_ki:
293
300
  for k in range(len(grid_v0_list)):
294
301
  self._apply_ki_jump(grid_v0_list[k], grid_v1_list[k], s_vec, terminal_tidx, product)
@@ -583,7 +590,11 @@ class PhoenixPDESolver(SnowballPDESolver):
583
590
 
584
591
  # 2. KI Jump
585
592
  if product.has_ki_barrier:
586
- should_apply_ki = self._ki_continuous or t_idx in self._ki_observation_indices
593
+ should_apply_ki = (
594
+ self._ki_continuous
595
+ or self._bgk_active
596
+ or t_idx in self._ki_observation_indices
597
+ )
587
598
  if should_apply_ki:
588
599
  # Apply to all states
589
600
  for k in range(len(grid_v0_list)):