
    xKg                         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{Gz?g333333?g:p?g[2ֿgh^_?gxN#gC)H?gQ63E?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      a/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_blackscholes.py	cnd_arrayr      s    sY**+A"&&A..R!rAa2B;.?)?$@@AABDG88AE3='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    sY1--.A$((4!8a<00R!rAa2B;.?)?$@@AABDG1u-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GGAJE
&&Q-1sQw{?a/
/AI	>B	a%iBbMEbMEFFQ37OEe)a%i%//JUcEk*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3q6]		!A$hhqtad{#q37Q;!A$&>>1u9M!e)^BB#'QqT)*1!uu(<<
1!ue4qtsU{7KK	! r   c                     d| z
  |z  | |z  z   S )Nr    )rand_varlowhighs      r   	randfloatr?   R   s    (Nc!HtO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!A3N 9 9% @$M<h
J(>(F(F(M%*@$*G'~78uyy{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!A3N 9 9% @$M<h
J##NMIDIO^CdC~78uyy{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HMMO r   