U
    9%e                     @   s   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d Zedd Zedd Zedd Zdd ZG dd de	Zedkre  dS )    N)njit)register_jitable)TestCaseg{Gz?g333333?g:p?g[2ֿgh^_?gxN#gC)H?gQ63E?c                 C   sj   dddt |    }tt d|  |   |t|t|t|t|t          }t 	| dkd| |S N      ?gqq?g      r   )
npabsRSQRT2PIexpA1A2A3A4A5wheredKZret_val r   \/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_blackscholes.py	cnd_array   s
    &r   c                 C   sh   dddt |    }tt d|  |   |t|t|t|t|t          }| dkrdd| }|S r   )	mathfabsr	   r
   r   r   r   r   r   r   r   r   r   cnd   s    &r   c                 C   s   | }|}|}|}|}	t |}
t || |d|	 |	  |  |	|
  }||	|
  }t|}t|}t | | }|| || |  }|| d|  |d|   }||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	putResultr   r   r   blackscholes_arrayexpr)   s    
*r/   c                 C   s   |}|}|}	|}
|}t t|D ]}t|	| }t|| ||  |
d| |  |	|   ||  }|||  }t|}t|}td|
 |	|  }|| | || | |  | |< || | d|  || d|   ||< q d S )Nr   g      r   )rangelenr   r   r   r   r
   )r-   r.   r   r   r   r    r!   r"   r#   r$   r%   r&   ir'   r(   r)   r*   r+   r,   r   r   r   blackscholes_scalar>   s    6 r3   c                 C   s   d|  | | |  S )Nr   r   )Zrand_varlowhighr   r   r   	randfloatR   s    r6   c                   @   s   e Zd Zdd Zdd ZdS )TestBlackScholesc                 C   s   d}t | j|dd}t | j|dd}t | j|dd}|||ttf}tj| \}}t| \}}	t|| }
| 	|

 d d S 	Ni  g      @g      >@r   g      Y@g      ?g      $@r   )r6   randomrandom_sampleRISKFREE
VOLATILITYr/   py_funcr   r   assertAlmostEqualmax)selfOPT_Nr   r   r   argscallResultGoldputResultGoldcallResultNumbaputResultNumbadeltar   r   r   test_array_exprW   s    z TestBlackScholes.test_array_exprc                 C   s   d}t |}t |}t |}t |}t| j|dd}t| j|dd}t| j|dd}|||ttf}	tj||f|	  t||f|	  t 	|| }
| 
|
 d d S r8   )r   Zzerosr6   r9   r:   r;   r<   r3   r=   r   r>   r?   )r@   rA   rC   rD   rE   rF   r   r   r   rB   rG   r   r   r   test_scalarf   s    



zTestBlackScholes.test_scalarN)__name__
__module____qualname__rH   rI   r   r   r   r   r7   V   s   r7   __main__)r   numpyr   ZunittestZnumbar   Znumba.extendingr   Znumba.tests.supportr   r;   r<   r   r   r   r   r   r	   r   r   r/   r3   r6   r7   rJ   mainr   r   r   r   <module>   s2   

	

&