
    Ph{+                        U d dl Z d dlmZmZmZmZmZ d dlZd dlZd dlm	Z	 d dl
mZ ej                  j                  Zi Zeej                  j                   ef   ed<   ej                  j$                  Zej&                  j(                  Zd Zi Zd Zd$dZ eej0                  j2                        d	e	d
e	fd       Z eej4                  j2                        d	e	d
ee	e	f   fd       Zde	de	dee   defdZ eej<                        de	de	dee   de	de	dee	   dee	   dee   d
eee	   ee	   ee	   f   fd       Zdee   fdZ eej@                        de	de	dee	   dee	   dee	   dee	   dee	   ded e!dee   d
ee	ee	   ee	   f   fd!       Z  eej&                  j(                  j0                  j2                  d"#        eej&                  j(                  jD                  j2                          eej&                  j(                  jF                  j2                          eej&                  j(                  jH                  j2                          eej&                  j(                  jJ                  j2                          eej&                  j(                  j4                  j2                          eej&                  j(                  j<                  j2                          eej&                  j(                  j@                  j2                          eej&                  j(                  jL                  j2                         y)%    N)CallableDictListOptionalTuple)Tensor)_maybe_remove_out_wrapperdecomposition_table_for_jvpc                       fd}|S )Nc                 J    	  t              |       S # t        $ r | cY S w xY wN)register_decomposition	Exception)fops    oC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_decomp/decompositions_for_jvp.py	decoratorz/maybe_register_decomposition.<locals>.decorator'   s/    	-)"-a00 	H	s    "" )r   r   s   ` r   maybe_register_decompositionr   &   s         c                 $    t        | t              S )N)registry)r   r
   )fns    r   register_decomposition_for_jvpr   6   s    !"/JKKr   c                    | t         v rt         }n| t        v rt        }nt        d|        ||    }t        |      }|rst        j
                  j                  |      }t        j                  |      }d } ||      }t        j
                  j                  |      j                  j                  }n)t        j
                  j                  |      j                  }t        j
                  j                  | |       y )Nz!could not find decomposition for c                    | j                   j                         D cg c]  }|  }}| j                   j                         D cg c]  }|  }}ddj                  |       ddj                  |       dS c c}w c c}w )Nzdef wrapped_decomp(z, z):
  return decomp_fn(z)
)
parametersvalueskeysjoin)sig	param_str	param_def	param_uses       r   get_function_defz=_register_jit_decomposition_for_jvp.<locals>.get_function_defQ   s    9<9N9N9PQ9PII;9PIQ9<9L9L9NO9NII;9NIO(9)=(>>UVZV_V_`iVjUkknoo ROs   
A8
A=)r
   decomposition_tableRuntimeErrorr	   torchjitignoreinspect	signatureCompilationUnitwrapped_decompgraphscript_register_decomposition)decomp
use_pythondecomposition_table_used	decomp_fnr!   r%   f_strr/   s           r   #_register_jit_decomposition_for_jvpr7   :   s    ,,#> 	&	&#6 >vhGHH(0I
 *)4III$$Y/		*	p !%		))%0??EE		  +11	II%%fe4r   selfreturnc                 R    t        j                  t        j                  |             S r   )r(   sumdiag)r8   s    r   tracer=   b   s    99UZZ%&&r   c                    t        j                  | j                  d      |       }t        j                  t        j                  |              }| j
                  r| j                  d      }n|}|t        j                  |      z
  |fS )Nr   )r   )r(   minimum	new_zerosexpabsis_cudalog1p)r8   minzbuffers       r   log_sigmoid_forwardrH   g   sf    
--r*D
1C		599T?"#A||%Q''r   inputrstdinner_dim_indiceskeepdimc                     t        j                  | ||      }t        j                  | |d|      }t        j                  d|z  d      |z
  }|j	                         }dt        j
                  ||z         z  }||fS )N)dimrL   F)rN   unbiasedrL         )r(   meanvarpowdetachsqrt)rI   rJ   rK   rL   rR   rS   epss          r   recompute_mean_varrX   r   sq     ::e!2GDD
))E05'
RC
))AHa
 3
&C
**,Cuzz#)$$D:r   grad_outnormalized_shaperR   weightbiasoutput_maskc                 |   |j                   }|j                         }	|	t        |      z
  }
||
d  }|d |
 }t        t	        |
|	            }t        t	        d|
            }d}|D ]  }||z  }	 d}|D ]  }||z  }	 |dk  s|dk  r8|j                  |      |j                  ||
