§
    ƒÛg   ã                   ó  — d dl Z d dl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„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zddddd d!d"d#d$d%d&d'd(d)d*œZd+„ Z G d,„ d-e ¦  «        Z!d.„ Z"dS )/é    N)Úir)ÚcgutilsÚtargetconfigé   )Únvvmc                 ó<  — dt          |¦  «        z   dz   }t          j        t          j        |¦  «        t          j        t          j        |¦  «        ¦  «        t          j        |¦  «        t          j        |¦  «        f¦  «        }t          j        | ||¦  «        S )NÚ___numba_atomic_iÚ	_cas_hack)Ústrr   ÚFunctionTypeÚIntTypeÚPointerTyper   Úget_or_insert_function)ÚlmodÚisizeÚfnameÚfntys       úJ/granary/edev/quantum/lib/python3.11/site-packages/numba/cuda/nvvmutils.pyÚdeclare_atomic_cas_intr      s�   € Ø¥# e¡*¤*Ñ,¨{Ñ:€EÝŒ?�2œ: eÑ,Ô,ÝœN­2¬:°eÑ+<Ô+<Ñ=Ô=ÝœJ uÑ-Ô-ÝœJ uÑ-Ô-ð/ñ0ô 0€Dõ Ô)¨$°°eÑ<Ô<Ð<ó    c                 ó`   — |                       |||dd¦  «        }|                      |d¦  «        S )NÚ	monotonicr   )ÚcmpxchgÚextract_value)Úbuilderr   r   ÚptrÚcmpÚvalÚouts          r   Úatomic_cmpxchgr       s1   € Ø
