U
    yh                   
   @   s>  d Z ddlmZ ddlmZmZmZ ddlZddlm	Z
 ddlmZ d	d
ddddddddg
Zee
eedf ZedddZedddZedddZeddd	Zd&edddd
ZG dd dZG dd dZe Zead'eedddZG d d deZeed!d"dZedd#dZeddd$dZedd%dZdS )(zj
This package implements abstractions found in ``torch.cuda``
to facilitate writing device-agnostic code.
    )AbstractContextManager)AnyOptionalUnionN   device   )ampis_availablesynchronizecurrent_devicecurrent_streamstream
set_devicedevice_countStreamStreamContextEventreturnc                   C   s   t jj S )z/Returns a bool indicating if CPU supports AVX2.)torch_C_cpu_is_cpu_support_avx2 r   r   D/var/www/html/venv/lib/python3.8/site-packages/torch/cpu/__init__.pyr       s    r   c                   C   s   t jj S )z1Returns a bool indicating if CPU supports AVX512.)r   r   r   _is_cpu_support_avx512r   r   r   r   r   %   s    r   c                   C   s   t jj S )z/Returns a bool indicating if CPU supports VNNI.)r   r   r   _is_cpu_support_vnnir   r   r   r   r   *   s    r   c                   C   s   dS )zReturns a bool indicating if CPU is currently available.

    N.B. This function only exists to facilitate device-agnostic code

    Tr   r   r   r   r   r   /   s    )r   r   c                 C   s   dS )zWaits for all kernels in all streams on the CPU device to complete.

    Args:
        device (torch.device or int, optional): ignored, there's only one CPU device.

    N.B. This function only exists to facilitate device-agnostic code.
    Nr   r   r   r   r   r   8   s    c                   @   s0   e Zd ZdZd
eddddZdddd	ZdS )r   zH
    N.B. This class only exists to facilitate device-agnostic code
    N)priorityr   c                 C   s   d S Nr   )selfr    r   r   r   __init__G   s    zStream.__init__r   c                 C   s   d S r!   r   r"   r   r   r   r   wait_streamJ   s    zStream.wait_stream)r   )__name__
__module____qualname____doc__intr#   r%   r   r   r   r   r   B   s   c                   @   sH   e Zd ZedddZdddddZddddZdddd	d
ZdS )r   r   c                 C   s   dS )NTr   r"   r   r   r   queryO   s    zEvent.queryNc                 C   s   d S r!   r   r$   r   r   r   recordR   s    zEvent.recordc                 C   s   d S r!   r   r+   r   r   r   r   U   s    zEvent.synchronizec                 C   s   d S r!   r   r$   r   r   r   waitX   s    z
Event.wait)N)N)r&   r'   r(   boolr,   r-   r   r.   r   r   r   r   r   N   s   c                 C   s   t S )zReturns the currently selected :class:`Stream` for a given device.

    Args:
        device (torch.device or int, optional): Ignored.

    N.B. This function only exists to facilitate device-agnostic code

    )_current_streamr   r   r   r   r   `   s    	c                   @   sB   e Zd ZU dZee ed< dd Zdd Ze	e	e	ddd	d
Z
dS )r   zvContext-manager that selects a given stream.

    N.B. This class only exists to facilitate device-agnostic code

    
cur_streamc                 C   s   || _ t| _d S r!   )r   _default_cpu_streamprev_streamr$   r   r   r   r#   u   s    zStreamContext.__init__c                 C   s    | j }|d krd S t| _|ad S r!   )r   r0   r3   )r"   r1   r   r   r   	__enter__y   s
    zStreamContext.__enter__N)typevalue	tracebackr   c                 C   s   | j }|d krd S | jad S r!   )r   r3   r0   )r"   r5   r6   r7   r1   r   r   r   __exit__   s    zStreamContext.__exit__)r&   r'   r(   r)   r   r   __annotations__r#   r4   r   r8   r   r   r   r   r   l   s
   
	)r   r   c                 C   s   t | S )zWrapper around the Context-manager StreamContext that
    selects a given stream.

    N.B. This function only exists to facilitate device-agnostic code
    )r   )r   r   r   r   r      s    c                   C   s   dS )zReturns number of CPU devices (not cores). Always 1.

    N.B. This function only exists to facilitate device-agnostic code
    r	   r   r   r   r   r   r      s    c                 C   s   dS )zzSets the current device, in CPU we do nothing.

    N.B. This function only exists to facilitate device-agnostic code
    Nr   r   r   r   r   r      s    c                   C   s   dS )zyReturns current device for cpu. Always 'cpu'.

    N.B. This function only exists to facilitate device-agnostic code
    cpur   r   r   r   r   r      s    )N)N) r)   
contextlibr   typingr   r   r   r    r   Z_devicer
   __all__strr*   Z	_device_tr/   r   r   r   r   r   r   r   r2   r0   r   r   r   r   r   r   r   r   r   r   <module>   s@   	
	