Ë
    Z^(h\  ã                   ó"  — d dl Z d dlmZmZ d dlZd dlmZ ddlmZm	Z	 eee
edf   Zdd„Zddeddfd	„Zddeddfd
„Zddedee
ef   fd„Zddedee
ef   fd„Zddedefd„Zddedefd„Zddedefd„Zddedefd„Zddedeeef   fd„Zg d¢Zy)é    N)ÚAnyÚUnion)ÚDeviceé   )Ú_get_device_indexÚis_initializedÚreturnc                  óV   — t        «       rt        j                  j                  «        yy)aZ  Release all unoccupied cached memory currently held by the caching
    allocator so that those can be used in other XPU application.

    .. note::
        :func:`~torch.xpu.empty_cache` doesn't increase the amount of XPU
        memory available for PyTorch. However, it may help reduce fragmentation
        of XPU memory in certain cases.
    N)r   ÚtorchÚ_CÚ_xpu_emptyCache© ó    úN/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/xpu/memory.pyÚempty_cacher      s   € ô ÔÜ�‰× Ñ Õ"ð r   Údevicec                 óZ   — t        | d¬«      } t        j                  j                  | «      S )a¬  Reset the "peak" stats tracked by the XPU memory allocator.

    See :func:`~torch.xpu.memory_stats` for details. Peak stats correspond to the
    `"peak"` key in each individual stat dict.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistic for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).
    T©Úoptional)r   r   r   Ú_xpu_resetPeakMemoryStats©r   s    r   Úreset_peak_memory_statsr      s%   € ô ˜v°Ô5€FÜ�8‰8×-Ñ-¨fÓ5Ð5r   c                 óZ   — t        | d¬«      } t        j                  j                  | «      S )aÛ  Reset the "accumulated" (historical) stats tracked by the XPU memory allocator.

    See :func:`~torch.xpu.memory_stats` for details. Accumulated stats correspond to
    the `"allocated"` and `"freed"` keys in each individual stat dict.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistic for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).
    Tr   )r   r   r   Ú _xpu_resetAccumulatedMemoryStatsr   s    r   Úreset_accumulated_memory_statsr   )   s%   € ô ˜v°Ô5€FÜ�8‰8×4Ñ4°VÓ<Ð<r   c                 ór   — t        «       si S t        | d¬«      } t        j                  j	                  | «      S )zLReturn the result of :func:`~torch.xpu.memory_stats` as a nested dictionary.Tr   )r   r   r   r   Ú_xpu_memoryStatsr   s    r   Úmemory_stats_as_nested_dictr   8   s.   € äÔØˆ	Ü˜v°Ô5€FÜ�8‰8×$Ñ$ VÓ,Ð,r   c                 ó¨   ‡‡— g Šdt         dt        ddfˆˆfd„Št        | ¬«      } ‰d|«       ‰j                  «        t	        j
                  ‰«      S )a@  Return a dictionary of XPU memory allocator statistics for a given device.

    The return value of this function is a dictionary of statistics, each of
    which is a non-negative integer.

    Core statistics:

    - ``"allocated_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"``:
      amount of allocated memory.
    - ``"reserved_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"``:
      amount of reserved memory.
    - ``"active_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"``:
      amount of active memory.
    - ``"requested_bytes.{all,large_pool,small_pool}.{current,peak,allocated,freed}"``:
      memory requested by client code, compare this with allocated_bytes to check if
      allocation rounding adds too much overhead.

    For these core statistics, values are broken down as follows.

    Pool type:

    - ``all``: combined statistics across all memory pools.
    - ``large_pool``: statistics for the large allocation pool (for size >= 1MB allocations).
    - ``small_pool``: statistics for the small allocation pool (for size < 1MB allocations).

    Metric type:

    - ``current``: current value of this metric.
    - ``peak``: maximum value of this metric.
    - ``allocated``: historical total increase in this metric.
    - ``freed``: historical total decrease in this metric.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistics for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).
    ÚprefixÚobjr	   Nc                 ó¼   •— t        |t        «      r8t        | «      dkD  r| dz  } |j                  «       D ]  \  }} ‰| |z   |«       Œ y ‰j	                  | |f«       y )Nr   ú.)Ú
