
    ia)                        S SK Jr  S SKrS SKrS SKrS SKrSSKJrJ	r	  SSK
JrJrJr  SSKJr  SSKJrJr   Sq\S	 5       rS
 r " S S5      r " S S\5      r " S S\5      r " S S\R6                  5      r " S S\5      rg)    )contextmanagerN   )FakeCUDAArrayFakeWithinKernelCUDAArray)Dim3FakeCUDAModuleswapped_cuda_module   )normalize_kernel_dimensions)wrap_argArgHintc              #   H   #    [         b   S5       eU q  Sv   Sq g! Sq f = f7f)z"
Push the current kernel context.
Nz)concurrent simulated kernel not supported_kernel_context)mods    V/var/www/html/trading/venv/lib/python3.13/site-packages/numba/cuda/simulator/kernel.py_push_kernel_contextr      s0      "O$OO"O$s   " ""c                      [         $ )zL
Get the current kernel context. This is usually done by a device function.
r        r   _get_kernel_contextr   $   s
     r   c                       \ rS rSrSrS rSrg)FakeOverload+   z=
Used only to provide the max_cooperative_grid_blocks method
c                     g)Nr   r   )selfblockdims     r   max_cooperative_grid_blocks(FakeOverload.max_cooperative_grid_blocks/   s     r   r   N)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__r   r   r   r   r   +   s    r   r   c                       \ rS rSrS rSrg)FakeOverloadDict5   c                     [        5       $ N)r   )r   keys     r   __getitem__FakeOverloadDict.__getitem__6   s     ~r   r   N)r    r!   r"   r#   r,   r%   r   r   r   r'   r'   5   s    r   r'   c                   j    \ rS rSrSrS/ S4S jrS rS rS rS r	SS	 jr
\S
 5       r\S 5       rSrg)FakeCUDAKernel<   z 
