§
    ƒÛg<
  ã                   óî   — d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ dd	lmZmZmZ dd
„Zd„ Z G d„ de¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        ZeZ	 	 	 dd„Zed„ ¦   «         ZdS )z
Contains CUDA API functions
é    )Úcontextmanageré   )Úrequire_contextÚresetÚgpus©ÚFakeCUDAKernel)Úis_signature©Úwarné   )ÚInÚOutÚInOutc                 ó&   — | dk    s
J d¦   «         ‚d S )Nr   z/Only a single device supported by the simulator© )Údevs    úN/granary/edev/quantum/lib/python3.11/site-packages/numba/cuda/simulator/api.pyÚselect_devicer      s   € Ø�!Š8ˆ8ˆ8ÐF‰8Œ8ˆ8ˆ8ˆ8ó    c                  ó   — dS ©NTr   r   r   r   Úis_float16_supportedr      s   € Øˆ4r   c                   ó.   — e Zd ZdZed„ ¦   «         Zd„ ZdS )Ústreamz“
    The stream API is supported in the simulator - however, all execution
    occurs synchronously, so synchronization requires no operation.
    c              #   ó   K  — d V — d S ©Nr   ©Úselfs    r   Úauto_synchronizezstream.auto_synchronize   s   è è € àˆˆˆˆˆr   c                 ó   — d S r   r   r   s    r   Úsynchronizezstream.synchronize!   ó   € Øˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r"   r   r   r   r   r      sH   € € € € € ðð ð ðð ñ „^ððð ð ð ð r   r   c                  ó   — d S r   r   r   r   r   r"   r"   %   ó   € Ø€Dr   c                  ó   — dt           _        d S r   )r   Úclosedr   r   r   Úcloser,   )   s   € Ø…D„K€K€Kr   c                  ó   — d S r   r   )ÚargsÚkwargss     r   Údeclare_devicer0   -   r)   r   c                  ól   — t          d¦  «         t          ddz  ¦  «         t          ddz  ¦  «         d S )NzFound 1 CUDA deviceszid %d    %20s %40s)r   Ú	SIMULATORz[SUPPORTED]z	%40s: 5.0zcompute capability)Úprintr   r   r   Údetectr4   1   s@   € Ý	Ð
 Ñ!Ô!Ð!Ý	Ð
Ð!@Ñ
@ÑAÔAÐAÝ	ˆ+Ð,Ñ
,Ñ-Ô-Ð-Ð-Ð-r   c                  ó   — t           S r   )r   r   r   r   Úlist_devicesr6   7   s   € Ý€Kr   c                   ó.   — e Zd ZdZdd„Zdd„Zd„ Zd„ ZdS )	ÚEventzš
    The simulator supports the event API, but they do not record timing info,
    and all simulation is synchronous. Execution time is not recorded.
    r   c                 ó   — d S r   r   ©r   r   s     r   ÚrecordzEvent.recordB   r#   r   c                 ó   — d S r   r   r:   s     r   Úwaitz
Event.waitE   r#   r   c                 ó   — d S r   r   r   s    r   r"   zEvent.synchronizeH   r#   r   c                 ó$   — t          d¦  «         dS )NzSimulator timings are bogusg        r   )r   Úevents     r   Úelapsed_timezEvent.elapsed_timeK   s   € ÝÐ*Ñ+Ô+Ð+Øˆsr   N©r   )r$   r%   r&   r'   r;   r=   r"   rA   r   r   r   r8   r8   =   sd   € € € € € ðð ðð ð ð ðð ð ð ðð ð ðð ð ð ð r   r8   NFTc                 óÎ   ‡‡‡— |rt          d¦  «        ‚|�t          d¦  «        ‚| �$t          | ¦  «        st          | t          ¦  «        r	ˆˆˆfd„}|S t	          | ‰‰¬¦  «        S )Nz)bounds checking is not supported for CUDAz Cannot link PTX in the simulatorc                 ó*   •— t          | ‰‰‰¬¦  «        S )N)ÚdeviceÚfastmathÚdebugr   )ÚfnrG   rE   rF   s    €€€r   Ú
jitwrapperzjit.<locals>.jitwrapperb   s%   ø€ Ý! "Ø)/Ø+3Ø(-ð/ñ /ô /ð /r   )rE   rG   )ÚNotImplementedErrorr
   Ú
isinstanceÚlistr	   )Úfunc_or_sigrE   rG   ÚargtypesÚinlineÚrestyperF   ÚlinkÚboundscheckÚoptÚcacherI   s    ``   `     r   ÚjitrU   S   s›   øøø€ ð
 ð OÝ!Ð"MÑNÔNÐNàÐÝ!Ð"DÑEÔEÐEð 	Ð�|¨KÑ8Ô8ÐÝ˜+¥tÑ,Ô,ð 	ð	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð
 ÐÝ˜+¨f¸EÐBÑBÔBÐBr   c               #   ó   K  — d V — d S r   r   r   r   r   Údefer_cleanuprW   k   s   è è € ð 
€E€E€E€E€Er   rB   )NFFNFNFNNTN)r'   Ú
contextlibr   Úcudadrv.devicesr   r   r   Úkernelr	   Únumba.core.sigutilsr
   Úwarningsr   r.   r   r   r   r   r   Úobjectr   r"   r,   r0   r4   r6   r8   r@   rU   rW   r   r   r   ú<module>r^      s«  ððð ð &Ð %Ð %Ð %Ð %Ð %à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø "Ð "Ð "Ð "Ð "Ð "Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðGð Gð Gð Gðð ð ð
ð 
ð 
ð 
ð 
ˆVñ 
ô 
ð 
ð	ð 	ð 	ðð ð ð	ð 	ð 	ð.ð .ð .ðð ð ðð ð ð ð ˆFñ ô ð ð& 	€ð ?CØ9=Ø*.ðCð Cð Cð Cð0 ð
ð 
ñ „ð
ð 
ð 
r   