
    VhQH                    L)   U d dl Z d dlZd dlZd dlmZ d dlmZ d dl mZmZ d dl	Z
d dl	mZ d dlZd dlmZ d dlmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZ d d	lmZm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6 d Z7ddZ8d Z9d Z:d Z;d Z<d Z=ddZ>d Z?d Z@dddZAd ZB	 ddZCddZD	 ddZEddZFddZGdd ZH	 dd!ZI	 dd"ZJ	 dd#ZKdd$ZLd% ZMd& ZNd' ZOd( ZP	 dd)ZQdd*ZRdd+ZSdd,ZT	 dd-ZU	 dd/ZV	 dd0ZWdd1ZXdd2ZYdd3ZZ	 dd4Z[d5 Z\d6 Z]g  e0d7dd9ej                  j                   e ej                  ej                        d:e9e:d.d.d. e+ ej                  d;      d<d=      f>       e0d?d@ej                  j                  dA e!       d.d.e=eegdB
       e0dCdDdE e ej                  ej                  ej                  ej                        dd.d.eOePF	       e0dGdH e!       d.d.deQe-eegI	       e0dJdK e!       d.d.deQe-eegI	       e0dLdMd8dNdO e"ej                  ej                        eBdd.d. e+ ej                  dP      dQdRej                  ej                  fS       e+ ej                  d;      d<d=       e+ eej                   edTdUV      i      dWdXdYZ      f[	       e0d\d] e!       eFddd.d.e$eeeg e+ ej                  dP      d^d_dYej                  ge(`       e+ ej                  dP      d^dadYej                  ge(`      fb       e0dcddej                  j                   e!       eRdddd.d. e+ej                  d<dedfZ       e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      feeegl       e0dmdnej                  j                   e!       eCdddd.d.eeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      fo       e0dpdq e!       eSe-dddd.d.eeeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      fr       e0dsdt e!       eSe-dddd.d.eeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      fr       e0dudvej                  j                  dw e!       d.ddd.d.de;ee e+ eej                   edxdxV      i             e+ ej                  dy      dzd{dfej                  fh      g|       e0d}d~ e!       deJeeg       e0dd e!       deJeeg       e0dd e!       deK e e       dk  d      eeeg       e0dd e!       d.eLeMeeg e+ ej                  dP      dz       e+ ej                  dP      d       e+ ej                  dP      d<de       e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      f       e0dddd d e!       eLeNd.d.d.d.eeg e+ej                  djdk       e+ej                  dd      f       e0ddd e!       d.dd.d.deeege<       e0dd e ej                  ej                         e"ej                  ej                        dddd.d.de?e$ e+ ej                  d      d<d       e+ ej                  dP      ddej                  fh       e+ ej                  dP      dddfej                  fh      f       e0ddej                  j                   e"ej                  ej                        eeegeAd.dd. e+ej                  dd       e+ ej                  dP      d^d_dYej                  ge(`       e+ ej                  dP      d^dadYej                  ge(`      f
       e0dej                  j                  d e"ej                  ej                        eeeg eeAd      dd.dd. e+ej                  dd       e+ej                  dzd{       e+ej                  dzd       e+ej                  dd      f       e0dd e"ej                  ej                        d.ddd.eeege@ e+ ej                  dP      d^d_dYej                  ge(`       e+ ej                  dP      d^dadYej                  ge(`      f
       e0ddej                  j                   e!       d.d.de[eeg	       e0ddej                  j                   e!       d.d.e=eeg       e0ddeHej                  j                   e       d.d.deG e+ ej                  d;      d<d=      f
       e1dej                  j                  d dd.d.d.dd. e"ej                  ej                        e7d e+ej                  dd       e+ej                  dd      f       e0ddej                  j                   e!       d.d.d.eYeeg e+ej                  d<d      f
       e0ddej                  j                   e!       d.d.d.eYeeg e+ej                  d<d      f
       e0ddej                  j                   e!       d.d.d.eYeeg e+ej                  d<d      f
       e0dej                  j                  d e!       d.d.dd.e> e+ ej                  d«      d<dë      feegī       e0ddej                  j                  d e!       eCdd.d.eeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      fȫ       e0ddej                  j                   e!       eCdd.d.eeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      f˫
       e0ddej                  j                   e!       eVd.d.d.ee e+ eej                   eddϬV      i      d<ddfZ      g e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      fЫ
       e0ddej                  j                   e!       eVd.d.ee e+ eej                   eddϬV      i      d<ddfZ      g e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh      fӫ	       e0ddej                  j                   e!       eWd.efd.֫       e0dd e!       deDeeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkej                  ej                  gS      f٫       e0ddd e!       deUeeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      djdkdgej                  gh      f۫       e0ddej                  j                   e!       d.ddd.d.eTeeg e+ ej                  dP      djdkdYZ      fޫ       e0dddd  e!       dddd.d.eEe'eeg e+ej                  djdk       e+ ej                  dP      dzd{dYej                  gh       e+ ej                  dP      dddYej                  gh      f       e0ddd e!       ddd.d.deUe-eeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh       e+ eej                   eddV      i      d<ddYZ       e+e&dzd{dYZ      f       e0dej                  j                  dd e!       d.d.d.ddde8eeeg e+ ej                  dP      d<dedgej                  gh       e+ ej                  dP      d<didgej                  gh       e+ ej                  dP      djdkdgej                  gh       e+ ej                  dP      d^d_dYej                  ge(`       e+ ej                  dP      d^dadYej                  ge(`      f       e0dej                  j                   dd e!       dd.d.deZeeeg e+ ej                  dP      d^d_dYej                  ge(`       e+ ej                  dP      d^dadYej                  ge(`      f       e0de
j                  j                   e!       e]d.d.deeg e+ ej                  d;      d<d=      f	       e0ddd e!       e\d.d.ee e+ eej                   edxdxV      i      d<ddYZ       e+ eej                   eddV      i      d<ddfZ      g e+ ej                  d;      d<d=      f      Zee0   ed<    e5dd7d.e e+ej                  d<d      f       e5ddCde       e5ddLe       e6ddd.e e+ej                  dd       e+ej                  dd      f       e5ddd.de       e5ddd.de       e5ddd.e       e5ddd.e      gZee0   ed <   y(      N)Iterable)partial)chainproduct)inf)make_tensor)_get_magma_version_get_torch_cuda_versionwith_tf32_off)
has_cusolverskipCPUIfNoLapack
skipCUDAIfskipCUDAIfNoCusolverskipCUDAIfNoMagmaskipCUDAIfNoMagmaAndNoCusolver"skipCUDAIfNoMagmaAndNoLinalgsolverskipCUDAIfRocmtoltoleranceOverride)all_types_and_complexall_types_and_complex_andfloating_and_complex_typesfloating_and_complex_types_and)GRADCHECK_NONDET_TOL4make_fullrank_matrices_with_distinct_singular_valuesskipIfSlowGradcheckEnvslowTestTEST_WITH_ROCM)
clone_sampleDecorateInfo
ErrorInput!gradcheck_wrapper_hermitian_inputLMOpInfoReductionOpInfoSSampleInput)PythonRefInfoReductionPythonRefInfoc                 .      fd}d  |       D        S )Nc                      d} t         dt          f}j                         dk(  rGj                  d      }|| S t        |t              s|f}|D ]  }j                  |      dk(  s| c S  | |z   S )N)            r   g?g r   dim)r   numelget
isinstancer   size)has_idno_idr1   dkwargsts       a/home/dcms/DCMS/lib/python3.12/site-packages/torch/testing/_internal/opinfo/definitions/linalg.pyordsz'sample_kwargs_vector_norm.<locals>.ords>   s{    %dSD!779>**U#C{c8,f "66!9>!M" ~    c              3   8   K   | ]  }d t        |      f  yw) )ordN)dict).0os     r;   	<genexpr>z,sample_kwargs_vector_norm.<locals>.<genexpr>L   s     .!R!.s   r?   )r:   r9   r<   s   `` r;   sample_kwargs_vector_normrE   <   s     /tv..r=   Fc              +     K   t         }t        ||||      }d| j                  v g d}g d}fdfd}	fd}
fd}fd	}|	|
||f}rd
nd}t        |||d|      D ]$  \  }}}}}|||fz   }t	         || ||i|       & y w)Ndtypedevicerequires_grad
linalg.svdr?   r      r   rO      c                     | d   }|j                   d   }| d   dd |f   }r| d   n| d   j                  }|dd |d d f   }|||fS )Nr0   r   .r/   )shapemH)usvr'   kUVhis_linalg_svds        r;   
uniformizez%sample_inputs_svd.<locals>.uniformizeY   sa    FGGBKF37O$SV#a&))RaR
^!Rxr=   c                 <     |       \  }}}|j                         S Nabs)rV   rX   _r[   s      r;   fn_Uzsample_inputs_svd.<locals>.fn_Ua   s    S/1auuwr=   c                      |       d   S )Nr0   r?   )rV   r[   s    r;   fn_Szsample_inputs_svd.<locals>.fn_Se   s    #q!!r=   c                 @     |       \  }}}||j                         fS r]   r^   )rV   r`   r'   rY   r[   s       r;   fn_Vhz sample_inputs_svd.<locals>.fn_Vhh   s"    c?1b"&&({r=   c                 *     |       \  }}}||z  |fS r]   r?   )rV   rX   r'   rY   r[   s       r;   fn_UVhz!sample_inputs_svd.<locals>.fn_UVhm   s     c?1b2vqyr=   full_matricessomeTFr9   output_process_fn_grad)r   r   namer   r(   )op_inforI   rH   rJ   r9   make_fullrankmake_argbatchesnsra   rc   re   rg   fnsfullmatbatchnrW   fullmat_valfnrT   rZ   r[   s                        @@r;   sample_inputs_svdry   O   s     HMU6H !GLL0MG	B"
 uf
%C!.oFG(/RPS(T 
$q!["Aeg{%;TV
 	

s   BBc              +   V  K   t        t        |||      }t         |t        df       |t        df      f       t         |t        dt        f       |t        dt        f      ft	        d             t         |d       |t        df      ft	        d             y w)	NrG   rO   argsr0   r1   r|   r9   )r0   rO   rS   )r   r   r(   r'   rA   rn   rI   rH   rJ   r9   rp   s         r;   sample_inputs_crossr   |   s     5}H h1v&h1v.>-@
AA
!Q8Q1I#6"8!  hv&h1v.>-@RT
VVs   B'B)c              +   D  K   t        t        |t        j                        }t	         |t
        df       |t
        df      f      }d}t        ||t               t	         |dt
        df       |t
        df      f      }d}t        ||t               t	         |t
        d	f       |t
        d	f      f      }d
}t        ||t               t	         |t
        d	f       |t
        d	f      ft        d	            }d}t        ||t               y w)NrI   rH   rO   r0   )inputr|   z&inputs dimension -1 must have length 3error_regex
