
    PhAN                     	   d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
Zd Z G d de j                  j                        Z G d	 d
e j                  j                        Zd Z G d de j                  j                        Z G d de j                  j                        Zd Z G d de j                  j                        Z G d de j                  j                        Z G d de j                  j                        Z G d de j                  j                        Zd Zd Z G d de j                  j                        Z G d de j                  j                        Z G d d e j                  j                        Z G d! d"e j                  j                        Zd# Z G d$ d%e j                  j                        Z  G d& d'e j                  j                        Z!d( Z" G d) d*e j                  j                        Z# ed+ejH                  d,d,e e	e jJ                  e jL                        d-.       ed/d0 ejH                  d,d,e e	e jJ                  e jL                        d-1       ed2ejH                  d,d,e e	e jJ                  e jL                        d-.       ed3d4 d-d-e e	e jJ                  e jL                        d-.       ed5ejH                  d-d-e e	e jJ                  e jL                        d-d6 7       ed8ejH                  d-d-e e	e jJ                  e jL                        d-.       ed9ejH                  d,d,e e	e jJ                  e jL                        d-.       ed:ejH                  d,d,e e	e jJ                  e jL                        d-.       ed;ejH                  d,d,e e	e jJ                  e jL                        d-.       ed<ejH                  d,d,e e	e jJ                  e jL                        d-d= 7       ed>ejH                  d,d,e e	e jJ                  e jL                        d-.       ed?e jH                  d,d,e e	e jJ                  e jL                        d-.       ed@e!jH                  d,d,e e	e jJ                  e jL                        d-.       edAe#jH                  d,d,e" e	e jJ                  e jL                        d-.      gZ'y)B    N)partial)make_tensor)OpInfoSampleInput)all_types_andc                 >    | j                         j                         S N)cpunumpy)tensors    wC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/testing/_internal/autograd_function_db.pyto_numpyr      s    ::<    c                   \    e Zd Zed        Zed        Zed        Zed        Zed        Zy)	NumpyCubec                     t        |       }t        j                  d|dz  z  | j                        }t        j                  |dz  | j                        |fS N      devicer   torchr   r   )inputinput_npdinputs      r   forwardzNumpyCube.forward   sF    E?a(a-/E||HM%,,?GGr   c                 d    | j                  |d   |d          | j                  |d   |d          y Nr      save_for_backwardsave_for_forwardctxinputsoutputs      r   setup_contextzNumpyCube.setup_context"   s2    fQi3VAYq	2r   c                     | j                   \  }}t        j                  ||      dt        j                  ||      z  z   S N   saved_tensorsNumpyMulapply)r%   grad_output
grad_savedr   r   s        r   backwardzNumpyCube.backward'   s8    ))v~~k62Q
TY9Z5ZZZr   c                 D    t         j                  |      }||d   |d   ffS Nr   )r   r/   )infoin_dimsr   results       r   vmapzNumpyCube.vmap,   s(    '
GAJ///r   c                 ~    | j                   \  }}t        j                  ||      dt        j                  ||      z  fS r*   r,   r%   input_tangentr   r   s       r   jvpzNumpyCube.jvp1   s8    ))v~~mV4a(..X]:^6^^^r   N	__name__
__module____qualname__staticmethodr   r(   r2   r8   r<    r   r   r   r      sj    H H
 3 3 [ [ 0 0 _ _r   r   c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)CubeGenVmapTc                     | dz  d| dz  z  fS )Nr   r   rB   xs    r   r   zCubeGenVmap.forward:   s    Avq16z!!r   c                 d    | j                  |d   |d          | j                  |d   |d          y r   r!   r%   r&   outputss      r   r(   zCubeGenVmap.setup_context>   s2    fQi4VAY
3r   c                 :    | j                   \  }}||z  d|z  z   }|S r*   r-   )r%   r0   r1   r   r   r7   s         r   r2   zCubeGenVmap.backwardC   s)    ))vv%F
2r   c                 ~    | j                   \  }}t        j                  ||      dt        j                  ||      z  fS r*   )r-   
MulGenVmapr/   r.   r:   s       r   r<   zCubeGenVmap.jvpI   s:    ))vv6HNN=Z_<`8```r   N	r>   r?   r@   generate_vmap_rulerA   r   r(   r2   r<   rB   r   r   rD   rD   7   sX    " " 4 4  
 a ar   rD   c              +   b   K   t        t        |||      }t         |ddd      d       y w)Nr   dtyperequires_gradr    g?r   lowhighrB   argsr   r   r   opinfor   rS   rT   kwargsmake_args         r   sample_inputs_numpy_cuber_   O   s,     {6m\H
hqc2
<<s   -/c                       e Zd Zed        Zed        Zeej                  j                  j                  d               Z
y)NumpyCubeNotComposablec                 d    t        |       }t        j                  |dz  | j                        |fS )Nr   r   r   )r   r   s     r   r   zNumpyCubeNotComposable.forwardU   s)    E?||HM%,,?IIr   c                 D    |\  }}|| _         |d   j                  | _        y r4   )r   r   )r%   r&   r'   _r   s        r   r(   z$NumpyCubeNotComposable.setup_contextZ   s#    8AY%%
r   c                 h    d| j                   dz  z  }t        j                  || j                        S r   )r   r   r   r   )r%   r0   r1   	result_nps       r   r2   zNumpyCubeNotComposable.backward`   s,     *+	||Icjj99r   N)r>   r?   r@   rA   r   r(   r   autogradfunctiononce_differentiabler2   rB   r   r   ra   ra   T   sV    J J & &
 
^^00: 1 :r   ra   c                   \    e Zd Zed        Zed        Zed        Zed        Zed        Zy)r.   c                 n    t        j                  t        |       t        |      z  | j                        S Nr   )r   r   r   r   rG   ys     r   r   zNumpyMul.forwardh   s$    ||HQK(1+5ahhGGr   c                 @     | j                   |   | j                  |  y r	   r!   r$   s      r   r(   zNumpyMul.setup_contextl   "    v&f%r   c                     | j                   \  }}d }| j                  d   rt        j                  ||      }d }| j                  d   rt        j                  ||      }||fS r   )r-   needs_input_gradr.   r/   r%   r0   rG   rn   gxgys         r   r2   zNumpyMul.backwardq   s`      1"Q/B"Q/B2vr   c                     |\  }}||j                  |d      n|j                  d      }||j                  |d      n|j                  d      }t        j                  ||      }|j                  dd      }|dfS )Nr   )movedim	unsqueezer.   r/   )r5   r6   rG   rn   x_bdimy_bdimr7   s          r   r8   zNumpyMul.vmap|   ss     %+%7AIIfb!Q[[_%+%7AIIfb!Q[[_1%A&qyr   c                 6    | j                   \  }}||z  ||z  z   S r	   rL   r%   	x_tangent	y_tangentrG   rn   s        r   r<   zNumpyMul.jvp   $      11}y1},,r   Nr=   rB   r   r   r.   r.   g   sf    H H & &     - -r   r.   c           	   +   x   K   t        t        |||      }t         |ddd       |dddd      f       y w)NrR      g?r   rU   r   rX   rZ   r[   s         r   sample_inputs_numpy_mulr      s;     {6m\H
hqc2(1aSWX:Y9[
\\s   8:c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)rN   Tc                     | |z  S r	   rB   rm   s     r   r   zMulGenVmap.forward   s    1ur   c                 @     | j                   |   | j                  |  y r	   r!   rI   s      r   r(   zMulGenVmap.setup_context   rp   r   c                     | j                   \  }}d }| j                  d   rt        j                  ||      }d }| j                  d   rt        j                  ||      }||fS r   )r-   rr   rN   r/   rs   s         r   r2   zMulGenVmap.backward   sd      1"!!+q1B"!!+q1B2vr   c                 6    | j                   \  }}||z  ||z  z   S r	   rL   r}   s        r   r<   zMulGenVmap.jvp   r   r   NrO   rB   r   r   rN   rN      sV      & &   - -r   rN   c                   \    e Zd Zed        Zed        Zed        Zed        Zed        Zy)	NumpyExp_c                 H    t        |       }t        j                  ||       | S r	   )r   npexp)rG   x_nps     r   r   zNumpyExp_.forward   s    {
tTr   c                 r    |\  }| j                  |       | j                  |       | j                  |       y r	   )
mark_dirtyr"   r#   )r%   r&   r'   rG   s       r   r(   zNumpyExp_.setup_context   s1    qf%V$r   c                 J    | j                   \  }t        j                  ||      S r	   r,   )r%   r0   r'   s      r   r2   zNumpyExp_.backward   s     ##~~k622r   c                 :    t         j                  |       ||d   fS r4   )r   r/   )r5   r6   rG   s      r   r8   zNumpyExp_.vmap   s    '!*}r   c                 D    | j                   \  }|j                  |       |S r	   )r-   mul_)r%   r~   r'   s      r   r<   zNumpyExp_.jvp   s#     ##vr   Nr=   rB   r   r   r   r      sd     
 % % 3 3    r   r   c                   \    e Zd Zed        Zed        Zed        Zed        Zed        Zy)	NumpySortc                 D   | j                   }t        |       } t        j                  | |      }t        j                  ||      }t        j                  | ||      }t        j                  | |      t        j                  ||      t        j                  ||      fS )Naxisr   )r   r   r   argsorttake_along_axisr   r   rG   dimr   indind_invr7   s         r   r   zNumpySort.forward   s|    QKjj%**Ss+##As5LL6*LLV,LL0
 	
