U
    iâËd  ã                   @   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r´e ¡  dS )é    N)Únjit)Úregister_jitable)ÚTestCaseg{®Gáz”?g333333Ó?gìø’:¿pÔ?g[2¨åðÑÖ¿gh^_ï€ü?gÐxòNÝ#ý¿gC)ôÖÍHõ?gQ6Ô3EˆÙ?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   úV/home/sam/Atlas/atlas_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   

	

&