d        |j                  ||
d        fS t        |||d      \  }}||z
  |z  }|| |z  }n| }||z  }t        j                  ||d      }t        j                  ||      }t        j                  ||d      }t        j                  ||      }||z
  |z
  }|d   r	||z  |z  }nt        j                  |      }|d   r1|/t        |      dkD  rt        j                  | |z  |d      }n3| |z  }n-|t        j                  |      }nt        j                  d      }|d   r9|7t        |      dkD  rt        j                  | |d      }n>| j                         }n-|t        j                  |      }nt        j                  d      }|||fS )Nr   rP   TrL   Fr   rQ   )shaperN   lenlistranger@   rX   r(   r;   mul
zeros_likezerosclone)rY   rI   rZ   rR   rJ   r[   r\   r]   input_shape
input_ndimaxis
inner_dims
outer_dimsrK   outer_dim_indicesNiMmean_rstd_x_hat
grad_x_hatabc1c2c3innerd_inputd_weightd_biass                                  r   native_layer_norm_backwardr~      sd    ++KJ,--DTU#JUd#JU445U1d^,	A	Q 	A	Q AvaOOK(OOK./OOK./
 	
 &eT3DdSLE5U]e#E&

QA		*/6A	:u	%B	2($	/B	5"	BEBJE1~%*QY%$7""5)1~&, !A%).5 "3U*H  %'H		##F+;;r?1~$* !A%',yy;Le'TF^^%F		!!$'RXv&&r   xc                 "    d}| D ]  }||z  }	 |S )NrP   r   )r   rro   s      r   prodr      s    	A	Q Hr   running_meanrunning_var	save_meansave_invstdtrainrW   c
                 P   |j                   }
|j                         }|dk\  sJ d       d}t        |
      |
|   z  }|}|}|rI||J d       dgt        t	        d|j                                     z   }|J t        |||d      \  }}n ||J |}t        j                  ||z         }||J dg|z  }|
|   ||<   g }t	        |      D ]  }||k7  s	|j                  |        t        j                  ||      }d|z  }t        j                  | |      }t        j                  | ||z
  z  |      }t        j                  ||z  |      }t        j                  t        j                  ||z  ||z        |      }|t        j                  ||      dz  }nt        j                  ||z  |      }|r||z
  |z  }| |z
  |z
  |z  }n| |z  }|	d   r||z  }n-|t        j                  |      }nt        j                  d	      }|	d   r|}nt        j                  |      }|||fS )
NrQ   z$rank of the input must be at least 2rP   z7when train=True, save_mean and save_invstd are requiredr   Fr_   g      ?r   )r`   rN   r   rb   rc   rX   r(   rsqrtappendreshaper;   rd   re   rf   )rY   rI   r[   r   r   r   r   r   rW   r]   rh   
input_rankrj   num_featuresrR   invstdreduciton_dimsbroadcast_maskreduction_axesro   normgrad_output_sumdot_p	grad_mean
proj_scale
grad_scaleproj
grad_inputgrad_weight	grad_biass                                 r   native_batch_norm_backwardr      sk    ++KJ?BBB?D${4'88LDF!k&=	ED	E= tE!UYY[$9::!!!)%QVWf'K,CCC[3./$"222S:%N&t,N4 "N:9!!!$  ==~.DDii.9OIIh%$,/@Eo4nEIuyyvGXJ~]]6>:S@
]]6F?NC

*$)3zA

*
1~fn		&&
 kk"o1~#	$$
	 Y//r   T)r3   )F)'r+   typingr   r   r   r   r   r(   torch._decompr   torch._prims_common.wrappersr	   _decompr&   r
   _opsOperatorBase__annotations__r   opsatenr   r   r7   r=   defaultrH   intboolrX   r~   r   r   floatnll_loss_backwardnll_loss2d_backward_log_softmax_backward_data_softmax_backward_datacudnn_batch_norm_backwardr   r   r   <module>r      s    8 8    Bmm77 GI T%**"9"98"CD I== yy~~4 ! L!5P djj001' '6 ' 2' d66>>?(f (vv~)> ( @(48IHL   ? ?@I'I'I' 3iI' 	I'
 I' VI' 6
I' dI' 8FXf-x/??@I' AI'XDI    ? ?@N0N0N0 VN0 6"	N0
 &!N0 N0 &!N0 N0 
N0 dN0 68F#Xf%556N0 AN0b $EIINN$8$8$@$@T R #EIINN$D$D$L$L M #EIINN$F$F$N$N O #EIINN$M$M$U$U V #EIINN$I$I$Q$Q R #EIINN$F$F$N$N O #EIINN$M$M$U$U V #EIINN$M$M$U$U V #EIINN$L$L$T$T Ur   