
    9j                     <   U d dl Z d dlZd dlmZ d dlZd dlmZ g dZee	   e
d<   de	defdZ eej                  d	      sA eej                  d
      r ed       eej                  d      r ed       eej                  d      r ed       eej                  d      r ed       eej                  d      r ed       ed	      ej                  j                  d	<    ed
      ej                  j                  d
<    ed      ej                  j                  d<    ed      ej                  j                  d<    ed      ej                  j                  d<    ed      ej                  j                  d<   deddfdZdeddfdZ G d d      Zy)    N)Callable)Storage)gds_register_buffergds_deregister_bufferGdsFile__all__namereturnc                       fd}|S )Nc                  "    t        d d      )Nz	torch._C.z" is not supported on this platform)RuntimeError)argskwargsr	   s     N/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/cuda/gds.pyfnz_dummy_fn.<locals>.fn   s    Ytf,NOPP     )r	   r   s   ` r   	_dummy_fnr      s    Q Ir   _gds_register_buffer_gds_deregister_bufferz?_gds_deregister_buffer exists but _gds_register_buffer does not_gds_register_handlez=_gds_register_handle exists but _gds_register_buffer does not_gds_deregister_handlez?_gds_deregister_handle exists but _gds_register_buffer does not_gds_load_storagez:_gds_load_storage exists but _gds_register_buffer does not_gds_save_storagez:_gds_save_storage exists but _gds_register_buffer does notsc                 B    t         j                  j                  |        y)a:  Registers a storage on a CUDA device as a cufile buffer.

    Example::

        >>> # xdoctest: +SKIP("gds filesystem requirements")
        >>> src = torch.randn(1024, device="cuda")
        >>> s = src.untyped_storage()
        >>> gds_register_buffer(s)

    Args:
        s (Storage): Buffer to register.
    N)torch_Cr   r   s    r   r   r   5   s     
HH!!!$r   c                 B    t         j                  j                  |        y)aw  Deregisters a previously registered storage on a CUDA device as a cufile buffer.

    Example::

        >>> # xdoctest: +SKIP("gds filesystem requirements")
        >>> src = torch.randn(1024, device="cuda")
        >>> s = src.untyped_storage()
        >>> gds_register_buffer(s)
        >>> gds_deregister_buffer(s)

    Args:
        s (Storage): Buffer to register.
    N)r   r   r   r   s    r   r   r   E   s     
HH##A&r   c                   d    e Zd ZdZdedefdZddZddZdd	Z	dd
e
deddfdZdd
e
deddfdZy)r   a  Wrapper around cuFile.

    cuFile is a file-like interface to the GPUDirect Storage (GDS) API.

    See the `cufile docs <https://docs.nvidia.com/gpudirect-storage/api-reference-guide/index.html#cufile-io-api>`_
    for more details.

    Args:
        filename (str): Name of the file to open.
        flags (int): Flags to pass to ``os.open`` when opening the file. ``os.O_DIRECT`` will
            be added automatically.

    Example::

        >>> # xdoctest: +SKIP("gds filesystem requirements")
        >>> src1 = torch.randn(1024, device="cuda")
        >>> src2 = torch.randn(2, 1024, device="cuda")
        >>> file = torch.cuda.gds.GdsFile(f, os.O_CREAT | os.O_RDWR)
        >>> file.save_storage(src1.untyped_storage(), offset=0)
        >>> file.save_storage(src2.untyped_storage(), offset=src1.nbytes)
        >>> dest1 = torch.empty(1024, device="cuda")
        >>> dest2 = torch.empty(2, 1024, device="cuda")
        >>> file.load_storage(dest1.untyped_storage(), offset=0)
        >>> file.load_storage(dest2.untyped_storage(), offset=src1.nbytes)
        >>> torch.equal(src1, dest1)
        True
        >>> torch.equal(src2, dest2)
        True

    filenameflagsc                     t         j                  dk(  rt        d      || _        || _        t        j                  ||t
        j                  z        | _        d | _	        | j                          y )Nwin32z*GdsFile is not supported on this platform.)sysplatformr   r"   r#   osopenO_DIRECTfdhandleregister_handle)selfr"   r#   s      r   __init__zGdsFile.__init__v   sV    <<7"KLL 
''(EBKK$78"&r   r
   Nc                 z    | j                   | j                          t        j                  | j                         y )N)r,   deregister_handler(   closer+   r.   s    r   __del__zGdsFile.__del__   s(    ;;"""$
r   c                     | j                   t        d      t        j                  j	                  | j
                        | _         y)zpRegisters file descriptor to cuFile Driver.

        This is a wrapper around ``cuFileHandleRegister``.
        Nz4Cannot register a handle that is already registered.)r,   AssertionErrorr   r   r   r+   r3   s    r   r-   zGdsFile.register_handle   s4    
 ;;" !WXXhh33DGG<r   c                     | j                   t        d      t        j                  j	                  | j                          d| _         y)zvDeregisters file descriptor from cuFile Driver.

        This is a wrapper around ``cuFileHandleDeregister``.
        Nz2Cannot deregister a handle that is not registered.)r,   r6   r   r   r   r3   s    r   r1   zGdsFile.deregister_handle   s7    
 ;; !UVV''4r   storageoffsetc                     | j                   t        d      t        j                  j	                  | j                   ||       y)am  Loads data from the file into the storage.

        This is a wrapper around ``cuFileRead``. ``storage.nbytes()`` of data
        will be loaded from the file at ``offset`` into the storage.

        Args:
            storage (Storage): Storage to load data into.
            offset (int, optional): Offset into the file to start loading from. (Default: 0)
        Nz4Cannot load data from a file that is not registered.)r,   r6   r   r   r   r.   r8   r9   s      r   load_storagezGdsFile.load_storage   s4     ;; !WXX""4;;@r   c                     | j                   t        d      t        j                  j	                  | j                   ||       y)aU  Saves data from the storage into the file.

        This is a wrapper around ``cuFileWrite``. All bytes of the storage
        will be written to the file at ``offset``.

        Args:
            storage (Storage): Storage to save data from.
            offset (int, optional): Offset into the file to start saving to. (Default: 0)
        Nz2Cannot save data to a file that is not registered.)r,   r6   r   r   r   r;   s      r   save_storagezGdsFile.save_storage   s4     ;; !UVV""4;;@r   )r
   N)r   )__name__
__module____qualname____doc__strintr/   r4   r-   r1   r   r<   r>   r   r   r   r   r   V   se    > S 
=AG AS A AAG AS A Ar   r   )r(   r&   collections.abcr   r   torch.typesr   r   listrC   __annotations__r   hasattrr   r6   __dict__r   r   r   r   r   r   <module>rK      s   	 
 $  c C H  uxx/0uxx12M
 	
 uxx/0K
 	
 uxx12M
 	
 uxx,-H
 	
 uxx,-H
 	
 1::P0QEHH,-2;<T2UEHH./09:P0QEHH,-2;<T2UEHH./-67J-KEHH)*-67J-KEHH)*%7 %t % 'W ' '"[A [Ar   