�/Š/˜#˜s C¨°kÑ
BÔ
B€CØ× Ò   aÑ(Ô(Ð(r   c                 óì   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         d¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )Nz#llvm.nvvm.atomic.load.add.f32.p0f32r   ©r   r   Ú	FloatTyper   r   r   ©r   r   r   s      r   Údeclare_atomic_add_float32r%      sW   € Ø1€EÝŒ?�2œ<™>œ>ÝœN­2¬<©>¬>¸1Ñ=Ô=½r¼|¹~¼~ÐNñPô P€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óP  — t          j        ¦   «                              ¦   «         }|j        dk    rd}nd}t	          j        t	          j        ¦   «         t	          j        t	          j        ¦   «         ¦  «        t	          j        ¦   «         f¦  «        }t          j	        | ||¦  «        S )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.      s„   € ÝÔ$Ñ&Ô&×*Ò*Ñ,Ô,€EØÔ 6Ò)Ð)Ø5ˆˆà,ˆÝŒ?�2œ=™?œ?ÝœN­2¬=©?¬?Ñ;Ô;½R¼]¹_¼_ÐMñOô O€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_float_subr"   r$   s      r   Údeclare_atomic_sub_float32r1   '   óU   € Ø'€EÝŒ?�2œ<™>œ>ÝœN­2¬<©>¬>Ñ:Ô:½B¼L¹N¼NÐKñMô M€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_double_sub©r   r   r,   r   r   r   r$   s      r   Údeclare_atomic_sub_float64r6   .   óU   € Ø(€EÝŒ?�2œ=™?œ?ÝœN­2¬=©?¬?Ñ;Ô;½R¼]¹_¼_ÐMñOô O€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óð   — d}t          j        t          j        d¦  «        t          j        t          j        d¦  «        ¦  «        t          j        d¦  «        f¦  «        }t	          j        | ||¦  «        S )Nz"llvm.nvvm.atomic.load.inc.32.p0i32é    ©r   r   r   r   r   r   r$   s      r   Údeclare_atomic_inc_int32r;   5   ó[   € Ø0€EÝŒ?�2œ: b™>œ>ÝœN­2¬:°b©>¬>Ñ:Ô:½B¼JÀr¹N¼NÐKñMô M€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óð   — d}t          j        t          j        d¦  «        t          j        t          j        d¦  «        ¦  «        t          j        d¦  «        f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_u64_incé@   r:   r$   s      r   Údeclare_atomic_inc_int64r@   <   ó[   € Ø%€EÝŒ?�2œ: b™>œ>ÝœN­2¬:°b©>¬>Ñ:Ô:½B¼JÀr¹N¼NÐKñMô M€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óð   — d}t          j        t          j        d¦  «        t          j        t          j        d¦  «        ¦  «        t          j        d¦  «        f¦  «        }t	          j        | ||¦  «        S )Nz"llvm.nvvm.atomic.load.dec.32.p0i32r9   r:   r$   s      r   Údeclare_atomic_dec_int32rC   C   r<   r   c                 óð   — d}t          j        t          j        d¦  «        t          j        t          j        d¦  «        ¦  «        t          j        d¦  «        f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_u64_decr?   r:   r$   s      r   Údeclare_atomic_dec_int64rF   J   rA   r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_float_maxr"   r$   s      r   Údeclare_atomic_max_float32rI   Q   r2   r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_double_maxr5   r$   s      r   Údeclare_atomic_max_float64rL   X   r7   r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_float_minr"   r$   s      r   Údeclare_atomic_min_float32rO   _   r2   r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_double_minr5   r$   s      r   Údeclare_atomic_min_float64rR   f   r7   r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_float_nanmaxr"   r$   s      r   Údeclare_atomic_nanmax_float32rU   m   óU   € Ø*€EÝŒ?�2œ<™>œ>ÝœN­2¬<©>¬>Ñ:Ô:½B¼L¹N¼NÐKñMô M€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_double_nanmaxr5   r$   s      r   Údeclare_atomic_nanmax_float64rY   t   óU   € Ø+€EÝŒ?�2œ=™?œ?ÝœN­2¬=©?¬?Ñ;Ô;½R¼]¹_¼_ÐMñOô O€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_float_nanminr"   r$   s      r   Údeclare_atomic_nanmin_float32r]   {   rV   r   c                 óê   — d}t          j        t          j        ¦   «         t          j        t          j        ¦   «         ¦  «        t          j        ¦   «         f¦  «        }t	          j        | ||¦  «        S )NÚ___numba_atomic_double_nanminr5   r$   s      r   Údeclare_atomic_nanmin_float64r`   ‚   rZ   r   c                 ó¦   — d}t          j        t          j        d¦  «        t          j        d¦  «        f¦  «        }t          j        | ||¦  «        S )NÚcudaCGGetIntrinsicHandler?   r9   ©r   r   r   r   r   r$   s      r   Ú declare_cudaCGGetIntrinsicHandlerd   ‰   sE   € Ø&€EÝŒ?�2œ: b™>œ>ÝœJ r™NœNÐ,ñ.ô .€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óÌ   — d}t          j        t          j        d¦  «        t          j        d¦  «        t          j        d¦  «        f¦  «        }t          j        | ||¦  «        S )NÚcudaCGSynchronizer9   r?   rc   r$   s      r   Údeclare_cudaCGSynchronizerg   �   sO   € Ø€EÝŒ?�2œ: b™>œ>ÝœJ r™NœN­B¬J°r©N¬NÐ;ñ=ô =€DåÔ)¨$°°eÑ<Ô<Ð<r   c                 óf  — | j         j        j        }t          j        |                     d¦  «        dz   ¦  «        }t          j        ||j        dt          j	        ¬¦  «        }d|_
        d|_        ||_        |                      |t          j        t          j        d¦  «        ¦  «        d¦  «        S )	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Ô"7¸'Ñ"AÑBÔB€DÝ	Ô	$ T¨4¬9¸6Ý/3Ô/Fð
Hñ 
Hô 
H€Bà€B„JØ€BÔØ€B„Nà× Ò  ¥R¤^µB´J¸q±M´MÑ%BÔ%BÀIÑNÔNÐNr   c                 óÐ   — t          j        t          j        d¦  «        ¦  «        }t          j        t          j        d¦  «        ||g¦  «        }t	          j        | |d¦  «        }|S )Nrn   r9   Úvprintf)r   r   r   r   r   r   )r   Ú	voidptrtyÚ	vprintftyr�   s       r   Údeclare_vprintr„   £   sR   € Ý”�rœz¨!™}œ}Ñ-Ô-€Iõ ”¥¤
¨2¡¤°¸IÐ0FÑGÔG€IÝÔ,¨T°9¸iÑHÔH€GØ€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                 óÌ   — | j         }t          j        t          j        d¦  «        d¦  «        }t	          j        ||t          |         ¦  «        }|                      |d¦  «        S )Nr9   © )rr   r   r   r   r   r   ÚSREG_MAPPINGÚcall)r   rk   rr   r   Úfns        r   Ú	call_sregrŒ   Ä   sO   € ØŒ^€FÝŒ?�2œ: b™>œ>¨2Ñ.Ô.€DÝ	Ô	'¨°µlÀ4Ô6HÑ	IÔ	I€BØ�<Š<˜˜BÑÔÐr   c                   ó2   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSRegBuilderc                 ó   — || _         d S ©N)r   )Úselfr   s     r   Ú__init__zSRegBuilder.__init__Ì   s   € ØˆŒˆˆr   c                 ó2   — t          | j        d|z  ¦  «        S )Nztid.%s©rŒ   r   ©r‘   Úxyzs     r   ÚtidzSRegBuilder.tidÏ   s   € Ý˜œ x°#¡~Ñ6Ô6Ð6r   c                 ó2   — t          | j        d|z  ¦  «        S )Nzctaid.%sr”   r•   s     r   ÚctaidzSRegBuilder.ctaidÒ   s   € Ý˜œ z°CÑ'7Ñ8Ô8Ð8r   c                 ó2   — t          | j        d|z  ¦  «        S )Nzntid.%sr”   r•   s     r   ÚntidzSRegBuilder.ntidÕ   s   € Ý˜œ y°3¡Ñ7Ô7Ð7r   c                 ó2   — t          | j        d|z  ¦  «        S )Nz	nctaid.%sr”   r•   s     r   ÚnctaidzSRegBuilder.nctaidØ   s   € Ý˜œ {°SÑ'8Ñ9Ô9Ð9r   c                 óì   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }| j                             | j                             ||¦  «        |¦  «        }|S r�   )r—   r›   r™   r   ÚaddÚmul)r‘   r–   r—   r›   r�   Úress         r   ÚgetdimzSRegBuilder.getdimÛ   s]   € Ø�hŠh�s‰mŒmˆØ�yŠy˜‰~Œ~ˆØ—’˜C‘”ˆØŒl×Ò˜tœ|×/Ò/°°fÑ=Ô=¸sÑCÔCˆØˆ
r   N)	Ú__name__Ú
__module__Ú__qualname__r’   r—   r™   r›   r�   r¢   rˆ   r   r   rŽ   rŽ   Ë   sn   € € € € € ðð ð ð7ð 7ð 7ð9ð 9ð 9ð8ð 8ð 8ð:ð :ð :ðð ð ð ð r   rŽ   c                 ó¤   ‡— t          | ¦  «        Šˆfd„dD ¦   «         }t          t          j        |d |¦  «        ¦  «        }|dk    r|d         S |S )Nc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S r�   )r¢   )Ú.0r–   Úsregs     €r   ú	<genexpr>z get_global_id.<locals>.<genexpr>å   s/   øè è € Ð	,Ð	,˜sˆ$�+Š+�cÑ
Ô
Ð	,Ð	,Ð	,Ð	,Ð	,Ð	,r   r–   r   r   )rŽ   ÚlistÚ	itertoolsÚislice)r   ÚdimÚitÚseqr©   s       @r   Úget_global_idr±   ã   s\   ø€ Ý�wÑÔ€DØ	,Ð	,Ð	,Ð	, eÐ	,Ñ	,Ô	,€BÝ
�yÔ  D¨#Ñ.Ô.Ñ
/Ô
/€CØ
ˆa‚x€xØ�1Œvˆàˆ
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ð 	Oð 	Oðð ð ð -Ø,Ø,à.Ø.Ø.à0Ø0Ø0à2Ø2Ø2à2Ø.ð%ð €ð, ð  ð  ðð ð ð ð �&ñ ô ð ð0ð ð ð ð r   