r   c                     |\  }}|\  }}}| j                  ||       | j                  ||       | j                  ||       || _        y r	   mark_non_differentiabler"   r#   r   )r%   r&   r'   rG   r   rd   r   r   s           r   r(   zNumpySort.setup_context   sM    3 3##C1c7+S'*r   c                 h    | j                   \  }}t        j                  |||| j                        d fS r	   r-   	NumpyTaker/   r   r%   r0   _0_1r   r   s         r   r2   zNumpySort.backward   s/    ((W{GS#''BDHHr   c                     |\  }}|j                  |d      }|dk\  r|n||j                         z   dz
  }t        j                  ||dz         dfS )Nr   r    )r   r   r   )rx   r   r   r/   )r5   r6   rG   r   rz   rd   s         r   r8   zNumpySort.vmap   sQ    	IIfa AXc3=1#4q#'*I55r   c                 j    | j                   \  }}t        j                  |||| j                        d d fS r	   r   r%   r~   rd   r   r   s        r   r<   zNumpySort.jvp   s1    ((Wy#w@$LLr   Nr=   rB   r   r   r   r      sh    

 

   I I 6 6 M Mr   r   c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)SortGenVmapTc                     | j                   }t        j                  | |      }t        j                  ||      }t        j                  | ||      }|||fS )N)r   r   )r   r   r   take_along_dimr   s         r   r   zSortGenVmap.forward   sL    mmA3'--#.%%a#6sG##r   c                     |\  }}|\  }}}| j                  ||       | j                  ||       | j                  ||       || _        y r	   r   )r%   r&   rJ   rG   r   rd   r   r   s           r   r(   zSortGenVmap.setup_context   sM    3!3##C1c7+S'*r   c                 h    | j                   \  }}t        j                  |||| j                        d fS r	   r-   TakeGenVmapr/   r   r   s         r   r2   zSortGenVmap.backward	  s1    ((W  gsCGGDdJJr   c                 j    | j                   \  }}t        j                  |||| j                        d d fS r	   r   r   s        r   r<   zSortGenVmap.jvp  s3    ((W  C#''BD$NNr   NrO   rB   r   r   r   r      sZ    $ $   K K O Or   r   c              +   ^   K   t        t        |||      }t         |dd      d       y w)NrR   r      )r    rX   rZ   r[   s         r   sample_inputs_numpy_sortr     )     {6m\H
hq!n4
00   +-c              +      K   t        t        |||      } |dd      }d}t        j                  |d      \  }}	}
t	        ||	|
|f       y w)NrR   r   r   r    rX   )r   r   r   r/   r   )r\   r   rS   rT   r]   r^   r   r   rd   r   r   s              r   sample_inputs_numpy_taker     sP     {6m\Ha^F
Coofa0OAsG
fC##6
77s   AAc                   \    e Zd Zed        Zed        Zed        Zed        Zed        Zy)r   c                     | j                   }t        |       } t        |      }t        j                  t	        j
                  | ||      |      S rl   )r   r   r   r   r   r   )rG   r   r   r   r   s        r   r   zNumpyTake.forward"  s=    QKsm||B..q#s;FKKr   c                 h    |\  }}}}| j                  ||       | j                  ||       || _        y r	   r"   r#   r   )r%   r&   r'   rG   r   r   r   s          r   r(   zNumpyTake.setup_context)  7    %3c7+S'*r   c                 p    | j                   \  }}t        j                  |||| j                        }|d d d fS r	   r   r%   r0   r   r   r7   s        r   r2   zNumpyTake.backward0  s8    ((WgsCGGDtT4''r   c                      |\  }}}}	||j                         n|dz
  }
