Ë
    èÿæi  ã                   óê   — d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 dZ
dZdZdZd	Zd
ZdZdZed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Z G d„ de	«      Zedk(  r ej2                  «        yy)é    N)Únjit)Úregister_jitable)ÚTestCaseg{®Gáz”?g333333Ó?gìø’:¿pÔ?g[2¨åðÑÖ¿gh^_ï€ü?gÐxòNÝ#ý¿gC)ôÖÍHõ?gQ6Ô3EˆÙ?c                 ó   — dddt        j                  | «      z  z   z  }t        t        j                  d| z  | z  «      z  |t        |t
        |t        |t        |t        z  z   z  z   z  z   z  z   z  z  }t        j                  | dkD  d|z
  |«      S ©Nç      ð?gqq¦Í?g      à¿r   )
ÚnpÚabsÚRSQRT2PIÚexpÚA1ÚA2ÚA3ÚA4ÚA5Úwhere©ÚdÚKÚret_vals      úr/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_blackscholes.pyÚ	cnd_arrayr      sˆ   € àˆs�Y¤§¡¨£Ñ*Ñ*Ñ+€AÜœ"Ÿ&™& ¨¡¨A¡Ó.Ñ.Ø”R˜!œr A¬¨a´2¸¼B¹±;Ñ.?Ñ)?Ñ$@Ñ@ÑAÑAÑBñD€Gä�8‰8�A˜‘E˜3 ™=¨'Ó2Ð2ó    c                 óþ   — dddt        j                  | «      z  z   z  }t        t        j                  d| z  | z  «      z  |t        |t
        |t        |t        |t        z  z   z  z   z  z   z  z   z  z  }| dkD  rd|z
  }|S r   )	ÚmathÚfabsr   r   r   r   r   r   r   r   s      r   Úcndr      s‚   € àˆs�Y¤§¡¨1£Ñ-Ñ-Ñ.€AÜœ$Ÿ(™( 4¨!¡8¨a¡<Ó0Ñ0Ø”R˜!œr A¬¨a´2¸¼B¹±;Ñ.?Ñ)?Ñ$@Ñ@ÑAÑAÑBñD€Gàˆ1‚uØ˜‘-ˆØ€Nr   c                 óT  — | }|}|}|}|}	t        j                  |«      }
t        j                  ||z  «      |d|	z  |	z  z   |z  z   |	|
z  z  }||	|
z  z
  }t        |«      }t        |«      }t        j                  | |z  «      }||z  ||z  |z  z
  }||z  d|z
  z  |d|z
  z  z
  }||fS )Nç      à?r   )r	   ÚsqrtÚlogr   r   )Ú
stockPriceÚoptionStrikeÚoptionYearsÚRiskfreeÚ
VolatilityÚSÚXÚTÚRÚVÚsqrtTÚd1Úd2Úcndd1Úcndd2ÚexpRTÚ
callResultÚ	putResults                     r   Úblackscholes_arrayexprr4   )   sÎ   € ð 	€AØ€AØ€AØ€AØ€AÜ�G‰G�A‹J€EÜ
�&‰&��Q‘‹-˜1˜s Q™w¨™{™?¨aÑ/Ñ
/°A¸±IÑ	>€BØ	ˆa�%‰i‰€BÜ�b‹M€EÜ�b‹M€Eä�F‰F�Q�3˜‘7‹O€Eà�e‘)˜a %™i¨%Ñ/Ñ/€JØ�U‘˜c E™kÑ*¨Q°#¸±+Ñ->Ñ>€IØ�yÐ Ð r   c                 óÆ  — |}|}|}	|}
|}t        t        |«      «      D ]À  }t        j                  |	|   «      }t        j                  ||   ||   z  «      |
d|z  |z  z   |	|   z  z   ||z  z  }|||z  z
  }t        |«      }t        |«      }t        j                  d|
