itofin 0.6.1__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 (407) hide show
  1. itofin-0.6.1/Cargo.lock +185 -0
  2. itofin-0.6.1/Cargo.toml +13 -0
  3. itofin-0.6.1/PKG-INFO +221 -0
  4. itofin-0.6.1/README.md +200 -0
  5. itofin-0.6.1/crates/itofin-py/Cargo.toml +16 -0
  6. itofin-0.6.1/crates/itofin-py/README.md +200 -0
  7. itofin-0.6.1/crates/itofin-py/src/calibration.rs +112 -0
  8. itofin-0.6.1/crates/itofin-py/src/curve.rs +70 -0
  9. itofin-0.6.1/crates/itofin-py/src/heston.rs +288 -0
  10. itofin-0.6.1/crates/itofin-py/src/hullwhite.rs +229 -0
  11. itofin-0.6.1/crates/itofin-py/src/lib.rs +93 -0
  12. itofin-0.6.1/crates/itofin-py/src/market.rs +131 -0
  13. itofin-0.6.1/crates/itofin-py/src/option.rs +125 -0
  14. itofin-0.6.1/crates/itofin-py/src/settings.rs +40 -0
  15. itofin-0.6.1/crates/itofin-py/src/swap.rs +148 -0
  16. itofin-0.6.1/crates/itofin-py/src/swaption.rs +159 -0
  17. itofin-0.6.1/crates/itofin-py/src/time.rs +384 -0
  18. itofin-0.6.1/crates/itofin-py/tests/test_european_option.py +69 -0
  19. itofin-0.6.1/crates/itofin-py/tests/test_heston_calibration.py +140 -0
  20. itofin-0.6.1/crates/itofin-py/tests/test_heston_pricing.py +53 -0
  21. itofin-0.6.1/crates/itofin-py/tests/test_hullwhite_calibration.py +115 -0
  22. itofin-0.6.1/crates/itofin-py/tests/test_hullwhite_model.py +48 -0
  23. itofin-0.6.1/crates/itofin-py/tests/test_market.py +25 -0
  24. itofin-0.6.1/crates/itofin-py/tests/test_primitives.py +61 -0
  25. itofin-0.6.1/crates/itofin-py/tests/test_schedule.py +96 -0
  26. itofin-0.6.1/crates/itofin-py/tests/test_shared.py +68 -0
  27. itofin-0.6.1/crates/itofin-py/tests/test_skeleton.py +9 -0
  28. itofin-0.6.1/crates/itofin-py/tests/test_swaption.py +139 -0
  29. itofin-0.6.1/crates/itofin-py/tests/test_vanilla_swap.py +126 -0
  30. itofin-0.6.1/crates/libitofin/Cargo.toml +17 -0
  31. itofin-0.6.1/crates/libitofin/README.md +27 -0
  32. itofin-0.6.1/crates/libitofin/src/cashflow.rs +378 -0
  33. itofin-0.6.1/crates/libitofin/src/cashflows/capflooredcoupon.rs +397 -0
  34. itofin-0.6.1/crates/libitofin/src/cashflows/capflooredcoupon_oracle.rs +357 -0
  35. itofin-0.6.1/crates/libitofin/src/cashflows/cashflows.rs +2644 -0
  36. itofin-0.6.1/crates/libitofin/src/cashflows/coupon.rs +506 -0
  37. itofin-0.6.1/crates/libitofin/src/cashflows/couponpricer.rs +406 -0
  38. itofin-0.6.1/crates/libitofin/src/cashflows/dividend.rs +256 -0
  39. itofin-0.6.1/crates/libitofin/src/cashflows/duration.rs +31 -0
  40. itofin-0.6.1/crates/libitofin/src/cashflows/fixedratecoupon.rs +329 -0
  41. itofin-0.6.1/crates/libitofin/src/cashflows/fixedrateleg.rs +694 -0
  42. itofin-0.6.1/crates/libitofin/src/cashflows/floatingratecoupon.rs +564 -0
  43. itofin-0.6.1/crates/libitofin/src/cashflows/iborcoupon.rs +685 -0
  44. itofin-0.6.1/crates/libitofin/src/cashflows/iborleg.rs +666 -0
  45. itofin-0.6.1/crates/libitofin/src/cashflows/mod.rs +44 -0
  46. itofin-0.6.1/crates/libitofin/src/cashflows/overnightindexedcoupon.rs +580 -0
  47. itofin-0.6.1/crates/libitofin/src/cashflows/overnightindexedcouponpricer.rs +388 -0
  48. itofin-0.6.1/crates/libitofin/src/cashflows/overnightleg.rs +466 -0
  49. itofin-0.6.1/crates/libitofin/src/cashflows/rateaveraging.rs +14 -0
  50. itofin-0.6.1/crates/libitofin/src/cashflows/simplecashflow.rs +286 -0
  51. itofin-0.6.1/crates/libitofin/src/currency.rs +182 -0
  52. itofin-0.6.1/crates/libitofin/src/discretizedasset.rs +599 -0
  53. itofin-0.6.1/crates/libitofin/src/errors.rs +135 -0
  54. itofin-0.6.1/crates/libitofin/src/event.rs +193 -0
  55. itofin-0.6.1/crates/libitofin/src/exercise.rs +86 -0
  56. itofin-0.6.1/crates/libitofin/src/handle.rs +521 -0
  57. itofin-0.6.1/crates/libitofin/src/indexes/ibor/eonia.rs +80 -0
  58. itofin-0.6.1/crates/libitofin/src/indexes/ibor/estr.rs +79 -0
  59. itofin-0.6.1/crates/libitofin/src/indexes/ibor/euribor.rs +250 -0
  60. itofin-0.6.1/crates/libitofin/src/indexes/ibor/mod.rs +20 -0
  61. itofin-0.6.1/crates/libitofin/src/indexes/ibor/sofr.rs +79 -0
  62. itofin-0.6.1/crates/libitofin/src/indexes/iborindex.rs +606 -0
  63. itofin-0.6.1/crates/libitofin/src/indexes/index.rs +244 -0
  64. itofin-0.6.1/crates/libitofin/src/indexes/interestrateindex.rs +514 -0
  65. itofin-0.6.1/crates/libitofin/src/indexes/mod.rs +18 -0
  66. itofin-0.6.1/crates/libitofin/src/indexes/swapindex.rs +398 -0
  67. itofin-0.6.1/crates/libitofin/src/instrument.rs +1038 -0
  68. itofin-0.6.1/crates/libitofin/src/instruments/bond.rs +794 -0
  69. itofin-0.6.1/crates/libitofin/src/instruments/bonds/fixedratebond.rs +310 -0
  70. itofin-0.6.1/crates/libitofin/src/instruments/bonds/mod.rs +8 -0
  71. itofin-0.6.1/crates/libitofin/src/instruments/capfloor.rs +466 -0
  72. itofin-0.6.1/crates/libitofin/src/instruments/fixedvsfloatingswap.rs +921 -0
  73. itofin-0.6.1/crates/libitofin/src/instruments/futures.rs +19 -0
  74. itofin-0.6.1/crates/libitofin/src/instruments/makeois.rs +933 -0
  75. itofin-0.6.1/crates/libitofin/src/instruments/makeswaption.rs +473 -0
  76. itofin-0.6.1/crates/libitofin/src/instruments/makevanillaswap.rs +830 -0
  77. itofin-0.6.1/crates/libitofin/src/instruments/mod.rs +43 -0
  78. itofin-0.6.1/crates/libitofin/src/instruments/oneassetoption.rs +625 -0
  79. itofin-0.6.1/crates/libitofin/src/instruments/overnightindexedswap.rs +622 -0
  80. itofin-0.6.1/crates/libitofin/src/instruments/payoffs.rs +139 -0
  81. itofin-0.6.1/crates/libitofin/src/instruments/swap.rs +775 -0
  82. itofin-0.6.1/crates/libitofin/src/instruments/swaption.rs +471 -0
  83. itofin-0.6.1/crates/libitofin/src/instruments/vanillaswap.rs +401 -0
  84. itofin-0.6.1/crates/libitofin/src/interestrate.rs +733 -0
  85. itofin-0.6.1/crates/libitofin/src/lib.rs +36 -0
  86. itofin-0.6.1/crates/libitofin/src/math/array.rs +289 -0
  87. itofin-0.6.1/crates/libitofin/src/math/beta.rs +205 -0
  88. itofin-0.6.1/crates/libitofin/src/math/comparison.rs +157 -0
  89. itofin-0.6.1/crates/libitofin/src/math/copulas.rs +524 -0
  90. itofin-0.6.1/crates/libitofin/src/math/distributions/binomial.rs +214 -0
  91. itofin-0.6.1/crates/libitofin/src/math/distributions/bivariatenormal.rs +501 -0
  92. itofin-0.6.1/crates/libitofin/src/math/distributions/bivariatestudentt.rs +351 -0
  93. itofin-0.6.1/crates/libitofin/src/math/distributions/chisquare.rs +149 -0
  94. itofin-0.6.1/crates/libitofin/src/math/distributions/gamma.rs +133 -0
  95. itofin-0.6.1/crates/libitofin/src/math/distributions/mod.rs +155 -0
  96. itofin-0.6.1/crates/libitofin/src/math/distributions/noncentralchisquare.rs +633 -0
  97. itofin-0.6.1/crates/libitofin/src/math/distributions/normal.rs +368 -0
  98. itofin-0.6.1/crates/libitofin/src/math/distributions/poisson.rs +307 -0
  99. itofin-0.6.1/crates/libitofin/src/math/distributions/studentt.rs +343 -0
  100. itofin-0.6.1/crates/libitofin/src/math/errorfunction.rs +193 -0
  101. itofin-0.6.1/crates/libitofin/src/math/expm1.rs +107 -0
  102. itofin-0.6.1/crates/libitofin/src/math/gammafunction.rs +236 -0
  103. itofin-0.6.1/crates/libitofin/src/math/incompletegamma.rs +213 -0
  104. itofin-0.6.1/crates/libitofin/src/math/integrals/discrete.rs +358 -0
  105. itofin-0.6.1/crates/libitofin/src/math/integrals/exponential_integrals.rs +602 -0
  106. itofin-0.6.1/crates/libitofin/src/math/integrals/expsinh.rs +248 -0
  107. itofin-0.6.1/crates/libitofin/src/math/integrals/filon.rs +203 -0
  108. itofin-0.6.1/crates/libitofin/src/math/integrals/gaussiannoncentralchisquaredpolynomial.rs +255 -0
  109. itofin-0.6.1/crates/libitofin/src/math/integrals/gaussianorthogonalpolynomial.rs +386 -0
  110. itofin-0.6.1/crates/libitofin/src/math/integrals/gaussianquadratures.rs +740 -0
  111. itofin-0.6.1/crates/libitofin/src/math/integrals/gausslaguerrecosinepolynomial.rs +173 -0
  112. itofin-0.6.1/crates/libitofin/src/math/integrals/kronrod.rs +581 -0
  113. itofin-0.6.1/crates/libitofin/src/math/integrals/lobatto.rs +340 -0
  114. itofin-0.6.1/crates/libitofin/src/math/integrals/mod.rs +193 -0
  115. itofin-0.6.1/crates/libitofin/src/math/integrals/momentbasedgaussianpolynomial.rs +220 -0
  116. itofin-0.6.1/crates/libitofin/src/math/integrals/piecewise.rs +244 -0
  117. itofin-0.6.1/crates/libitofin/src/math/integrals/segment.rs +114 -0
  118. itofin-0.6.1/crates/libitofin/src/math/integrals/simpson.rs +99 -0
  119. itofin-0.6.1/crates/libitofin/src/math/integrals/tabulatedgausslegendre.rs +177 -0
  120. itofin-0.6.1/crates/libitofin/src/math/integrals/tanhsinh.rs +229 -0
  121. itofin-0.6.1/crates/libitofin/src/math/integrals/trapezoid.rs +209 -0
  122. itofin-0.6.1/crates/libitofin/src/math/integrals/twodimensional.rs +165 -0
  123. itofin-0.6.1/crates/libitofin/src/math/interpolations/bicubic.rs +343 -0
  124. itofin-0.6.1/crates/libitofin/src/math/interpolations/bilinear.rs +321 -0
  125. itofin-0.6.1/crates/libitofin/src/math/interpolations/cubic.rs +1431 -0
  126. itofin-0.6.1/crates/libitofin/src/math/interpolations/flat.rs +353 -0
  127. itofin-0.6.1/crates/libitofin/src/math/interpolations/linear.rs +251 -0
  128. itofin-0.6.1/crates/libitofin/src/math/interpolations/loglinear.rs +234 -0
  129. itofin-0.6.1/crates/libitofin/src/math/interpolations/mod.rs +105 -0
  130. itofin-0.6.1/crates/libitofin/src/math/matrix.rs +377 -0
  131. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/choleskydecomposition.rs +299 -0
  132. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/mod.rs +18 -0
  133. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/pseudosqrt.rs +352 -0
  134. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/qrdecomposition.rs +281 -0
  135. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/svd.rs +519 -0
  136. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/symmetricschurdecomposition.rs +213 -0
  137. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/testsupport.rs +136 -0
  138. itofin-0.6.1/crates/libitofin/src/math/matrixutilities/tqreigendecomposition.rs +308 -0
  139. itofin-0.6.1/crates/libitofin/src/math/mod.rs +22 -0
  140. itofin-0.6.1/crates/libitofin/src/math/ode.rs +349 -0
  141. itofin-0.6.1/crates/libitofin/src/math/optimization/conjugategradient.rs +115 -0
  142. itofin-0.6.1/crates/libitofin/src/math/optimization/constraint.rs +264 -0
  143. itofin-0.6.1/crates/libitofin/src/math/optimization/costfunction.rs +254 -0
  144. itofin-0.6.1/crates/libitofin/src/math/optimization/endcriteria.rs +361 -0
  145. itofin-0.6.1/crates/libitofin/src/math/optimization/levenbergmarquardt.rs +428 -0
  146. itofin-0.6.1/crates/libitofin/src/math/optimization/linesearch.rs +243 -0
  147. itofin-0.6.1/crates/libitofin/src/math/optimization/linesearchbasedmethod.rs +80 -0
  148. itofin-0.6.1/crates/libitofin/src/math/optimization/lmdif.rs +1017 -0
  149. itofin-0.6.1/crates/libitofin/src/math/optimization/method.rs +25 -0
  150. itofin-0.6.1/crates/libitofin/src/math/optimization/mod.rs +19 -0
  151. itofin-0.6.1/crates/libitofin/src/math/optimization/problem.rs +179 -0
  152. itofin-0.6.1/crates/libitofin/src/math/optimization/projectedconstraint.rs +98 -0
  153. itofin-0.6.1/crates/libitofin/src/math/optimization/projection.rs +154 -0
  154. itofin-0.6.1/crates/libitofin/src/math/optimization/simplex.rs +268 -0
  155. itofin-0.6.1/crates/libitofin/src/math/optimization/steepestdescent.rs +60 -0
  156. itofin-0.6.1/crates/libitofin/src/math/optimization/testsupport.rs +82 -0
  157. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/boxmullergaussianrng.rs +92 -0
  158. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/inversecumulativersg.rs +135 -0
  159. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/knuthuniformrng.rs +203 -0
  160. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/lattice.rs +167 -0
  161. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/lattice_tables.rs +917 -0
  162. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/mod.rs +62 -0
  163. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/mt19937uniformrng.rs +160 -0
  164. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/randomsequencegenerator.rs +131 -0
  165. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/ranluxuniformrng.rs +180 -0
  166. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/rngtraits.rs +152 -0
  167. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/seedgenerator.rs +58 -0
  168. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/mod.rs +555 -0
  169. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/mt.rs +79 -0
  170. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/jaeckel_data_0.rs +16 -0
  171. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/jaeckel_offsets.rs +7 -0
  172. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/joe_kuo_d5_data_0.rs +1618 -0
  173. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/joe_kuo_d5_offsets.rs +130 -0
  174. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/joe_kuo_d6_data_0.rs +11961 -0
  175. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/joe_kuo_d6_data_1.rs +10213 -0
  176. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/joe_kuo_d6_offsets.rs +1331 -0
  177. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/joe_kuo_d7_data_0.rs +1524 -0
  178. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/joe_kuo_d7_offsets.rs +124 -0
  179. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/kuo2_data_0.rs +3461 -0
  180. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/kuo2_offsets.rs +252 -0
  181. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/kuo3_data_0.rs +4101 -0
  182. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/kuo3_offsets.rs +292 -0
  183. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/kuo_data_0.rs +4440 -0
  184. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/kuo_offsets.rs +313 -0
  185. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/lemieux_data_0.rs +229 -0
  186. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/lemieux_offsets.rs +28 -0
  187. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/mod.rs +53 -0
  188. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/primitive_polynomials.rs +1468 -0
  189. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/sobol_levitan_data_0.rs +20 -0
  190. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/sobol/tables/sobol_levitan_offsets.rs +8 -0
  191. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/xoshiro256starstaruniformrng.rs +142 -0
  192. itofin-0.6.1/crates/libitofin/src/math/randomnumbers/zigguratgaussianrng.rs +654 -0
  193. itofin-0.6.1/crates/libitofin/src/math/solver1d.rs +814 -0
  194. itofin-0.6.1/crates/libitofin/src/math/solvers1d/bisection.rs +125 -0
  195. itofin-0.6.1/crates/libitofin/src/math/solvers1d/brent.rs +289 -0
  196. itofin-0.6.1/crates/libitofin/src/math/solvers1d/falseposition.rs +130 -0
  197. itofin-0.6.1/crates/libitofin/src/math/solvers1d/finitedifferencenewtonsafe.rs +154 -0
  198. itofin-0.6.1/crates/libitofin/src/math/solvers1d/halley.rs +330 -0
  199. itofin-0.6.1/crates/libitofin/src/math/solvers1d/mod.rs +17 -0
  200. itofin-0.6.1/crates/libitofin/src/math/solvers1d/newton.rs +192 -0
  201. itofin-0.6.1/crates/libitofin/src/math/solvers1d/newtonsafe.rs +194 -0
  202. itofin-0.6.1/crates/libitofin/src/math/solvers1d/ridder.rs +160 -0
  203. itofin-0.6.1/crates/libitofin/src/math/solvers1d/secant.rs +122 -0
  204. itofin-0.6.1/crates/libitofin/src/math/solvers1d/testkit.rs +283 -0
  205. itofin-0.6.1/crates/libitofin/src/math/statistics/gaussianstatistics.rs +348 -0
  206. itofin-0.6.1/crates/libitofin/src/math/statistics/generalstatistics.rs +353 -0
  207. itofin-0.6.1/crates/libitofin/src/math/statistics/histogram.rs +325 -0
  208. itofin-0.6.1/crates/libitofin/src/math/statistics/incrementalstatistics.rs +396 -0
  209. itofin-0.6.1/crates/libitofin/src/math/statistics/mod.rs +246 -0
  210. itofin-0.6.1/crates/libitofin/src/math/statistics/riskstatistics.rs +327 -0
  211. itofin-0.6.1/crates/libitofin/src/math/timegrid.rs +377 -0
  212. itofin-0.6.1/crates/libitofin/src/methods/lattices/lattice.rs +46 -0
  213. itofin-0.6.1/crates/libitofin/src/methods/lattices/mod.rs +17 -0
  214. itofin-0.6.1/crates/libitofin/src/methods/lattices/tree.rs +44 -0
  215. itofin-0.6.1/crates/libitofin/src/methods/lattices/treelattice.rs +772 -0
  216. itofin-0.6.1/crates/libitofin/src/methods/lattices/trinomialtree.rs +408 -0
  217. itofin-0.6.1/crates/libitofin/src/methods/mod.rs +7 -0
  218. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/mcsimulation.rs +328 -0
  219. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/mod.rs +23 -0
  220. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/montecarlomodel.rs +483 -0
  221. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/multipath.rs +145 -0
  222. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/multipathgenerator.rs +511 -0
  223. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/path.rs +189 -0
  224. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/pathgen.rs +44 -0
  225. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/pathgenerator.rs +333 -0
  226. itofin-0.6.1/crates/libitofin/src/methods/montecarlo/sample.rs +44 -0
  227. itofin-0.6.1/crates/libitofin/src/models/calibrationhelper.rs +453 -0
  228. itofin-0.6.1/crates/libitofin/src/models/equity/hestonmodel.rs +352 -0
  229. itofin-0.6.1/crates/libitofin/src/models/equity/hestonmodelhelper.rs +799 -0
  230. itofin-0.6.1/crates/libitofin/src/models/equity/mod.rs +10 -0
  231. itofin-0.6.1/crates/libitofin/src/models/mod.rs +30 -0
  232. itofin-0.6.1/crates/libitofin/src/models/model.rs +1087 -0
  233. itofin-0.6.1/crates/libitofin/src/models/parameter.rs +484 -0
  234. itofin-0.6.1/crates/libitofin/src/models/shortrate/calibrationhelpers/caphelper.rs +679 -0
  235. itofin-0.6.1/crates/libitofin/src/models/shortrate/calibrationhelpers/mod.rs +13 -0
  236. itofin-0.6.1/crates/libitofin/src/models/shortrate/calibrationhelpers/swaptionhelper.rs +786 -0
  237. itofin-0.6.1/crates/libitofin/src/models/shortrate/coxingersollross.rs +252 -0
  238. itofin-0.6.1/crates/libitofin/src/models/shortrate/extendedcoxingersollross.rs +340 -0
  239. itofin-0.6.1/crates/libitofin/src/models/shortrate/hullwhite.rs +1281 -0
  240. itofin-0.6.1/crates/libitofin/src/models/shortrate/mod.rs +18 -0
  241. itofin-0.6.1/crates/libitofin/src/models/shortrate/onefactormodel.rs +209 -0
  242. itofin-0.6.1/crates/libitofin/src/models/shortrate/vasicek.rs +209 -0
  243. itofin-0.6.1/crates/libitofin/src/option.rs +46 -0
  244. itofin-0.6.1/crates/libitofin/src/patterns/lazyobject.rs +557 -0
  245. itofin-0.6.1/crates/libitofin/src/patterns/mod.rs +5 -0
  246. itofin-0.6.1/crates/libitofin/src/patterns/observable.rs +616 -0
  247. itofin-0.6.1/crates/libitofin/src/patterns/visitor.rs +21 -0
  248. itofin-0.6.1/crates/libitofin/src/payoff.rs +28 -0
  249. itofin-0.6.1/crates/libitofin/src/pricingengine.rs +269 -0
  250. itofin-0.6.1/crates/libitofin/src/pricingengines/blackcalculator.rs +651 -0
  251. itofin-0.6.1/crates/libitofin/src/pricingengines/blackformula.rs +904 -0
  252. itofin-0.6.1/crates/libitofin/src/pricingengines/bond/bondfunctions.rs +968 -0
  253. itofin-0.6.1/crates/libitofin/src/pricingengines/bond/discountingbondengine.rs +237 -0
  254. itofin-0.6.1/crates/libitofin/src/pricingengines/bond/mod.rs +12 -0
  255. itofin-0.6.1/crates/libitofin/src/pricingengines/capfloor/analyticcapfloorengine.rs +614 -0
  256. itofin-0.6.1/crates/libitofin/src/pricingengines/capfloor/blackcapfloorengine.rs +665 -0
  257. itofin-0.6.1/crates/libitofin/src/pricingengines/capfloor/mod.rs +12 -0
  258. itofin-0.6.1/crates/libitofin/src/pricingengines/mod.rs +44 -0
  259. itofin-0.6.1/crates/libitofin/src/pricingengines/swap/discountingswapengine.rs +408 -0
  260. itofin-0.6.1/crates/libitofin/src/pricingengines/swap/mod.rs +9 -0
  261. itofin-0.6.1/crates/libitofin/src/pricingengines/swaption/blackswaptionengine.rs +1678 -0
  262. itofin-0.6.1/crates/libitofin/src/pricingengines/swaption/discretizedswap.rs +706 -0
  263. itofin-0.6.1/crates/libitofin/src/pricingengines/swaption/discretizedswaption.rs +148 -0
  264. itofin-0.6.1/crates/libitofin/src/pricingengines/swaption/jamshidianswaptionengine.rs +523 -0
  265. itofin-0.6.1/crates/libitofin/src/pricingengines/swaption/mod.rs +22 -0
  266. itofin-0.6.1/crates/libitofin/src/pricingengines/swaption/treeswaptionengine.rs +588 -0
  267. itofin-0.6.1/crates/libitofin/src/pricingengines/vanilla/analytichestonengine.rs +1431 -0
  268. itofin-0.6.1/crates/libitofin/src/pricingengines/vanilla/mceuropeanengine.rs +521 -0
  269. itofin-0.6.1/crates/libitofin/src/pricingengines/vanilla/mceuropeanhestonengine.rs +740 -0
  270. itofin-0.6.1/crates/libitofin/src/pricingengines/vanilla/mcvanillaengine.rs +420 -0
  271. itofin-0.6.1/crates/libitofin/src/pricingengines/vanilla/mod.rs +1099 -0
  272. itofin-0.6.1/crates/libitofin/src/processes/blackscholesprocess.rs +601 -0
  273. itofin-0.6.1/crates/libitofin/src/processes/hestonprocess.rs +858 -0
  274. itofin-0.6.1/crates/libitofin/src/processes/mod.rs +19 -0
  275. itofin-0.6.1/crates/libitofin/src/processes/ornsteinuhlenbeckprocess.rs +214 -0
  276. itofin-0.6.1/crates/libitofin/src/processes/stochasticprocessarray.rs +573 -0
  277. itofin-0.6.1/crates/libitofin/src/quotes/compositequote.rs +230 -0
  278. itofin-0.6.1/crates/libitofin/src/quotes/deltavolquote.rs +196 -0
  279. itofin-0.6.1/crates/libitofin/src/quotes/derivedquote.rs +145 -0
  280. itofin-0.6.1/crates/libitofin/src/quotes/mod.rs +72 -0
  281. itofin-0.6.1/crates/libitofin/src/quotes/multicompositequote.rs +236 -0
  282. itofin-0.6.1/crates/libitofin/src/quotes/simplequote.rs +260 -0
  283. itofin-0.6.1/crates/libitofin/src/settings.rs +515 -0
  284. itofin-0.6.1/crates/libitofin/src/shared.rs +58 -0
  285. itofin-0.6.1/crates/libitofin/src/stochasticprocess.rs +545 -0
  286. itofin-0.6.1/crates/libitofin/src/termstructures/bootstraphelper.rs +630 -0
  287. itofin-0.6.1/crates/libitofin/src/termstructures/bootstraptraits.rs +349 -0
  288. itofin-0.6.1/crates/libitofin/src/termstructures/interpolatedcurve.rs +220 -0
  289. itofin-0.6.1/crates/libitofin/src/termstructures/iterativebootstrap.rs +420 -0
  290. itofin-0.6.1/crates/libitofin/src/termstructures/mod.rs +600 -0
  291. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/blackconstantvol.rs +281 -0
  292. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/blackvariancecurve.rs +437 -0
  293. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/blackvariancesurface.rs +465 -0
  294. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/localconstantvol.rs +222 -0
  295. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/localvolcurve.rs +223 -0
  296. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/localvolsurface.rs +521 -0
  297. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/localvoltermstructure.rs +69 -0
  298. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/mod.rs +521 -0
  299. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/optionlet/constantoptionletvol.rs +353 -0
  300. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/optionlet/mod.rs +117 -0
  301. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/swaption/constantswaptionvol.rs +408 -0
  302. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/swaption/mod.rs +423 -0
  303. itofin-0.6.1/crates/libitofin/src/termstructures/volatility/volatilitytype.rs +14 -0
  304. itofin-0.6.1/crates/libitofin/src/termstructures/yields/bondhelpers.rs +594 -0
  305. itofin-0.6.1/crates/libitofin/src/termstructures/yields/discountcurve.rs +334 -0
  306. itofin-0.6.1/crates/libitofin/src/termstructures/yields/flatforward.rs +447 -0
  307. itofin-0.6.1/crates/libitofin/src/termstructures/yields/forwardcurve.rs +456 -0
  308. itofin-0.6.1/crates/libitofin/src/termstructures/yields/forwardspreadedtermstructure.rs +227 -0
  309. itofin-0.6.1/crates/libitofin/src/termstructures/yields/forwardstructure.rs +188 -0
  310. itofin-0.6.1/crates/libitofin/src/termstructures/yields/impliedtermstructure.rs +258 -0
  311. itofin-0.6.1/crates/libitofin/src/termstructures/yields/mod.rs +52 -0
  312. itofin-0.6.1/crates/libitofin/src/termstructures/yields/piecewiseyieldcurve.rs +507 -0
  313. itofin-0.6.1/crates/libitofin/src/termstructures/yields/ratehelpers.rs +2190 -0
  314. itofin-0.6.1/crates/libitofin/src/termstructures/yields/zerocurve.rs +332 -0
  315. itofin-0.6.1/crates/libitofin/src/termstructures/yields/zerospreadedtermstructure.rs +309 -0
  316. itofin-0.6.1/crates/libitofin/src/termstructures/yields/zeroyieldstructure.rs +184 -0
  317. itofin-0.6.1/crates/libitofin/src/termstructures/yieldtermstructure.rs +361 -0
  318. itofin-0.6.1/crates/libitofin/src/test_support.rs +39 -0
  319. itofin-0.6.1/crates/libitofin/src/time/asx.rs +248 -0
  320. itofin-0.6.1/crates/libitofin/src/time/businessdayconvention.rs +49 -0
  321. itofin-0.6.1/crates/libitofin/src/time/calendar.rs +706 -0
  322. itofin-0.6.1/crates/libitofin/src/time/calendars/argentina.rs +113 -0
  323. itofin-0.6.1/crates/libitofin/src/time/calendars/australia.rs +154 -0
  324. itofin-0.6.1/crates/libitofin/src/time/calendars/austria.rs +177 -0
  325. itofin-0.6.1/crates/libitofin/src/time/calendars/bespokecalendar.rs +103 -0
  326. itofin-0.6.1/crates/libitofin/src/time/calendars/botswana.rs +94 -0
  327. itofin-0.6.1/crates/libitofin/src/time/calendars/brazil.rs +163 -0
  328. itofin-0.6.1/crates/libitofin/src/time/calendars/canada.rs +148 -0
  329. itofin-0.6.1/crates/libitofin/src/time/calendars/chile.rs +171 -0
  330. itofin-0.6.1/crates/libitofin/src/time/calendars/china.rs +479 -0
  331. itofin-0.6.1/crates/libitofin/src/time/calendars/croatia.rs +116 -0
  332. itofin-0.6.1/crates/libitofin/src/time/calendars/czechrepublic.rs +116 -0
  333. itofin-0.6.1/crates/libitofin/src/time/calendars/denmark.rs +96 -0
  334. itofin-0.6.1/crates/libitofin/src/time/calendars/finland.rs +93 -0
  335. itofin-0.6.1/crates/libitofin/src/time/calendars/france.rs +157 -0
  336. itofin-0.6.1/crates/libitofin/src/time/calendars/germany.rs +272 -0
  337. itofin-0.6.1/crates/libitofin/src/time/calendars/hongkong.rs +560 -0
  338. itofin-0.6.1/crates/libitofin/src/time/calendars/hungary.rs +94 -0
  339. itofin-0.6.1/crates/libitofin/src/time/calendars/iceland.rs +105 -0
  340. itofin-0.6.1/crates/libitofin/src/time/calendars/india.rs +655 -0
  341. itofin-0.6.1/crates/libitofin/src/time/calendars/indonesia.rs +381 -0
  342. itofin-0.6.1/crates/libitofin/src/time/calendars/islamicholidays.rs +78 -0
  343. itofin-0.6.1/crates/libitofin/src/time/calendars/israel.rs +683 -0
  344. itofin-0.6.1/crates/libitofin/src/time/calendars/italy.rs +163 -0
  345. itofin-0.6.1/crates/libitofin/src/time/calendars/japan.rs +184 -0
  346. itofin-0.6.1/crates/libitofin/src/time/calendars/jointcalendar.rs +193 -0
  347. itofin-0.6.1/crates/libitofin/src/time/calendars/malta.rs +130 -0
  348. itofin-0.6.1/crates/libitofin/src/time/calendars/mexico.rs +110 -0
  349. itofin-0.6.1/crates/libitofin/src/time/calendars/mod.rs +121 -0
  350. itofin-0.6.1/crates/libitofin/src/time/calendars/montenegro.rs +104 -0
  351. itofin-0.6.1/crates/libitofin/src/time/calendars/newzealand.rs +209 -0
  352. itofin-0.6.1/crates/libitofin/src/time/calendars/northmacedonia.rs +147 -0
  353. itofin-0.6.1/crates/libitofin/src/time/calendars/norway.rs +91 -0
  354. itofin-0.6.1/crates/libitofin/src/time/calendars/nullcalendar.rs +55 -0
  355. itofin-0.6.1/crates/libitofin/src/time/calendars/poland.rs +147 -0
  356. itofin-0.6.1/crates/libitofin/src/time/calendars/romania.rs +151 -0
  357. itofin-0.6.1/crates/libitofin/src/time/calendars/russia.rs +278 -0
  358. itofin-0.6.1/crates/libitofin/src/time/calendars/saudiarabia.rs +223 -0
  359. itofin-0.6.1/crates/libitofin/src/time/calendars/serbia.rs +108 -0
  360. itofin-0.6.1/crates/libitofin/src/time/calendars/singapore.rs +339 -0
  361. itofin-0.6.1/crates/libitofin/src/time/calendars/slovakia.rs +122 -0
  362. itofin-0.6.1/crates/libitofin/src/time/calendars/slovenia.rs +113 -0
  363. itofin-0.6.1/crates/libitofin/src/time/calendars/southafrica.rs +104 -0
  364. itofin-0.6.1/crates/libitofin/src/time/calendars/southkorea.rs +391 -0
  365. itofin-0.6.1/crates/libitofin/src/time/calendars/sweden.rs +98 -0
  366. itofin-0.6.1/crates/libitofin/src/time/calendars/switzerland.rs +89 -0
  367. itofin-0.6.1/crates/libitofin/src/time/calendars/taiwan.rs +634 -0
  368. itofin-0.6.1/crates/libitofin/src/time/calendars/target.rs +91 -0
  369. itofin-0.6.1/crates/libitofin/src/time/calendars/thailand.rs +438 -0
  370. itofin-0.6.1/crates/libitofin/src/time/calendars/turkey.rs +388 -0
  371. itofin-0.6.1/crates/libitofin/src/time/calendars/ukraine.rs +103 -0
  372. itofin-0.6.1/crates/libitofin/src/time/calendars/unitedkingdom.rs +169 -0
  373. itofin-0.6.1/crates/libitofin/src/time/calendars/unitedstates.rs +526 -0
  374. itofin-0.6.1/crates/libitofin/src/time/calendars/uzbekistan.rs +136 -0
  375. itofin-0.6.1/crates/libitofin/src/time/calendars/weekendsonly.rs +54 -0
  376. itofin-0.6.1/crates/libitofin/src/time/date.rs +808 -0
  377. itofin-0.6.1/crates/libitofin/src/time/dategenerationrule.rs +86 -0
  378. itofin-0.6.1/crates/libitofin/src/time/daycounter.rs +144 -0
  379. itofin-0.6.1/crates/libitofin/src/time/daycounters/actual360.rs +90 -0
  380. itofin-0.6.1/crates/libitofin/src/time/daycounters/actual364.rs +57 -0
  381. itofin-0.6.1/crates/libitofin/src/time/daycounters/actual36525.rs +119 -0
  382. itofin-0.6.1/crates/libitofin/src/time/daycounters/actual365fixed.rs +240 -0
  383. itofin-0.6.1/crates/libitofin/src/time/daycounters/actual366.rs +115 -0
  384. itofin-0.6.1/crates/libitofin/src/time/daycounters/actualactual.rs +919 -0
  385. itofin-0.6.1/crates/libitofin/src/time/daycounters/business252.rs +136 -0
  386. itofin-0.6.1/crates/libitofin/src/time/daycounters/mod.rs +23 -0
  387. itofin-0.6.1/crates/libitofin/src/time/daycounters/one.rs +81 -0
  388. itofin-0.6.1/crates/libitofin/src/time/daycounters/simpledaycounter.rs +104 -0
  389. itofin-0.6.1/crates/libitofin/src/time/daycounters/thirty360.rs +333 -0
  390. itofin-0.6.1/crates/libitofin/src/time/daycounters/thirty365.rs +94 -0
  391. itofin-0.6.1/crates/libitofin/src/time/daycounters/yearfractiontodate.rs +240 -0
  392. itofin-0.6.1/crates/libitofin/src/time/ecb.rs +403 -0
  393. itofin-0.6.1/crates/libitofin/src/time/frequency.rs +96 -0
  394. itofin-0.6.1/crates/libitofin/src/time/imm.rs +208 -0
  395. itofin-0.6.1/crates/libitofin/src/time/mod.rs +26 -0
  396. itofin-0.6.1/crates/libitofin/src/time/period.rs +688 -0
  397. itofin-0.6.1/crates/libitofin/src/time/schedule.rs +2323 -0
  398. itofin-0.6.1/crates/libitofin/src/time/timeunit.rs +47 -0
  399. itofin-0.6.1/crates/libitofin/src/time/weekday.rs +106 -0
  400. itofin-0.6.1/crates/libitofin/src/types.rs +75 -0
  401. itofin-0.6.1/crates/libitofin/src/utilities/clone.rs +99 -0
  402. itofin-0.6.1/crates/libitofin/src/utilities/dataformatters.rs +79 -0
  403. itofin-0.6.1/crates/libitofin/src/utilities/mod.rs +6 -0
  404. itofin-0.6.1/crates/libitofin/src/utilities/null.rs +62 -0
  405. itofin-0.6.1/crates/libitofin/src/utilities/steppingiterator.rs +71 -0
  406. itofin-0.6.1/crates/libitofin/tests/external_coupon.rs +139 -0
  407. itofin-0.6.1/pyproject.toml +32 -0
