
    J/Ph                         d dl Zd dlZd dlmZmZmZ d dlmZm	Z	 dZ
dZdZdZdZd	Zd
ZdZd Zd Zd Z G d de	          Zedk    r ej                     dS dS )    N)cudadoublevoid)unittestCUDATestCaseg{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      i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/tests/cudapy/test_blackscholes.pycndr      s    sY**+A"&A...R!rAa2B;.?)?$@@AABDG8AE3='222    c                 n   |}|}|}	|}
|}t          j        |	          }t          j        ||z            |
d|z  |z  z   |	z  z   ||z  z  }|||z  z
  }t          |          }t          |          }t          j        |
 |	z            }||z  ||z  |z  z
  | d d <   ||z  d|z
  z  |d|z
  z  z
  |d d <   d S )N      ?r
   )r   sqrtlogr   r   )
callResult	putResult
stockPriceoptionStrikeoptionYearsRiskfree
VolatilitySXTRVsqrtTd1d2cndd1cndd2expRTs                     r   black_scholesr2      s    AAAAAGAJJE
&Q--1sQw{?a/
/AI	>B	a%iBGGEGGEFQ37OOEYUU!22JqqqMIu-S5[0AAIaaaLLLr   c                     d| z
  |z  | |z  z   S )Nr
    )rand_varlowhighs      r   	randfloatr8   +   s    (Nc!HtO33r   c                       e Zd Zd ZdS )TestBlackScholesc                    d}d}t          t          j                            |          dd          }t          t          j                            |          dd          }t          t          j                            |          dd          }t          j        |          }t          j        |           }t          j        |          }t          j        |           }	t          |          D ]!}
t          |||||t          t                     "t          j
        t          t                    d	d	
          d             t          j
        t          t          d d          t          d d          t          d d          t          d d          t          d d          t          t                              fd            }d}t          t          j        t!          |          |d         z                      df}t          j                    }t          j        ||          }t          j        |	|          }t          j        ||          }t          j        ||          }t          j        ||          }t          |          D ]&}
 ||||f         |||||t          t                     '|                    ||           |                    |	|           |                                 t          j        ||z
            }|                                t          j        |                                          z  }|                                }|                     |dk                |                     |dk                d S )Ni     g      @g      >@r
   g      Y@g      ?g      $@T)deviceinlinec                    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   cnd_cudaz4TestBlackScholes.test_blackscholes.<locals>.cnd_cudaC   s    sY1556A$(4!8a<"8"88R!rAa2B;6G1G,H'H"IIJLG1uu-Nr   c                 D   t           j        j        t           j        j        t           j        j        z  z   }||j        d         k    rd S t          j        ||                   }t          j        ||         ||         z            |d|z  |z  z   ||         z  z   ||z  z  }	|	||z  z
  }
 |	          } |
          }t          j	        d|z  ||         z            }||         |z  ||         |z  |z  z
  | |<   ||         |z  d|z
  z  ||         d|z
  z  z
  ||<   d S )Nr   r   g      r
   )
r   	threadIdxxblockIdxblockDimshaper@   r   r   r   )r    r!   r'   r(   r)   r*   r+   ir,   r-   r.   r/   r0   r1   rB   s                 r   black_scholes_cudaz>TestBlackScholes.test_blackscholes.<locals>.black_scholes_cudaL   s     4=?T]_#DDAAGAJIadOOE8AaD1Q4K((Aa!Oqt+CCY Ba%iBHRLLEHRLLEHcAg1-..EqTE\AaD5L5,@@JqMaD5LC%K81Q43;;OOIaLLLr   )i      r   rK   gvIh%<=)r8   r   randomzerosonesranger2   RISKFREE
VOLATILITYr   jitr   r   intr@   ceilfloatstream	to_devicecopy_to_hostsynchronizer   summax
assertTrue)selfOPT_N
iterationsr"   r#   r$   callResultNumpyputResultNumpycallResultNumbaputResultNumbarI   rJ   blockdimgriddimrV   d_callResultd_putResultd_stockPriced_optionStriked_optionYearsdeltaL1normmax_abs_errrB   s                          @r   test_blackscholesz"TestBlackScholes.test_blackscholes0   s7   
ry//66TBB
 !1!1%!8!8#uEE	 0 0 7 7tDD(5//'%..(5//'%.. z"" 	K 	KA/>:&XzK K K K 
&..d	;	;	;	 	 
<	;	 
$vaaay&)VAAAYqqq	6!!!9v' ' 
( 
(	Q 	Q 	Q 	Q
( 
(	Q  diex{ :;;<<a?~ov>>n^V<<~j&99f=={F;;z"" 	5 	5A9w&89k<x5 5 5 5 	!!/6:::  888899rvo66::<<<iikk'''e+,,,,,r   N)__name__
__module____qualname__rn   r4   r   r   r:   r:   /   s(        D- D- D- D- D-r   r:   __main__)numpyr   r@   numbar   r   r   numba.cuda.testingr   r   rP   rQ   r   r   r   r   r   r   r   r2   r8   r:   ro   mainr4   r   r   <module>rw      s        $ $ $ $ $ $ $ $ $ $ 5 5 5 5 5 5 5 5 
-3 3 3C C C$4 4 4E- E- E- E- E-| E- E- E-P zHMOOOOO r   