
    J/Ph                     
   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{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k    d|z
  |          S N      ?gqq?g      r   )
npabsRSQRT2PIexpA1A2A3A4A5wheredKret_vals      ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_blackscholes.py	cnd_arrayr      s    sY**+A"&A...R!rAa2B;.?)?$@@AABDG8AE3='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    sY1--.A$(4!8a<000R!rAa2B;.?)?$@@AABDG1uu-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GAJJE
&Q--1sQw{?a/
/AI	>B	a%iBbMMEbMMEFQ37OOE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
  ||<   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3q66]] 	M 	M	!A$hqtad{##q37Q;!A$&>>1u9M!e)^BB#'QqT)**1!uu(<<
1!ue4qtsU{7KK	!	M 	M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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!A3NN 9 9% @ @$MM<h
J(>(F(M%*@$*G'~788uyy{{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!A3NN 9 9% @ @$MM<h
J#NMIDIIIIO^CdCCCC~788uyy{{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HMOOOOO r   