@@ -0,0 +1,185 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "autocfg"
7
+ version = "1.5.1"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
10
+
11
+ [[package]]
12
+ name = "heck"
13
+ version = "0.5.0"
14
+ source = "registry+https://github.com/rust-lang/crates.io-index"
15
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
16
+
17
+ [[package]]
18
+ name = "itofin-py"
19
+ version = "0.6.1"
20
+ dependencies = [
21
+ "libitofin",
22
+ "pyo3",
23
+ ]
24
+
25
+ [[package]]
26
+ name = "libc"
27
+ version = "0.2.189"
28
+ source = "registry+https://github.com/rust-lang/crates.io-index"
29
+ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
30
+
31
+ [[package]]
32
+ name = "libitofin"
33
+ version = "0.6.1"
34
+ dependencies = [
35
+ "num-complex",
36
+ "thiserror",
37
+ ]
38
+
39
+ [[package]]
40
+ name = "num-complex"
41
+ version = "0.4.6"
42
+ source = "registry+https://github.com/rust-lang/crates.io-index"
43
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
44
+ dependencies = [
45
+ "num-traits",
46
+ ]
47
+
48
+ [[package]]
49
+ name = "num-traits"
50
+ version = "0.2.19"
51
+ source = "registry+https://github.com/rust-lang/crates.io-index"
52
+ checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
53
+ dependencies = [
54
+ "autocfg",
55
+ ]
56
+
57
+ [[package]]
58
+ name = "once_cell"
59
+ version = "1.21.4"
60
+ source = "registry+https://github.com/rust-lang/crates.io-index"
61
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
62
+
63
+ [[package]]
64
+ name = "portable-atomic"
65
+ version = "1.14.0"
66
+ source = "registry+https://github.com/rust-lang/crates.io-index"
67
+ checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3"
68
+
69
+ [[package]]
70
+ name = "proc-macro2"
71
+ version = "1.0.106"
72
+ source = "registry+https://github.com/rust-lang/crates.io-index"
73
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
74
+ dependencies = [
75
+ "unicode-ident",
76
+ ]
77
+
78
+ [[package]]
79
+ name = "pyo3"
80
+ version = "0.29.0"
81
+ source = "registry+https://github.com/rust-lang/crates.io-index"
82
+ checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
83
+ dependencies = [
84
+ "libc",
85
+ "once_cell",
86
+ "portable-atomic",
87
+ "pyo3-build-config",
88
+ "pyo3-ffi",
89
+ "pyo3-macros",
90
+ ]
91
+
92
+ [[package]]
93
+ name = "pyo3-build-config"
94
+ version = "0.29.0"
95
+ source = "registry+https://github.com/rust-lang/crates.io-index"
96
+ checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
97
+ dependencies = [
98
+ "target-lexicon",
99
+ ]
100
+
101
+ [[package]]
102
+ name = "pyo3-ffi"
103
+ version = "0.29.0"
104
+ source = "registry+https://github.com/rust-lang/crates.io-index"
105
+ checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
106
+ dependencies = [
107
+ "libc",
108
+ "pyo3-build-config",
109
+ ]
110
+
111
+ [[package]]
112
+ name = "pyo3-macros"
113
+ version = "0.29.0"
114
+ source = "registry+https://github.com/rust-lang/crates.io-index"
115
+ checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
116
+ dependencies = [
117
+ "proc-macro2",
118
+ "pyo3-macros-backend",
119
+ "quote",
120
+ "syn",
121
+ ]
122
+
123
+ [[package]]
124
+ name = "pyo3-macros-backend"
125
+ version = "0.29.0"
126
+ source = "registry+https://github.com/rust-lang/crates.io-index"
127
+ checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
128
+ dependencies = [
129
+ "heck",
130
+ "proc-macro2",
131
+ "quote",
132
+ "syn",
133
+ ]
134
+
135
+ [[package]]
136
+ name = "quote"
137
+ version = "1.0.46"
138
+ source = "registry+https://github.com/rust-lang/crates.io-index"
139
+ checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
140
+ dependencies = [
141
+ "proc-macro2",
142
+ ]
143
+
144
+ [[package]]
145
+ name = "syn"
146
+ version = "2.0.118"
147
+ source = "registry+https://github.com/rust-lang/crates.io-index"
148
+ checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
149
+ dependencies = [
150
+ "proc-macro2",
151
+ "quote",
152
+ "unicode-ident",
153
+ ]
154
+
155
+ [[package]]
156
+ name = "target-lexicon"
157
+ version = "0.13.5"
158
+ source = "registry+https://github.com/rust-lang/crates.io-index"
159
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
160
+
161
+ [[package]]
162
+ name = "thiserror"
163
+ version = "2.0.18"
164
+ source = "registry+https://github.com/rust-lang/crates.io-index"
165
+ checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
166
+ dependencies = [
167
+ "thiserror-impl",
168
+ ]
169
+
170
+ [[package]]
171
+ name = "thiserror-impl"
172
+ version = "2.0.18"
173
+ source = "registry+https://github.com/rust-lang/crates.io-index"
174
+ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
175
+ dependencies = [
176
+ "proc-macro2",
177
+ "quote",
178
+ "syn",
179
+ ]
180
+
181
+ [[package]]
182
+ name = "unicode-ident"
183
+ version = "1.0.24"
184
+ source = "registry+https://github.com/rust-lang/crates.io-index"
185
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
@@ -0,0 +1,13 @@
1
+ [workspace]
2
+ resolver = "3"
3
+ members = ["crates/*"]
4
+ # `crates/worktrees` is a tooling-created directory for git worktrees and
5
+ # `crates/graphify-out` is where a buggy graphify watcher drops its rebuild
6
+ # (the scan root is `crates/`, so `<root>/graphify-out` lands inside the
7
+ # member glob) - neither is a crate; exclude both so `crates/*` does not try
8
+ # to load them as members and break every cargo command.
9
+ exclude = ["crates/worktrees", "crates/graphify-out"]
10
+
11
+ [workspace.package]
12
+ version = "0.6.1"
13
+ edition = "2024"
itofin-0.6.1/PKG-INFO ADDED
@@ -0,0 +1,221 @@
1
+ Metadata-Version: 2.4
2
+ Name: itofin
3
+ Version: 0.6.1
4
+ Classifier: Programming Language :: Rust
5
+ Classifier: Programming Language :: Python :: Implementation :: CPython
6
+ Classifier: Programming Language :: Python :: 3.13
7
+ Classifier: License :: OSI Approved :: BSD License
8
+ Classifier: Topic :: Office/Business :: Financial :: Investment
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Intended Audience :: Financial and Insurance Industry
11
+ Classifier: Operating System :: OS Independent
12
+ Summary: Python bindings for libitofin: a Rust port of QuantLib for pricing, risk, and calibration.
13
+ Author-email: benbenbang <bn@bitbrew.dev>
14
+ License-Expression: BSD-3-Clause
15
+ Requires-Python: >=3.13
16
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
+ Project-URL: Homepage, https://github.com/benbenbang/libitofin
18
+ Project-URL: Issues, https://github.com/benbenbang/libitofin/issues
19
+ Project-URL: Repository, https://github.com/benbenbang/libitofin
20
+
21
+ # itofin
22
+
23
+ Idiomatic Python bindings over the [`libitofin`](https://github.com/benbenbang/libitofin) Rust core, a ground-up port of [QuantLib](https://github.com/lballabio/QuantLib) for pricing, risk, and calibration. The heavy numerics run in Rust; Python drives them. The pricing snippets below reproduce the cached Rust test oracles exactly; the abbreviated calibration snippets converge to the same targets within the tests' calibration tolerance (the full matrices live in `tests/`).
24
+
25
+ ## Install
26
+
27
+ ```bash
28
+ pip install itofin
29
+ ```
30
+
31
+ Requires Python >= 3.13.
32
+
33
+ ## Price a European option and its greeks
34
+
35
+ ```python
36
+ import itofin
37
+
38
+ s = itofin.Settings()
39
+ s.set_evaluation_date(itofin.Date(15, 6, 2026))
40
+ dc = itofin.DayCounter.actual360()
41
+
42
+ process = itofin.BlackScholesProcess(60.0, 0.08, 0.0, 0.30, itofin.Date(15, 6, 2026), dc)
43
+ option = itofin.VanillaOption(itofin.OptionType.Call, 65.0, itofin.Date(15, 6, 2026) + 90, s)
44
+ option.set_engine(process)
45
+
46
+ print(f"NPV {option.npv():.10f}")
47
+ print(f"delta {option.delta():.10f}")
48
+ print(f"vega {option.vega():.10f}")
49
+ print(f"rho {option.rho():.10f}")
50
+ ```
51
+
52
+ ```
53
+ NPV 2.1333684449
54
+ delta 0.3724827980
55
+ vega 11.3515440535
56
+ rho 5.0538998582
57
+ ```
58
+
59
+ ## Price under Heston and calibrate to a flat-vol surface
60
+
61
+ Semi-analytic Heston pricing:
62
+
63
+ ```python
64
+ import itofin
65
+
66
+ s = itofin.Settings()
67
+ s.set_evaluation_date(itofin.Date(27, 12, 2004))
68
+ dc = itofin.DayCounter.actual_actual_isda()
69
+
70
+ # HestonProcess(risk_free, dividend, spot, v0, kappa, theta, sigma, rho, reference_date, day_counter)
71
+ process = itofin.HestonProcess(
72
+ 0.0225, 0.02, 1.0, 0.1, 3.16, 0.09, 0.4, -0.2, itofin.Date(27, 12, 2004), dc
73
+ )
74
+ model = itofin.HestonModel(process)
75
+ option = itofin.VanillaOption(itofin.OptionType.Call, 1.05, itofin.Date(28, 3, 2005), s)
76
+ option.set_heston_engine(model, 64)
77
+
78
+ print(f"Heston NPV {option.npv():.10f}")
79
+ ```
80
+
81
+ ```
82
+ Heston NPV 0.0404774515
83
+ ```
84
+
85
+ Calibrating the model to a flat 10% vol surface drives the vol-of-vol `sigma` toward zero and both `v0` and `theta` toward the flat variance (0.10 squared = 0.01). The snippet below fits a 3-maturity by 3-strike grid; the full 21-helper matrix and its tighter tolerances live in `tests/test_heston_calibration.py`.
86
+
87
+ ```python
88
+ import math
89
+ import itofin
90
+
91
+ s = itofin.Settings()
92
+ s.set_evaluation_date(itofin.Date(15, 1, 2026))
93
+ dc = itofin.DayCounter.actual360()
94
+ ref = itofin.Date(15, 1, 2026)
95
+ risk_free = itofin.FlatForward(ref, 0.04, dc)
96
+ dividend = itofin.FlatForward(ref, 0.50, dc)
97
+ VOL = 0.10
98
+
99
+ helpers = []
100
+ for n in (1, 2, 3):
101
+ tau = float(n)
102
+ forward = dividend.discount(tau) / risk_free.discount(tau) # spot = 1.0
103
+ for moneyness in (-1.0, 0.0, 1.0):
104
+ strike = forward * math.exp(-moneyness * VOL * math.sqrt(tau))
105
+ helpers.append(itofin.HestonModelHelper(
106
+ itofin.Period(n, "Years"),
107
+ itofin.Calendar.null_calendar(),
108
+ 1.0, # spot
109
+ strike,
110
+ VOL, # 10% flat vol
111
+ 0.04, # risk-free
112
+ 0.50, # dividend yield
113
+ itofin.CalibrationErrorType.RelativePriceError,
114
+ ref,
115
+ dc,
116
+ s,
117
+ ))
118
+
119
+ process = itofin.HestonProcess(0.04, 0.50, 1.0, 0.01, 0.2, 0.02, 0.5, -0.75, ref, dc)
120
+ model = itofin.HestonModel(process)
121
+ method = itofin.LevenbergMarquardt(1e-8, 1e-8, 1e-8, False)
122
+ end_criteria = itofin.EndCriteria(400, 40, 1e-8, 1e-8, 1e-8)
123
+ model.calibrate(helpers, method, end_criteria, 96)
124
+
125
+ print(f"sigma {model.sigma():.6f}")
126
+ print(f"v0 {model.v0():.6f}")
127
+ print(f"theta {model.theta():.6f}")
128
+ ```
129
+
130
+ ```
131
+ sigma 0.000216
132
+ v0 0.010000
133
+ theta 0.010000
134
+ ```
135
+
136
+ ## Calibrate Hull-White to a swaption matrix
137
+
138
+ ```python
139
+ import itofin
140
+
141
+ s = itofin.Settings()
142
+ s.set_evaluation_date(itofin.Date(15, 2, 2002))
143
+ curve = itofin.FlatForward(itofin.Date(19, 2, 2002), 0.04875825, itofin.DayCounter.actual365_fixed())
144
+
145
+ model = itofin.HullWhite(curve, 0.1, 0.01)
146
+ index = itofin.Euribor.six_months(curve, s)
147
+
148
+ # (option tenor, swap tenor, Black vol); the full co-terminal matrix is in the tests.
149
+ swaptions = [(1, 5, 0.1148), (2, 4, 0.1108), (3, 3, 0.1070), (4, 2, 0.1021), (5, 1, 0.1000)]
150
+ helpers = [
151
+ itofin.SwaptionHelper(
152
+ itofin.Period(maturity, "Years"),
153
+ itofin.Period(length, "Years"),
154
+ vol,
155
+ index,
156
+ itofin.Period(1, "Years"),
157
+ itofin.DayCounter.thirty360_bond_basis(),
158
+ itofin.DayCounter.actual360(),
159
+ curve,
160
+ itofin.CalibrationErrorType.RelativePriceError,
161
+ 1.0,
162
+ )
163
+ for maturity, length, vol in swaptions
164
+ ]
165
+
166
+ method = itofin.LevenbergMarquardt(1e-8, 1e-8, 1e-8, False)
167
+ end_criteria = itofin.EndCriteria(10000, 100, 1e-6, 1e-8, 1e-8)
168
+ model.calibrate(helpers, method, end_criteria, False) # fix_reversion=False, fit a and sigma
169
+
170
+ print(f"a {model.a():.7f}")
171
+ print(f"sigma {model.sigma():.7f}")
172
+ ```
173
+
174
+ ```
175
+ a 0.0464113
176
+ sigma 0.0057992
177
+ ```
178
+
179
+ ## Price a European swaption with the Jamshidian engine
180
+
181
+ ```python
182
+ import itofin
183
+
184
+ s = itofin.Settings()
185
+ s.set_evaluation_date(itofin.Date(15, 1, 2026))
186
+ curve = itofin.FlatForward(itofin.Date(15, 1, 2026), 0.03, itofin.DayCounter.actual365_fixed())
187
+
188
+ fixed = itofin.Schedule(
189
+ itofin.Date(15, 1, 2028), itofin.Date(15, 1, 2033),
190
+ itofin.Frequency.Annual, itofin.Calendar.target(),
191
+ itofin.BusinessDayConvention.Unadjusted,
192
+ )
193
+ floating = itofin.Schedule(
194
+ itofin.Date(15, 1, 2028), itofin.Date(15, 1, 2033),
195
+ itofin.Frequency.Semiannual, itofin.Calendar.target(),
196
+ itofin.BusinessDayConvention.Unadjusted,
197
+ )
198
+ index = itofin.Euribor.six_months(curve, s)
199
+
200
+ swap = itofin.VanillaSwap(
201
+ itofin.SwapType.Payer, 100.0,
202
+ fixed, 0.03, itofin.DayCounter.thirty360_bond_basis(),
203
+ floating, index, 0.0, itofin.DayCounter.actual360(), s,
204
+ )
205
+ swaption = itofin.Swaption(
206
+ swap, itofin.EuropeanExercise(itofin.Date(15, 1, 2027)),
207
+ itofin.SettlementType.Physical, itofin.SettlementMethod.PhysicalOTC, s,
208
+ )
209
+ swaption.set_jamshidian_engine(itofin.HullWhite(curve, 0.05, 0.01))
210
+
211
+ print(f"payer swaption NPV {swaption.npv():.10f}")
212
+ ```
213
+
214
+ ```
215
+ payer swaption NPV 1.5666103956
216
+ ```
217
+
218
+ ## License
219
+
220
+ BSD-3-Clause, matching the `libitofin` core. See the [repository](https://github.com/benbenbang/libitofin) for the layer status table, the divergences-from-QuantLib catalogue, and the Rust test oracles behind the numbers above.
221
+
itofin-0.6.1/README.md ADDED
@@ -0,0 +1,200 @@
1
+ # itofin
2
+
3
+ Idiomatic Python bindings over the [`libitofin`](https://github.com/benbenbang/libitofin) Rust core, a ground-up port of [QuantLib](https://github.com/lballabio/QuantLib) for pricing, risk, and calibration. The heavy numerics run in Rust; Python drives them. The pricing snippets below reproduce the cached Rust test oracles exactly; the abbreviated calibration snippets converge to the same targets within the tests' calibration tolerance (the full matrices live in `tests/`).
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install itofin
9
+ ```
10
+
11
+ Requires Python >= 3.13.
12
+
13
+ ## Price a European option and its greeks
14
+
15
+ ```python
16
+ import itofin
17
+
18
+ s = itofin.Settings()
19
+ s.set_evaluation_date(itofin.Date(15, 6, 2026))
20
+ dc = itofin.DayCounter.actual360()
21
+
22
+ process = itofin.BlackScholesProcess(60.0, 0.08, 0.0, 0.30, itofin.Date(15, 6, 2026), dc)
23
+ option = itofin.VanillaOption(itofin.OptionType.Call, 65.0, itofin.Date(15, 6, 2026) + 90, s)
24
+ option.set_engine(process)
25
+
26
+ print(f"NPV {option.npv():.10f}")
27
+ print(f"delta {option.delta():.10f}")
28
+ print(f"vega {option.vega():.10f}")
29
+ print(f"rho {option.rho():.10f}")
30
+ ```
31
+
32
+ ```
33
+ NPV 2.1333684449
34
+ delta 0.3724827980
35
+ vega 11.3515440535
36
+ rho 5.0538998582
37
+ ```
38
+
39
+ ## Price under Heston and calibrate to a flat-vol surface
40
+
41
+ Semi-analytic Heston pricing:
42
+
43
+ ```python
44
+ import itofin
45
+
46
+ s = itofin.Settings()
47
+ s.set_evaluation_date(itofin.Date(27, 12, 2004))
48
+ dc = itofin.DayCounter.actual_actual_isda()
49
+
50
+ # HestonProcess(risk_free, dividend, spot, v0, kappa, theta, sigma, rho, reference_date, day_counter)
51
+ process = itofin.HestonProcess(
52
+ 0.0225, 0.02, 1.0, 0.1, 3.16, 0.09, 0.4, -0.2, itofin.Date(27, 12, 2004), dc
53
+ )
54
+ model = itofin.HestonModel(process)
55
+ option = itofin.VanillaOption(itofin.OptionType.Call, 1.05, itofin.Date(28, 3, 2005), s)
56
+ option.set_heston_engine(model, 64)
57
+
58
+ print(f"Heston NPV {option.npv():.10f}")
59
+ ```
60
+
61
+ ```
62
+ Heston NPV 0.0404774515
63
+ ```
64
+
65
+ Calibrating the model to a flat 10% vol surface drives the vol-of-vol `sigma` toward zero and both `v0` and `theta` toward the flat variance (0.10 squared = 0.01). The snippet below fits a 3-maturity by 3-strike grid; the full 21-helper matrix and its tighter tolerances live in `tests/test_heston_calibration.py`.
66
+
67
+ ```python
68
+ import math
69
+ import itofin
70
+
71
+ s = itofin.Settings()
72
+ s.set_evaluation_date(itofin.Date(15, 1, 2026))
73
+ dc = itofin.DayCounter.actual360()
74
+ ref = itofin.Date(15, 1, 2026)
75
+ risk_free = itofin.FlatForward(ref, 0.04, dc)
76
+ dividend = itofin.FlatForward(ref, 0.50, dc)
77
+ VOL = 0.10
78
+
79
+ helpers = []
80
+ for n in (1, 2, 3):
81
+ tau = float(n)
82
+ forward = dividend.discount(tau) / risk_free.discount(tau) # spot = 1.0
83
+ for moneyness in (-1.0, 0.0, 1.0):
84
+ strike = forward * math.exp(-moneyness * VOL * math.sqrt(tau))
85
+ helpers.append(itofin.HestonModelHelper(
86
+ itofin.Period(n, "Years"),
87
+ itofin.Calendar.null_calendar(),
88
+ 1.0, # spot
89
+ strike,
90
+ VOL, # 10% flat vol
91
+ 0.04, # risk-free
92
+ 0.50, # dividend yield
93
+ itofin.CalibrationErrorType.RelativePriceError,
94
+ ref,
95
+ dc,
96
+ s,
97
+ ))
98
+
99
+ process = itofin.HestonProcess(0.04, 0.50, 1.0, 0.01, 0.2, 0.02, 0.5, -0.75, ref, dc)
100
+ model = itofin.HestonModel(process)
101
+ method = itofin.LevenbergMarquardt(1e-8, 1e-8, 1e-8, False)
102
+ end_criteria = itofin.EndCriteria(400, 40, 1e-8, 1e-8, 1e-8)
103
+ model.calibrate(helpers, method, end_criteria, 96)
104
+
105
+ print(f"sigma {model.sigma():.6f}")
106
+ print(f"v0 {model.v0():.6f}")
107
+ print(f"theta {model.theta():.6f}")
108
+ ```
109
+
110
+ ```
111
+ sigma 0.000216
112
+ v0 0.010000
113
+ theta 0.010000
114
+ ```
115
+
116
+ ## Calibrate Hull-White to a swaption matrix
117
+
118
+ ```python
119
+ import itofin
120
+
121
+ s = itofin.Settings()
122
+ s.set_evaluation_date(itofin.Date(15, 2, 2002))
123
+ curve = itofin.FlatForward(itofin.Date(19, 2, 2002), 0.04875825, itofin.DayCounter.actual365_fixed())
124
+
125
+ model = itofin.HullWhite(curve, 0.1, 0.01)
126
+ index = itofin.Euribor.six_months(curve, s)
127
+
128
+ # (option tenor, swap tenor, Black vol); the full co-terminal matrix is in the tests.
129
+ swaptions = [(1, 5, 0.1148), (2, 4, 0.1108), (3, 3, 0.1070), (4, 2, 0.1021), (5, 1, 0.1000)]
130
+ helpers = [
131
+ itofin.SwaptionHelper(
132
+ itofin.Period(maturity, "Years"),
133
+ itofin.Period(length, "Years"),
134
+ vol,
135
+ index,
136
+ itofin.Period(1, "Years"),
137
+ itofin.DayCounter.thirty360_bond_basis(),
138
+ itofin.DayCounter.actual360(),
139
+ curve,
140
+ itofin.CalibrationErrorType.RelativePriceError,
141
+ 1.0,
142
+ )
143
+ for maturity, length, vol in swaptions
144
+ ]
145
+
146
+ method = itofin.LevenbergMarquardt(1e-8, 1e-8, 1e-8, False)
147
+ end_criteria = itofin.EndCriteria(10000, 100, 1e-6, 1e-8, 1e-8)
148
+ model.calibrate(helpers, method, end_criteria, False) # fix_reversion=False, fit a and sigma
149
+
150
+ print(f"a {model.a():.7f}")
151
+ print(f"sigma {model.sigma():.7f}")
152
+ ```
153
+
154
+ ```
155
+ a 0.0464113
156
+ sigma 0.0057992
157
+ ```
158
+
159
+ ## Price a European swaption with the Jamshidian engine
160
+
161
+ ```python
162
+ import itofin
163
+
164
+ s = itofin.Settings()
165
+ s.set_evaluation_date(itofin.Date(15, 1, 2026))
166
+ curve = itofin.FlatForward(itofin.Date(15, 1, 2026), 0.03, itofin.DayCounter.actual365_fixed())
167
+
168
+ fixed = itofin.Schedule(
169
+ itofin.Date(15, 1, 2028), itofin.Date(15, 1, 2033),
170
+ itofin.Frequency.Annual, itofin.Calendar.target(),
171
+ itofin.BusinessDayConvention.Unadjusted,
172
+ )
173
+ floating = itofin.Schedule(
174
+ itofin.Date(15, 1, 2028), itofin.Date(15, 1, 2033),
175
+ itofin.Frequency.Semiannual, itofin.Calendar.target(),
176
+ itofin.BusinessDayConvention.Unadjusted,
177
+ )
178
+ index = itofin.Euribor.six_months(curve, s)
179
+
180
+ swap = itofin.VanillaSwap(
181
+ itofin.SwapType.Payer, 100.0,
182
+ fixed, 0.03, itofin.DayCounter.thirty360_bond_basis(),
183
+ floating, index, 0.0, itofin.DayCounter.actual360(), s,
184
+ )
185
+ swaption = itofin.Swaption(
186
+ swap, itofin.EuropeanExercise(itofin.Date(15, 1, 2027)),
187
+ itofin.SettlementType.Physical, itofin.SettlementMethod.PhysicalOTC, s,
188
+ )
189
+ swaption.set_jamshidian_engine(itofin.HullWhite(curve, 0.05, 0.01))
190
+
191
+ print(f"payer swaption NPV {swaption.npv():.10f}")
192
+ ```
193
+
194
+ ```
195
+ payer swaption NPV 1.5666103956
196
+ ```
197
+
198
+ ## License
199
+
200
+ BSD-3-Clause, matching the `libitofin` core. See the [repository](https://github.com/benbenbang/libitofin) for the layer status table, the divergences-from-QuantLib catalogue, and the Rust test oracles behind the numbers above.
@@ -0,0 +1,16 @@
1
+ [package]
2
+ name = "itofin-py"
3
+ version.workspace = true
4
+ edition.workspace = true
5
+ readme = "README.md"
6
+
7
+ [lib]
8
+ name = "itofin"
9
+ crate-type = ["cdylib"]
10
+
11
+ [features]
12
+ extension-module = ["pyo3/extension-module"]
13
+
14
+ [dependencies]
15
+ libitofin = { path = "../libitofin" }
16
+ pyo3 = { version = "0.29", features = ["abi3-py313"] }