a
    d                     @   s   U d Z ddlmZmZ ddlZddlmZ ddlmZ g dZee	 e
d< eeeef d	d
dZG dd dejjZeeedddZG dd dejjZdS )z0Arbitrary dependency between two autograd lanes.    )ListTupleN)Tensor   )	get_phony)forkForkjoinJoin__all__)inputreturnc                 C   s4   t  r| jrt| \} }nt| jdd}| |fS )z7Branches out from an autograd lane of the given tensor.Frequires_grad)torchis_grad_enabledr   r   applyr   devicer   phony r   s/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/distributed/pipeline/sync/dependency.pyr      s    r   c                   @   sB   e Zd Zed eeeef dddZed eeedddZdS )r   )ctxr   r   c                 C   s   t |jdd}| | fS )NFr   )r   r   detachr   r   r   r   r   r   forward   s    zFork.forward)r   
grad_input	grad_gradr   c                 C   s   |S Nr   )r   r   r   r   r   r   backward"   s    zFork.backwardN)__name__
__module____qualname__staticmethodr   r   r   r   r   r   r   r   r      s   r   )r   r   r   c                 C   s$   t  r | js|jr t| |} | S )zMerges two autograd lanes.)r   r   r   r
   r   r   r   r   r   r	   '   s    r	   c                   @   sB   e Zd Zed eeedddZed eeedf dddZdS )r
   )r   r   r   r   c                 C   s   |  S r   )r   r   r   r   r   r   0   s    zJoin.forwardN)r   r   r   c                 C   s   |d fS r   r   )r   r   r   r   r   r   4   s    zJoin.backward)r    r!   r"   r#   r   r   r   r   r   r   r   r   r
   /   s   r
   )__doc__typingr   r   r   r   r   r   r   str__annotations__r   ZautogradZFunctionr   r	   r
   r   r   r   r   <module>   s   
