
    Ph                         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<   d	ed
eeef   fdZ G d dej                  j                        Zd	eded
efdZ G d dej                  j                        Zy)z0Arbitrary dependency between two autograd lanes.    )ListTupleN)Tensor   )	get_phony)forkForkjoinJoin__all__inputreturnc                     t        j                         r(| j                  rt        j	                  |       \  } }| |fS t        | j                  d      }| |fS )z7Branches out from an autograd lane of the given tensor.Frequires_grad)torchis_grad_enabledr   r	   applyr   devicer   phonys     uC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/distributed/pipeline/sync/dependency.pyr   r      sP    5#6#6zz%(u %< %,,e<%<    c            	       V    e Zd Zedd dedeeef   fd       Zedd dededefd       Zy)	r	   ctxr   r   c                 p    t        |j                  d      }|j                         |j                         fS )NFr   )r   r   detachr   r   r   s      r   forwardzFork.forward   s)    %,,e<||~u||~--r   
grad_input	grad_gradc                     |S N )r   r    r!   s      r   backwardzFork.backward"   s    r   N)__name__
__module____qualname__staticmethodr   r   r   r%   r$   r   r   r	   r	      sb    .V .F .uVV^/D . . f & V   r   r	   r   c                     t        j                         r.| j                  s|j                  rt        j	                  | |      } | S )zMerge two autograd lanes.)r   r   r   r   r   r   s     r   r
   r
   '   s3    E$7$75;N;N

5%(Lr   c            	       V    e Zd Zedd dededefd       Zedd dedeedf   fd       Zy)	r   r   r   r   r   c                 "    |j                         S r#   )r   r   s      r   r   zJoin.forward0   s    ||~r   r    Nc                 
    |d fS r#   r$   )r   r    s     r   r%   zJoin.backward4   s    4r   )r&   r'   r(   r)   r   r   r   r%   r$   r   r   r   r   /   sb    V F 6 f    f  &  U64<5H    r   r   )__doc__typingr   r   r   r   r   r   r   str__annotations__r   autogradFunctionr	   r
   r   r$   r   r   <module>r4      s    7    5c 5 50 5>>""  v &  5>>""  r   