|dk\  r|n||
z   } fd} |||      } |||      } |||      }t        j                  ||||dz         dfS )Nr    r   c                 z    |' | j                   j                  g| j                   S | j                  |d      S r4   )expand
batch_sizeshaperx   )rG   rz   r5   s     r   expand_bdimz#NumpyTake.vmap.<locals>.expand_bdim>  s7    ~qxx:!''::99VQ''r   )r   r   r/   )r5   r6   rG   r   r   r   rz   ind_bdimind_inv_bdimrd   logical_dimr   s   `           r   r8   zNumpyTake.vmap6  s    ,3), "(aeegVaZAXc3#4	(
 6"#x(g|4q#wa8!;;r   c                 t    |J |J | j                   \  }}t        j                  |||| j                        S r	   r   r%   r~   ind_tangentind_inv_tangentrd   r   r   s          r   r<   zNumpyTake.jvpI  sB    """&&&((Wy#w@@r   Nr=   rB   r   r   r   r   !  sh    L L   ( (
 < <$ A Ar   r   c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)r   Tc                 0    t        j                  | ||      S r	   )r   r   )rG   r   r   r   s       r   r   zTakeGenVmap.forwardS  s    ##AsC00r   c                 h    |\  }}}}| j                  ||       | j                  ||       || _        y r	   r   )r%   r&   rJ   rG   r   r   r   s          r   r(   zTakeGenVmap.setup_contextW  r   r   c                 p    | j                   \  }}t        j                  |||| j                        }|d d d fS r	   r   r   s        r   r2   zTakeGenVmap.backward^  s:    ((W"";cggFtT4''r   c                 d    | j                   \  }}t        j                  |||| j                        S r	   r   r   s          r   r<   zTakeGenVmap.jvpd  s,    ((W  C#''BBr   NrO   rB   r   r   r   r   P  sX    1 1   ( (
 C Cr   r   c                   \    e Zd Zed        Zed        Zed        Zed        Zed        Zy)Selectc                     | |   S r	   rB   rG   idxs     r   r   zSelect.forwardj      vr   c                 >    |\  }}|j                   | _        || _        y r	   r   x_shaper   r%   r&   r'   rG   r   s        r   r(   zSelect.setup_contextn      3ggr   c                 ^    |j                  | j                        }||| j                  <   |d fS r	   	new_zerosr   r   r%   r0   r7   s      r   r2   zSelect.backwardt  -    &&s{{3%swwt|r   c                 `    |\  }}|j                  |d      }t        j                  ||      dfS Nr    r   )rx   r   r/   r5   r6   rG   r   rz   rd   s         r   r8   zSelect.vmapz  s1    	IIfa ||As#Q&&r   c                 B    t         j                  || j                        S r	   )r   r/   r   r%   r~   rd   s      r   r<   z