error_typerQ   z.inputs must have the same number of dimensionsr/   zmust have length 3r}   )r   r|   r9   zDimension out of range)
r   r   torchfloat32r(   r'   r!   RuntimeErrorrA   
IndexError)rn   rI   r9   rp   sampleerrs         r;   error_inputs_crossr      s     {6GHxA/xA7G6IJF
2C
V
FFxAq	2(Aq6:J9LMF
:C
V
FFxA/xA7G6IJF
C
V
FF1vh1v&6%8!F #C
V
DDs   DD c              +     K   t        t        |||dd      }t         |t        t        f       |t        f             t         |t        dz   t        f       |t        f             t         |ddt        t        f       |ddt        f             t         |ddt        dz   t        f       |ddt        f             t         |ddd       |ddd             t         |t        t        f       |ddd             t         |t        t        f       |t        dz
  fdd             t         |t        t        dz
  f       |t        dz
  fdd             yw)	a9  
    This function generates input for torch.linalg.householder_product (torch.orgqr).
    The first argument should be a square matrix or batch of square matrices, the second argument is a vector or batch of vectors.
    Empty, square, rectangular, batched square and batched rectangular input is generated.
    r/   )rI   rH   rJ   lowhighr0   r   r   N)r   r   rM   )r   r   r(   r'   r   s         r;   !sample_inputs_householder_productr      sE     #H h1v&!
77
hAqz*HaTN
;;
h1a|,h1ay.A
BB
h1a!eQ/0(Aq!92E
FF
T-4d+  h1v&4d(K
LL
h1v&!a%t$(O
PP
h1q5z*Ha!eX4d,S
TTs   E1E3c              +      K   t         }t        t        |||      }t        ||||      }g d}|D ]C  \  }	}
|
|	|	fz   }dD ]  }t         ||      |f        dD ]  }t         || |f        E y w)NrG   ))r0   r?   )r/   rM   )r/   r/   rP   r{   )r   rS   )r   r   r   r(   )rn   rI   rH   rJ   r9   ro   rp   make_arg_fullrank
test_sizesmatrix_sizebatch_sizesr5   rv   s                r;   !sample_inputs_linalg_matrix_powerr      s     HM5}H  U6J %/ C [k;77 	9AhtnA488	9 	CA/6aTBB	C	Cs   A6A8c              +     K   t         }t        ||||      }g d}g d}| j                  dk(  }	t        ||      D ]  \  }
}|
||fz   } || }|	r|j	                         sp|j                         dkD  r]t        j                  j                  |      j                  }||j                  d      j                  d      z  }|j                  |       t        |        y w)NrG   rL   )r   r0   rQ   logdetr   rS   )r   r   rm   r   
is_complexr2   r   linalgslogdetsign	unsqueezerequires_grad_r(   )rn   rI   rH   rJ   r9   ro   rp   rq   rr   	is_logdetru   rv   rT   Ass                  r;   'sample_inputs_linalg_det_logdet_slogdetr      s      IMU6H G	B(I
 
