§
    ƒÛg  ã                   ó
  — 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j        ¦   «          dS dS )é    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k    d|z
  |¦  «        S ©Nç      ð?gqq¦Í?g      à¿r   )
ÚnpÚabsÚRSQRT2PIÚexpÚA1ÚA2ÚA3ÚA4ÚA5Úwhere©ÚdÚKÚret_vals      úS/granary/edev/quantum/lib/python3.11/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�A˜’E˜3 ™=¨'Ñ2Ô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k    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Ñ0Ø•R˜!�r A­¨aµ2¸½B¹±;Ñ.?Ñ)?Ñ$@Ñ@ÑAÑAÑBñD€Gàˆ1‚u€uØ˜‘-ˆØ€Nr   c                 ó^  — | }|}|}|}|}	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�A‰JŒJ€EÝ
Œ&��Q‘‰-Œ-˜1˜s Q™w¨™{™?¨aÑ/Ñ
/°A¸±IÑ	>€BØ	ˆa�%‰i‰€BÝ�b‰MŒM€EÝ�b‰MŒM€EåŒF�Q�3˜‘7‰OŒ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
  ||<   Œád S )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”6‰]Œ]ð 	Mð 	MˆÝ”	˜!˜Aœ$‘”ˆÝŒ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ˆ	�!‰ˆð	Mð 	M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dS )ÚTestBlackScholesc                 óÚ  — d}t          | j                             |¦  «        dd¦  «        }t          | j                             |¦  «        dd¦  «        }t          | j                             |¦  «        dd¦  «        }|||t          t          f}t          j        |Ž \  }}t          |Ž \  }}	t          j        ||z
  ¦  «        }
|  	                    |
 
                    ¦   «         d¦  «         d S ©	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ÔKˆ
Ý  ¤×!:Ò!:¸5Ñ!AÔ!AÀ3ÈÑNÔNˆÝ ¤× 9Ò 9¸%Ñ @Ô @À$ÈÑMÔMˆà˜<¨µhÅ
ÐJˆå(>Ô(FÈÐ(MÑ%ˆ˜Ý*@À$Ð*GÑ'ˆ˜å”�~¨Ñ7Ñ8Ô8ˆØ×Ò˜uŸyšy™{œ{¨AÑ.Ô.Ð.Ð.Ð.r   c                 ó‚  — d}t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          | j                             |¦  «        dd¦  «        }t          | j                             |¦  «        dd¦  «        }t          | j                             |¦  «        dd¦  «        }|||t
          t          f}	t          j        ||g|	¢R Ž  t          ||g|	¢R Ž  t          j	        ||z
  ¦  «        }
|  
                    |
                     ¦   «         d¦  «         d S 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ÔKˆ
Ý  ¤×!:Ò!:¸5Ñ!AÔ!AÀ3ÈÑNÔNˆÝ ¤× 9Ò 9¸%Ñ @Ô @À$ÈÑMÔMˆà˜<¨µhÅ
ÐJˆåÔ# N°MÐIÀDÐIÐIÐIÐIÝ˜O¨^ÐC¸dÐCÐCÐCÐCå”�~¨Ñ7Ñ8Ô8ˆØ×Ò˜uŸyšy™{œ{¨AÑ.Ô.Ð.Ð.Ð.r   N)Ú__name__Ú
__module__Ú__qualname__rS   rV   r;   r   r   rA   rA   V   s2   € € € € € ð/ð /ð /ð/ð /ð /ð /ð /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      sV  ðØ €€€à Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø (Ð (Ð (Ð (Ð (Ð (ð €Ø€
ð €Ø€Ø€Ø€Ø€Ø-€ð ð3ð 3ñ Ôð3ð ðð ñ Ôðð ð!ð !ñ „ð!ð( ðMð Mñ „ðMð&4ð 4ð 4ð#/ð #/ð #/ð #/ð #/�xñ #/ô #/ð #/ðL ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   