Select.jvp  s    ||Isww//r   Nr=   rB   r   r   r   r   i  sd       
  
 ' '
 0 0r   r   c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)SelectGenVmapTc                     | |   S r	   rB   r   s     r   r   zSelectGenVmap.forward  r   r   c                 >    |\  }}|j                   | _        || _        y r	   r   )r%   r&   rJ   rG   r   s        r   r(   zSelectGenVmap.setup_context  r   r   c                 ^    |j                  | j                        }||| j                  <   |d fS r	   r   r   s      r   r2   zSelectGenVmap.backward  r   r   c                 B    t         j                  || j                        S r	   )r   r/   r   r   s      r   r<   zSelectGenVmap.jvp  s    ""9cgg66r   NrO   rB   r   r   r   r     sV       
  
 7 7r   r   c              +   ^   K   t        t        |||      }t         |dd      d       y w)NrR   r   r   r   rX   rZ   r[   s         r   sample_inputs_selectr     r   r   c                   T    e Zd ZdZdZed        Zed        Zed        Zed        Z	y)ScaleGradGenVmapTgQ	@c                 "    | j                         S r	   clonerF   s    r   r   zScaleGradGenVmap.forward  s    wwyr   c                      y r	   rB   rI   s      r   r(   zScaleGradGenVmap.setup_context      r   c                 (    |t         j                  z  S r	   r   scale)r%   r0   s     r   r2   zScaleGradGenVmap.backward  s    -3333r   c                 (    |t         j                  z  S r	   r   )r%   r~   s     r   r<   zScaleGradGenVmap.jvp  s    +1111r   N)