"	 		Ae Q\\^	A$$Q',,AAKKO--b11A]+!ns   CCc              +   H  K   t         }t        |||      }t        t        ||      }d }| j                  dk(  }	d}
d}d}t	        ||
|      D ]  \  }}} ||||fz    }t
        j                  j                  |      \  }} ||||fz         }|sdnd}t	        ||      D ]|  \  }}|r|s|s|	rOt	        dd	
      D ]>  \  }}t         |||      | ||r|n|j                  |      ft        ||             @ ^t         |||       |||      |f       ~  yw)z8Samples the inputs for both linalg.lu_solve and lu_solverH   rI   c                 H    | j                         }|j                  |       |S r]   )cloner   )XrJ   Ys      r;   r   z%sample_inputs_lu_solve.<locals>.clone   s     GGI	'r=   linalg.lu_solve)r?   rM   r   )rO   r0   r   )r.   r0   r   Frj   r/   repeat)adjointleftr~   r{   N)r   r   r   rm   r   r   r   	lu_factorr(   mTrA   )rn   rI   rH   rJ   r9   make_fnmake_amake_br   is_linalg_lu_solverq   rr   nrhsrv   ru   rhsr   LUpivotsBgradsLU_gradB_gradr   r   s                            r;   sample_inputs_lu_solver      sP    BGWE&9F[f=F
 !)::G	BD Wd3 W5#UaV^%\\++A.
F5As8#$ -=&ue4 	WOGVWV!%,]1%E MGT%b'*$eA144&HI#G$?  "%6"2%G:Lf9UVV	WWs   D D"c              +      K   g dg dg dg dg dg dg dg}|D ]H  }g }t        |d d |d	d        D ]"  }t        ||||
      }	|j                  |	       $ t        |       J y w)N)r0   r/   r0   )r/   r   r/   )r   r/   r/   )r/   r/   r/   r/   )r/   rO   r.   rQ   )rQ   r.   r   r/   )r/   r.   rO   rQ   rO   r/   rS   r0   rG   )zipr   appendr(   )
rn   rI   rH   rJ   r9   
test_casessizestensorsr5   r:   s
             r;   sample_inputs_linalg_multi_dotr     s      	J  #cr
E!"I. 	DE&A NN1		
 '""#s   A&A(c              +   L  K   t         j                  t         j                  t         j                  f}t	        t
        |||      }d}||v rdt        t         ddf}nddt        t         ddddf}d	}	t        |||	d
dg      D ]  \  }
}}}t         ||
      |||f       ! y w)NrI   rH   rJ   )r/   r/   )r/   rO   r/   fror0   rS   nucr/   r   ))r   rS   )rS   r   TFr{   )	r   float16bfloat16	complex32r   r   r   r   r(   )rn   rI   rH   rJ   r9   low_precision_dtypesrp   r   r<   dimsr5   r@   r1   keepdims                 r;    sample_inputs_linalg_matrix_normr   /  s     !MM5>>5??KF%}H  E$$sSD!R(ucC4B26D#*5$tUm#L Dc3(4.S'/BCCDs   B"B$)variantc             +   f  K   ||dvrt        d|       t        fdt        t        fdt        dfdt        ft        t        t        fdt        t        ft        dt        fdg
}d dddd	d
t        ddddt         f}|t        j                  t        j
                  t        j                  hv rdt        t         ddf}nd ddt        t         ddd	df	}t        t        |||d d       }	|D ]D  t              dk(  }
t              d	k(  }|
xs d   dk7  xr d   dk7  }dD ]	  }|dk7  r|rt         |	      |       |
s|s%|
r|n|}|D ]  }|
r#d   dk(  r|t        j                  k(  s|Z|dk  rU(|rRd dt        j                  dd	dddddddt        j                   dij                  |d      }t        fd|D              r||dk(  r(t        t        j                  |||      ||       t         |	      ||       |dv st         |	      ||d         G y w)N)subgradient_at_zerozKUnsupported variant, expected variant to be 'subgradient_at_zero' but got: rM   r   r   )r   r   r   g      ?r0   r/   g      @g      rS   r   g      r   r   )rH   rI   rJ   r   r   FTr   )r   )r   r0   r0   r?   c              3   .   K   | ]  }|   d k(    yw)r   Nr?   )rB   r8   	test_sizes     r;   rD   z,sample_inputs_linalg_norm.<locals>.<genexpr>  s     D9Q<1,Ds   rG   )r   r   )r@   r   r1   )
ValueErrorr'   r   r   r   r   r   r   r   lenr(   npr3   anyzeros)rn   rI   rH   rJ   r   r9   r   vector_ordsmatrix_ordsrp   is_vector_normis_matrix_normis_valid_for_p2r   r<   r@   dims_to_checkr   s                    @r;   sample_inputs_linalg_normr   A  s     w.FFYZaYbc
 	

 
	
A	
A	
A	
Aq		
Aq		
Aq	J CAsCr2tcTJK@@cC4B/UE3aQC#H   8	Y1,Y1, )WYr]a-?-VIbMUVDV$ 1	G//O!(9"5wGG"n"0;kD (!imq&8bff}S1W !#d64DF% c#rl " DmDD !33%%"'#)*7	  '	 	 &hy&93PPn,)$Y/S'v M(1	8s   HH1 H1c           	   +   &  K   t        t        |||      }d}d}t        ||      D ]g  \  }}	||	fz   }
t         ||
       ||
      f       t	        t        |
            D ])  }t         ||
       ||
      ft        |             + i y w)Nr   )r?   rM   r   )rQ   )r   r0   rO   rQ   r{   r}   r~   )r   r   r   r(   ranger   rA   )rn   rI   rH   rJ   r9   rp   rq   rr   brv   rT   is               r;   sample_inputs_linalg_vecdotr     s     F%}H %G	B$ 1QD(5/%0BCCs5z" 	Ax&8! 	s   BBc              +      K   t         }t        ||||      }g d}ddg}t        ||      D ]  \  }	}
t         |g |	|
|
         yw)a  
    This function generates invertible inputs for linear algebra ops
    The input is generated as the itertools.product of 'batches' and 'ns'.
    In total this function generates 8 SampleInputs
    'batches' cases include:
        () - single input,
        (0,) - zero batched dimension,
        (2,) - batch of two matrices,
        (1, 1) - 1x1 batch of matrices
    'ns' gives 0x0 and 5x5 matrices.
    Zeros in dimensions are edge cases in the implementation and important to test for in order to avoid unexpected crashes.
    rG   r?   rM   r   )r0   r0   rQ   r   Nr   r   r   r(   )rn   rI   rH   rJ   r9   r   rp   rq   rr   ru   rv   s              r;   sample_inputs_linalg_invertibler     sc      CGweF-XH&G
