
    <Цii                     P   S SK r S SKJrJrJrJr  S SKrS SKJr  SSK	J
r
Jr  \\\\S4   rSS jrSS\SS4S	 jjrSS\SS4S
 jjrSS\S\\\4   4S jjrSS\S\\\4   4S jjrSS\S\4S jjrSS\S\4S jjrSS\S\4S jjrSS\S\4S jjrSS\S\\\4   4S jjr/ SQrg)    N)AnyDictTupleUnion)Device   )_get_device_indexis_initializedreturnc                  `    [        5       (       a  [        R                  R                  5         gg)aB  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     O/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/xpu/memory.pyempty_cacher      s"       " r   devicec                 T    [        U SS9n [        R                  R                  U 5      $ )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5F88--f55r   c                 T    [        U SS9n [        R                  R                  U 5      $ )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5F8844V<<r   c                 v    [        5       (       d  0 $ [        U SS9n [        R                  R	                  U 5      $ )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   s1    	v5F88$$V,,r   c                    ^^ / mS[         S[        SS4UU4S jjm[        U S9nT" SU5        TR                  5         [        R
                  " T5      $ )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                    > [        U[        5      (       a9  [        U 5      S:  a  U S-  n UR                  5        H  u  p#T" X-   U5        M     g TR	                  X45        g )Nr   .)
isinstancedictlenitemsappend)r"   r#   kv_recurse_add_to_resultresults       r   r-   ,memory_stats.<locals>._recurse_add_to_resulth   sR    c4  6{Q#		&vz15 $ MM6-(r   r    )strr   r    sortcollectionsOrderedDict)r   statsr-   r.   s     @@r   memory_statsr6   @   sZ    L F)s ) ) ) ) (v6E2u%
KKM""6**r   c                 4    [        U S9R                  SS5      $ )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   r6   getr   s    r   memory_allocatedr:   x   s     v&**+H!LLr   c                 4    [        U S9R                  SS5      $ )aa  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   r8   r   s    r   max_memory_allocatedr<      s     v&**+EqIIr   c                 4    [        U S9R                  SS5      $ )a6  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   r8   r   s    r   memory_reservedr>      s     v&**+GKKr   c                 4    [        U S9R                  SS5      $ )ai  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   r8   r   s    r   max_memory_reservedr@      s     v&**+DaHHr   c                 T    [        U SS9n [        R                  R                  U 5      $ )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_inforC      s%     v5F88&&v..r   )
r   r<   r@   rC   r:   r>   r6   r    r   r   )r   N)N)r3   typingr   r   r   r   r   torch.typesr   r0   r	   r
   r1   int	_device_tr   r   r   r    r6   r:   r<   r>   r@   rC   __all__r   r   r   <module>rI      s    * *   / &#sD()	
#6I 6 6=9 = =-	 -T#s(^ -5+ 5+d38n 5+pMY M# M J Jc J"LI L LI	 IS I"/ /eCHo / r   