
    Ph%                        d dl mZ d dlmZmZmZmZ d dlZd dlm	Z
 d dlmZ d dlmZ d dlmc mZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZmZmZ g dZdeej@                     d	ej@                  d
e!fdZ"d dl#m$Z$ d ddddede%de%de%def
dZ& e$ejN                  jP                  jR                  jT                         ed      	 	 	 d-dddede+dee   de,deej@                     defd              Z-d Z.d Z/ ed      	 	 	 d.ddd edee+e!f   dede,deej@                     defd!       Z0 ed      	 	 	 d/ddd edeee+e!f      dee   de,deej@                     defd"       Z1 ed#d$d%d      d0d ed&e,deeeef   fd'       Z2 ed      d edefd(       Z3 e        ed)ejh                  *      d1ded+ede%defd,              Z5y)2    )partial)ListOptionalTupleUnionN)Tensor)check_fp_or_complexcheck_is_matrixDimDimsTypeELEMENTWISE_TYPE_PROMOTION_KIND
NumberTypeTensorLikeType)_maybe_convert_to_dtype"elementwise_type_promotion_wrapperout_wrapper)diagonalmatrix_normnormsvdsvdvalsvector_normvecdotdtypex_dtypefn_namec                      t        j                  t        j                         xs t        j                          fd       t        j                  t        j                         t        j                        k(   fd       t        j                  t        j
                          k(  fd       yy)zG
    Checks related to the dtype kwarg in `linalg.*norm` functions
    Nc                       d  S )Nz1: dtype should be floating point or complex. Got  )r   r   s   fC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/_refs/linalg/__init__.py<lambda>z#_check_norm_dtype.<locals>.<lambda>'   s    wiPQVPWX    c                  f    dj                  t        j                        rd       S d       S )Nz:{fn_name}: dtype should be {d} for {d} inputs. Got {dtype}complexreal)r   dr   )formatutilsis_complex_dtype)r   r   r   s   r    r!   z#_check_norm_dtype.<locals>.<lambda>+   s>    PWW$55g>) X DJ X r"   c                        d dS )Nz: the dtype of the input (zJ) should be convertible without narrowing to the specified dtype ({dtype})r   )r   r   s   r    r!   z#_check_norm_dtype.<locals>.<lambda>3   s    wi9' CA Ar"   )torch_checkr(   is_float_dtyper)   get_higher_dtype)r   r   r   s   ```r    _check_norm_dtyper/       s       'H5+A+A%+HX	
 	""5)U-C-CG-LL	
 	""5'2e;A	
 r"   )register_decompositionoffsetdim1dim2inputr4   r5   r6   returnc                4    t        j                  | |||      S )Nr3   )r+   r   )r7   r4   r5   r6   s       r    r   r   <   s     >>%TEEr"   T)exact_dtyper   xorddimkeepdimc          
        
 t        | j                  d       t        |t              r|g}| j	                         dk(  rudk  st        d      k(  rbt        j                  |d uxr t        |      dk7  fd       | j                  }|J |D ]"  
t        j                  |
   dk7  
fd       $ t        || j                  d       t        j                  | t        j                  j                  |      \  }}t        t         |      }dk(  r-t        j"                  t        j$                  | d      |||      S t        d      k(  r1 |t        j&                  t        j(                  |       ||	            S t        d
      k(  r1 |t        j*                  t        j(                  |       ||	            S t!        | |      } t        t        j"                  ||	      }	dz  dk(  rt        j,                  | j                        st        j(                  |       }  |t        j.                   |	t        j.                  |             dz              S )Nzlinalg.vector_normr           infc                      d  dS )N&linalg.vector_norm cannot compute the zH norm on an empty tensor because the operation does not have an identityr   )r=   s   r    r!   zvector_norm.<locals>.<lambda>Y   s    <SE B> >r"   c                      d d  dS )NrD   z norm on the dimension zL because this dimension is empty and the operation does not have an identityr   )r&   r=   s   r    r!   zvector_norm.<locals>.<lambda>a   s    @ FC  66r"   r;   r>   r?   r   )r>   r?   z-inf       @      ?)r	   r   