QBGR( 2q(0E010a0112s   A
Ac              +   6  K   fd}dD ]r  }t        d|gd      D ]^  \  }}|s|st        | ||      D ]C  }	|	j                  i k(  sJ  |||	j                         |||	j                        d|	_        |	 E ` t t        | ||      E d{    y7 w)zq
    This function produces inputs for matrix rank that test
    all possible combinations for atol and rtol
    c                 r    | dk(  ry | dk(  ry| dk(  sJ t        j                  |j                  d d       S )Nnonefloat      ?tensorr   rI   )r   onesrT   )
kwarg_typeinprI   s     r;   make_tol_argz/sample_inputs_matrix_rank.<locals>.make_tol_arg  sB     X%%%zz#))CR.88r=   )r   r   r   r/   r   atolrtolN)r   r   r9   r   )
rn   rI   rH   rJ   r9   r   tol_type	atol_type	rtol_typer   s
    `        r;   sample_inputs_matrix_rankr    s     9 ( $+VX,>q$I 	 Iyi9  }}***(FLLA(FLLA! 	" /w}UUUs   BBBBc              +     K   g d}g d}t        |||      D ]  \  }}}	t        t        d||	            D ]  }
t        j                  g |||
||dj                         j                  j                  |      }t        j                  g ||	|
||dj                         j                  j                  |      }t        ||f         yw)aU  
    This function produces factors `a` and `b` to generate inputs of the form `a @ b.t()` to
    test the backward method of `linalg_pinv`. That way we always preserve the rank of the
    input no matter the perturbations applied to it by the gradcheck.
    Note that `pinv` is Frechet-differentiable in a rank-preserving neighborhood.
    r   )r   rO   2   rO   r   r{   N)	r   r   minr   randqrQr   r(   )rn   rI   rH   rJ   r9   rq   r5   ru   mrv   rW   ar   s                r;   "sample_inputs_linalg_pinv_singularr    s      'G Dwd3 ,q!s1a|$ 	,A 

DED1DaDeD>>-0  

DED1DaDeD>>-0 
 aqd++	,,s   CCc              +      K   t        t        |||      }t        t        fdt        t        fddt        t        ff}|D ]  }t         ||              y w)NrG   r/   r0   )r   r   r'   r(   )rn   rI   rH   rJ   r9   rp   shapesrT   s           r;   sample_inputs_linalg_condr  
  s]     5}H 