z  |	|   z  «      }||   |z  ||   |z  |z  z
  | |<   ||   |z  d|z
  z  ||   d|z
  z  z
  ||<   ŒÂ y )Nr   g      ð¿r   )ÚrangeÚlenr   r    r!   r   r   )r2   r3   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Úir,   r-   r.   r/   r0   r1   s                      r   Úblackscholes_scalarr9   >   s  € ð 	€AØ€AØ€AØ€AØ€AÜ”3�q“6Ž]ˆÜ—	‘	˜!˜A™$“ˆÜ�h‰h�q˜‘t˜a ™d‘{Ó# q¨3°©7°Q©;¡¸!¸A¹$Ñ&>Ñ>À1ÀuÁ9ÑMˆØ�!�e‘)‰^ˆÜ�B“ˆÜ�B“ˆä—‘˜# ™' Q q¡TÑ)Ó*ˆØ˜1™ ™¨¨!©¨u©°uÑ(<Ñ<ˆ
�1‰Ø˜!™˜u™¨¨e©Ñ4°q¸±t¸sÀU¹{Ñ7KÑKˆ	�!Šñ r   c                 ó   — d| z
  |z  | |z  z   S )Nr   © )Úrand_varÚlowÚhighs      r   Ú	randfloatr?   R   s   € Ø�(‰N˜cÑ! H¨t¡OÑ3Ð3r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestBlackScholesc                 óº  — d}t        | j                  j                  |«      dd«      }t        | j                  j                  |«      dd«      }t        | j                  j                  |«      dd«      }|||t        t        f}t        j                  |Ž \  }}t        |Ž \  }}	t        j                  ||z
  «      }
| j                  |
j                  «       d«       y ©	Ni�  g      @g      >@r   g      Y@g      Ð?g      $@r   )r?   ÚrandomÚrandom_sampleÚRISKFREEÚ
VOLATILITYr4   Úpy_funcr	   r
   ÚassertAlmostEqualÚmax)ÚselfÚOPT_Nr"   r#   r$   ÚargsÚcallResultGoldÚputResultGoldÚcallResultNumbaÚputResultNumbaÚdeltas              r   Útest_array_exprz TestBlackScholes.test_array_exprW   s»   € Øˆä˜tŸ{™{×8Ñ8¸Ó?ÀÀdÓKˆ
Ü  §¡×!:Ñ!:¸5Ó!AÀ3ÈÓNˆÜ §¡× 9Ñ 9¸%Ó @À$ÈÓMˆà˜<¨´hÄ
ÐJˆä(>×(FÑ(FÈÐ(MÑ%ˆ˜Ü*@À$Ð*GÑ'ˆ˜ä—‘�~¨Ñ7Ó8ˆØ×Ñ˜uŸy™y›{¨AÕ.r   c                 ój  — d}t        j                  |«      }t        j                  |«      }t        j                  |«      }t        j                  |«      }t        | j                  j	                  |«      dd«      }t        | j                  j	                  |«      dd«      }t        | j                  j	                  |«      dd«      }|||t
        t        f}	t        j                  ||g|	¢­Ž  t        ||g|	¢­Ž  t        j                  ||z
  «      }
| j                  |
j                  «       d«       y rC   )r	   Úzerosr?   rD   rE   rF   rG   r9   rH   r
   rI   rJ   )rK   rL   rN   rO   rP   rQ   r"   r#   r$   rM   rR   s              r   Útest_scalarzTestBlackScholes.test_scalarf   sï   € ØˆäŸ™ %›ˆÜŸ™ ›ˆäŸ(™( 5›/ˆÜŸ™ %›ˆä˜tŸ{™{×8Ñ8¸Ó?ÀÀdÓKˆ
Ü  §¡×!:Ñ!:¸5Ó!AÀ3ÈÓNˆÜ §¡× 9Ñ 9¸%Ó @À$ÈÓMˆà˜<¨´hÄ
ÐJˆä×#Ñ# N°MÐIÀDÓIÜ˜O¨^ÐC¸dÓCä—‘�~¨Ñ7Ó8ˆØ×Ñ˜uŸy™y›{¨AÕ.r   N)Ú__name__Ú
__module__Ú__qualname__rS   rV   r;   r   r   rA   rA   V   s   „ ò/ó/r   rA   Ú__main__)r   Únumpyr	   ÚunittestÚnumbar   Únumba.extendingr   Únumba.tests.supportr   rF   rG   r   r   r   r   r   r   r   r   r4   r9   r?   rA   rW   Úmainr;   r   r   Ú<module>ra      sÁ   ðÛ ã ã Ý Ý ,Ý (ð €Ø€
ð €Ø€Ø€Ø€Ø€Ø-€ð ñ3ó ð3ð ñó ðð ñ!ó ð!ð( ñMó ðMò&4ô#/�xô #/ðL ˆzÒØ€H‡M�M…Oð r   