
    9i              	           S SK JrJr  S SKrS SKrS SKJr  S SKJ	r
  SS/r " S S\R                  5      r\R                  R                  \S5        SSS	.S
\S\\
   S\\   SS4S jjrg)    )AnyOptionalN)
_to_dlpack)DeviceDLDeviceTypefrom_dlpackc                   P    \ 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g)r      )   )   )   )   )   )   )	   )
   )   )   )   )r
   )   )   )    N)__name__
__module____qualname____firstlineno__kDLCPUkDLCUDAkDLCUDAHost	kDLOpenCL	kDLVulkankDLMetalkDLVPIkDLROCMkDLROCMHost	kDLExtDevkDLCUDAManaged	kDLOneAPI	kDLWebGPU
kDLHexagonkDLMAIA__static_attributes__r       R/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torch/utils/dlpack.pyr   r      sM    FGKIIHFGKINIIJGr.   a  to_dlpack(tensor) -> PyCapsule

Returns an opaque object (a "DLPack capsule") representing the tensor.

.. note::
  ``to_dlpack`` is a legacy DLPack interface. The capsule it returns
  cannot be used for anything in Python other than use it as input to
  ``from_dlpack``. The more idiomatic use of DLPack is to call
  ``from_dlpack`` directly on the tensor object - this works when that
  object has a ``__dlpack__`` method, which PyTorch and most other
  libraries indeed have now.

.. warning::
  Only call ``from_dlpack`` once per capsule produced with ``to_dlpack``.
  Behavior when a capsule is consumed multiple times is undefined.

Args:
    tensor: a tensor to be exported

The DLPack capsule shares the tensor's memory.
)devicecopy
ext_tensorr0   r1   returnztorch.Tensorc                f   [        U S5      (       Ga?  0 nSUS'   Ub  X#S'   Ub  [        U[        5      (       a  [        R                  " U5      n[        U[        R                  5      (       d   S[        U5       35       e[        R                  R                  U5      US'   U R                  5       nUS   [        R                  [        R                  4;   ad  [        R                  R                  SUS	    35      nUS   [        R                  :H  nU(       a  UR                  S:X  a  S	OUR                  nXsS
'    U R                  " S0 UD6nOUc  Ub   S5       eU n[        R                  R%                  U5      $ ! [          a&    UR#                  S5        U R                  " S0 UD6n NNf = f)a	  from_dlpack(ext_tensor) -> Tensor

Converts a tensor from an external library into a ``torch.Tensor``.

The returned PyTorch tensor will share the memory with the input tensor
(which may have come from another library). Note that in-place operations
will therefore also affect the data of the input tensor. This may lead to
unexpected issues (e.g., other libraries may have read-only flags or
immutable data structures), so the user should only do this if they know
for sure that this is fine.

Args:
    ext_tensor (object with ``__dlpack__`` attribute, or a DLPack capsule):
        The tensor or DLPack capsule to convert.

        If ``ext_tensor`` is a tensor (or ndarray) object, it must support
        the ``__dlpack__`` protocol (i.e., have a ``ext_tensor.__dlpack__``
        method). Otherwise ``ext_tensor`` may be a DLPack capsule, which is
        an opaque ``PyCapsule`` instance, typically produced by a
        ``to_dlpack`` function or method.

    device (torch.device or str or None): An optional PyTorch device
        specifying where to place the new tensor. If None (default), the
        new tensor will be on the same device as ``ext_tensor``.

    copy (bool or None): An optional boolean indicating whether or not to copy
        ``self``. If None, PyTorch will copy only if necessary.

Examples::

    >>> import torch.utils.dlpack
    >>> t = torch.arange(4)

    # Convert a tensor directly (supported in PyTorch >= 1.10)
    >>> t2 = torch.from_dlpack(t)
    >>> t2[:2] = -1  # show that memory is shared
    >>> t2
    tensor([-1, -1,  2,  3])
    >>> t
    tensor([-1, -1,  2,  3])

    # The old-style DLPack usage, with an intermediate capsule object
    >>> capsule = torch.utils.dlpack.to_dlpack(t)
    >>> capsule
    <capsule object "dltensor" at ...>
    >>> t3 = torch.from_dlpack(capsule)
    >>> t3
    tensor([-1, -1,  2,  3])
    >>> t3[0] = -9  # now we're sharing memory between 3 tensors
    >>> t3
    tensor([-9, -1,  2,  3])
    >>> t2
    tensor([-9, -1,  2,  3])
    >>> t
    tensor([-9, -1,  2,  3])


__dlpack__)r   r   max_versionr1   z&from_dlpack: unsupported device type: 	dl_devicer   zcuda:r   streamzQdevice and copy kwargs not supported when ext_tensor is already a DLPack capsule.r   )hasattr
isinstancestrtorchr0   type_C_torchDeviceToDLDevice__dlpack_device__r   r   r%   cudacurrent_streamcuda_streamr5   	TypeErrorpop_from_dlpack)	r2   r0   r1   kwargs
ext_devicer8   is_cuda
stream_ptrdlpacks	            r/   r   r   :   s   ~ z<(( "$ &}!6N
 &#&&f-fell33 8fG3 #((("A"A&"IF;113
 a=\11<3G3GHHZZ..z!}o/FGF !m|';';;G &&*<*<*AvGYGYJ)8	5**4V4F ~$, 	
(	
.
 88  ((  	5JJ}%**4V4F	5s   ?F   -F0/F0)typingr   r   r<   enumtorch._Cr   	to_dlpacktorch.typesr   _Device__all__IntEnumr   r>   _add_docstrboolr   r   r.   r/   <module>rV      s        , ) 
4<< &   Y ! 8 !%	r)r) Wr) 4.	r)
 r)r.   