A	
Aq		
Aq!F  +(5/**+s   AAc              +   X  K   t        t        |||      }ddt        fdt        ff}|D ]}  }t        |      dkD  r|d   dkD  rt	         ||             t        |      dkD  r|d   nd}t        d      D ]/  }	||	z   dz
  }
|
dk  rt	         ||      t        |
	      
       1  y w)NrG   r?   r   r/   r   rS   r0   rO   )Nr9   )r   r   r'   r   r(   r   rA   )rn   rI   rH   rJ   r9   rp   r  rT   rv   r   r  s              r;   sample_inputs_linalg_vanderr    s     5}H
 		
	
A	F  	Au:>eBi!mhuo..UaE"IQq 	AAA	A1uhuodQi@@	A		As   B(B*c                 F   | j                   dk(  r| t        j                     } | j                   dk(  rt        j                  | |d      }|S || j                  d   }t        j                  | j                         |d      j                  g | j                  |      }|S )Nr   r0   T)r  
increasingrS   )ndimr   newaxisvanderrT   ravelreshape)xr  ys      r;   np_vander_batchedr  2  s    vv{bjjMvv{IIa1.9AIIaggi16>>}}!}Mr=   c              +     K   ddl m}  |t        t        ||      } |dt        t        ||      }||j                  z  }||j                  z  }	t	        j
                  dd||      t	        j
                  ddd||      ||	f}
d |
D        }|D ]  }||_        t        |       t        |j                         j                         j                  |      t        d             |j                         j                         j                  j                         j                  |      }t        |t        d	              y w)
Nr   random_well_conditioned_matrixr   r/   c              3   ^   K   | ]%  }t         j                  j                  |d        ' yw)FupperN)r   r   choleskyrB   r  s     r;   rD   z8sample_inputs_linalg_cholesky_inverse.<locals>.<genexpr>U  s$     HA%,,'''7H   +-Fr"  r  T)$torch.testing._internal.common_utilsr   r'   rU   r   r   rJ   r(   detachr   r   rA   r   
contiguous)rn   rI   rH   rJ   r9   r   single_well_conditioned_matrixbatch_well_conditioned_matrices	single_pdbatch_pdinputsr   lus                 r;   %sample_inputs_linalg_cholesky_inverser1  @  s6     T &D	1E&&" 'E	1auV'# /1O1R1RRI.1P1S1SSH 	Aqf5Aq!58	F IHJ 
6'!nHHJ--m<TPUEV
 	

 HHJ!!,,.==mL!Dt$455
6s   E
Ec           	   +     K   ddl m}m} t        j                  |      }t         |t        ||      t        d             t         |t        d||      t        d             t        t        j                  dd||      t        d             t        t        j                  ddd||      t        d             |j                  dk(  xr t               d	k\  }|j                  r`|j                  d
k(  s|rNt         |t        ||      t        d             t         |t        d||      t        d             y y y w)Nr   random_hermitian_pd_matrixrandom_symmetric_pd_matrixr   F	hermitianr  r/   cuda)r/   rQ   r.   cpuT)r'  r4  r5  r   rI   r(   r'   rA   r   typer	   r   )rn   rI   rH   rJ   r9   r4  r5  magma_254_availables           r;   sample_inputs_linalg_ldl_factorr<  c  s;    
 \\&!F "1E&Ae$  "1auVDe$  Aqf5dU>S  Aq!58PUAV  !++/U4F4HI4UV[[E15H&qfE$'
 	
 &q!5H$'
 	
 6Is   EEc           
   +   d  K   ddl m}m} t        j                  |      } |t
        ||       |t
        d||      t        j                  dd||      t        j                  ddd||      f}|j                  dk(  r+|j                  r |t
        ||       |t
        d||      fnd}d |D        }	d |D        }
t        t        |||	      }|	D ]  }|\  }}}||_        d|j                  d d
 fD ]  } |g ||j                  d   t
              }t        |||ft        d             |j                         j!                         j#                  |      }t        |||ft        d               |
D ]  }|\  }}}||_        d|j                  d d
 fD ]  } |g ||j                  d   t
              }t        |||ft        d             |j                         j!                         j#                  |      }t        |||ft        d               y w)Nr   r3  r   r/   r9  r?   c              3   ^   K   | ]%  }t         j                  j                  |d        ' yw)Fr6  Nr   r   ldl_factor_exr%  s     r;   rD   z1sample_inputs_linalg_ldl_solve.<locals>.<genexpr>  s)      ;<""1"6r&  c              3   ^   K   | ]%  }t         j                  j                  |d        ' yw)Tr6  Nr?  r%  s     r;   rD   z1sample_inputs_linalg_ldl_solve.<locals>.<genexpr>  s)      :;""1"5r&  r   r   rS   Fr6  r~   T)r'  r4  r5  r   rI   r'   r   r:  r   r   r   rJ   rT   r(   rA   r(  r   r   )rn   rI   rH   rJ   r9   r4  r5  symmetric_inputshermitian_inputstest_cases1test_cases2rp   	test_casefactorsr   r`   B_batch_shaper   clone_factorss                      r;   sample_inputs_linalg_ldl_solverJ    sT    
 \\&!F"1E&A"qf	
 	Aqf5Aq!58 ;;%E$4$4 'qfE&q!5H	

  @PK?OK
 F%}H ! 		& - '--"45 	M?=?'--*;?Q?@AgVQKu@UVV#NN,224CCMRMVQKu8M 			 ! 		& - '--"45 	M?=?'--*;?Q?@AgVQKt@TUU#NN,224CCMRMVQKt8L 			s   H.H0c           	   +   \  K   ddl m} t        j                  |      }|j                  dk(  rd}nd}|j                  dk(  s
t               rd}nd}t        d	||      D ]K  \  }}	}
|d
|
z   d
fz   } ||||d}|j                  |       t        |||d d |      }t        |||	       M y w)Nr   r  r8  )gels)rL  gelsygelssgelsdr9  )rS   r   r0   rM   r?   rN   )rO   rO   rO   r   )rH   rI   r   r   rJ   driver)
r'  r   r   rI   r:  r   r   r   r   r(   )rn   rI   rH   rJ   r9   r   driversdeltasru   rR  deltarT   r  r   s                 r;   sample_inputs_linalg_lstsqrV    s     S\\&!F {{f5 {{e|~  '(:GV L /vuUA&*EvN	''
 !Qv../s   B*B,c              +   z   K   t        j                  d|      }t        t        ||f      t        d       y wNr?   r   r{   zat least 2 dimensions)r   r   r   randnr!   r(   r   rn   rI   r9   zero_ds       r;   error_inputs_lstsqr]    s5     [[F+F
F&++ s   9;c              +   |   K   t        j                  d|      }t        t        ||d f      t        d       y wrX  rY  r[  s       r;    error_inputs_lstsq_grad_orientedr_    s7     [[F+F
F&$0+ s   :<c              +     K   t        t        |||      }t        t        fddf}t        t        t        ff}i t        d      t        d      t        d      f}t        ddd      t        ddd      t        d	dd      f}	t	        t        ||      t        ||	            D ]  \  }
}t         ||
      |
        y w)NrG   )rO   rQ   )rQ   rO   r/   )offsetr0   )ra  dim1dim2r   r   r  )r   r   r'   rA   r   r   r(   )rn   rI   rH   rJ   r9   rp   	shapes_2d	shapes_3d	kwargs_2d	kwargs_3drT   kwargs               r;   !sample_inputs_diagonal_diag_embedri    s     5}H
 Q(I QIT^T^T^DIAAA&AAA&BQQ'I 	9%wy)'D 9u (5/%889s   C Cc              +   `  K   t        t        |t        j                        }d}t        t
        ff}t        t        t
        ff}i }t        dd      t        d      t        d      f}|}	t        ||      }
t        ||      }t        ||	      }t        |
||      D ]  \  }} ||      }t        ||      }|j                  d	      }|j                  d
      }d| j                  v r|j                         }n2| j                  dv r|dv rp|j                         dz   }nt        d      | }|dz
  }t        ||dz         }|xr ||v}|xr ||v}||k(  rd| d| }t!        ||t               |s|r(|r|n|}d| d| d| d}t!        ||t"               t        d       y w)Nr   )r   r0   rM   r   r0   )rb  rc  i'  )rb  )rc  )r   r9   rb  rc  diagonal)
diag_embedz_refs.diag_embed)rM   r   zshould be unreachablez(diagonal dimensions cannot be identical z, r   z6Dimension out of range \(expected to be in range of \[z\], but got z\))r   r   r   r   r$   r#   r'   rA   r   r   r(   r3   rm   r1   r   r   r!   r   )rn   rI   r9   rp   shapes1dshapes2dshapes3dkwargs1dkwargs2dkwargs3d	samples1d	samples2d	samples3drT   argr   rb  rc  num_dimbound1bound2	dim_range	dim1_cond	dim2_condr   err_dims                             r;    error_inputs_diagonal_diag_embedr~    s    {6GH!HAyHAq	|HH 	!!%%H H(+I(+I(+Iy)Y? "8vuo3v6zz&!zz&!%ggiG\\??$ggi!mG6771&&1*-	2T2	2T2	4<<TF"TFKCVNN)'dTGXRx|G9B@  VLL677E"8s   F,F.c              +      K   ddl m} g d}ddg}t        ||ddg      D ])  \  }}	}
 ||	g|||d}||_        t	        ||
       + y	w)
aM  
    This function generates always positive-definite input for torch.linalg.cholesky using
    random_hermitian_pd_matrix.
    The input is generated as the itertools.product of 'batches' and 'ns'.
    In total this function generates 8 SampleInputs
    'batches' cases include:
        () - single input,
        (0,) - zero batched dimension,
        (2,) - batch of two matrices,
        (1, 1) - 1x1 batch of matrices
    'ns' gives 0x0 and 5x5 matrices.
    Zeros in dimensions are edge cases in the implementation and important to test for in order to avoid unexpected crashes.
    r   )r4  r   rQ   TFr   r"  N)r'  r4  r   rJ   r(   )rn   rI   rH   rJ   r9   r4  rq   rr   ru   rv   r#  r  s               r;   sample_inputs_linalg_choleskyr  Q  sf       P&G
QB"7Bu> *q%&qM5MfM'!5))*   AAc              +   R   K   d }t        | |||      }|D ]  }||_        |  yw)z<
    This function generates input for torch.linalg.eig
    c                 (    | d   t        | d         fS Nr   r0   r^   outputs    r;   out_fnz(sample_inputs_linalg_eig.<locals>.out_fnp  s    ay#fQi.((r=   N)r   rl   rn   rI   rH   rJ   r9   r  samplesr   s           r;   sample_inputs_linalg_eigr  k  s9     
) .gvumTG (.%s   %'c              +      K   d }t        | |||      }|D ]+  }dt        j                  ddg      i|_        ||_        | - yw)zm
    This function generates input for torch.linalg.eigh/eigvalsh with UPLO="U" or "L" keyword argument.
    c                 L    t        | t              r| d   t        | d         fS | S r  )r4   tupler_   r  s    r;   r  z)sample_inputs_linalg_eigh.<locals>.out_fn~  s*    fe$!9c&)n,, Mr=   UPLOr#   rX   N)r   randomchoicer9   rl   r  s           r;   sample_inputs_linalg_eighr  y  sT     
 .gvumTG   Sz!:;(.%s   AAc              +      K   t        | |||fi |D ]h  }|j                  r |j                  j                  j                  n|}ddt        j                  d||      fD ]  }t        |      }d|i|_        |  j yw)zd
    This function generates input for torch.linalg.pinv with hermitian=False keyword argument.
    Nr   r   r   )	r   r   r   realrH   r   r   r   r9   )rn   rI   rH   rJ   r9   rC   
real_dtyper   s           r;   sample_inputs_linalg_pinvr    s      -17  ,1+;+;QWW\\''
3S
6 RS 	DQA~AHG	s   A<A>c              +   N   K   t        | |||fi |D ]  }ddi|_        |  yw)zc
    This function generates input for torch.linalg.pinv with hermitian=True keyword argument.
    r7  TN)r   r9   )rn   rI   rH   rJ   r9   rC   s         r;   #sample_inputs_linalg_pinv_hermitianr    s@      -17   &	s   #%Tc              +      K   t         }t        ||||      }t        t        |||      }g d}	ddg}
|rg d}nddg}t        |
|	|      D ]-  \  }}}t	         |g |||  |||fz   |z         f       / y	w)
a  
    This function generates always solvable input for torch.linalg.solve
    We sample a fullrank square matrix (i.e. invertible) A
    The first input to torch.linalg.solve is generated as the itertools.product of 'batches' and 'ns'.
    The second input is generated as the product of 'batches', 'ns' and 'nrhs'.
    In total this function generates 18 SampleInputs
    'batches' cases include:
        () - single input,
        (0,) - zero batched dimension,
        (2,) - batch of two matrices.
    'ns' gives 0x0 and 5x5 matrices.
    and 'nrhs' controls the number of vectors to solve for:
        () - using 1 as the number of vectors implicitly
        (1,) - same as () but explicit
        (3,) - solve for 3 vectors.
    Zeros in dimensions are edge cases in the implementation and important to test for in order to avoid unexpected crashes.
    'vector_rhs_allowed' controls whether to include nrhs = () to the list of SampleInputs.
    torch.solve / triangular_solve / cholesky_solve (opposed to torch.linalg.solve) do not allow
    1D tensors (vectors) as the right-hand-side.
    Once torch.solve / triangular_solve / cholesky_solve and its testing are removed,
    'vector_rhs_allowed' may be removed here as well.
    rG   )r?   rM   r   r   rQ   r   )r?   r   rN   r   rN   r{   N)r   r   r   r   r(   )rn   rI   rH   rJ   vector_rhs_allowedr9   ro   r   r   rq   rr   r   rv   ru   r   s                  r;   sample_inputs_linalg_solver    s     2 IMU6F 5}F 'G
QBd| Wd3 T5#&.%..A.fUaT\C=O6P5RSSTs   A:A<c           	   +     K   t        t        ||      }d}d}d}t        |||t        dd            D ]F  \  }	}
}\  }}}|	dk(  r!|r
 ||
|
f      n	 |||f      } ||
|f      }n#|r ||	|
|
f      n
 ||	||f      } ||	|
|f      }|r#|j                  d	d
d      j	                  d       n)|j                  d	d
d      }d||j                         dk  <   |r|j                          n|j                          |||d}|rgt        dd      D ]U  \  }}|s|st        |j                         j                  |      |j                         j                  |      f|       W 6t        ||f|       I y w)Nr   )r0   r/   r   )rO   r   )r0   rO   r   rj   rO   r   r0   r   r   rS   r   gư>)r#  r   unitriangularr/   r~   )r   r   r   rk  fill_r_   triu_tril_r(   r   r   )rn   rI   rH   rJ   r9   rp   bsrr   ksr   rv   rW   r   r#  unir   r   r8   grad_Agrad_Bs                       r;   %sample_inputs_linalg_solve_triangularr    s     {%?H	B	B	B'.
BGM!4( ;#1a#$s 6$(!Q h1v.>A!Q A'+!Q#1a)1DA!Q#AJJq"b!'',

1b"%A #AaeegnGGIGGI $E")-"B f!GGI,,V4'')226:<! 	 aqd6::?;s   E=E?c              +      K   t        | |||d      }d }|D ]C  }|j                  d   |j                  fc|_        |_        | j                  dk(  r||_        | E yw)aM  
    This function generates always solvable input for legacy solve functions
    (the ones that are not in torch.linalg module).
    The difference from sample_inputs_linalg_solve is that here the right-hand-side of A x = b equation
    should have b.ndim >= 2, vectors are not allowed.
    Also the arguments order is swapped.
    F)rJ   r  c                     | d   S )Nr   r?   r  s    r;   r  z*sample_inputs_legacy_solve.<locals>.out_fn  s    ayr=   r   solveN)r  r|   r   rm   rl   )rn   rI   rH   rJ   r9   outr  r   s           r;   sample_inputs_legacy_solver    sk      %mPUC  $*KKNV\\O!fk<<7",2F)	s   AAc              +   V   K    j                   dk(  }|st        nt        }t        ||||      } fd}d}	t	        j
                  |      j                  dk(  rdnd}
d}t        |	|
|      D ]9  \  }}}|t        |z   t        fz   }|s ||      n || }t        |d	|i|
       ; y w)Nlinalg.lu_factorrG   c                 :    j                   dk(  r
| d   | d   fS | S )N	linalg.lur0   r/   )rm   )r  rn   s    r;   r  z'sample_inputs_linalg_lu.<locals>.out_fn"  s'    <<;&!9fQi''Mr=   rP  r8  rj   )T)r   rS   r   r0   r/   pivotrk   )
rm   r   r   r   r   rI   r:  r   r'   r(   )rn   rI   rH   rJ   r9   	full_rankr   rp   r  batch_shapesr   rT  batch_shaper  rU  rT   r   s   `                r;   sample_inputs_linalg_lur    s      22I  	A 
 weF-XH &L#ll62776A]wF F%,\66%J U!UEq5y!n,#,HUO(E2B!We$4VTT	Us   B&B)c              +      K   t        t        |||      }g d}g d}t        |||      D ]  \  }}	}
t         |||	|
fz                  y wNrG   r   )rQ   r/   r   )r   r   r   r(   )rn   rI   rH   rJ   r9   rp   rq   rr   ru   r
  rv   s              r;   sample_inputs_linalg_svdvalsr  3  s[     5}H 'G	BwB/ 4q!(5Aq6>2334r  c              +      K   t         }t        ||||      }g d}g d}t        |t        ||            D ]  \  }	\  }
}|	|
|fz   }t         ||        ! y wr  r   )rn   rI   rH   rJ   r9   ro   rp   rq   rr   ru   r
  rv   rT   s                r;   sample_inputs_linalg_qr_geqrfr  ?  sn      IMU6H 'G	B '"b/: ,v1A(E*++,s   AAc              +      K   ddg}d dg}t        t        |||      }t        j                  ||      D ](  \  }}	 ||      }
 ||d d       }t	        |
||	       * y w)N)r/   rO   r-   )rO   r.   r.   rO   )r   r/   rG   r/   )r   )r   r   	itertoolsr   r(   )rn   rI   rH   rJ   r9   a_shapesdimssrp   a_shaper   r  r   s               r;   sample_inputs_tensorsolver  P  sy     <(H
 6NE5}H #**8U; +WWRa[!!QT**+s   AA c              +      
K   t         

fd}ddg}|D ]U  \  }}  |       j                  g || j                         }	|	j                         t	        |	t        |             W y w)Nc                       dd       S )N   r   r?   )rI   rH   rp   rJ   s   r;   
make_inputz+sample_inputs_tensorinv.<locals>.make_inputd  s    BvU-XXr=   ))r/   r/   rO   )r  r0   ))r.   rO   )r-   r0   r/   )ind)r   r  r(  r   r(   r   )rn   rI   rH   rJ   r9   r  r  	shape_lhs	shape_rhsr   rp   s    ```      @r;   sample_inputs_tensorinvr  a  s{     CHY
 	F
 !' 3	9"jl"":I:	:AAC=)#3y>223s   A.A4zlinalg.crossrS   c                 2    t        j                  | ||      S )N)axis)r   crossr  r  r1   s      r;   <lambda>r  v  s    !QS!9 r=   linalg_crosszUnsupported on MPS for now
TestCommontest_numpy_ref_mps)
refopdtypes	aten_namesample_inputs_funcerror_inputs_funcsupports_outsupports_fwgrad_bwgradsupports_forward_adskipsz
linalg.det
linalg_det)det)	r  r  aliasesr  r  r  r  
decoratorscheck_batched_gradgradzlinalg.diagonallinalg_diagonaldiagonal_backward)r  aten_backward_namer  r  r  r  r  r  zlinalg.choleskylinalg_cholesky)r  r  r  r  check_batched_forward_gradr  gradcheck_wrapperr  zlinalg.cholesky_exlinalg_cholesky_exzlinalg.vecdotlinalg_vecdotr}   c                F    | j                         |z  j                  |      S r]   )conjsumr  s      r;   r  r    s    QVVX\$6$6s$; r=   zSkipped!TestSchemaCheckModeOpInfotest_schema_correctness)r  g~jt?g rh?r   TestInductorOpInfotest_comprehensiver8  )device_type)r  r  r  r  r  r  r  r  zlinalg.condlinalg_condTestFakeTensortest_fake_crossref_backward_amp)r  r  	active_if"test_fake_crossref_backward_no_amp)
r  r  r  r  r  r  r  gradcheck_nondet_tolr  r  z
linalg.eig
linalg_eigtest_outr9  mps)r  r  test_variant_consistency_eagerTestJittest_variant_consistency_jit)r  r  r  r  r  check_batched_gradr  r  r  r  r  zlinalg.eigvalslinalg_eigvals)r  r  r  r  r  r  r  r  r  r  r  zlinalg.eighlinalg_eigh)r  r  r  r  r  r  r  r  r  r  r  zlinalg.eigvalshlinalg_eigvalshzlinalg.householder_productlinalg_householder_product)orgqrgMbP?zSkipped! FlakyTestFwdGradientstest_fn_fwgrad_bwgrad)r  r  r  r  gradcheck_fast_moder  r  r  r  r  r  r  zlinalg.ldl_factorlinalg_ldl_factor)r  r  supports_autogradr  r  zlinalg.ldl_factor_exlinalg_ldl_factor_exzlinalg.ldl_solvelinalg_ldl_solve)   r.   z not available before CUDA 11.3.1zlinalg.lstsqlinalg_lstsqTestBwdGradients)r  r  r  r  r  r  r  grad_orientedc                 L    t         j                  j                  | ||      d d S )NrQ  r/   )r   r   lstsq)r  r   rR  s      r;   r  r    s#     2 21a 2 G K r=   TestOperatorSignatures(test_get_torch_func_signature_exhaustive)r  variant_test_namer  r  r  r  r  r  r  r  r  r  r  zlinalg.matrix_power)matrix_powerlinalg_matrix_power)
r  r  r  r  supports_inplace_autogradr  r  r  r  r  zlinalg.multi_dotlinalg_multi_dotz67470!test_noncontiguous_samples
TestOpInfoxlaTestNNCOpInfotest_nnc_correctness)r  r  dtypesIfCUDAr  r  r  r  r  r  r  r  r  zlinalg.normlinalg_normtest_fn_gradgrad)	r  r  r  r  r  r  r  r  r  subgradients_at_zeror   test_forward_mode_ADtest_fn_grad)
r  r  r  r  r  r  r  r  r  r  zlinalg.matrix_normlinalg_matrix_norm)	r  r  r  r  r  r  r  r  r  z	linalg.qr	linalg_qr)r  r  r  r  r  r  r  r  zlinalg.slogdetlinalg_slogdet)r  r  r  r  r  r  r  zlinalg.vanderlinalg_vander)	r  r  r  r  r  r  r  r  r  zlinalg.vector_norm	propagatelinalg_vector_normTestReductionstest_dim_emptytest_dim_empty_keepdim)r  identity
nan_policysupports_multiple_dimscomplex_to_realr  r  r  r  generate_args_kwargsr  r  r  linalg_lu_factortest_compare_cpu)	r  r  r  r  r  r  r  r  r  zlinalg.lu_factor_exlinalg_lu_factor_exr  	linalg_lur   linalg_lu_solvezTests different backward paths'test_floating_inputs_are_differentiable)
r  r  r  r  r  r  r  r  r  r  z
linalg.inv
linalg_inv)inverse)
r  r  r  r  r  r  r  r  r  r  zlinalg.inv_exlinalg_inv_ex)	r  r  r  r  r  r  r  r  r  zlinalg.solvelinalg_solveg'eRC>ga2U0*C?)	r  r  r  r  r  r  r  r  r  zlinalg.solve_exlinalg_solve_ex)r  r  r  r  r  r  r  r  zlinalg.solve_triangularlinalg_solve_triangular)r  r  r  r  r  r  r  zlinalg.matrix_ranklinalg_matrix_rank)r  r  r  r  r  r  r7  )r  r  r  r  r  r  r  zlinalg.pinvlinalg_pinv)r  r  r  r  r  r  r  r  r  r  r  singularc                 Z    t         j                  j                  | |j                  z        S r]   )r   r   pinvr   )r  r   s     r;   r  r    s    ))!add(3 r=   )r  r  r  r  r  r  r  r  r  r  r  r  gh㈵>)r  r  r  r  r  r  r  r  r  r  r  r  rK   
linalg_svd_linalg_svd)r  r  decomp_aten_namer  r  r  r  r  r  r  r  r  r  zlinalg.svdvalslinalg_svdvals)r  r  r@  r  r  r  r  r  r  r  r  zlinalg.tensorinv)r  r  r  r  r  r  r  r  zlinalg.tensorsolvec                 F    t         j                  j                  | ||      S )N)axes)r   r   tensorsolve)r  r   r   s      r;   r  r    s    BII$9$9!QT$9$J r=   g-C6J?g_>Y1\>)r  r  r  r  r  r  r  op_dbz_refs.linalg.crosstest_python_ref_errors)torch_opinfo_namer  rE  r  z_refs.linalg.diagonal)rG  r  rE  z_refs.linalg.vecdot)rG  rE  z_refs.linalg.vector_normz_refs.linalg.matrix_norm)rG  r  validate_view_consistencyrE  z_refs.linalg.normz_refs.linalg.svdz_refs.linalg.svdvalspython_ref_dbr   r]   r   )rS   )r  r  unittestcollections.abcr   	functoolsr   r   r   numpyr   r   r   torch.testingr   #torch.testing._internal.common_cudar	   r
   r   *torch.testing._internal.common_device_typer   r   r   r   r   r   r   r   r   r   $torch.testing._internal.common_dtyper   r   r   r   r'  r   r   r   r   r   #torch.testing._internal.opinfo.corer   r    r!   r"   r#   r$   r%   r&   r'   r(   #torch.testing._internal.opinfo.refsr)   r*   rE   ry   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r1  r<  rJ  rV  r]  r_  ri  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  halfr   skipr  boolr   chalf	complex64
complex128r   eigexpectedFailureeigvalshouseholder_productlongnormr  r   r  vector_normr   lu_factor_exlulu_solveinvinv_exr  solve_exsolve_triangularr=  cdoublesvdsvdvals	tensorinvrE  list__annotations__rI  r?   r=   r;   <module>rn     s      $  $    % 
       V/&*
ZWE,U@C.6&WR#.D& 7;]@  +022VF +0,>+ A0 +0 6H +0%
R +0:z /F9098z +0*4.  +0
 EI)TZ +0';T.U4	4 +0,"+"3$E
9<<(U^^D .,# :;$
E( <<)+ #B%'EF$)E@ #.(JJu{{
  #<:AEZ #)+ ##(8;24EF[Er &)+ ##(8;24EFsEJ ! ";-ejj%..I6#( # j)+))9)9:	 :;$
 !5::sV/L"MN$$"	
KEF )+4$#( #124E}Uj) 1"( j) 4"(
GEB <<)+3#( $ # ((,
PU j)! j)0! j).!'
6 &'8-HM'CER "<<)+:#( $ #%'89j)! j)0! j).!
#SEZ )+4;#( $ #%'8-Hj)! j)0! j).!
#[Eb #)+4;#( $ #%'89 j)! j)0! j).!!
$cEl $.<<++)+  $ ##(< !5??CT4M"NO ./"'!((*
mEh	 %)+:68IJi	Ex	 ()+:68IJy	EH
 $)+9')G35W !
I
Ef
  )+5,%'89 z24FGz24FGz2L*Mj)! j)0! j).!+
%g
Er  ) L)+5:  #%'89 (()5S (((:

#sEl !')+ "' # 24E}U<mEH $(U^^D3EJJO"' $ ##(91 h'7S
 j)!

}	 j)&!

}
!&IEX <<-emmU^^L24E}U4 #(#((*<>P j) 1"( j) 4"(
YEX <<0-emmU^^L24E}U"%/D
    $)# ((*<>P ((*<>U ((*<>T 113E~V
YET &-emmU^^L #($#24E}U;j) 1"( j) 4"(
UEN <<??)+ #$8(*;<OEf "<<)+ #B24EF	gEz !<<$& #6:;$
{E^ <<###  $)#-emmU^^L6& 113CEUV((*:<T
_EL $<<!!)+ ! #224EF 11<AST
MEn '<<$$)+  #224EF 11<AST
oEN <<??)+ ! #224EF 11<AST
OEp <<  #)+  #(#1>?9
 &'EF%qEX <<)+:$ #24EFj)! j)0! j).!
"YE^ !<<)+:$ #24EFj)! j)0! j).!
!_Eb  <<)+5  #*!5==#72O"PQ,!		
 j)! j)0! j).!
)+cEz #<<  )+5 #*!5==#72O"PQ,!		
 j)! j)0! j).!
%){EN !+<<(()+@# " 
OEd &)+424EFj)! j)0! j).7	!
eEb &%)+>24EFj)! j).!
cET <<)+  $ #424EF j)."	
UEB $ 4)+ $ #= 24EF(()5S j)"'" j)"""
%'CER %)+ $ ##(>;%'89j)! j)0! j).! !5==#4d2K"LM,"	 &"'"	;#
2SEx <<&)+ # #( $,24E}Uj)! j)0! j).! j) 1"( j) 4"(=&
!7yEh! <<"&)+#(# $724E}Uj) 1"( j) 4"(
i!Eh" II)+2 ##(%'EF:;$
i"EL# J)+4 #*!5==#5u2M"NO,"	 !5==#5u2M"NO,!	
" :;$
/M#EtF| EV$ ( ((,8P
 +	 )
 ". 113CEUV((*:<T
 ". #( ' #( &	 *	AFtF| Fr=   