isinstancer   numelfloatr+   r,   lenshaper/   r(   reduction_dtypesREDUCTION_OUTPUT_TYPE_KINDCOMPLEX_TO_FLOATr   r   sumneamaxabsaminr-   pow)r<   r=   r>   r?   r   rM   computation_dtyperesult_dtypeto_result_dtype
reduce_sumr&   s    `        @r    r   r   F   s    !56#sewwyA~39uU|(;tO-CA>	

 ALLaA6  eQWW&:;&+&<&<	5++<<e'#| 5\JO czyy!S)sG<XX	e	uzz%))A,CQRR	f	uzz%))A,CQRR $A'89UYYCA
c	S U%9%9!''%B		!AuyyEIIa4E)Fc	RSSr"   c                 ~    t        |      D cg c]  }|| k7  s	||k7  s| }}|j                  | |f       |S c c}w )N)rangeextend)dim0r5   ndimirets        r    _backshift_permutationrb   ~   sB     Dk
=kQ$Y191kC
=JJd|J >s   
:::c                 b    t        t        |       d       D cg c]  \  }}|	 c}}S c c}}w )Nc                     | d   S )N   r   )i_js    r    r!   z&_inverse_permutation.<locals>.<lambda>   s    #a&r"   )key)sorted	enumerate)permr`   js      r    _inverse_permutationrl      s,     46HIJI$!QAIJJJs   +Ac          	         t        | d       t        j                  | j                  |      }t	        |t
              r|f}t        j                  t        |      dk(  d        t        j                  |d   |d   k7  d        t        || j                  d       t	        |t              rt        j                  |dv d        t        | j                  d|d	k7  
       |dk(  rt        | d|||      S |t        | |      } t        |d   |d   | j                        }t        j                   t#        t%        j&                  | |            d|      }|r5t)        |      }t%        j&                  t        j*                  |d      |      }|S t-        |      }t        j                  |ddt/        d      fv d        t        | j                  d|dk7  
       t1        |dkD  rt        j2                  nt        j4                  |      }	|dk(  r|t        | |      } t        |d   |d   | j                        } |	t#        t%        j&                  | |            d      }|r5t)        |      }t%        j&                  t        j*                  |d      |      }|S |\  }
}|t/        d      k(  r||
}}
|s
|
|k  r|dz  } |	t        | d|
||      |      S )Nzlinalg.matrix_norm   c                       y)Nz4linalg.matrix_norm: dim must be a 2-tuple. Got {dim}r   r   r"   r    r!   zmatrix_norm.<locals>.<lambda>   s    Ur"   r   re   c                       y)NzDlinalg.matrix_norm: dims must be different. Got ({dim[0]}, {dim[1]})r   r   r"   r    r!   zmatrix_norm.<locals>.<lambda>   s    Vr"   )fronucc                       yNz.linalg.matrix_norm: Order {ord} not supported.r   r   r"   r    r!   zmatrix_norm.<locals>.<lambda>       Dr"   rs   )allow_low_precision_dtypesrr   r;   r2   rB   c                       yru   r   r   r"   r    r!   zmatrix_norm.<locals>.<lambda>   rv   r"   rA   )r?   rG   r>   rH   rF   )r
   r(   canonicalize_dimsr_   rI   r   r+   r,   rL   r/   r   strr	   r   r   rb   rQ   r   prims	transposerl   	unsqueezerT   rK   r   rS   rU   )rm   r=   r>   r?   r   rj   resultinv_permabs_ordmax_minr^   r5   s               r    r   r      s    A+,

!
!!&&#
.C#sf	LLCAU 
LLA#a&V
 eQWW&:;#s>!D	

 	GG)cUl	
 %<q!S'?? +Au5)#a&#a&!&&ADYYwuq$'?@"gNF/5)DhOM c(1eEl++D	

 	GG)cQh	
 c	%**uzz7Sc> +Au5)#a&#a&!&&ADWU__Q%=>BGF/5)DhOMJD$%,&!4dt	AsgUKT r"   c                R   |6t        |t              r|f}t        j                  t	        |      dv d        n%|#t        j                  | j
                  dv d        |5|t	        |      dk(  s|#| j
                  dk(  r|d}t        | ||||      S |d}t        | ||||      S )N)re   ro   c                       y)NzHlinalg.norm: If dim is specified, it must be of length 1 or 2. Got {dim}r   r   r"   r    r!   znorm.<locals>.<lambda>   s    ^r"   c                       y)NzZlinalg.norm: If dim is not specified but ord is, the input must be 1D or 2D. Got {A.ndim}Dr   r   r"   r    r!   znorm.<locals>.<lambda>   s    pr"   ro   )r   re   r;   rG   )rI   r   r+   r,   rL   r_   r   r   )rm   r=   r>   r?   r   s        r    r   r      s     c3&CH^	
 
FFfp	

 	SX]!;C1c3u==;C1c3u==r"   USVhfull_matricesc                 0    t        j                  | |      S )Nr   )r|   r   )rm   r   s     r    r   r     s    99Qm44r"   c                 "    t        | d      d   S )NFr   re   )r   )rm   s    r    r   r     s    q&q))r"   )r<   y)type_promoting_argstype_promotion_kindr   c                 t    t        | j                  d       | j                         |z  j                  |      S )Nzlinalg.vecdotry   )r	   r   conjrQ   )r<   r   r>   s      r    r   r     s0     1FFHqL#&&r"   )rG   NF)rr   )r1   r2   F)NNF)T)r2   )6	functoolsr   typingr   r   r   r   r+   torch._prims_primsr|   torch._prims_common_prims_commonr(   torch._refs_refsrefstorch._refs.linalglinalgr   r	   r
   r   r   r   r   r   torch._prims_common.wrappersr   r   r   __all__r   r{   r/   torch._decompr0   intr   _opsopsatenlinalg_vector_normrK   boolr   rb   rl   r   r   r   r   DEFAULTr   r   r"   r    <module>r      s    / /   #  # #     Y
Xekk2 
U[[ 
SV 
2 1 FF F 	F
 F F 

++>>? "	3T $(3T3T	3T 
(	3T 	3T EKK 3T 3T  @3TlK  #	M $(MM	ucz	M 
M 	M EKK M M Mb  (,"	> $(>>	%s
#	$> 
(	> 	> EKK > > >D S#t.5> 5$ 5%PV@V:W 5 /5
 *~ *& * *
 #"7??'f ' 'c '6 '	 
'r"   