quantark 0.2.1__tar.gz → 0.2.2__tar.gz

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