Wraps a @cuda.jit-ed function.
Fc                     Xl         X l        X0l        XPl        [	        U5      U l        S U l        S U l        SU l        SU l	        [        R                  " X5        g )Nr   )fn_device	_fastmath_debuglist
extensionsgrid_dim	block_dimstreamdynshared_size	functoolsupdate_wrapper)r   r2   devicefastmathr7   debugs         r   __init__FakeCUDAKernel.__init__A   sO    !z*   *r   c           	        ^ ^ T R                   (       a7  [        T R                  [        5       5         T R                  " U6 sS S S 5        $ [	        T R
                  T R                  5      u  p#[        X#T R                  5      n[        U5         / mUU 4S jnU Vs/ s H
  oe" U5      PM     nn[        T R                  U5         [        R                  " U6  H7  n[        T R                  X#T R                  5      n	U	R                  " U/UQ76   M9     S S S 5        T H
  n
U
" 5         M     S S S 5        g ! , (       d  f       N= fs  snf ! , (       d  f       N== f! , (       d  f       g = f)Nc                   > [         R                  " U4S jTR                  S U 45      u  p[        U [        R
                  5      (       a+  U R                  S:  a  [        U 5      R                  T5      nOT[        U [        5      (       a  U R                  T5      nO-[        U [        R                  5      (       a  [        U 5      nOU n[        U[        5      (       a  [        U5      $ U$ )Nc                 *   > UR                   " U STS.6$ )Nr   )r:   retr)prepare_args)ty_val	extensionrF   s     r   <lambda>;FakeCUDAKernel.__call__.<locals>.fake_arg.<locals>.<lambda>b   s    i.D.D !/#r   r   )r<   reducer7   
isinstancenpndarrayndimr   	to_devicer   voidr   r   )arg_retrF   r   s      r   fake_arg)FakeCUDAKernel.__call__.<locals>.fake_arg_   s    "))# OO3K c2::..388a<"3-11$7CW-----CRWW--',CCc=114S99
r   )r3   r	   r2   r   r   r8   r9   r   r;   r   rN   ndindexBlockManagerr5   run)r   argsr8   r9   fake_cuda_modulerV   rS   	fake_args
grid_pointbmwbrF   s   `          @r   __call__FakeCUDAKernel.__call__O   s   <<$TWW.A.CDww~ ED :$--:>..J *(*.*=*=?!"23 D. 377$3#$I7$TWW.>?"$**h"7J%dggxDKKPBFF:2	2 #8 @  G 43 EDJ 8??; 43sB   D5EE-EAEE5
EE
E	E
E*c                 h    [        US S 6 u  U l        U l        [        U5      S:X  a
  US   U l        U $ )Nr
         )r   r8   r9   lenr;   )r   configurations     r   r,   FakeCUDAKernel.__getitem__   s?    'r):; 	&t~ }""/"2Dr   c                     g r*   r   r   s    r   bindFakeCUDAKernel.bind   s    r   c                     U $ r*   r   )r   r[   s     r   
specializeFakeCUDAKernel.specialize   s    r   c                 8    US:  a  [        SU-  5      eXSX44   $ )Nr   z0Can't create ForAll with negative task count: %sr   )
ValueError)r   ntaskstpbr:   	sharedmems        r   forallFakeCUDAKernel.forall   s1    A:O%& ' 'Av011r   c                     [        5       $ r*   )r'   rj   s    r   	overloadsFakeCUDAKernel.overloads   s    !!r   c                     U R                   $ r*   )r2   rj   s    r   py_funcFakeCUDAKernel.py_func   s    wwr   )	r5   r3   r4   r9   r;   r7   r2   r8   r:   N)r   r   r   )r    r!   r"   r#   r$   rA   ra   r,   rk   rn   ru   propertyrx   r{   r%   r   r   r   r/   r/   <   sW     -2b +/b2 " "  r   r/   c                   V   ^  \ rS rSrSrU 4S jrU 4S jrS rS rS r	S r
S	 rS
rU =r$ )BlockThread   z?
Manages the execution of a function for a single CUDA thread.
c                   >^ U(       a	  U4S jnUnOTn[         [        U ]  US9  [        R                  " 5       U l        SU l        X l        [        U6 U l	        [        U6 U l
        S U l        SU l        SU l        XPl        [        U R                  R                  6 nU R                  R                   UR                   U R                  R"                  UR"                  U R                  R$                  -  -   -  -   U l        g )Nc                  >   > [         R                  " SS9  T" U 0 UD6  g )Nraise)divide)rN   seterr)r[   kwargsfs     r   debug_wrapper+BlockThread.__init__.<locals>.debug_wrapper   s    		)4"6"r   )targetFT)superr   rA   	threadingEventsyncthreads_eventsyncthreads_blocked_managerr   blockIdx	threadIdx	exceptiondaemonabortr@   
_block_dimxyz	thread_id)
r   r   managerr   r   r@   r   r   blockDim	__class__s
    `       r   rA   BlockThread.__init__   s    # #FFk4))8!*!2#( hy)

112))XZZ4>>;K;K;C::;?>>;K;K<L<L .M Nr   c                 f  >  [         [        U ]  5         g ! [         a  nS[	        U R
                  5      -  nS[	        U R                  5      -  n[        U5      S:X  a
  U< SU< 3nOU< SU< SU< 3n[        R                  " 5       S   n[        U5      " U5      U4U l         S nAg S nAff = f)Nztid=%szctaid=%s  z: r
   )r   r   rZ   	Exceptionr6   r   r   strsysexc_infotyper   )r   etidctaidmsgtbr   s         r   rZ   BlockThread.run   s    	0+t(* 
	0T$..11Cdmm!44E1v|!$e,%(%3"B #1gclB/DNN
	0s    
B0BB++B0c                     U R                   (       a  [        S5      eSU l        U R                  R	                  5         U R                  R                  5         U R                   (       a  [        S5      eg )Nz"abort flag set on syncthreads callTz#abort flag set on syncthreads clear)r   RuntimeErrorr   r   waitclearrj   s    r   syncthreadsBlockThread.syncthreads   sY    ::CDD#' ##%$$&::DEE r   c                 L   U R                   R                  U R                   R                  U R                   R                  4nXR                  R
                  U'   U R                  5         [        R                  " U R                  R
                  5      nU R                  5         U$ r*   )	r   r   r   r   r   block_stater   rN   count_nonzero)r   valueidxcounts       r   syncthreads_countBlockThread.syncthreads_count   su    nn 0 0$..2B2BB).!!#&  !:!:;r   c                 ^   U R                   R                  U R                   R                  U R                   R                  4nXR                  R
                  U'   U R                  5         [        R                  " U R                  R
                  5      nU R                  5         U(       a  S$ S$ Nr   r   )	r   r   r   r   r   r   r   rN   allr   r   r   tests       r   syncthreads_andBlockThread.syncthreads_and   {    nn 0 0$..2B2BB).!!#&vvdmm//0qar   c                 ^   U R                   R                  U R                   R                  U R                   R                  4nXR                  R
                  U'   U R                  5         [        R                  " U R                  R
                  5      nU R                  5         U(       a  S$ S$ r   )	r   r   r   r   r   r   r   rN   anyr   s       r   syncthreads_orBlockThread.syncthreads_or   r   r   c                 @    SU R                   < SU R                  < S3$ )Nz
Thread <<<z, z>>>)r   r   rj   s    r   __str__BlockThread.__str__   s    (,t~~FFr   )
r   r   r   r   r@   r   r   r   r   r   )r    r!   r"   r#   r$   rA   rZ   r   r   r   r   r   r%   __classcell__)r   s   @r   r   r      s4    N00
F  G Gr   r   c                   $    \ rS rSrSrS rS rSrg)rY      a  
Manages the execution of a thread block.

When run() is called, all threads are started. Each thread executes until it
hits syncthreads(), at which point it sets its own syncthreads_blocked to
True so that the BlockManager knows it is blocked. It then waits on its
syncthreads_event.

The BlockManager polls threads to determine if they are blocked in
syncthreads(). If it finds a blocked thread, it adds it to the set of
blocked threads. When all threads are blocked, it unblocks all the threads.
The thread are unblocked by setting their syncthreads_blocked back to False
and setting their syncthreads_event.

The polling continues until no threads are alive, when execution is
complete.
c                     X l         X0l        Xl        X@l        [        R
                  " U[        R                  S9U l        g )N)dtype)	_grid_dimr   _fr5   rN   zerosbool_r   )r   r   r8   r9   r@   s        r   rA   BlockManager.__init__  s-    !#88IRXX>r   c                   ^ ^ [        5       n[        5       n[        5       n[        R                  " T R                  6  HT  nUU 4S jn[	        UT XT R
                  5      nUR                  5         UR                  U5        UR                  U5        MV     U(       Ga  U H  nUR                  (       a  UR                  U5        M'  UR                  (       d  M:  U H+  n	SU	l
        SU	l        U	R                  R                  5         M-     UR                  S   R                  UR                  S   5      e   XE:X  a4  U H$  nSUl        UR                  R                  5         M&     [        5       n[        U Vs/ s H  oR                  5       (       d  M  UPM     sn5      nU(       a  GM  U H?  nUR                  (       d  M  UR                  S   R                  UR                  S   5      e   g s  snf )Nc                  $   > TR                   " T 6   g r*   )r   )r[   r   s   r   r    BlockManager.run.<locals>.target  s    r   TFr   r   )setrN   rX   r   r   r5   startaddr   r   r   r   with_tracebackis_alive)
r   r^   r[   threadslivethreadsblockedthreadsblock_pointr   tt_others
   ` `       r   rZ   BlockManager.run  s~   %e::t7KFD*4;;OAGGIKKNOOA 8  (("&&q)[[[ $+(,6;311557 $+
 ++a.77AGG ! ,'A,1A)''++- ( "%;H;a**,;HIK' k, A{{{kk!n33AKKNCC  Is   :G3G3)r   r5   r   r   r   N)r    r!   r"   r#   r$   rA   rZ   r%   r   r   r   rY   rY      s    "?(Dr   rY   )
contextlibr   r<   r   r   numpyrN   cudadrv.devicearrayr   r   	kernelapir   r   r	   errorsr   r[   r   r   r   r   r   r   dictr'   objectr/   Threadr   rY   r   r   r   <module>r      s    %  
   I @ @ 0 $
  
 
 t _V _HPG)"" PGfAD6 ADr   