quantark 0.1.2__tar.gz → 0.2.0__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.1.2 → quantark-0.2.0}/PKG-INFO +1 -1
  2. {quantark-0.1.2 → quantark-0.2.0}/pyproject.toml +1 -1
  3. {quantark-0.1.2 → quantark-0.2.0}/quantark/__init__.py +1 -1
  4. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/__init__.py +14 -0
  5. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/__init__.py +4 -0
  6. quantark-0.2.0/quantark/asset/equity/engine/analytical/accumulator_analytical_engine.py +363 -0
  7. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/asian_option_analytical_engine.py +139 -73
  8. quantark-0.2.0/quantark/asset/equity/engine/analytical/heston_analytical_engine.py +79 -0
  9. quantark-0.2.0/quantark/asset/equity/engine/cashflow/__init__.py +23 -0
  10. quantark-0.2.0/quantark/asset/equity/engine/cashflow/accrual_calculator.py +151 -0
  11. quantark-0.2.0/quantark/asset/equity/engine/cashflow/total_return_swap_engine.py +566 -0
  12. quantark-0.2.0/quantark/asset/equity/engine/cashflow/trs_cva_exposure.py +37 -0
  13. quantark-0.2.0/quantark/asset/equity/engine/cashflow/trs_cva_repricer.py +357 -0
  14. quantark-0.2.0/quantark/asset/equity/engine/cashflow/trs_valuation.py +177 -0
  15. quantark-0.2.0/quantark/asset/equity/engine/localvol_greeks.py +68 -0
  16. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/__init__.py +8 -0
  17. quantark-0.2.0/quantark/asset/equity/engine/mc/accumulator_mc_engine.py +389 -0
  18. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/asian_option_mc_engine.py +55 -33
  19. quantark-0.2.0/quantark/asset/equity/engine/mc/heston_mc_engine.py +75 -0
  20. quantark-0.2.0/quantark/asset/equity/engine/mc/heston_slv_mc_engine.py +97 -0
  21. quantark-0.2.0/quantark/asset/equity/engine/mc/local_vol_mc_engine.py +88 -0
  22. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/__init__.py +6 -0
  23. quantark-0.2.0/quantark/asset/equity/engine/pde/heston_pde_solver.py +110 -0
  24. quantark-0.2.0/quantark/asset/equity/engine/pde/heston_slv_pde_solver.py +105 -0
  25. quantark-0.2.0/quantark/asset/equity/engine/pde/local_vol_pde_solver.py +99 -0
  26. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/ko_reset_snowball_quad_engine.py +22 -0
  27. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/phoenix_quad_engine.py +31 -0
  28. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/snowball_quad_engine.py +66 -0
  29. quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_brownian_bridge.py +10 -0
  30. quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_rqmc_driver.py +4 -0
  31. quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_sobol.py +8 -0
  32. quantark-0.2.0/quantark/asset/equity/process/bsm/qmc_variance_reduction.py +11 -0
  33. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/__init__.py +3 -0
  34. quantark-0.2.0/quantark/asset/equity/product/option/accumulator_option.py +442 -0
  35. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/asian_option.py +138 -18
  36. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/snowball_helpers.py +17 -1
  37. quantark-0.2.0/quantark/asset/equity/product/swap/__init__.py +67 -0
  38. quantark-0.2.0/quantark/asset/equity/product/swap/base_swap.py +34 -0
  39. quantark-0.2.0/quantark/asset/equity/product/swap/multi_asset_trs.py +262 -0
  40. quantark-0.2.0/quantark/asset/equity/product/swap/one_asset_trs.py +66 -0
  41. quantark-0.2.0/quantark/asset/equity/product/swap/one_asset_trs_dual_ccy.py +101 -0
  42. quantark-0.2.0/quantark/asset/equity/product/swap/trs_event_handler.py +97 -0
  43. quantark-0.2.0/quantark/asset/equity/product/swap/trs_params.py +199 -0
  44. quantark-0.2.0/quantark/asset/equity/product/swap/trs_schedule.py +129 -0
  45. quantark-0.2.0/quantark/asset/equity/riskmeasures/__init__.py +7 -0
  46. quantark-0.2.0/quantark/asset/equity/riskmeasures/vol_model_risk.py +23 -0
  47. quantark-0.2.0/quantark/asset/fx/engine/__init__.py +31 -0
  48. quantark-0.2.0/quantark/asset/fx/engine/analytical/__init__.py +42 -0
  49. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_digital_engine.py +78 -1
  50. quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_foreign_range_accrual_engine.py +113 -0
  51. quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_heston_analytical_engine.py +78 -0
  52. quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_quanto_range_accrual_engine.py +120 -0
  53. quantark-0.2.0/quantark/asset/fx/engine/analytical/fx_range_accrual_engine.py +390 -0
  54. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/garman_kohlhagen_engine.py +9 -0
  55. quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/__init__.py +62 -0
  56. quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/arbitrage.py +67 -0
  57. quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/attenuation.py +311 -0
  58. quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/barrier_bs.py +281 -0
  59. quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier.py +193 -0
  60. quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/vv_barrier_engine.py +94 -0
  61. quantark-0.2.0/quantark/asset/fx/engine/analytical/vannavolga/vv_vanilla_barrier.py +208 -0
  62. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/base_fx_engine.py +53 -0
  63. quantark-0.2.0/quantark/asset/fx/engine/localvol_common.py +54 -0
  64. quantark-0.2.0/quantark/asset/fx/engine/localvol_greeks.py +76 -0
  65. quantark-0.2.0/quantark/asset/fx/engine/mc/__init__.py +28 -0
  66. quantark-0.2.0/quantark/asset/fx/engine/mc/fx_barrier_mc_engine.py +290 -0
  67. quantark-0.2.0/quantark/asset/fx/engine/mc/fx_mc_params.py +47 -0
  68. quantark-0.2.0/quantark/asset/fx/engine/mc/fx_range_accrual_mc_engine.py +343 -0
  69. quantark-0.2.0/quantark/asset/fx/engine/mc/fx_sharkfin_mc_engine.py +122 -0
  70. quantark-0.2.0/quantark/asset/fx/engine/mc/fx_tarf_mc_engine.py +180 -0
  71. quantark-0.2.0/quantark/asset/fx/engine/mc/fx_tarn_note_mc_engine.py +188 -0
  72. quantark-0.2.0/quantark/asset/fx/engine/mc/heston_mc_engine.py +75 -0
  73. quantark-0.2.0/quantark/asset/fx/engine/mc/heston_slv_mc_engine.py +87 -0
  74. quantark-0.2.0/quantark/asset/fx/engine/mc/local_vol_mc_engine.py +77 -0
  75. quantark-0.2.0/quantark/asset/fx/engine/pde/__init__.py +7 -0
  76. quantark-0.2.0/quantark/asset/fx/engine/pde/heston_pde_solver.py +111 -0
  77. quantark-0.2.0/quantark/asset/fx/engine/pde/heston_slv_pde_solver.py +109 -0
  78. quantark-0.2.0/quantark/asset/fx/engine/pde/local_vol_pde_solver.py +78 -0
  79. quantark-0.2.0/quantark/asset/fx/process/__init__.py +7 -0
  80. quantark-0.2.0/quantark/asset/fx/process/fx_gk_path_generator.py +141 -0
  81. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/__init__.py +10 -0
  82. quantark-0.2.0/quantark/asset/fx/product/option/__init__.py +36 -0
  83. quantark-0.2.0/quantark/asset/fx/product/option/fx_barrier_option.py +121 -0
  84. quantark-0.2.0/quantark/asset/fx/product/option/fx_foreign_range_accrual_option.py +70 -0
  85. quantark-0.2.0/quantark/asset/fx/product/option/fx_one_touch_option.py +71 -0
  86. quantark-0.2.0/quantark/asset/fx/product/option/fx_quanto_range_accrual_option.py +99 -0
  87. quantark-0.2.0/quantark/asset/fx/product/option/fx_range_accrual_config.py +258 -0
  88. quantark-0.2.0/quantark/asset/fx/product/option/fx_range_accrual_option.py +318 -0
  89. quantark-0.2.0/quantark/asset/fx/product/option/fx_sharkfin_option.py +152 -0
  90. quantark-0.2.0/quantark/asset/fx/product/option/fx_target_redemption_forward.py +145 -0
  91. quantark-0.2.0/quantark/asset/fx/product/option/fx_target_redemption_note.py +198 -0
  92. quantark-0.2.0/quantark/asset/fx/riskmeasures/__init__.py +7 -0
  93. quantark-0.2.0/quantark/asset/fx/riskmeasures/vol_model_risk.py +23 -0
  94. quantark-0.2.0/quantark/asset/vol_model_risk.py +608 -0
  95. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/engine.py +22 -9
  96. quantark-0.2.0/quantark/montecarlo/__init__.py +47 -0
  97. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/__init__.py +2 -1
  98. quantark-0.2.0/quantark/param/vol/__init__.py +21 -0
  99. quantark-0.2.0/quantark/param/vol/sabr/__init__.py +29 -0
  100. quantark-0.2.0/quantark/param/vol/sabr/calibration.py +290 -0
  101. quantark-0.2.0/quantark/param/vol/sabr/hagan.py +292 -0
  102. quantark-0.2.0/quantark/param/vol/sabr/sabr_surface.py +179 -0
  103. quantark-0.2.0/quantark/param/vol/vannavolga/__init__.py +55 -0
  104. quantark-0.2.0/quantark/param/vol/vannavolga/bs_fx.py +153 -0
  105. quantark-0.2.0/quantark/param/vol/vannavolga/market_conventions.py +222 -0
  106. quantark-0.2.0/quantark/param/vol/vannavolga/smile_builder.py +146 -0
  107. quantark-0.2.0/quantark/param/vol/vannavolga/vv_core.py +142 -0
  108. quantark-0.2.0/quantark/param/vol/vannavolga/vv_surface.py +177 -0
  109. quantark-0.2.0/quantark/param/vol/vannavolga/vv_term_structure.py +201 -0
  110. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/vol/vol_surface.py +68 -0
  111. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/__init__.py +2 -0
  112. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/equity/__init__.py +2 -0
  113. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/equity/portfolio.py +48 -1
  114. quantark-0.2.0/quantark/portfolio/equity/swap_position.py +366 -0
  115. quantark-0.2.0/quantark/saccr/__init__.py +46 -0
  116. quantark-0.2.0/quantark/saccr/calculator.py +144 -0
  117. quantark-0.2.0/quantark/saccr/dashboard.py +509 -0
  118. quantark-0.2.0/quantark/saccr/engines/__init__.py +1 -0
  119. quantark-0.2.0/quantark/saccr/engines/addons/__init__.py +17 -0
  120. quantark-0.2.0/quantark/saccr/engines/addons/base.py +55 -0
  121. quantark-0.2.0/quantark/saccr/engines/addons/commodity.py +116 -0
  122. quantark-0.2.0/quantark/saccr/engines/addons/credit.py +108 -0
  123. quantark-0.2.0/quantark/saccr/engines/addons/equity.py +97 -0
  124. quantark-0.2.0/quantark/saccr/engines/addons/fx.py +87 -0
  125. quantark-0.2.0/quantark/saccr/engines/addons/interest_rate.py +120 -0
  126. quantark-0.2.0/quantark/saccr/engines/maths.py +188 -0
  127. quantark-0.2.0/quantark/saccr/engines/pfe.py +38 -0
  128. quantark-0.2.0/quantark/saccr/engines/replacement_cost.py +26 -0
  129. quantark-0.2.0/quantark/saccr/models/__init__.py +27 -0
  130. quantark-0.2.0/quantark/saccr/models/enums.py +113 -0
  131. quantark-0.2.0/quantark/saccr/models/netting_set.py +115 -0
  132. quantark-0.2.0/quantark/saccr/models/trade.py +194 -0
  133. quantark-0.2.0/quantark/saccr/parameters/__init__.py +5 -0
  134. quantark-0.2.0/quantark/saccr/parameters/supervisory.py +215 -0
  135. quantark-0.2.0/quantark/saccr/results/__init__.py +5 -0
  136. quantark-0.2.0/quantark/saccr/results/result.py +50 -0
  137. quantark-0.2.0/quantark/sacva/__init__.py +45 -0
  138. quantark-0.2.0/quantark/sacva/calculator.py +80 -0
  139. quantark-0.2.0/quantark/sacva/cva/__init__.py +5 -0
  140. quantark-0.2.0/quantark/sacva/cva/engine.py +47 -0
  141. quantark-0.2.0/quantark/sacva/dashboard.py +129 -0
  142. quantark-0.2.0/quantark/sacva/engines/__init__.py +0 -0
  143. quantark-0.2.0/quantark/sacva/engines/base.py +155 -0
  144. quantark-0.2.0/quantark/sacva/engines/commodity.py +37 -0
  145. quantark-0.2.0/quantark/sacva/engines/correlations.py +33 -0
  146. quantark-0.2.0/quantark/sacva/engines/counterparty_credit.py +45 -0
  147. quantark-0.2.0/quantark/sacva/engines/equity.py +37 -0
  148. quantark-0.2.0/quantark/sacva/engines/fx.py +36 -0
  149. quantark-0.2.0/quantark/sacva/engines/interest_rate.py +71 -0
  150. quantark-0.2.0/quantark/sacva/engines/reference_credit.py +40 -0
  151. quantark-0.2.0/quantark/sacva/exposure/__init__.py +6 -0
  152. quantark-0.2.0/quantark/sacva/exposure/asof.py +51 -0
  153. quantark-0.2.0/quantark/sacva/exposure/correlation.py +42 -0
  154. quantark-0.2.0/quantark/sacva/exposure/curves.py +85 -0
  155. quantark-0.2.0/quantark/sacva/exposure/engine.py +160 -0
  156. quantark-0.2.0/quantark/sacva/exposure/grid.py +54 -0
  157. quantark-0.2.0/quantark/sacva/exposure/historical/__init__.py +0 -0
  158. quantark-0.2.0/quantark/sacva/exposure/historical/calibration.py +138 -0
  159. quantark-0.2.0/quantark/sacva/exposure/historical/engine.py +192 -0
  160. quantark-0.2.0/quantark/sacva/exposure/historical/path_generator.py +140 -0
  161. quantark-0.2.0/quantark/sacva/exposure/historical/pfe.py +80 -0
  162. quantark-0.2.0/quantark/sacva/exposure/historical/resampling.py +96 -0
  163. quantark-0.2.0/quantark/sacva/exposure/paths.py +141 -0
  164. quantark-0.2.0/quantark/sacva/exposure/phoenix_surface.py +176 -0
  165. quantark-0.2.0/quantark/sacva/exposure/repricer.py +198 -0
  166. quantark-0.2.0/quantark/sacva/exposure/simulator.py +504 -0
  167. quantark-0.2.0/quantark/sacva/exposure/snowball_surface.py +282 -0
  168. quantark-0.2.0/quantark/sacva/exposure/statemachine.py +314 -0
  169. quantark-0.2.0/quantark/sacva/exposure/value_surface.py +111 -0
  170. quantark-0.2.0/quantark/sacva/models/__init__.py +0 -0
  171. quantark-0.2.0/quantark/sacva/models/enums.py +31 -0
  172. quantark-0.2.0/quantark/sacva/models/portfolio.py +27 -0
  173. quantark-0.2.0/quantark/sacva/models/sensitivity.py +124 -0
  174. quantark-0.2.0/quantark/sacva/parameters/__init__.py +0 -0
  175. quantark-0.2.0/quantark/sacva/parameters/supervisory.py +250 -0
  176. quantark-0.2.0/quantark/sacva/portfolio/__init__.py +14 -0
  177. quantark-0.2.0/quantark/sacva/portfolio/counterparty.py +38 -0
  178. quantark-0.2.0/quantark/sacva/portfolio/credit_curve.py +59 -0
  179. quantark-0.2.0/quantark/sacva/portfolio/netting.py +36 -0
  180. quantark-0.2.0/quantark/sacva/portfolio/trade.py +66 -0
  181. quantark-0.2.0/quantark/sacva/portfolio/trade_portfolio.py +29 -0
  182. quantark-0.2.0/quantark/sacva/results/__init__.py +0 -0
  183. quantark-0.2.0/quantark/sacva/results/result.py +26 -0
  184. quantark-0.2.0/quantark/sacva/sacva_engine.py +336 -0
  185. quantark-0.2.0/quantark/sacva/sensitivities/__init__.py +1 -0
  186. quantark-0.2.0/quantark/sacva/sensitivities/curve_bump.py +63 -0
  187. quantark-0.2.0/quantark/sacva/sensitivities/engine.py +53 -0
  188. quantark-0.2.0/quantark/sacva/sensitivities/shifts.py +46 -0
  189. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/dashboard.py +1 -1
  190. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/business_calendar.py +160 -0
  191. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/__init__.py +14 -1
  192. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/engine_enums.py +66 -0
  193. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/fx_enums.py +14 -0
  194. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/option_enums.py +19 -0
  195. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/historical.py +9 -6
  196. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/monte_carlo.py +8 -6
  197. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/parametric.py +51 -71
  198. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/revaluation.py +18 -0
  199. quantark-0.2.0/quantark/volmodels/__init__.py +7 -0
  200. quantark-0.2.0/quantark/volmodels/black_scholes.py +87 -0
  201. quantark-0.2.0/quantark/volmodels/curves.py +61 -0
  202. quantark-0.2.0/quantark/volmodels/heston/__init__.py +28 -0
  203. quantark-0.2.0/quantark/volmodels/heston/analytical_kernel.py +184 -0
  204. quantark-0.2.0/quantark/volmodels/heston/calibration.py +162 -0
  205. quantark-0.2.0/quantark/volmodels/heston/mc_kernel.py +201 -0
  206. quantark-0.2.0/quantark/volmodels/heston/params.py +47 -0
  207. quantark-0.2.0/quantark/volmodels/heston/pde_kernel.py +395 -0
  208. quantark-0.2.0/quantark/volmodels/localvol/__init__.py +13 -0
  209. quantark-0.2.0/quantark/volmodels/localvol/dupire.py +181 -0
  210. quantark-0.2.0/quantark/volmodels/localvol/mc_kernel.py +95 -0
  211. quantark-0.2.0/quantark/volmodels/localvol/pde_kernel.py +153 -0
  212. quantark-0.2.0/quantark/volmodels/localvol/surface.py +85 -0
  213. quantark-0.2.0/quantark/volmodels/risk/__init__.py +40 -0
  214. quantark-0.2.0/quantark/volmodels/risk/contracts.py +370 -0
  215. quantark-0.2.0/quantark/volmodels/risk/scenarios.py +141 -0
  216. quantark-0.2.0/quantark/volmodels/slv/__init__.py +17 -0
  217. quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/__init__.py +5 -0
  218. quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/bootstrap.py +68 -0
  219. quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/calibration.py +107 -0
  220. quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/config.py +59 -0
  221. quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/coordinates.py +88 -0
  222. quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/fp_operators.py +136 -0
  223. quantark-0.2.0/quantark/volmodels/slv/fokkerplanck/fp_solver.py +108 -0
  224. quantark-0.2.0/quantark/volmodels/slv/leverage.py +149 -0
  225. quantark-0.2.0/quantark/volmodels/slv/slv_mc_kernel.py +216 -0
  226. quantark-0.2.0/quantark/volmodels/slv/slv_pde_kernel.py +281 -0
  227. quantark-0.1.2/quantark/asset/equity/riskmeasures/__init__.py +0 -7
  228. quantark-0.1.2/quantark/asset/fx/engine/__init__.py +0 -6
  229. quantark-0.1.2/quantark/asset/fx/engine/analytical/__init__.py +0 -16
  230. quantark-0.1.2/quantark/asset/fx/process/__init__.py +0 -6
  231. quantark-0.1.2/quantark/asset/fx/product/option/__init__.py +0 -14
  232. quantark-0.1.2/quantark/asset/fx/riskmeasures/__init__.py +0 -6
  233. quantark-0.1.2/quantark/param/vol/__init__.py +0 -6
  234. {quantark-0.1.2 → quantark-0.2.0}/.gitignore +0 -0
  235. {quantark-0.1.2 → quantark-0.2.0}/CHANGELOG.md +0 -0
  236. {quantark-0.1.2 → quantark-0.2.0}/LICENSE +0 -0
  237. {quantark-0.1.2 → quantark-0.2.0}/NOTICE +0 -0
  238. {quantark-0.1.2 → quantark-0.2.0}/README.md +0 -0
  239. {quantark-0.1.2 → quantark-0.2.0}/quantark/_compat.py +0 -0
  240. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/__init__.py +0 -0
  241. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/__init__.py +0 -0
  242. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/__init__.py +0 -0
  243. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/__init__.py +0 -0
  244. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/black_engine.py +0 -0
  245. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/bond_forward_engine.py +0 -0
  246. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/analytical/bond_futures_engine.py +0 -0
  247. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/convertible/__init__.py +0 -0
  248. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/convertible/convertible_bond_engine.py +0 -0
  249. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/discount/__init__.py +0 -0
  250. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/discount/bond_discount_engine.py +0 -0
  251. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/discount/frn_engine.py +0 -0
  252. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/__init__.py +0 -0
  253. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/__init__.py +0 -0
  254. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/jump_diffusion_engine.py +0 -0
  255. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/pde_params.py +0 -0
  256. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/pde/convertible/tf_engine.py +0 -0
  257. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/__init__.py +0 -0
  258. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/__init__.py +0 -0
  259. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/binomial_engine.py +0 -0
  260. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/tree_params.py +0 -0
  261. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/engine/tree/convertible/trinomial_engine.py +0 -0
  262. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/__init__.py +0 -0
  263. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/base_bond_product.py +0 -0
  264. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/convertible/__init__.py +0 -0
  265. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/convertible/convertible_bond.py +0 -0
  266. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/couponbond/__init__.py +0 -0
  267. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/couponbond/fixed_bond.py +0 -0
  268. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/couponbond/frn.py +0 -0
  269. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/forward/__init__.py +0 -0
  270. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/forward/base_bond_forward.py +0 -0
  271. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/forward/bond_forward.py +0 -0
  272. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/futures/__init__.py +0 -0
  273. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/futures/bond_futures.py +0 -0
  274. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/option/__init__.py +0 -0
  275. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/product/option/euro_short_term_bond_option.py +0 -0
  276. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/riskmeasures/__init__.py +0 -0
  277. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/riskmeasures/bond_greeks_calculator.py +0 -0
  278. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/schedule/__init__.py +0 -0
  279. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/bond/schedule/cashflow.py +0 -0
  280. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/__init__.py +0 -0
  281. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/conventions.py +0 -0
  282. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/__init__.py +0 -0
  283. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/analytical/__init__.py +0 -0
  284. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/analytical/reduced_form.py +0 -0
  285. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/base_credit_engine.py +0 -0
  286. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/mc/__init__.py +0 -0
  287. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/mc/basket_copula.py +0 -0
  288. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/engine/schedule.py +0 -0
  289. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/__init__.py +0 -0
  290. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/base_credit_product.py +0 -0
  291. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/basket_cds.py +0 -0
  292. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/product/cds.py +0 -0
  293. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/riskmeasures/__init__.py +0 -0
  294. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/credit/riskmeasures/credit_greeks_calculator.py +0 -0
  295. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/__init__.py +0 -0
  296. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/analysis/__init__.py +0 -0
  297. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/analysis/autocallable_path_analyzer.py +0 -0
  298. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/american_option_engine.py +0 -0
  299. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/barrier_analytical_engine.py +0 -0
  300. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/black_scholes_engine.py +0 -0
  301. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/deltaone_engine.py +0 -0
  302. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/digital_option_engine.py +0 -0
  303. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/double_barrier_option_engine.py +0 -0
  304. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/double_sharkfin_option_analytical_engine.py +0 -0
  305. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/one_touch_analytical_engine.py +0 -0
  306. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/range_accrual_analytical_engine.py +0 -0
  307. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/analytical/single_sharkfin_option_analytical_engine.py +0 -0
  308. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/base_engine.py +0 -0
  309. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/event_stats.py +0 -0
  310. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/american_option_mc_engine.py +0 -0
  311. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/barrier_option_mc_engine.py +0 -0
  312. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/digital_option_mc_engine.py +0 -0
  313. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/double_sharkfin_option_mc_engine.py +0 -0
  314. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/euro_mc_engine.py +0 -0
  315. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/phoenix_mc_engine.py +0 -0
  316. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/range_accrual_mc_engine.py +0 -0
  317. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/single_sharkfin_option_mc_engine.py +0 -0
  318. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/mc/snowball_mc_engine.py +0 -0
  319. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/american_pde_solver.py +0 -0
  320. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/barrier_pde_solver.py +0 -0
  321. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/base_pde_solver.py +0 -0
  322. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/double_barrier_pde_solver.py +0 -0
  323. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/double_one_touch_pde_solver.py +0 -0
  324. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/european_pde_solver.py +0 -0
  325. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/ko_reset_snowball_pde_solver.py +0 -0
  326. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/one_touch_pde_solver.py +0 -0
  327. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/phoenix_pde_solver.py +0 -0
  328. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/snowball_pde_solver.py +0 -0
  329. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/spatial_grid.py +0 -0
  330. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde/time_grid.py +0 -0
  331. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/pde_engine.py +0 -0
  332. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/__init__.py +0 -0
  333. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/discrete_quad_engine.py +0 -0
  334. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/european_quad_engine.py +0 -0
  335. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/quad_adapters.py +0 -0
  336. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/quad_core.py +0 -0
  337. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/quad/quad_math.py +0 -0
  338. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_american_analytical.py +0 -0
  339. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_american_pde.py +0 -0
  340. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_asian_analytical.py +0 -0
  341. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_analytical.py +0 -0
  342. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_barrier_pde_solver.py +0 -0
  343. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_digital_option.py +0 -0
  344. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/benchmark_check_snowball_pde_solver.py +0 -0
  345. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_american_analytical.py +0 -0
  346. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_american_pde.py +0 -0
  347. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_asian_analytical.py +0 -0
  348. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_analytical.py +0 -0
  349. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_barrier_pde_solver.py +0 -0
  350. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_digital_option.py +0 -0
  351. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/boundary_check_snowball_pde_solver.py +0 -0
  352. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/greeks_check_digital_option.py +0 -0
  353. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/mc_comparison_barrier_pde.py +0 -0
  354. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/quick_mc_compare.py +0 -0
  355. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/engine/validation/script/validation_stepdown_improved.py +0 -0
  356. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/__init__.py +0 -0
  357. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/autocallable.py +0 -0
  358. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/barrier.py +0 -0
  359. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/events.py +0 -0
  360. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/manager.py +0 -0
  361. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/lifecycle/state.py +0 -0
  362. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/param/__init__.py +0 -0
  363. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/param/engine_param_profiles.py +0 -0
  364. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/param/engine_params.py +0 -0
  365. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/__init__.py +0 -0
  366. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/bsm/__init__.py +0 -0
  367. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/bsm/bsm_process.py +0 -0
  368. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/process/bsm/qmc_path_generator.py +0 -0
  369. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/__init__.py +0 -0
  370. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/base_equity_product.py +0 -0
  371. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/__init__.py +0 -0
  372. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/base_deltaone_product.py +0 -0
  373. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/futures.py +0 -0
  374. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/deltaone/spot_instrument.py +0 -0
  375. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/american_option.py +0 -0
  376. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/barrier_option.py +0 -0
  377. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/base_equity_option.py +0 -0
  378. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/digital_option.py +0 -0
  379. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/double_barrier_option.py +0 -0
  380. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/double_one_touch_option.py +0 -0
  381. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/double_sharkfin_option.py +0 -0
  382. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/european_vanilla_option.py +0 -0
  383. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/ko_reset_snowball_option.py +0 -0
  384. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/observation_schedule.py +0 -0
  385. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/one_touch_option.py +0 -0
  386. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/phoenix_config.py +0 -0
  387. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/phoenix_helpers.py +0 -0
  388. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/phoenix_option.py +0 -0
  389. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/range_accrual_config.py +0 -0
  390. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/range_accrual_helpers.py +0 -0
  391. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/range_accrual_option.py +0 -0
  392. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/single_sharkfin_option.py +0 -0
  393. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/snowball_config.py +0 -0
  394. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/product/option/snowball_option.py +0 -0
  395. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/__init__.py +0 -0
  396. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/autocallable_risk_report.py +0 -0
  397. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/plotting.py +0 -0
  398. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/snowball_risk_comparison_report.py +0 -0
  399. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/surfaces.py +0 -0
  400. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/report/term_structure.py +0 -0
  401. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/equity/riskmeasures/greeks_calculator.py +0 -0
  402. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/__init__.py +0 -0
  403. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_deltaone_engine.py +0 -0
  404. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_quanto_digital_engine.py +0 -0
  405. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/engine/analytical/fx_quanto_vanilla_engine.py +0 -0
  406. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/process/garman_kohlhagen_process.py +0 -0
  407. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/base_fx_product.py +0 -0
  408. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/currency_pair.py +0 -0
  409. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/__init__.py +0 -0
  410. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/base_fx_deltaone.py +0 -0
  411. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/fx_forward.py +0 -0
  412. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/fx_spot.py +0 -0
  413. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/deltaone/fx_swap.py +0 -0
  414. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_digital_option.py +0 -0
  415. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_quanto_digital_option.py +0 -0
  416. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_quanto_vanilla_option.py +0 -0
  417. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/product/option/fx_vanilla_option.py +0 -0
  418. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/report/__init__.py +0 -0
  419. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/report/fx_report.py +0 -0
  420. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/fx/riskmeasures/fx_greeks_calculator.py +0 -0
  421. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/__init__.py +0 -0
  422. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/__init__.py +0 -0
  423. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/cap_floor_engine.py +0 -0
  424. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/fra_engine.py +0 -0
  425. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/irs_discount_engine.py +0 -0
  426. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/engine/swaption_engine.py +0 -0
  427. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/__init__.py +0 -0
  428. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/cap_floor.py +0 -0
  429. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/fra.py +0 -0
  430. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/irs.py +0 -0
  431. {quantark-0.1.2 → quantark-0.2.0}/quantark/asset/rate/product/swaption.py +0 -0
  432. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/__init__.py +0 -0
  433. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/base.py +0 -0
  434. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/__init__.py +0 -0
  435. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/config.py +0 -0
  436. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/engine.py +0 -0
  437. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/credit/results.py +0 -0
  438. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/dashboard.py +0 -0
  439. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/__init__.py +0 -0
  440. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/config.py +0 -0
  441. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/hedge_executor.py +0 -0
  442. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/metrics.py +0 -0
  443. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/multi_hedge_executor.py +0 -0
  444. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/results.py +0 -0
  445. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/equity/state.py +0 -0
  446. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/__init__.py +0 -0
  447. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/advanced_backtest.py +0 -0
  448. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/basic_delta_hedge.py +0 -0
  449. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/examples/fi_dv01_hedge.py +0 -0
  450. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/__init__.py +0 -0
  451. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/config.py +0 -0
  452. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/engine.py +0 -0
  453. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/hedge_executor.py +0 -0
  454. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/metrics.py +0 -0
  455. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/results.py +0 -0
  456. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fi/state.py +0 -0
  457. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/__init__.py +0 -0
  458. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/config.py +0 -0
  459. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/engine.py +0 -0
  460. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/fx/results.py +0 -0
  461. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/logger.py +0 -0
  462. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/__init__.py +0 -0
  463. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/_replay.py +0 -0
  464. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/book_engine.py +0 -0
  465. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/config.py +0 -0
  466. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/dashboard.py +0 -0
  467. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/engine.py +0 -0
  468. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/engine_factory.py +0 -0
  469. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/market.py +0 -0
  470. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/results.py +0 -0
  471. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/otc/state.py +0 -0
  472. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/report_generator.py +0 -0
  473. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/__init__.py +0 -0
  474. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/barrier_trigger_strategy.py +0 -0
  475. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/base_strategy.py +0 -0
  476. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/convexity_neutral_strategy.py +0 -0
  477. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/credit_spread_neutral_strategy.py +0 -0
  478. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/delta_neutral_strategy.py +0 -0
  479. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/dv01_neutral_strategy.py +0 -0
  480. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/fx_delta_neutral_strategy.py +0 -0
  481. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/hedge_instruments.py +0 -0
  482. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/hedge_optimizer.py +0 -0
  483. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/min_variance_delta_strategy.py +0 -0
  484. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/multi_greek_strategy.py +0 -0
  485. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/scenario_hedge_strategy.py +0 -0
  486. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/scenarios.py +0 -0
  487. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/semi_static_strategy.py +0 -0
  488. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/triggered_hedge_strategy.py +0 -0
  489. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/strategy/whalley_wilmott_strategy.py +0 -0
  490. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/transaction_costs.py +0 -0
  491. {quantark-0.1.2 → quantark-0.2.0}/quantark/backtest/visualizer.py +0 -0
  492. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/__init__.py +0 -0
  493. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/accrual_leg.py +0 -0
  494. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/base.py +0 -0
  495. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/base_amount.py +0 -0
  496. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/deterministic_leg.py +0 -0
  497. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/event_distribution.py +0 -0
  498. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/fixed_payoff_leg.py +0 -0
  499. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/leg_schedule.py +0 -0
  500. {quantark-0.1.2 → quantark-0.2.0}/quantark/cashleg/leg_valuator.py +0 -0
  501. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/__init__.py +0 -0
  502. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/base.py +0 -0
  503. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/config.py +0 -0
  504. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/__init__.py +0 -0
  505. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/config.py +0 -0
  506. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/engine.py +0 -0
  507. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/credit/path_library.py +0 -0
  508. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/engine.py +0 -0
  509. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/equity/__init__.py +0 -0
  510. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/__init__.py +0 -0
  511. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/config.py +0 -0
  512. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/engine.py +0 -0
  513. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fi/results.py +0 -0
  514. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/__init__.py +0 -0
  515. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/config.py +0 -0
  516. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/engine.py +0 -0
  517. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/fx/path_library.py +0 -0
  518. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/lifecycle_manager.py +0 -0
  519. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/__init__.py +0 -0
  520. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/day_path.py +0 -0
  521. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/fi_path_library.py +0 -0
  522. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/path_builder.py +0 -0
  523. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/path/path_library.py +0 -0
  524. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/report/__init__.py +0 -0
  525. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/report/dynamic_report.py +0 -0
  526. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/report/visualizer.py +0 -0
  527. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/results/__init__.py +0 -0
  528. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/results/dynamic_results.py +0 -0
  529. {quantark-0.1.2 → quantark-0.2.0}/quantark/dynamicscenario/results/result_exporter.py +0 -0
  530. {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_brownian_bridge.py +0 -0
  531. {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_rqmc_driver.py +0 -0
  532. {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_sobol.py +0 -0
  533. {quantark-0.1.2/quantark/asset/equity/process/bsm → quantark-0.2.0/quantark/montecarlo}/qmc_variance_reduction.py +0 -0
  534. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/basis/__init__.py +0 -0
  535. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/basis/basis_yield.py +0 -0
  536. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/credit/__init__.py +0 -0
  537. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/credit/ajd_hazard_curve.py +0 -0
  538. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/credit/hazard_curve.py +0 -0
  539. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/div/__init__.py +0 -0
  540. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/div/dividend_yield.py +0 -0
  541. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/index/__init__.py +0 -0
  542. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/index/rate_index.py +0 -0
  543. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/quote/__init__.py +0 -0
  544. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/quote/spot_quote.py +0 -0
  545. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/rrf/__init__.py +0 -0
  546. {quantark-0.1.2 → quantark-0.2.0}/quantark/param/rrf/rate_curve.py +0 -0
  547. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/base.py +0 -0
  548. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/credit/__init__.py +0 -0
  549. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/credit/portfolio.py +0 -0
  550. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/credit/position.py +0 -0
  551. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/equity/position.py +0 -0
  552. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fi/__init__.py +0 -0
  553. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fi/portfolio.py +0 -0
  554. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fi/position.py +0 -0
  555. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fx/__init__.py +0 -0
  556. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fx/portfolio.py +0 -0
  557. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/fx/position.py +0 -0
  558. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/portfolio_snapshot.py +0 -0
  559. {quantark-0.1.2 → quantark-0.2.0}/quantark/portfolio/portfolio_storage.py +0 -0
  560. {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/__init__.py +0 -0
  561. {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/credit_pricing_environment.py +0 -0
  562. {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/fx_pricing_environment.py +0 -0
  563. {quantark-0.1.2 → quantark-0.2.0}/quantark/priceenv/pricing_environment.py +0 -0
  564. {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/__init__.py +0 -0
  565. {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/builders.py +0 -0
  566. {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/models.py +0 -0
  567. {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/registry.py +0 -0
  568. {quantark-0.1.2 → quantark-0.2.0}/quantark/rfq/service.py +0 -0
  569. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/__init__.py +0 -0
  570. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/__init__.py +0 -0
  571. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/accessors.py +0 -0
  572. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/commodity.py +0 -0
  573. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/credit_non_qualifying.py +0 -0
  574. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/credit_qualifying.py +0 -0
  575. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/cross_risk.py +0 -0
  576. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/equity.py +0 -0
  577. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/fx.py +0 -0
  578. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/ir.py +0 -0
  579. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/calibration/version.py +0 -0
  580. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/config.py +0 -0
  581. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/crif/__init__.py +0 -0
  582. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/crif/models.py +0 -0
  583. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/crif/parser.py +0 -0
  584. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/__init__.py +0 -0
  585. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/__init__.py +0 -0
  586. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/addon.py +0 -0
  587. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/bucket_aggregator.py +0 -0
  588. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/concentration.py +0 -0
  589. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/correlations.py +0 -0
  590. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/product_class_aggregator.py +0 -0
  591. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/risk_class_aggregator.py +0 -0
  592. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/simm_calculator.py +0 -0
  593. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/aggregation/weighted_sensitivity.py +0 -0
  594. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/base.py +0 -0
  595. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/classification/__init__.py +0 -0
  596. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/classification/bucket_mapper.py +0 -0
  597. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/factory.py +0 -0
  598. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/portfolio_adapter.py +0 -0
  599. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/result.py +0 -0
  600. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/__init__.py +0 -0
  601. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/equity_engine.py +0 -0
  602. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/ir_engine.py +0 -0
  603. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/engines/risk_class/provider_engine.py +0 -0
  604. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/market_data.py +0 -0
  605. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/__init__.py +0 -0
  606. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/crif_export.py +0 -0
  607. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/excel_generator.py +0 -0
  608. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/report/html_generator.py +0 -0
  609. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/__init__.py +0 -0
  610. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/attribution.py +0 -0
  611. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/simm_result.py +0 -0
  612. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/results/whatif.py +0 -0
  613. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/sensitivity.py +0 -0
  614. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/taxonomy.py +0 -0
  615. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/template/__init__.py +0 -0
  616. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/template/xlsx_loader.py +0 -0
  617. {quantark-0.1.2 → quantark-0.2.0}/quantark/simm/template/xlsx_template.py +0 -0
  618. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/__init__.py +0 -0
  619. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/base.py +0 -0
  620. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/config.py +0 -0
  621. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/__init__.py +0 -0
  622. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/config.py +0 -0
  623. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/credit_stress_applicator.py +0 -0
  624. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/credit/engine.py +0 -0
  625. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/engine.py +0 -0
  626. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/__init__.py +0 -0
  627. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/config.py +0 -0
  628. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/engine.py +0 -0
  629. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/report/__init__.py +0 -0
  630. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/report/report_generator.py +0 -0
  631. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/report/visualizer.py +0 -0
  632. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/equity/results.py +0 -0
  633. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/__init__.py +0 -0
  634. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/config.py +0 -0
  635. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/engine.py +0 -0
  636. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/metrics.py +0 -0
  637. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fi/results.py +0 -0
  638. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/__init__.py +0 -0
  639. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/config.py +0 -0
  640. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/engine.py +0 -0
  641. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/fx/fx_stress_applicator.py +0 -0
  642. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/report/__init__.py +0 -0
  643. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/report/report_generator.py +0 -0
  644. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/report/visualizer.py +0 -0
  645. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/__init__.py +0 -0
  646. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/result_aggregator.py +0 -0
  647. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/result_exporter.py +0 -0
  648. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/results/stress_results.py +0 -0
  649. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/__init__.py +0 -0
  650. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario.py +0 -0
  651. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario_builder.py +0 -0
  652. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario_library.py +0 -0
  653. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/scenario/scenario_storage.py +0 -0
  654. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/stress/__init__.py +0 -0
  655. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/stress/stress_applicator.py +0 -0
  656. {quantark-0.1.2 → quantark-0.2.0}/quantark/stresstest/stress/stress_types.py +0 -0
  657. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/__init__.py +0 -0
  658. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/barrier_shift.py +0 -0
  659. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/__init__.py +0 -0
  660. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/day_counter.py +0 -0
  661. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/holidayfile/china.csv +0 -0
  662. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/calendar/holidayfile/china_sse.csv +0 -0
  663. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/bond_enums.py +0 -0
  664. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/deltaone_enums.py +0 -0
  665. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/enum/greeks_enums.py +0 -0
  666. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/exceptions.py +0 -0
  667. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/__init__.py +0 -0
  668. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/adapter/base_adapter.py +0 -0
  669. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/adapter/mock_adapter.py +0 -0
  670. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/converter.py +0 -0
  671. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/example_usage.py +0 -0
  672. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/generator/__init__.py +0 -0
  673. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/generator/mock_generator.py +0 -0
  674. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/models.py +0 -0
  675. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/storage/__init__.py +0 -0
  676. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/marketdata/storage/parquet_storage.py +0 -0
  677. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/__init__.py +0 -0
  678. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/comparison.py +0 -0
  679. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/constants.py +0 -0
  680. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/formatting.py +0 -0
  681. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/pnl.py +0 -0
  682. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/safe_math.py +0 -0
  683. {quantark-0.1.2 → quantark-0.2.0}/quantark/util/numerical/validation.py +0 -0
  684. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/__init__.py +0 -0
  685. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/attribution.py +0 -0
  686. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/backtest/__init__.py +0 -0
  687. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/backtest/var_backtester.py +0 -0
  688. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/base.py +0 -0
  689. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/config.py +0 -0
  690. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/__init__.py +0 -0
  691. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/config.py +0 -0
  692. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/engine.py +0 -0
  693. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/credit/revaluation.py +0 -0
  694. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/engines/__init__.py +0 -0
  695. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/__init__.py +0 -0
  696. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/config.py +0 -0
  697. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/fx/engine.py +0 -0
  698. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/__init__.py +0 -0
  699. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/incremental_var_result.py +0 -0
  700. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/var_report.py +0 -0
  701. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/results/var_result.py +0 -0
  702. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/__init__.py +0 -0
  703. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/base.py +0 -0
  704. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/equity_factors.py +0 -0
  705. {quantark-0.1.2 → quantark-0.2.0}/quantark/var/risk_factors/fi_factors.py +0 -0
  706. {quantark-0.1.2 → quantark-0.2.0}/quantark_compat.pth +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quantark
3
- Version: 0.1.2
3
+ Version: 0.2.0
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.1.2"
7
+ version = "0.2.0"
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.1.2"
3
+ __version__ = "0.2.0"
@@ -9,6 +9,7 @@ from .analytical import (
9
9
  OneTouchAnalyticalEngine,
10
10
  AsianOptionAnalyticalEngine,
11
11
  DoubleSharkfinOptionAnalyticalEngine,
12
+ HestonAnalyticalEngine,
12
13
  )
13
14
  from .pde_engine import PDEEngine
14
15
  from .mc import (
@@ -19,6 +20,9 @@ from .mc import (
19
20
  DigitalOptionMCEngine,
20
21
  BarrierOptionMCEngine,
21
22
  DoubleSharkfinOptionMCEngine,
23
+ LocalVolMCEngine,
24
+ HestonMCEngine,
25
+ HestonSLVMCEngine,
22
26
  )
23
27
  from .pde import (
24
28
  BasePDESolver,
@@ -30,6 +34,9 @@ from .pde import (
30
34
  DoubleOneTouchPDESolver,
31
35
  KOResetSnowballPDESolver,
32
36
  PhoenixPDESolver,
37
+ LocalVolPDESolver,
38
+ HestonPDESolver,
39
+ HestonSLVPDESolver,
33
40
  TimeGrid,
34
41
  SpatialGrid,
35
42
  )
@@ -51,6 +58,7 @@ __all__ = [
51
58
  "OneTouchAnalyticalEngine",
52
59
  "AsianOptionAnalyticalEngine",
53
60
  "DoubleSharkfinOptionAnalyticalEngine",
61
+ "HestonAnalyticalEngine",
54
62
  # Monte Carlo
55
63
  "EuropeanMCEngine",
56
64
  "AmericanOptionMCEngine",
@@ -59,6 +67,9 @@ __all__ = [
59
67
  "DigitalOptionMCEngine",
60
68
  "BarrierOptionMCEngine",
61
69
  "DoubleSharkfinOptionMCEngine",
70
+ "LocalVolMCEngine",
71
+ "HestonMCEngine",
72
+ "HestonSLVMCEngine",
62
73
  # Unified PDE Engine
63
74
  "PDEEngine",
64
75
  # PDE Solvers
@@ -71,6 +82,9 @@ __all__ = [
71
82
  "DoubleOneTouchPDESolver",
72
83
  "KOResetSnowballPDESolver",
73
84
  "PhoenixPDESolver",
85
+ "LocalVolPDESolver",
86
+ "HestonPDESolver",
87
+ "HestonSLVPDESolver",
74
88
  # Grid utilities
75
89
  "TimeGrid",
76
90
  "SpatialGrid",
@@ -20,8 +20,11 @@ from .range_accrual_analytical_engine import (
20
20
  RangeAccrualAnalyticalEngine,
21
21
  RangeAccrualAnalyticalResult,
22
22
  )
23
+ from .accumulator_analytical_engine import AccumulatorAnalyticalEngine
24
+ from .heston_analytical_engine import HestonAnalyticalEngine
23
25
 
24
26
  __all__ = [
27
+ "HestonAnalyticalEngine",
25
28
  "BlackScholesEngine",
26
29
  "DeltaOneEngine",
27
30
  "AmericanOptionAnalyticalEngine",
@@ -34,4 +37,5 @@ __all__ = [
34
37
  "AsianOptionAnalyticalEngine",
35
38
  "RangeAccrualAnalyticalEngine",
36
39
  "RangeAccrualAnalyticalResult",
40
+ "AccumulatorAnalyticalEngine",
37
41
  ]
@@ -0,0 +1,363 @@
1
+ """
2
+ Analytical pricing engine for accumulator options.
3
+
4
+ The accumulator is statically replicated as a strip of up-and-out option legs,
5
+ one per observation date ``t_i``:
6
+
7
+ * a long up-and-out CALL struck at ``K`` (the linear gain leg), and
8
+ * a short, geared up-and-out PUT struck at ``K`` (the geared loss leg).
9
+
10
+ For :class:`AccumulatorKnockOutType.TERMINATION` both legs are knocked out on the
11
+ observation dates up to ``t_i`` (so a breach extinguishes all later accruals), and
12
+ an optional cash rebate is valued as a one-touch on the knock-out barrier. For
13
+ :class:`AccumulatorKnockOutType.SINGLE_DAY` only the call leg carries the barrier
14
+ (checked at ``t_i``) and the geared put leg is a plain vanilla, so a breach cancels
15
+ only that day's accrual.
16
+
17
+ Discrete daily monitoring inherits the Broadie-Glasserman-Kou barrier-shift
18
+ approximation implemented by the composed barrier and one-touch engines.
19
+ """
20
+
21
+ from typing import List, Optional
22
+
23
+ from quantark.asset.equity.engine.base_engine import BaseEngine
24
+ from quantark.asset.equity.param import EngineParams
25
+ from quantark.asset.equity.product.base_equity_product import BaseEquityProduct
26
+ from quantark.asset.equity.product.option import (
27
+ AccumulatorOption,
28
+ BarrierOption,
29
+ EuropeanVanillaOption,
30
+ OneTouchOption,
31
+ )
32
+ from quantark.priceenv import PricingEnvironment
33
+ from quantark.util.enum import (
34
+ AccumulatorKnockOutType,
35
+ BarrierDirection,
36
+ BarrierType,
37
+ ObservationType,
38
+ OptionType,
39
+ TouchType,
40
+ )
41
+ from quantark.util.enum.engine_enums import EngineType
42
+ from quantark.util.exceptions import PricingError, ValidationError
43
+ from quantark.util.numerical import (
44
+ safe_exp,
45
+ validate_non_negative,
46
+ validate_positive,
47
+ )
48
+
49
+ from .barrier_analytical_engine import BarrierAnalyticalEngine
50
+ from .black_scholes_engine import BlackScholesEngine
51
+ from .one_touch_analytical_engine import OneTouchAnalyticalEngine
52
+
53
+
54
+ class AccumulatorAnalyticalEngine(BaseEngine):
55
+ """
56
+ Closed-form decomposition engine for :class:`AccumulatorOption`.
57
+
58
+ Composes :class:`BarrierAnalyticalEngine`, :class:`BlackScholesEngine`, and
59
+ :class:`OneTouchAnalyticalEngine` to value each daily leg, the knock-out
60
+ rebate, and the optional extra-shares-at-expiry leg.
61
+ """
62
+
63
+ engine_type = EngineType.ANALYTICAL
64
+
65
+ MIN_VOL = 0.001
66
+ MAX_VOL = 5.0
67
+ MIN_MATURITY = 1e-10
68
+ MAX_MATURITY = 50.0
69
+
70
+ def __init__(self, params: Optional[EngineParams] = None):
71
+ super().__init__(params)
72
+ self._barrier_engine = BarrierAnalyticalEngine(params)
73
+ self._bs_engine = BlackScholesEngine(params)
74
+ self._one_touch_engine = OneTouchAnalyticalEngine(params)
75
+
76
+ def price(
77
+ self, product: BaseEquityProduct, pricing_env: PricingEnvironment
78
+ ) -> float:
79
+ """
80
+ Price an accumulator option analytically.
81
+
82
+ Args:
83
+ product: An :class:`AccumulatorOption` instance.
84
+ pricing_env: Market data environment.
85
+
86
+ Returns:
87
+ Present value of the accumulator.
88
+
89
+ Raises:
90
+ PricingError: If the product type is unsupported.
91
+ ValidationError: If pricing inputs are invalid.
92
+ """
93
+ if not isinstance(product, AccumulatorOption):
94
+ raise PricingError(
95
+ "AccumulatorAnalyticalEngine only supports AccumulatorOption, "
96
+ f"got {type(product).__name__}"
97
+ )
98
+
99
+ spot = pricing_env.spot
100
+ strike = product.strike
101
+ maturity = product.get_maturity(pricing_env)
102
+
103
+ if maturity < self.MIN_MATURITY:
104
+ # At expiry only the locked-in accrual and the deterministic terminal
105
+ # extra-shares leg remain -- no rate/dividend/volatility needed.
106
+ return product.get_realized_accrual() + self._extra_shares_intrinsic(
107
+ product, spot
108
+ )
109
+
110
+ rate = pricing_env.get_rate(maturity)
111
+ div = pricing_env.get_div_yield(maturity)
112
+ vol = pricing_env.get_vol(strike, maturity)
113
+
114
+ self._validate_inputs(spot, strike, maturity, rate, div, vol, product)
115
+
116
+ # Realized accrual from past observations is locked in (rate-free part is
117
+ # supplied by the product; discounting is applied here).
118
+ realized = product.get_realized_accrual()
119
+ if product.settlement_at_expiry:
120
+ realized *= safe_exp(-rate * maturity)
121
+
122
+ times = product.get_observation_times()
123
+ daily = product.daily_share_accumulation
124
+ df_maturity = pricing_env.get_discount_factor(maturity)
125
+ per_contract = 0.0
126
+ for idx, t_i in enumerate(times):
127
+ sub_dates = times[: idx + 1]
128
+ leg = self._price_leg(product, pricing_env, sub_dates, t_i, daily)
129
+ if product.settlement_at_expiry:
130
+ # Defer the leg's payoff from t_i to T using curve discount
131
+ # factors: DF(0, T) / DF(0, t_i) (curve-consistent, not flat-only).
132
+ leg *= df_maturity / pricing_env.get_discount_factor(t_i)
133
+ per_contract += leg
134
+
135
+ # The rebate is conditional on a knock-out observation; with no accrual
136
+ # fixings there is nothing to monitor.
137
+ if times:
138
+ per_contract += self._price_rebate_leg(product, pricing_env, times)
139
+ per_contract += self._price_extra_shares_leg(
140
+ product, pricing_env, times, maturity
141
+ )
142
+
143
+ value = per_contract * product.contract_multiplier + realized
144
+ return value
145
+
146
+ def _extra_shares_intrinsic(self, product: AccumulatorOption, spot: float) -> float:
147
+ """Deterministic terminal value of the extra-shares leg at expiry."""
148
+ extra = product.extra_shares_at_expiry
149
+ if extra <= 0.0 or spot >= product.knock_out_barrier:
150
+ return 0.0
151
+ return -extra * max(product.strike - spot, 0.0) * product.contract_multiplier
152
+
153
+ # ------------------------------------------------------------------
154
+ # Leg pricing
155
+ # ------------------------------------------------------------------
156
+
157
+ def _price_leg(
158
+ self,
159
+ product: AccumulatorOption,
160
+ pricing_env: PricingEnvironment,
161
+ sub_dates: List[float],
162
+ maturity_i: float,
163
+ daily: float,
164
+ ) -> float:
165
+ """Value one observation's (long call - geared put) leg, per contract."""
166
+ call_value = self._price_barrier_call(
167
+ product, pricing_env, sub_dates, maturity_i, daily
168
+ )
169
+ put_value = self._price_put_leg(
170
+ product, pricing_env, sub_dates, maturity_i, daily
171
+ )
172
+ return call_value - put_value
173
+
174
+ def _price_barrier_call(
175
+ self,
176
+ product: AccumulatorOption,
177
+ pricing_env: PricingEnvironment,
178
+ sub_dates: List[float],
179
+ maturity_i: float,
180
+ daily: float,
181
+ ) -> float:
182
+ """Up-and-out call gain leg scaled by ``daily`` shares."""
183
+ obs_type, obs_dates = self._call_leg_monitoring(product, sub_dates, maturity_i)
184
+ call_leg = BarrierOption(
185
+ strike=product.strike,
186
+ option_type=OptionType.CALL,
187
+ barrier=product.knock_out_barrier,
188
+ barrier_type=BarrierType.UP_OUT,
189
+ maturity=maturity_i,
190
+ rebate=0.0,
191
+ participation_rate=1.0,
192
+ pay_at_hit=False,
193
+ observation_type=obs_type,
194
+ observation_dates=obs_dates,
195
+ contract_multiplier=daily,
196
+ )
197
+ return self._barrier_engine.price(call_leg, pricing_env)
198
+
199
+ def _price_put_leg(
200
+ self,
201
+ product: AccumulatorOption,
202
+ pricing_env: PricingEnvironment,
203
+ sub_dates: List[float],
204
+ maturity_i: float,
205
+ daily: float,
206
+ ) -> float:
207
+ """Geared loss leg: up-and-out put (TERMINATION) or vanilla put (SINGLE_DAY)."""
208
+ geared = daily * product.gearing
209
+ if product.knock_out_type == AccumulatorKnockOutType.SINGLE_DAY:
210
+ # The lower put leg is unaffected by the upper knock-out barrier.
211
+ put = EuropeanVanillaOption(
212
+ strike=product.strike,
213
+ option_type=OptionType.PUT,
214
+ maturity=maturity_i,
215
+ contract_multiplier=geared,
216
+ )
217
+ return self._bs_engine.price(put, pricing_env)
218
+
219
+ obs_type, obs_dates = self._leg_monitoring(product, sub_dates)
220
+ put_leg = BarrierOption(
221
+ strike=product.strike,
222
+ option_type=OptionType.PUT,
223
+ barrier=product.knock_out_barrier,
224
+ barrier_type=BarrierType.UP_OUT,
225
+ maturity=maturity_i,
226
+ rebate=0.0,
227
+ participation_rate=1.0,
228
+ pay_at_hit=False,
229
+ observation_type=obs_type,
230
+ observation_dates=obs_dates,
231
+ contract_multiplier=geared,
232
+ )
233
+ return self._barrier_engine.price(put_leg, pricing_env)
234
+
235
+ def _leg_monitoring(self, product: AccumulatorOption, sub_dates: List[float]):
236
+ """Resolve barrier monitoring for a leg's observation sub-schedule.
237
+
238
+ A single observation is monitored at expiry (a barrier shift needs at
239
+ least two observation times); multiple observations are monitored
240
+ discretely on the daily grid up to the leg's maturity.
241
+ """
242
+ if product.observation_type == ObservationType.CONTINUOUS:
243
+ return ObservationType.CONTINUOUS, None
244
+ if product.observation_type == ObservationType.EXPIRY:
245
+ return ObservationType.EXPIRY, None
246
+ if len(sub_dates) <= 1:
247
+ return ObservationType.EXPIRY, None
248
+ return ObservationType.DISCRETE, list(sub_dates)
249
+
250
+ def _call_leg_monitoring(
251
+ self, product: AccumulatorOption, sub_dates: List[float], maturity_i: float
252
+ ):
253
+ """Monitoring for the gain (call) leg of one observation.
254
+
255
+ SINGLE_DAY only cancels that day's accrual, so the call leg's barrier is
256
+ checked solely on its own observation date (expiry monitoring). For
257
+ TERMINATION an earlier breach extinguishes the leg, so the cumulative
258
+ observation sub-schedule is monitored.
259
+ """
260
+ if product.knock_out_type == AccumulatorKnockOutType.SINGLE_DAY:
261
+ return ObservationType.EXPIRY, None
262
+ return self._leg_monitoring(product, sub_dates)
263
+
264
+ def _price_rebate_leg(
265
+ self,
266
+ product: AccumulatorOption,
267
+ pricing_env: PricingEnvironment,
268
+ times: List[float],
269
+ ) -> float:
270
+ """Value the TERMINATION knock-out cash rebate as a one-touch, per contract."""
271
+ if product.knock_out_type != AccumulatorKnockOutType.TERMINATION:
272
+ return 0.0
273
+ rebate_cash = product.get_knock_out_rebate_cash()
274
+ if rebate_cash <= 0.0:
275
+ return 0.0
276
+
277
+ obs_type, obs_dates = self._leg_monitoring(product, times)
278
+ touch = OneTouchOption(
279
+ barrier=product.knock_out_barrier,
280
+ barrier_direction=BarrierDirection.UP,
281
+ maturity=times[-1],
282
+ rebate=rebate_cash,
283
+ payment_at_hit=True,
284
+ touch_type=TouchType.ONE_TOUCH,
285
+ observation_type=obs_type,
286
+ observation_dates=obs_dates,
287
+ )
288
+ return self._one_touch_engine.price(touch, pricing_env)
289
+
290
+ def _price_extra_shares_leg(
291
+ self,
292
+ product: AccumulatorOption,
293
+ pricing_env: PricingEnvironment,
294
+ times: List[float],
295
+ maturity: float,
296
+ ) -> float:
297
+ """Subtract the extra-shares-at-expiry up-and-out put leg, per contract."""
298
+ extra = product.extra_shares_at_expiry
299
+ if extra <= 0.0:
300
+ return 0.0
301
+
302
+ # The terminal extra-shares leg matures at the contract maturity and
303
+ # follows the same knock-out treatment as a gain leg maturing at T:
304
+ # expiry-only for SINGLE_DAY (no cumulative knockout), cumulative discrete
305
+ # monitoring for TERMINATION.
306
+ obs_type, obs_dates = self._call_leg_monitoring(product, times, maturity)
307
+ put_leg = BarrierOption(
308
+ strike=product.strike,
309
+ option_type=OptionType.PUT,
310
+ barrier=product.knock_out_barrier,
311
+ barrier_type=BarrierType.UP_OUT,
312
+ maturity=maturity,
313
+ rebate=0.0,
314
+ participation_rate=1.0,
315
+ pay_at_hit=False,
316
+ observation_type=obs_type,
317
+ observation_dates=obs_dates,
318
+ contract_multiplier=extra,
319
+ )
320
+ return -self._barrier_engine.price(put_leg, pricing_env)
321
+
322
+ # ------------------------------------------------------------------
323
+ # Validation
324
+ # ------------------------------------------------------------------
325
+
326
+ def _validate_inputs(
327
+ self,
328
+ spot: float,
329
+ strike: float,
330
+ maturity: float,
331
+ rate: float,
332
+ div: float,
333
+ vol: float,
334
+ product: AccumulatorOption,
335
+ ) -> None:
336
+ """Validate market and product inputs for analytical pricing."""
337
+ validate_positive(spot, "spot")
338
+ validate_positive(strike, "strike")
339
+ validate_positive(product.knock_out_barrier, "knock_out_barrier")
340
+ validate_non_negative(maturity, "maturity")
341
+ validate_positive(vol, "volatility")
342
+ validate_non_negative(product.gearing, "gearing")
343
+ validate_non_negative(
344
+ product.daily_share_accumulation, "daily_share_accumulation"
345
+ )
346
+ validate_positive(product.contract_multiplier, "contract_multiplier")
347
+
348
+ if vol < self.MIN_VOL or vol > self.MAX_VOL:
349
+ raise ValidationError(
350
+ f"Volatility {vol} outside supported range "
351
+ f"[{self.MIN_VOL}, {self.MAX_VOL}]"
352
+ )
353
+ if maturity > self.MAX_MATURITY:
354
+ raise ValidationError(
355
+ f"Maturity too long for analytical accumulator pricing: {maturity}"
356
+ )
357
+ if div < 0:
358
+ raise ValidationError(f"Dividend yield must be non-negative, got {div}")
359
+ if abs(rate) > 1.0:
360
+ raise ValidationError(f"Risk-free rate outside reasonable bounds: {rate}")
361
+
362
+ def __repr__(self) -> str:
363
+ return "AccumulatorAnalyticalEngine()"