
    shg                          S SK r S SKJr  S SKJrJr  SSKJr  S rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSSSSS S!S"S#S$S%S&S'S(S)S*.rS+ r " S, S-\ 5      r!S. r"g)/    N)ir)cgutilstargetconfig   )nvvmc                 N   S[        U5      -   S-   n[        R                  " [        R                  " U5      [        R                  " [        R                  " U5      5      [        R                  " U5      [        R                  " U5      45      n[
        R                  " XU5      $ )N___numba_atomic_i	_cas_hack)strr   FunctionTypeIntTypePointerTyper   get_or_insert_function)lmodisizefnamefntys       h/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/cuda/nvvmutils.pydeclare_atomic_cas_intr      su    #e*,{:E??2::e,NN2::e+<=JJu-JJu-/0D ))$e<<    c                 N    U R                  X4USS5      nU R                  US5      $ )N	monotonicr   )cmpxchgextract_value)builderr   r   ptrcmpvalouts          r   atomic_cmpxchgr       s)    
//#Ck
BC  a((r   c                    Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       S5      [         R                  " 5       45      n[        R
                  " XU5      $ )Nz#llvm.nvvm.atomic.load.add.f32.p0f32r   r   r   	FloatTyper   r   r   r   r   r   s      r   declare_atomic_add_float32r%      sP    1E??2<<>NN2<<>1=r||~NPD))$e<<r   c                 l   [         R                  " 5       R                  5       nUR                  S:  a  SnOSn[        R
                  " [        R                  " 5       [        R                  " [        R                  " 5       5      [        R                  " 5       45      n[        R                  " XU5      $ )N)   r   z#llvm.nvvm.atomic.load.add.f64.p0f64___numba_atomic_double_add)
r   ConfigStacktopcompute_capabilityr   r   
DoubleTyper   r   r   )r   flagsr   r   s       r   declare_atomic_add_float64r.      sx    $$&**,E6)5,??2==?NN2==?;R]]_MOD))$e<<r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_float_subr"   r$   s      r   declare_atomic_sub_float32r1   '   N    'E??2<<>NN2<<>:BLLNKMD))$e<<r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_double_subr   r   r,   r   r   r   r$   s      r   declare_atomic_sub_float64r6   .   N    (E??2==?NN2==?;R]]_MOD))$e<<r   c                    Sn[         R                  " [         R                  " S5      [         R                  " [         R                  " S5      5      [         R                  " S5      45      n[        R
                  " XU5      $ )Nz"llvm.nvvm.atomic.load.inc.32.p0i32    r   r   r   r   r   r   r$   s      r   declare_atomic_inc_int32r;   5   T    0E??2::b>NN2::b>:BJJrNKMD))$e<<r   c                    Sn[         R                  " [         R                  " S5      [         R                  " [         R                  " S5      5      [         R                  " S5      45      n[        R
                  " XU5      $ )N___numba_atomic_u64_inc@   r:   r$   s      r   declare_atomic_inc_int64r@   <   T    %E??2::b>NN2::b>:BJJrNKMD))$e<<r   c                    Sn[         R                  " [         R                  " S5      [         R                  " [         R                  " S5      5      [         R                  " S5      45      n[        R
                  " XU5      $ )Nz"llvm.nvvm.atomic.load.dec.32.p0i32r9   r:   r$   s      r   declare_atomic_dec_int32rC   C   r<   r   c                    Sn[         R                  " [         R                  " S5      [         R                  " [         R                  " S5      5      [         R                  " S5      45      n[        R
                  " XU5      $ )N___numba_atomic_u64_decr?   r:   r$   s      r   declare_atomic_dec_int64rF   J   rA   r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_float_maxr"   r$   s      r   declare_atomic_max_float32rI   Q   r2   r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_double_maxr5   r$   s      r   declare_atomic_max_float64rL   X   r7   r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_float_minr"   r$   s      r   declare_atomic_min_float32rO   _   r2   r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_double_minr5   r$   s      r   declare_atomic_min_float64rR   f   r7   r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_float_nanmaxr"   r$   s      r   declare_atomic_nanmax_float32rU   m   N    *E??2<<>NN2<<>:BLLNKMD))$e<<r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_double_nanmaxr5   r$   s      r   declare_atomic_nanmax_float64rY   t   N    +E??2==?NN2==?;R]]_MOD))$e<<r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_float_nanminr"   r$   s      r   declare_atomic_nanmin_float32r]   {   rV   r   c                     Sn[         R                  " [         R                  " 5       [         R                  " [         R                  " 5       5      [         R                  " 5       45      n[        R
                  " XU5      $ )N___numba_atomic_double_nanminr5   r$   s      r   declare_atomic_nanmin_float64r`      rZ   r   c                     Sn[         R                  " [         R                  " S5      [         R                  " S5      45      n[        R                  " XU5      $ )NcudaCGGetIntrinsicHandler?   r9   r   r   r   r   r   r$   s      r    declare_cudaCGGetIntrinsicHandlerd      s@    &E??2::b>JJrN,.D))$e<<r   c                     Sn[         R                  " [         R                  " S5      [         R                  " S5      [         R                  " S5      45      n[        R                  " XU5      $ )NcudaCGSynchronizer9   r?   rc   r$   s      r   declare_cudaCGSynchronizerg      sJ    E??2::b>JJrNBJJrN;=D))$e<<r   c                    U R                   R                  R                  n[        R                  " UR                  S5      S-   5      n[        R                  " X#R                  S[        R                  S9nSUl
        SUl        X4l        U R                  U[        R                  " [        R                   " S5      5      S5      $ )	Nzutf-8    _str)name	addrspaceinternalT   generic)basic_blockfunctionmoduler   make_bytearrayencodeadd_global_variabletyper   ADDRSPACE_CONSTANTlinkageglobal_constantinitializeraddrspacecastr   r   r   )r   valuer   cvalgls        r   declare_stringr      s    ''..D!!%,,w"7'"ABD		$	$T996/3/F/F
HBBJBN  R^^BJJqM%BINNr   c                     [         R                  " [         R                  " S5      5      n[         R                  " [         R                  " S5      X/5      n[        R
                  " XS5      nU$ )Nrn   r9   vprintf)r   r   r   r   r   r   )r   	voidptrty	vprintftyr   s       r   declare_vprintr      sL    rzz!}-I 

20FGI,,TiHGNr   zllvm.nvvm.read.ptx.sreg.tid.xzllvm.nvvm.read.ptx.sreg.tid.yzllvm.nvvm.read.ptx.sreg.tid.zzllvm.nvvm.read.ptx.sreg.ntid.xzllvm.nvvm.read.ptx.sreg.ntid.yzllvm.nvvm.read.ptx.sreg.ntid.zzllvm.nvvm.read.ptx.sreg.ctaid.xzllvm.nvvm.read.ptx.sreg.ctaid.yzllvm.nvvm.read.ptx.sreg.ctaid.zz llvm.nvvm.read.ptx.sreg.nctaid.xz llvm.nvvm.read.ptx.sreg.nctaid.yz llvm.nvvm.read.ptx.sreg.nctaid.zz llvm.nvvm.read.ptx.sreg.warpsizezllvm.nvvm.read.ptx.sreg.laneid)ztid.xztid.yztid.zzntid.xzntid.yzntid.zzctaid.xzctaid.yzctaid.zznctaid.xznctaid.yznctaid.zwarpsizelaneidc                     U R                   n[        R                  " [        R                  " S5      S5      n[        R
                  " X#[        U   5      nU R                  US5      $ )Nr9    )rr   r   r   r   r   r   SREG_MAPPINGcall)r   rk   rr   r   fns        r   	call_sregr      sK    ^^F??2::b>2.D		'	'l46H	IB<<Br   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
SRegBuilder   c                     Xl         g Nr   )selfr   s     r   __init__SRegBuilder.__init__   s    r   c                 4    [        U R                  SU-  5      $ )Nztid.%sr   r   r   xyzs     r   tidSRegBuilder.tid   s    x#~66r   c                 4    [        U R                  SU-  5      $ )Nzctaid.%sr   r   s     r   ctaidSRegBuilder.ctaid   s    zC'788r   c                 4    [        U R                  SU-  5      $ )Nzntid.%sr   r   s     r   ntidSRegBuilder.ntid   s    y377r   c                 4    [        U R                  SU-  5      $ )Nz	nctaid.%sr   r   s     r   nctaidSRegBuilder.nctaid   s    {S'899r   c                    [         R                  " S5      nU R                  R                  U R	                  U5      U5      nU R                  R                  U R                  U5      U5      nU R                  R                  U R                  U5      U5      nU R                  R                  U R                  R                  XE5      U5      nU$ )Nr?   )	r   r   r   sextr   r   r   addmul)r   r   i64r   r   r   ress          r   getdimSRegBuilder.getdim   s    jjnlls3||  35""4::c?C8llt||//=sC
r   r   N)__name__
__module____qualname____firstlineno__r   r   r   r   r   r   __static_attributes__r   r   r   r   r      s     798:r   r   c                    ^ [        U 5      mU4S jS 5       n[        [        R                  " US U5      5      nUS:X  a  US   $ U$ )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr   )r   ).0r   sregs     r   	<genexpr> get_global_id.<locals>.<genexpr>   s     	,es$++c

es   !r   r   r   )r   list	itertoolsislice)r   dimitseqr   s       @r   get_global_idr      sE    wD	,e	,B
yD#.
/C
ax1v
r   )#r   llvmliter   
numba.corer   r   cudadrvr   r   r    r%   r.   r1   r6   r;   r@   rC   rF   rI   rL   rO   rR   rU   rY   r]   r`   rd   rg   r   r   r   r   objectr   r   r   r   r   <module>r      s      , =)
==================	O -,,...0002222.%, & 2r   