r>   r?   r@   rP   r   rA   r   r(   r2   r<   rB   r   r   r   r     s[    E    4 4 2 2r   r   c                   P    e Zd ZdZed        Zed        Zed        Zed        Zy)ZeroGradientsGenVmapTc                 B    | j                         |j                         fS r	   r   rm   s     r   r   zZeroGradientsGenVmap.forward  s    wwy!'')##r   c                      y r	   rB   rI   s      r   r(   z"ZeroGradientsGenVmap.setup_context  r   r   c                     t        j                  ddg|j                  |j                  |j                  dt        j                  |j                  |j                  |j                        fS )Nr   r   rS   r   r   zerosr   rS   r   r%   rt   ru   s      r   r2   zZeroGradientsGenVmap.backward  sP     KK1JrxxJrxx		JKKC
 	
r   c                     t        j                  |j                  |j                  |j                        t        j                  |j                  |j                  |j                        fS )Nr  r  r  s      r   r<   zZeroGradientsGenVmap.jvp  sF    
 KKCKKC
 	
r   NrO   rB   r   r   r   r     sV    $ $   
 
 
 
r   r   c              +   Z   K   t        t        |||      }t         |dd             y w)NrR   r   r   rZ   r[   s         r   "sample_inputs_forward_default_argsr	    s'     {6m\H
hq!n
%%s   )+c                   ^    e Zd Zedd       Zed        Zed        Zed        Zed        Zy)ForwardHasDefaultArgsc                     | |   S r	   rB   r   s     r   r   zForwardHasDefaultArgs.forward  r   r   c                 >    |\  }}|j                   | _        || _        y r	   r   r   s        r   r(   z#ForwardHasDefaultArgs.setup_context  r   r   c                 ^    |j                  | j                        }||| j                  <   |d fS r	   r   r   s      r   r2   zForwardHasDefaultArgs.backward  r   r   c                 `    |\  }}|j                  |d      }t        j                  ||      dfS r   )rx   r  r/   r   s         r   r8   zForwardHasDefaultArgs.vmap  s3    	IIfa $**1c2A55r   c                 B    t         j                  || j                        S r	   )r  r/   r   r   s      r   r<   zForwardHasDefaultArgs.jvp  s    $**9cgg>>r   N)r   r=   rB   r   r   r  r    sd       
  
 6 6
 ? ?r   r  NumpyCubeAutogradFunctionTF)opsupports_forward_adsupports_fwgrad_bwgradsample_inputs_funcdtypessupports_out!NumpyExpMarkDirtyAutogradFunctionc                 H    t         j                  | j                               S r	   )r   r/   r   rF   s    r   <lambda>r     s    Y__QWWY/r   )r  inplace_variantr  r  r  r  r  NumpyMulAutogradFunction&NumpyCubeNotComposableAutogradFunctionc                 2    t         j                  |       d   S r4   )ra   r/   rF   s    r   r  r    s    +11!4Q7r   NumpySortAutogradFunctionc                     | S r	   rB   rn   r   s     r   r  r  "      r   )r  r  r  r  r  r  gradcheck_wrapperNumpyTakeAutogradFunctionSelectAutogradFunctionCubeGenVmapAutogradFunctionMulGenVmapAutogradFunctionSortGenVmapAutogradFunctionc                     | S r	   rB   r!  s     r   r  r  P  r"  r   SelectGenVmapAutogradFunction ScaleGradGenVmapAutogradFunction$ZeroGradientsGenVmapAutogradFunction%ForwardHasDefaultArgsAutogradFunction)(r   	functoolsr   torch.testingr   #torch.testing._internal.opinfo.corer   r   $torch.testing._internal.common_dtyper   r   r   r   rg   Functionr   rD   r_   ra   r.   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r/   boolhalfautograd_function_dbrB   r   r   <module>r6     sq     % ?  _'' _8a%..)) a0=
:U^^44 :&!-u~~&& !-F]-(( -:'' >'M'' 'MRO%..)) O>1
8-A'' -A^C%..)) C20U^^$$ 067ENN++ 7012u~~.. 2(
5>>22 
>&
?ENN33 ?: #?? #3UZZ4 +/! #3UZZ4	 ">> #2UZZ4 07!$3UZZ4 #??!$3UZZ4*	 #??!$3UZZ4  << #/UZZ4 % #3UZZ4 $ #2UZZ4 % #3UZZ4*	 ' #/UZZ4 *!! #3UZZ4 .%% #2UZZ4 / && #=UZZ4sB r   