
    3Kim3                     4   S SK r S SKrS SKJrJr  S SKrS SKJr  S SKJ	r	  SSK
JrJrJrJr  \" 5       (       d  \" S5      \R                  R                   S'   \\	\\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 S
\S\ 4S jjr!S S\ S
\SS4S jjr" " S S5      r# " S S\#5      r$S\#SS4S jr%S\#4S jr&/ SQr'g)!    N)AnyUnion)_dummy_type)Device   )_get_device_index_is_compiled
_lazy_initis_initialized_xpu_XPUAllocator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     R/var/www/html/dynamic-report/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"   >   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_resultn   sR    c4  6{Q#		&vz15 $ MM6-(r   r    )strr   r"   sortcollectionsOrderedDict)r   statsr/   r0   s     @@r   memory_statsr8   F   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   r8   getr   s    r   memory_allocatedr<   ~   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   r:   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   r:   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   r:   r   s    r   max_memory_reservedrB      s     v&**+DaHHr   c                 h    [        5         [        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   r   _xpu_getMemoryInfor   s    r   mem_get_inforE      s*     Lv5F88&&v..r   c                 h    [        5         [        U SS9n [        R                  R	                  U 5      $ )a:  
Retrieve the memory fraction currently set for a process on a given XPU device.
This fraction represents the portion of the total device memory that
the caching allocator is allowed to use. The allowed memory is calculated as:

.. math:: \text{allowed\_memory} = \text{total\_memory} \times \text{fraction}

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

Returns:
    float: The memory fraction in the range 0.0 to 1.0.
Tr   )r
   r   r   r   _xpu_getMemoryFractionr   s    r   get_per_process_memory_fractionrH      s*     Lv5F88**622r   fractionc                     [        5         [        USS9n[        U [        5      (       d  [	        S5      e[
        R                  R                  X5        g)a  
Set the memory fraction for a single process on XPU device.
This function limits the amount of memory that the caching allocator can allocate
on the specified XPU device. The allowed memory is computed as:

.. math:: \text{allowed\_memory} = \text{total\_memory} \times \text{fraction}

If the process attempts to allocate more than this allowed memory,
an out-of-memory error will be raised by the allocator.

Arguments:
    fraction (float): Range: 0~1. Allowed memory equals total_memory * fraction.
    device (torch.device or int or str, optional): selected device. It uses the current device,
        given by :func:`~torch.xpu.current_device`, if :attr:`device` is ``None`` (default).

.. note:: In general, the total available free memory is less than the total capacity.
Tr   z3Invalid type for fraction argument, must be `float`N)r
   r   r(   float	TypeErrorr   r   _xpu_setMemoryFraction)rI   r   s     r   set_per_process_memory_fractionrN      s@    $ Lv5Fh&&MNN	HH##H5r   c                   T    \ rS rSrSrS\R                  R                  4S jrS r	Sr
g)_XPUAllocator   z,Wrapper over internal XPU memory allocators.	allocatorc                     Xl         g N
_allocator)selfrR   s     r   __init___XPUAllocator.__init__   s    #r   c                     U R                   $ rT   rU   )rW   s    r   rR   _XPUAllocator.allocator   s    r   rU   N)__name__
__module____qualname____firstlineno____doc__r   r   r   rX   rR   __static_attributes__r   r   r   rP   rP      s     7$%(("<"< $r   rP   c                   .    \ rS rSrSrS\S\S\4S jrSrg)	XPUPluggableAllocatori  z2XPU memory allocator loaded from a shared library.path_to_lib_filealloc_fn_namefree_fn_namec                    [         R                  " U5      n[        XB5      n[        XC5      n[         R                  " U[         R                  5      R
                  n[         R                  " U[         R                  5      R
                  nUb  Uc  [        S5      e[        R                  R                  Xx5      U l
        g)a  XPU memory allocator loaded dynamically from a shared library.

This lets users provide custom allocation and free functions implemented
in a separate shared library. The allocator is registered through
``torch._C._xpu_customAllocator`` and becomes available for use via
``torch.memory.xpu.change_current_allocator``.

Arguments:
    path_to_lib_file (str):
        Filesystem path to the shared library file containing the allocation
        and free functions.
    alloc_fn_name (str):
        Name of the allocation function exported from the shared library.
        The function must have the signature:

            ``void* alloc_fn(size_t size, int device, sycl::queue* queue);``

    free_fn_name (str):
        Name of the free function exported from the shared library.
        The function must have the signature:

            ``void free_fn(void* ptr, size_t size, sycl::queue* queue);``
Nz9Failed to load allocator symbols from the shared library.)ctypesCDLLgetattrcastc_void_pvalueRuntimeErrorr   r   _xpu_customAllocatorrV   )	rW   rd   re   rf   allocator_liballoc_fn_ptrfree_fn_ptralloc_fn_addrfree_fn_addrs	            r   rX   XPUPluggableAllocator.__init__  s    0 $45}<m:L&//BHH{{;@FF L$8K   ((77Tr   rU   N)r\   r]   r^   r_   r`   r3   rX   ra   r   r   r   rc   rc     s$    =%U %US %UPS %Ur   rc   rR   c                 ^    [         R                  R                  U R                  5       5        g)a  Change the currently used memory allocator to be the one provided.

.. note::
    If the current allocator has already been used/initialized, this function will error.

Arguments:
    allocator (torch.xpu.memory._XPUAllocator): allocator to be set as the active one.
N)r   r   _xpu_changeCurrentAllocatorrR   )rR   s    r   change_current_allocatorrx   /  s     
HH(()<)<)>?r   c                  P    [        [        R                  R                  5       5      $ )zlReturn the allocator being currently used.

Returns:
    _XPUAllocator: the allocator being currently used.
)rP   r   r   _xpu_getAllocatorr   r   r   _get_current_allocatorr{   ;  s     33566r   )rc   rx   r   rH   r>   rB   rE   r<   r@   r8   r"   r   r   rN   )r   NrT   )(r5   rh   typingr   r   r   torch._utilsr   torch.typesr   r2   r   r	   r
   r   r   __dict__r3   int	_device_tr   r   r   r)   r"   r8   r<   r>   r@   rB   tuplerE   rK   rH   rN   rP   rc   rx   r{   __all__r   r   r   <module>r      s       $  I I ~~-89L-MEHH)*&#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 /"3I 3 3(6e 6Y 6RV 64 (UM (UV	@ 	@$ 	@7 7r   