§
    ƒÛg
  ã                   ó¨   — d dl Zd dlmZ  edd¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d	„ d
¦  «        Z e¦   «         Zd„ Z	dd„Z
d„ ZdS )é    N)Ú
namedtupleÚ_MemoryInfoz
free,totalc                   ó   — e Zd Zd„ ZdS )ÚFakeCUDADevicec                 ó   — d| _         d S )Nz(GPU-00000000-0000-0000-0000-000000000000)Úuuid©Úselfs    úZ/granary/edev/quantum/lib/python3.11/site-packages/numba/cuda/simulator/cudadrv/devices.pyÚ__init__zFakeCUDADevice.__init__   s   € Ø>ˆŒ	ˆ	ˆ	ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r      s#   € € € € € ð?ð ?ð ?ð ?ð ?r   r   c                   ó†   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zd	„ Zd
„ Zd„ Zdd„ZdS )ÚFakeCUDAContextz`
    This stub implements functionality only for simulating a single GPU
    at the moment.
    c                 ó:   — || _         t          ¦   «         | _        d S ©N)Ú
_device_idr   Ú_device)r
   Ú	device_ids     r   r   zFakeCUDAContext.__init__   s   € Ø#ˆŒÝ%Ñ'Ô'ˆŒˆˆr   c                 ó   — d S r   r   r	   s    r   Ú	__enter__zFakeCUDAContext.__enter__   ó   € Øˆr   c                 ó   — d S r   r   )r
   Úexc_typeÚexc_valÚexc_tbs       r   Ú__exit__zFakeCUDAContext.__exit__   r   r   c                 ó.   — d                      | ¬¦  «        S )Nz<Managed Device {self.id}>r	   )Úformatr	   s    r   Ú__str__zFakeCUDAContext.__str__   s   € Ø+×2Ò2¸Ð2Ñ=Ô=Ð=r   c                 ó   — | j         S r   )r   r	   s    r   ÚidzFakeCUDAContext.id   s
   € àŒÐr   c                 ó   — | j         S r   )r   r	   s    r   ÚdevicezFakeCUDAContext.device"   s
   € àŒ|Ðr   c                 ó   — dS )N)é   é   r   r	   s    r   Úcompute_capabilityz"FakeCUDAContext.compute_capability&   s   € àˆvr   c                 ó   — d S r   r   r	   s    r   ÚresetzFakeCUDAContext.reset*   r   r   c                 óV   — t          t          d¦  «        t          d¦  «        ¦  «        S )z½
        Cross-platform free / total host memory is hard without external
        dependencies, e.g. `psutil` - so return infinite memory to maintain API
        type compatibility
        Úinf)r   Úfloatr	   s    r   Úget_memory_infozFakeCUDAContext.get_memory_info-   s    € õ �5 ™<œ<­¨u©¬Ñ6Ô6Ð6r   c                 ó.   — t          j        |d¬¦  «        S )z¦
        Allocates memory on the simulated device
        At present, there is no division between simulated
        host memory and simulated device memory.
        Úu1)Údtype)ÚnpÚndarray)r
   Úszs     r   ÚmemalloczFakeCUDAContext.memalloc5   s   € õ Œz˜" DÐ)Ñ)Ô)Ð)r   Fc                 ó,   — |                       |¦  «        S )zAllocates memory on the host)r8   )r
   r7   ÚmappedÚportableÚwcs        r   ÚmemhostalloczFakeCUDAContext.memhostalloc=   s   € à�}Š}˜RÑ Ô Ð r   N)FFF)r   r   r   Ú__doc__r   r   r    r#   Úpropertyr%   r'   r+   r-   r1   r8   r=   r   r   r   r   r      sì   € € € € € ðð ð(ð (ð (ðð ð ðð ð ð>ð >ð >ð ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xððð ð ð7ð 7ð 7ð*ð *ð *ð!ð !ð !ð !ð !ð !r   r   c                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Ze	d„ ¦   «         Z
dS )	ÚFakeDeviceListzÓ
    This stub implements a device list containing a single GPU. It also
    keeps track of the GPU status, i.e. whether the context is closed or not,
    which may have been set by the user calling reset()
    c                 ó>   — t          d¦  «        f| _        d| _        d S )Nr   F)r   ÚlstÚclosedr	   s    r   r   zFakeDeviceList.__init__H   s   € Ý# AÑ&Ô&Ð(ˆŒØˆŒˆˆr   c                 ó*   — d| _         | j        |         S )NF©rD   rC   )r
   Údevnums     r   Ú__getitem__zFakeDeviceList.__getitem__L   s   € ØˆŒØŒx˜ÔÐr   c                 óJ   — d                      d„ | j        D ¦   «         ¦  «        S )Nz, c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Ústr)Ú.0Úds     r   ú
<listcomp>z*FakeDeviceList.__str__.<locals>.<listcomp>Q   s   € Ð3Ð3Ð3 Q�#˜a™&œ&Ð3Ð3Ð3r   )ÚjoinrC   r	   s    r   r#   zFakeDeviceList.__str__P   s%   € Ø�yŠyÐ3Ð3¨$¬(Ð3Ñ3Ô3Ñ4Ô4Ð4r   c                 ó*   — t          | j        ¦  «        S r   )ÚiterrC   r	   s    r   Ú__iter__zFakeDeviceList.__iter__S   s   € Ý�D”H‰~Œ~Ðr   c                 ó*   — t          | j        ¦  «        S r   )ÚlenrC   r	   s    r   Ú__len__zFakeDeviceList.__len__V   s   € Ý�4”8‰}Œ}Ðr   c                 ó.   — | j         rd S | j        d         S )Nr   rF   r	   s    r   ÚcurrentzFakeDeviceList.currentY   s   € àŒ;ð 	Ø�4ØŒx˜Œ{Ðr   N)r   r   r   r>   r   rH   r#   rR   rU   r?   rW   r   r   r   rA   rA   B   s„   € € € € € ðð ð
ð ð ð ð  ð  ð5ð 5ð 5ðð ð ðð ð ð ðð ñ „Xðð ð r   rA   c                  ó*   — dt           d         _        d S )NTr   )ÚgpusrD   r   r   r   r-   r-   c   s   € Ø…Dˆ„G„N€N€Nr   c                 ó    — t          | ¦  «        S r   )r   )rG   s    r   Úget_contextr[   g   s   € Ý˜6Ñ"Ô"Ð"r   c                 ó   — | S )zP
    In the simulator, a context is always "available", so this is a no-op.
    r   )Úfuncs    r   Úrequire_contextr^   k   s	   € ð €Kr   )r   )Únumpyr5   Úcollectionsr   r   r   r   rA   rY   r-   r[   r^   r   r   r   ú<module>ra      sø   ðØ Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "àˆj˜¨Ñ5Ô5€ð?ð ?ð ?ð ?ð ?ñ ?ô ?ð ?ð
3!ð 3!ð 3!ð 3!ð 3!ñ 3!ô 3!ð 3!ðlð ð ð ð ñ ô ð ð< €~ÑÔ€ðð ð ð#ð #ð #ð #ðð ð ð ð r   