ó
\K]c           @  s  d  d l  m Z d  d l Z d  d l Z d  d l j Z d  d l m	 Z	 m
 Z
 m Z d  d l m Z m Z d d l m Z d Z d Z d	 Z d
 Z d Z d Z d Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ  e! d k re j" ƒ  n  d S(   iÿÿÿÿ(   t   print_functionN(   t   compile_isolatedt   compile_extrat   Flags(   t   typest   typingi   (   t   TestCaseg{®Gáz”?g333333Ó?gìø’:¿pÔ?g[2¨åðÑÖ¿gh^_ï€ü?gÐxòNÝ#ý¿gC)ôÖÍHõ?gQ6Ô3EˆÙ?c         C  s{   d d d t  j |  ƒ } t t  j d |  |  ƒ | t | t | t | t | t } t  j	 |  d k d | | ƒ S(   Ng      ð?gqq¦Í?g      à¿i    (
   t   npt   abst   RSQRT2PIt   expt   A1t   A2t   A3t   A4t   A5t   where(   t   dt   Kt   ret_val(    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt	   cnd_array   s    +c         C  s{   d d d t  j |  ƒ } t t  j d |  |  ƒ | t | t | t | t | t } |  d k rw d | } n  | S(   Ng      ð?gqq¦Í?g      à¿i    (	   t   matht   fabsR	   R
   R   R   R   R   R   (   R   R   R   (    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   cnd    s    +c         C  sÔ   |  } | } | } | } | }	 t  j | ƒ }
 t  j | | ƒ | d |	 |	 | |	 |
 } | |	 |
 } t | ƒ } t | ƒ } t  j | | ƒ } | | | | | } | | d | | d | } | | f S(   Ng      à?g      ð?(   R   t   sqrtt   logR   R
   (   t
   stockPricet   optionStriket   optionYearst   Riskfreet
   Volatilityt   St   Xt   Tt   Rt   Vt   sqrtTt   d1t   d2t   cndd1t   cndd2t   expRTt
   callResultt	   putResult(    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   blackscholes_arrayexpr)   s    /c         C  sÔ   |  } | } | } | } | }	 t  j | ƒ }
 t  j | | ƒ | d |	 |	 | |	 |
 } | |	 |
 } t | ƒ } t | ƒ } t  j | | ƒ } | | | | | } | | d | | d | } | | f S(   Ng      à?g      ð?(   R   R   R   t   cnd_array_jittedR
   (   R   R   R   R   R   R   R    R!   R"   R#   R$   R%   R&   R'   R(   R)   R*   R+   (    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   blackscholes_arrayexpr_jitted=   s    /c         C  s  | } | } | }	 | }
 | } xõ t  t | ƒ ƒ D]á } t j |	 | ƒ } t j | | | | ƒ |
 d | | |	 | | | } | | | } t | ƒ } t | ƒ } t j d |
 |	 | ƒ } | | | | | | | |  | <| | | d | | | d | | | <q1 Wd  S(   Ng      à?g      ð¿g      ð?(   t   ranget   lenR   R   R   R   R
   (   R*   R+   R   R   R   R   R   R   R    R!   R"   R#   t   iR$   R%   R&   R'   R(   R)   (    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   blackscholes_scalarQ   s    ;"c         C  s  | } | } | }	 | }
 | } xõ t  t | ƒ ƒ D]á } t j |	 | ƒ } t j | | | | ƒ |
 d | | |	 | | | } | | | } t | ƒ } t | ƒ } t j d |
 |	 | ƒ } | | | | | | | |  | <| | | d | | | d | | | <q1 Wd  S(   Ng      à?g      ð¿g      ð?(   R/   R0   R   R   R   t
   cnd_jittedR
   (   R*   R+   R   R   R   R   R   R   R    R!   R"   R#   R1   R$   R%   R&   R'   R(   R)   (    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   blackscholes_scalar_jittedd   s    ;"c         C  s   d |  | |  | S(   Ng      ð?(    (   t   rand_vart   lowt   high(    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt	   randfloatw   s    t   TestBlackScholesc           B  s   e  Z d  „  Z d „  Z RS(   c         C  s•  t  ƒ  } | j d ƒ t j } t j | d d ƒ } t t d | f d | ƒ} | j a t t	 d | | | | | f d | ƒ} | j } d } d } t
 |  j j | ƒ d d	 ƒ }	 t
 |  j j | ƒ d
 d ƒ }
 t
 |  j j | ƒ d d ƒ } |	 |
 | t t f } t | Œ  \ } } | | Œ  \ } } t j | | ƒ } | j ƒ  t j | ƒ j ƒ  } t d | ƒ t d | j ƒ  ƒ |  j | j ƒ  d ƒ d  S(   Nt   enable_pyobjecti   t   Ct   argst   flagsi  i
   g      @g      >@g      ð?g      Y@g      Ð?g      $@s   L1 norm: %Es   Max absolute error: %Ei    (   R   t   setR   t   float64t   ArrayR   R   t   entry_pointR-   R.   R8   t   randomt   random_samplet   RISKFREEt
   VOLATILITYR,   R   R   t   sumt   printt   maxt   assertEqual(   t   selfR=   t   scaltyt   arrtyt   cr1t   cr2t	   jitted_bst   OPT_Nt
   iterationsR   R   R   R<   t   callResultGoldt   putResultGoldt   callResultNumbat   putResultNumbat   deltat   L1norm(    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   test_array_expr|   s.    						c         C  s  t  ƒ  } t t t j f ƒ } | j a | j } | j } t	 j
 d t | j g ƒ } | j t | ƒ t j t j d d ƒ } | f d t j t j f } t | | t d | d d  d | d i  ƒ} | j }	 d	 }
 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 | | | Œ |	 | | | Œ t j | | ƒ } | j ƒ  t j | ƒ j ƒ  } t d | ƒ t d | j ƒ  ƒ |  j | j ƒ  d ƒ d  S(   NR3   i   R;   i   R<   t   return_typeR=   t   localsi  i
   g      @g      >@g      ð?g      Y@g      Ð?g      $@s   L1 norm: %Es   Max absolute error: %Ei    (   R   R   R   R   R?   RA   R3   t   typing_contextt   target_contextR   t   make_concrete_templatet	   signaturet   insert_user_functionR@   R   R4   t   NoneR   t   zerosR8   RB   RC   RD   RE   R2   R   RF   RG   RH   t   assertAlmostEqual(   RJ   R=   RM   t   tyctxt   ctxR^   t   arrayt   argtysRN   RO   RP   RQ   RR   RS   RT   RU   R   R   R   R<   RV   RW   (    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   test_scalar   s>    						(   t   __name__t
   __module__RX   Rg   (    (    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyR9   {   s   	!t   __main__(#   t
   __future__R    R   t   numpyR   t   numba.unittest_supportt   unittest_supportt   unittestt   numba.compilerR   R   R   t   numbaR   R   t   supportR   RD   RE   R   R   R   R   R   R	   R   R   R,   R.   R2   R4   R8   R9   Rh   t   main(    (    (    s<   lib/python2.7/site-packages/numba/tests/test_blackscholes.pyt   <module>   s0   								Q