isinstanceÚdictÚlenÚitemsÚappend)r    r!   ÚkÚvÚ_recurse_add_to_resultÚresults       €€r   r+   z,memory_stats.<locals>._recurse_add_to_resulth   sZ   ø€ Ü�cœ4Ô Ü�6‹{˜QŠØ˜#‘�ØŸ	™	›ò 6‘��1Ù& v°¡z°1Õ5ñ6ð �M‰M˜6 3˜-Õ(r   r   Ú )Ústrr   r   ÚsortÚcollectionsÚOrderedDict)r   Ústatsr+   r,   s     @@r   Úmemory_statsr3   @   sU   ù€ ðL €Fð)¤sð )´ð )¸ö )ô (¨vÔ6€EÙ˜2˜uÔ%Ø
‡K�K„Mä×"Ñ" 6Ó*Ð*r   c                 ó:   — t        | ¬«      j                  dd«      S )a  Return the current GPU memory occupied by tensors in bytes for a given device.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistic for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).

    .. note::
        This is likely less than the amount shown in `xpu-smi` since some
        unused memory can be held by the caching allocator and some context
        needs to be created on GPU.
    r   zallocated_bytes.all.currentr   ©r3   Úgetr   s    r   Úmemory_allocatedr7   x   s   € ô ˜vÔ&×*Ñ*Ð+HÈ!ÓLÐLr   c                 ó:   — t        | ¬«      j                  dd«      S )a‰  Return the maximum GPU memory occupied by tensors in bytes for a given device.

    By default, this returns the peak allocated memory since the beginning of
    this program. :func:`~torch.xpu.reset_peak_memory_stats` can be used to
    reset the starting point in tracking this metric. For example, these two
    functions can measure the peak allocated memory usage of each iteration in a
    training loop.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistic for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).
    r   zallocated_bytes.all.peakr   r5   r   s    r   Úmax_memory_allocatedr9   ˆ   s   € ô ˜vÔ&×*Ñ*Ð+EÀqÓIÐIr   c                 ó:   — t        | ¬«      j                  dd«      S )aJ  Return the current GPU memory managed by the caching allocator in bytes for a given device.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistic for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).
    r   zreserved_bytes.all.currentr   r5   r   s    r   Úmemory_reservedr;   ™   s   € ô ˜vÔ&×*Ñ*Ð+GÈÓKÐKr   c                 ó:   — t        | ¬«      j                  dd«      S )a‘  Return the maximum GPU memory managed by the caching allocator in bytes for a given device.

    By default, this returns the peak cached memory since the beginning of this
    program. :func:`~torch.xpu.reset_peak_memory_stats` can be used to reset
    the starting point in tracking this metric. For example, these two functions
    can measure the peak cached memory amount of each iteration in a training
    loop.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistic for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).
    r   zreserved_bytes.all.peakr   r5   r   s    r   Úmax_memory_reservedr=   ¤   s   € ô ˜vÔ&×*Ñ*Ð+DÀaÓHÐHr   c                 óZ   — t        | d¬«      } t        j                  j                  | «      S )a½  Return the global free and total GPU memory for a given device.

    Args:
        device (torch.device or int or str, optional): selected device. Returns
            statistic for the current device, given by :func:`~torch.xpu.current_device`,
            if :attr:`device` is ``None`` (default).

    Returns:
        int: the memory available on the device in units of bytes.
        int: the total memory on the device in units of bytes
    Tr   )r   r   r   Ú_xpu_getMemoryInfor   s    r   Úmem_get_infor@   µ   s%   € ô ˜v°Ô5€FÜ�8‰8×&Ñ& vÓ.Ð.r   )
r   r9   r=   r@   r7   r;   r3   r   r   r   )r	   N)N)r0   Útypingr   r   r   Útorch.typesr   r-   r   r   r.   ÚintÚ	_device_tr   r   r   r%   r   r3   r7   r9   r;   r=   Útupler@   Ú__all__r   r   r   ú<module>rG      s  ðÛ ß ã Ý ç /ð �&˜#˜s DÐ(Ñ)€	ó
#ñ6 Ið 6¸ó 6ñ=¨9ð =Àó =ñ-¨	ð -¸TÀ#ÀsÀ(¹^ó -ñ5+˜ð 5+¨d°3¸°8©nó 5+ñpM˜Yð M°#ó Mñ J ð J°có Jñ"L˜Ið L°ó LñI 	ð I°Só Iñ"/˜ð /¨e°C¸°H©oó /ò �r   