
    xf(                     x   d dl Z d dlZd dlZd dlZd dlZd dlmZmZm	Z	 d dl
Z
d dlmZmZ d dlmZmZmZmZ d dlmZmZ e j,                  j/                  d      rdZndZd d	lmZ d d
lmZ ddZ	 	 ddZ	 	 ddZ G d de      Z G d d      Z  G d d      Z! G d de       Z" G d de       Z# G d de       Z$y)    N)assert_allcloseassert_equalassert_array_equal)svd
null_space)
csc_matrixissparsespdiagsrandom)LinearOperatoraslinearoperatorSCIPY_USE_PROPACKTF)svds)ArpackNoConvergencec                    t        |       r| j                         } t        |       \  }}}|dk(  rt        j                  |      | d  }n,|dk(  rt        j                  |      d | }nt        d|      |d d |f   ||   ||   fS )NLMSMzunknown which=)r	   toarrayr   npargsort
ValueError)mkwhichusvhiis          L/usr/lib/python3/dist-packages/scipy/sparse/linalg/_eigen/tests/test_svds.py
sorted_svdr       s     {IIK1vHAq"}ZZ]A23	$ZZ]2A>%344QU8QrUBrF""    c
                    | j                   \  }
}t        |j                   |
|f       t        |j                   |f       t        |j                   ||f       ||z  j                  |      }t        |j                   | j                          |rt        || ||	       t	        j                  |j
                  j                         |      }t        |j                   ||f       t        |t	        j                  |      ||	       t	        j                  ||j
                  j                               }t        |j                   ||f       t        |t	        j                  |      ||	       |rt        | ||      \  }}}t        t	        j                  |      t	        j                  |      ||	       t        ||||	       t        t	        j                  |      t	        j                  |      ||	       y y )Natolrtol)
shaper   dotr   r   Tconjidentityr    abs)Ar   r   r   r   r   check_usvh_A	check_svdr$   r%   nr   	A_rebuiltuh_uvh_vu2s2vh2s                     r   _check_svdsr6   (   sk   77DAq 1a&!1$Aq6" 1		"I!''*	14d; 66!##((*a DaV$D"++a.t$? 66"bddiik"DaV$D"++a.t$?  Au-Bq	266":DtD2Dt4r
BFF3KdF	 r!   c
                    | j                   \  }
}t        |j                   |
|f       t        |j                   |f       t        |j                   ||f       t        j                  |j                  j                         |      }t        |j                   ||f       t        j                  t        j                  |t        j                  |      z
              ||z  z  }t        |d||	       t        j                  ||j                  j                               }t        |j                   ||f       t        j                  t        j                  |t        j                  |      z
              ||z  z  }t        |d||	       |r| j                  j                         |z  |j                  j                         |z  z
  }t        j                  t        j                  |            |
|z  z  }| |j                  j                         z  ||z  z
  }t        j                  t        j                  |            ||z  z  }t        |d||	       t        |d||	       |rt        | ||      \  }}}t        ||||	       ||z  j                  |      }||z  j                  |      }t        |j                   | j                          t        j                  t        j                  ||z
              ||z  z  }t        |d||	       y y )Ng        r#   )r&   r   r   r'   r(   r)   sumr+   r*   r   r    )r,   r   r   r   r   r   	check_resr.   r$   r%   r/   r   r1   errorr2   rurusrvhrvhsr3   r4   r5   A_rebuilt_svdr0   s                           r   _check_svds_nr@   I   sL   77DAq 1a&!1$Aq6" 66!##((*a DaV$FF266$Q/01QU;EE3T5 66"bddiik"DaV$FF266$Q/01QU;EE3T5 SSXXZ!^bddiikAo-ffRVVBZ AE*"$$))+oA%vvbffSk"a!e,St$7c48  Au-B2Dt4BC(qSIIbM	Y__agg.rvvmi789QUCsD9 r!   c                       e Zd Zd Zd Zd Zy)CheckingLinearOperatorc                 V    || _         |j                  | _        |j                  | _        y N)r,   dtyper&   )selfr,   s     r   __init__zCheckingLinearOperator.__init__s   s    WW
WW
r!   c                     t        t        |j                        t        j                  |             | j
                  j                  |      S rD   )r   maxr&   r   sizer,   r'   rF   xs     r   _matveczCheckingLinearOperator._matvecx   s.    S\2771:.vvzz!}r!   c                     t        t        |j                        t        j                  |             | j
                  j                  j                         j                  |      S rD   )	r   rI   r&   r   rJ   r,   r(   	conjugater'   rK   s     r   _rmatveczCheckingLinearOperator._rmatvec|   s>    S\2771:.vvxx!!#''**r!   N)__name__
__module____qualname__rG   rM   rP    r!   r   rB   rB   r   s    
+r!   rB   c                      e Zd ZdZdZdZdZdZ ej                  g g      e
ef ej                  ddgdd	gg      e
efd
eef ej                  ddgddggg      e
efgZej                  j                  de      d        Zej                  j                  dg d      d        Zd Zej                  j                  ddej&                  ej(                  f      d        Zej                  j                  dg d
f      d        Zej                  j                  dd      d        Zej                  j                  dd      ej                  j                  d ed	d            d                Zd! Zej                  j                  d"d
d ej6                  d#e$      f      d%        Zej                  j                  d&d'      d(        Zd) Zej                  j                  d*d+      d,        Z ej                  j                  ddd-g      ej                  j                  dd.d/g      d0               Z!ej                  jE                   e#jH                         d1k(  d23      d4        Z%d5 Z&d6 Z'ej                  j                  d7d8dejP                  jS                  d8      ejP                  jU                  d8      f      d9        Z+ej                  j                  d7dejP                  jS                  d8      ejP                  jU                  d8      f      d:        Z,ej                  j[                  d;      d<        Z.ej                  j                  d*d=      ej                  j                  d>d?      d@               Z/g dAg dBg dCg dDgZ0g dEg dFg dGg dHgZ1ej                  j[                  dIdJ3      ej                  j                  dKe0e1f      ej                  j                  d edd-            ej                  j                  dLd      ej                  j                  ddM      ej                  j                  dNej                  e2e3f      dO                                           Z4dP Z5dQZ6ej                  j[                  dR      ej                  j[                  d;      ej                  j                  d>e6      ej                  j                  dSe7e8ejr                  f      dT                             Z:ej                  j                  d>dU      ej                  j                  dSe7e8f      dV               Z;ej                  j[                  dIdJ3      ej                  j                  d>dW      ej                  j                  dSe7e8f      dX                      Z<ej                  j                  d>dY      ej                  j                  dSe7e8ejr                  f      dZ               Z=ej                  j[                  d[      ej                  j                  dSe7e8ejr                  f      d\               Z>y)]SVDSCommonTestsNz`A` must not be empty.z5`A` must be of floating or complex floating data typeztype not understoodzarray must have ndim <= 2            hi      ?g       @g      @g      @argsc                     |\  }}}t        j                  ||      5  t        |d| j                         d d d        y # 1 sw Y   y xY w)NmatchrW   r   solver)pytestraisesr   rb   )rF   r]   r,   
error_typemessages        r   test_svds_input_validation_Az,SVDSCommonTests.test_svds_input_validation_A   sA    !%:w]]:W5 	-a,	- 	- 	-s   A  A	r   )r   rY   rZ      g      ?1c                    t         j                  j                  d      }|j                  d      }| j                  dk(  rJ|dk(  rEt        st        j                  d       t        ||| j                        }t        ||g|ddd y d	}t        j                  t        |
      5  t        ||| j                         d d d        y # 1 sw Y   y xY w)Nr   rZ   rY   propackrY   PROPACK not enabledra   Tr-   r.   z!`k` must be an integer satisfyingr_   )r   r   default_rngrb   has_propackrc   skipr   r6   rd   r   )rF   r   rngr,   resrf   s         r   test_svds_input_validation_k_1z.SVDSCommonTests.test_svds_input_validation_k_1   s    ii##A&JJv ;;)#Q12qAdkk2C1FsFF6]]:W5 	-a,	- 	- 	-s   'C		Cc                    d}t        j                  t        t        j                  |            5  t        t        j                  d      g | j                         d d d        d}t        j                  t        |      5  t        t        j                  d      d| j                         d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)Nint() argument must be ar_   
   ra   invalid literal for int()r[   
rc   rd   	TypeErrorreescaper   r   eyerb   r   rF   rf   s     r   test_svds_input_validation_k_2z.SVDSCommonTests.test_svds_input_validation_k_2   s     -]]9BIIg,>? 	7r$++6	7 .]]:W5 	9tDKK8	9 	9		7 	7	9 	9   ,B7,C7C Ctolrh   c                     d}t        j                  t        |      5  t        t	        j
                  d      || j                         d d d        y # 1 sw Y   y xY w)Nz2`tol` must be a non-negative floating point value.r_   rx   r   rb   rc   rd   r   r   r   r~   rb   rF   r   rf   s      r    test_svds_input_validation_tol_1z0SVDSCommonTests.test_svds_input_validation_tol_1   sB    F]]:W5 	:T[[9	: 	: 	:   ,AAc                     d}t        j                  t        |      5  t        t	        j
                  d      || j                         d d d        y # 1 sw Y   y xY w)Nz#'<' not supported between instancesr_   rx   r   )rc   rd   r{   r   r   r~   rb   r   s      r    test_svds_input_validation_tol_2z0SVDSCommonTests.test_svds_input_validation_tol_2   sD     8]]9G4 	:T[[9	: 	: 	:r   r   )LASAekkir   c                     t        j                  t        d      5  t        t	        j
                  d      || j                         d d d        y # 1 sw Y   y xY w)Nz`which` must be inr_   rx   r   rb   r   )rF   r   s     r    test_svds_input_validation_whichz0SVDSCommonTests.test_svds_input_validation_which   s@     ]]:-AB 	>5=	> 	> 	>s   ,AA	transpose)TFr/   	   c                    t         j                  j                  d      }|j                  d      }|j                  |      }|r|j                  }d}d}| j                  dk(  r|j
                  d   nt        |j
                        }||k7  r>t        j                  t        |      5  t        |||| j                         d d d        y y # 1 sw Y   y xY w)Nr   ri      rX   `v0` must have shaperm   r_   r   v0rb   )r   r   rp   r(   rb   r&   minrc   rd   r   r   )	rF   r   r/   rs   r,   r   r   rf   required_lengths	            r   test_svds_input_validation_v0_1z/SVDSCommonTests.test_svds_input_validation_v0_1   s     ii##A&JJvZZ]A()-	)A1771: #AGG 	z9 8Q!4;;78 8  8 8s   'CCc                     t        j                  d      }t        j                  d      }d}t        j                  t        |      5  t        |d|| j                         d d d        y # 1 sw Y   y xY w)Nrx   rx   )rW   rx   r   r_   rW   r   r   onesrc   rd   r   r   rb   )rF   r,   r   rf   s       r   test_svds_input_validation_v0_2z/SVDSCommonTests.test_svds_input_validation_v0_2   sX    GGHWWW(]]:W5 	4aBt{{3	4 	4 	4s   A++A4r   rx   rE   c                     t        j                  d      }d}t        j                  t        |      5  t        |d|| j                         d d d        y # 1 sw Y   y xY w)Nr   z7`v0` must be of floating or complex floating data type.r_   rW   r   r   )rF   r   r,   rf   s       r   test_svds_input_validation_v0_3z/SVDSCommonTests.test_svds_input_validation_v0_3   sJ    GGHK]]:W5 	4aBt{{3	4 	4 	4s   AAmaxiter)rh   r   g      @c                     d}t        j                  t        |      5  t        t	        j
                  d      || j                         d d d        y # 1 sw Y   y xY w)Nz%`maxiter` must be a positive integer.r_   rx   r   rb   r   )rF   r   rf   s      r   $test_svds_input_validation_maxiter_1z4SVDSCommonTests.test_svds_input_validation_maxiter_1   sF    :]]:W5 	BWT[[A	B 	B 	Br   c                    d}t        j                  t        t        j                  |            5  t        t        j                  d      g | j                         d d d        d}t        j                  t        |      5  t        t        j                  d      d| j                         d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)Nrw   r_   rx   r   ry   r[   rz   r   s     r   $test_svds_input_validation_maxiter_2z4SVDSCommonTests.test_svds_input_validation_maxiter_2   s     -]]9BIIg,>? 	=R<	= .]]:W5 	?T$++>	? 	?		= 	=	? 	?r   rsv)r   rx   c                     d}t        j                  t        |      5  t        t	        j
                  d      || j                         d d d        y # 1 sw Y   y xY w)Nz$`return_singular_vectors` must be inr_   rx   )return_singular_vectorsrb   r   )rF   r   rf   s      r   2test_svds_input_validation_return_singular_vectorszBSVDSCommonTests.test_svds_input_validation_return_singular_vectors   sF    8]]:W5 	NSM	N 	N 	Nr   ri   r   r   c                    | j                   dk(  rt        st        j                  d       t        j
                  j                  d      }|j                  d      }| j                   dk(  r?t        j                  t        d      5  t        |||| j                   d      }d d d        nt        |||| j                   d      }t        ||g|d	d
 y # 1 sw Y   xY w)Nrm   PROPACK not availabler   r   lobpcgThe problem sizer_   )r   r   rb   random_stateg|>)r   r$   )rb   rq   rc   rr   r   r   rp   warnsUserWarningr   r6   )rF   r   r   rs   r,   rt   s         r   test_svds_parameter_k_whichz+SVDSCommonTests.test_svds_parameter_k_which  s     ;;)#34
 ii##A&JJx ;;("k1CD +1t{{()++ + qAU4;;$%'CAq838e%8+ +s   CCarmv8lzfails on armel)reasonc                 b    	
  j                   dk(  rt        st        j                  d       y )Nrm   r   )rb   rq   rc   rr   r   r   rp   r(   r   r   zip)rF   rs   _errtols
accuraciesr   accuracyr:   r,   r   r/   r   s   `        @@@@r   test_svds_parameter_tolz'SVDSCommonTests.test_svds_parameter_tol  s$     ;;)#34r!   c                    | j                   dk(  rt        st        j                  d       d}d}t        j
                  j                  d      }|j                  ||f      }|j                  |      }t        |||| j                   d      }t        |||| j                   d      }t        d      D ]  }t        ||   ||   dd	
        t        ||g|  |j                  |      }	t        |||	| j                   d      }
t        |||	| j                   d      }t        d      D ]  }t        |
|   ||   dd	
        t        ||g|
  d}t        j                  t        |      5  t        ||
       d d d        y # 1 sw Y   y xY w)Nrm   r   d   rW   r   )r   rb   r   rY   V瞯<缉ؗҬ<r%   r$   rX   Arrays are not equalr_   rb   rq   rc   rr   r   r   rp   r   ranger   r6   rd   AssertionErrorr   )rF   r/   r   rs   r,   v0ares1ares2aidxv0bres1bres2brf   s                r   test_svd_v0zSVDSCommonTests.test_svd_v0I  sn   ;;)#34 ii##A&JJ1v jjmQc$++AFQc$++AF8 	LCE#Jc
UK	LAq!5! jjmQc$++AFQc$++AF8 	LCE#Jc
UK	LAq!5! )]]>9 	'&	' 	' 	's   ,FFc                    | j                   dk(  rt        st        j                  d       d}d}t        j
                  j                  d      }|j                  ||f      }t        ||| j                   d      }t        ||| j                   d      }t        d      D ]  }t        ||   ||   dd	
        t        ||g|  t        ||| j                   d      }t        ||| j                   d      }	t        d      D ]  }t        ||   |	|   dd	
        t        ||g|  d}
t        j                  t        |
      5  t        ||       d d d        y # 1 sw Y   y xY w)Nrm   r   r   rW   r   rb   r   rY   r   r   r   r   r_   r   )rF   r/   r   rs   r,   r   r   r   r   r   rf   s              r   test_svd_random_statez%SVDSCommonTests.test_svd_random_staten  sL   ;;)#34 ii##A&JJ1v Q$++A>Q$++A>8 	LCE#Jc
UK	LAq!5! Q$++A>Q$++A>8 	LCE#Jc
UK	LAq!5! )]]>9 	'&	' 	' 	's   EE%r   r   c                    | j                   dk(  rt        st        j                  d       d}d}t        j
                  j                  d      }|j                  ||f      }t        j                  |      }t        ||| j                   |      }t        ||| j                   |      }t        d      D ]  }	t        ||	   ||	   dd	
        t        ||g|  y )Nrm   r   r   rW   r   r   rY   r   r   r   )rb   rq   rc   rr   r   r   rp   copydeepcopyr   r   r   r6   )
rF   r   r/   r   rs   r,   random_state_2r   r   r   s
             r   test_svd_random_state_2z'SVDSCommonTests.test_svd_random_state_2  s     ;;)#34ii##A&JJ1v|4 Q$++LIQ$++NK8 	LCE#Jc
UK	LAq!5!r!   c                    | j                   dk(  rt        st        j                  d       d}d}t        j
                  j                  d      }|j                  ||f      }t        ||| j                   |      }t        ||| j                   |      }t        ||g|ddd	 t        ||g|ddd	 d
}t        j                  t        |      5  t        ||       d d d        y # 1 sw Y   y xY w)Nrm   r   r   ri   r   r   g|=ư>r#   r   r_   )rb   rq   rc   rr   r   r   rp   r   r6   rd   r   r   )	rF   r   r/   r   rs   r,   r   r   rf   s	            r   test_svd_random_state_3z'SVDSCommonTests.test_svd_random_state_3  s     ;;)#34ii##A&JJ1v Q$++LIQ$++LIAq858u48Aq858u48(]]>9 	'&	' 	' 	's   C((C1zignore:Exited postprocessingc                    | j                   dk(  rt        st        j                  d       t	        j
                  t	        j                  d            j                  t        j                        }d}t        ||      \  }}}| j                   dk(  rAd}t        j                  t        |      5  t        ||dd| j                   	       d d d        n| j                   d
k(  r>t        j                  t        d      5  t        ||d| j                          d d d        nb| j                   dk(  rSd}t        j                  t        j                  j                   |      5  t        ||d| j                          d d d        t        ||| j                         \  }}}	t#        |||||	d       t%        t	        j&                  |      t	        j&                  |      d       t%        t	        j&                  |	      t	        j&                  |      d       t%        t	        j&                  |      t	        j&                  |      d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nrm   r   r   rW   arpackzARPACK error -1: No convergencer_   rY   )ncvr   rb   r   zExited at iterationr   z-k=1 singular triplets did not converge withinrb   g:0yE>r$   g&.>)rb   rq   rc   rr   r   diagarangeastypefloat64r    rd   r   r   r   r   linalgLinAlgErrorr6   r   r+   )
rF   r,   r   r   r   r   rf   udsdvhds
             r   test_svd_maxiterz SVDSCommonTests.test_svd_maxiter  s    ;;)#34GGBIIaL!((4a#1b;;("7G2'B AQq!DKK@A A[[H$k1FG :Q1T[[9: :[[I%EGryy44GD :Q1T[[9: 1a4BAq"b#D1r
BFF1ID9sRVVBZd;r
BFF1ID9A A: :: :s$   .I<II#II #I,)TFr   r   r&   )r   )   r   )r   ri   c                    | j                   dk(  rt        st        j                  d       t        j
                  j                  d      }|j                  |      }d}|\  }}t        ||      \  }}	}
| j                   dk(  rdn||k  }| j                   dk(  rdn||kD  }| j                   dk(  rt        j                  t        d      5  |d	u r(t        |||| j                   |
      }t        ||	       na|dk(  rb|r`t        |||| j                   |
      \  }}}t        t	        j                  |      t	        j                  |             t        ||	       |J |dk(  rc|rat        |||| j                   |
      \  }}}|J t        ||	       t        t	        j                  |      t	        j                  |
             nt        |||| j                   |
      \  }}}|2t        t	        j                  |      t	        j                  |             t        ||	       |2t        t	        j                  |      t	        j                  |
             d d d        y |d	u r't        |||| j                   |
      }t        ||	       y |dk(  rc|rat        |||| j                   |
      \  }}}t        t	        j                  |      t	        j                  |             t        ||	       |J y |dk(  rc|rat        |||| j                   |
      \  }}}|J t        ||	       t        t	        j                  |      t	        j                  |
             y t        |||| j                   |
      \  }}}|2t        t	        j                  |      t	        j                  |             t        ||	       |3t        t	        j                  |      t	        j                  |
             y y # 1 sw Y   y xY w)Nrm   r   r   rX   Tr   r   r_   F)r   rb   r   r   r   )rb   rq   rc   rr   r   r   rp   r    r   r   r   r   r+   )rF   r   r&   rs   r,   r   MNr   r   r   	respect_u
respect_vhr4   r3   r5   s                   r    test_svd_return_singular_vectorsz0SVDSCommonTests.test_svd_return_singular_vectors  sR    ;;)#34ii##A&JJu1a#1b KK94D!q&	![[I5T1q5
;;("k1CD A%<aC%)[[sDB#B*CZI"&q!S.2kk#MKBC#BFF2Jq	:#B*;&;D[Z"&q!S.2kk#MKBC:%:#B*#BFF3K<"&q!S.2kk#MKBC~'r
BFF1I>#B*'sRVVBZ@1A A4 e|!Q!%3@A&	"1a*.++CIBr
BFF1I6A&{"{"1a*.++CIBz!zA&sRVVBZ8"1a*.++CIB>#BFF2Jq	:A&?#BFF3K< #aA As   	FO//O8)rW   rX   rY   )rY   rZ   rY   )y      ?      ?r   rX   )r   r   rW   )rW   rX   rY   y       @      @)y      @       rZ   rY   ri   )rW   r   rX   rY   )r   r   rW   r   zignore:k >= N - 1zneeded to demonstrate #16725r,   real)FTlo_typec                    | j                   dk(  rt        st        j                  d       t	        j
                  |      }|rt	        j                  |      n|}|r|j                  n|} ||      }|t        |j                        kD  rt        j                  d       | j                   dk7  r-|t        |j                        k\  rt        j                  d       | j                   dk(  r2|s0|t        |j                        dz
  k(  rt        j                  d       | j                   dk(  r9t	        j                  d      j                  d	k  r|st        j                  d
       | j                   dk(  rAt        j                  t        d      5  t        ||| j                         \  }}}	d d d        nt        ||| j                         \  }}}	t        ||	d       y # 1 sw Y   xY w)Nrm   r   z)`k` cannot be greater than `min(A.shape)`z"Only PROPACK supports complete SVDr   rW   #16725r      BPROPACK complex-valued SVD methods not available for 32-bit buildsr   r   r_   r   gLa㧝=r   )rb   rq   rc   rr   r   asarrayr   r(   r   r&   intpitemsizer   r   r   r6   )
rF   r,   r   r   r   r   A2r   r   r   s
             r   test_svd_simplezSVDSCommonTests.test_svd_simple)  sx    ;;)#34JJqMBGGAJAACC!QZ s177|KKCD;;)#S\(9KK<=;;("4AQWW9I4IKK!;;)#)<)<q)@KK , - ;;("k1CD ;Adkk:1b; ; B$++6HAq"Aq!Q/	; ;s   G!!G*c                 r   | j                   }| j                   dk(  rt        st        j                  d       g d}d }|D ]M  \  }}}t        j
                  j                  d      j                  ||      }t        |      }|dk(  rt	        j                  |      }	n(t	        j                  t        |j                              }	|dk(  rWt        j                  t        d      5   |t        |||	|	            \  }
}} |t        |||	|	            \  }}}d d d        n2 |t        |||	|	            \  }
}} |t        |||	|	            \  }}}t        t	        j                   
      t	        j                                t               t        t	        j                         t	        j                                t        t	        j"                  |
t	        j"                  t	        j$                  |      |            t	        j"                  |t	        j"                  t	        j$                  |      |                   t        j
                  j                  d
      j                  ||      }t        |      }|dvrd|	ini }| j                   dk(  rYt        j                  t        d      5   |t        ||fd|d|      \  }
}} |t        ||fd|d|      \  }}}d d d        n4 |t        ||fd|d|      \  }
}} |t        ||fd|d|      \  }}}t        t	        j                   |
      t	        j                   |             t        |dz   |dz          t        t	        j                   |      t	        j                   |             t        t	        j"                  |
t	        j"                  t	        j$                  |      |            t	        j"                  |t	        j"                  t	        j$                  |      |                   |t        ||      dz
  k  st&        dft        j(                  dffD ]?  \  }}| j                   dk(  r7t	        j*                  d      j,                  dk  rt        j                  d       t        j
                  j                  d      }|j                  ||      d|j                  ||      z  z   j/                  |      }t        |      }| j                   dk(  rWt        j                  t        d      5   |t        ||d|            \  }
}} |t        ||d|            \  }}}d d d        n2 |t        ||d|            \  }
}} |t        ||d|            \  }}}t        t	        j                   |
      t	        j                   |      |       t        |||       t        t	        j                   |      t	        j                   |      |       t        t	        j"                  |
t	        j"                  t	        j$                  |      |            t	        j"                  |t	        j"                  t	        j$                  |      |            |       B P y # 1 sw Y   IxY w# 1 sw Y   xY w# 1 sw Y   %xY w)Nrm   r   ))r   r   rY   )r   ri   rZ   )rx   r   ri   c                 d    | \  }}}t        j                  |      }|d d |f   ||   ||d d f   fS rD   )r   r   )r]   Ur   VHjs        r   reorderz/SVDSCommonTests.test_svd_linop.<locals>.reorder[  s;    HAq"

1AQT7AaD"QT(**r!   4   r   r   r_   )r   rb   iu  >   Nr   r   r   r   rW   Hz>MbP?r   r   r   ip                ?r   )r%   )rb   rq   rc   rr   r   r   RandomStaterandnrB   r   r   r&   r   r   r   r   r+   r'   r   complex	complex64r   r   r   )rF   rb   nmksr  r/   r   r   r,   Lr   U1s1VH1U2r4   VH2kwargsdtepsrs   s                       r   test_svd_linopzSVDSCommonTests.test_svd_linopQ  s   ;;)#34	+
  K	.GAq!		%%b)//15A&q)A"WWQZWWS\*!\\+5GH L")$q!6*J"KKBC")$q!6*J"KKBCL L &d1aBv&FGB%d1aBv&FGBBFF2Jr
3B#BFF3K5BFF2rvvbggbk3'?@FF2rvvbggbk3'?@B 		%%d+11!Q7A&q)A $*1A#AdBZrF{{h&\\+5GH :")$q! +94 +917+9 #:KBC")$q! +94 +917+9 #:KBC: : &d1a '5tF '5-3'5 6B%d1a '5tF '5-3'5 6B BFF2Jr
3BFBF+BFF3K5BFF2rvvbggbk3'?@FF2rvvbggbk3'?@B 3q!9q= #*D/BLL$3G!H .IR{{i/BGGAJ4G4G!4K %F G))//5C1a2		!Q+??GGKA.q1A{{h.#\\+0BD G*1$q!4>D3F +GKBC*1$q!4>D3F +GKBC	G G '.d1at:@/B 'CB&-d1at:@/B 'CB $BFF2Jr
E#B5#BFF3K3G#BFF2rvvbggbk3/G$H$&FF2rvvbggbk3/G$H),.1.cK	.L L(: :8G Gs$   %3Z35Z#3Z,Z	Z)	,Z6))r   r   )r   e   )r  r   zignore:Exited at iterationrE   c           
         | j                   }|dk(  rt        j                  d       t        j                  j                  d      }d}|\  }}t	        ||d|      }|t        k(  rdt	        ||d|      z  }t        j                  |      }	|	ddxxx dt        j                  d	dd
      z  z  ccc t        |	d||      |z  }|j                  |      }t        ||d|d      \  }
}}d}t        |||
||d|d       y )Nrm   z PROPACK failures unrelated to PRr   ri   g?)densityr   r        $@rW   r   i  )r   rb   r   F)r   r.   r$   )rb   rc   rr   r   r   rp   r	  r   r   r
   r   r   r@   )rF   r&   rE   rb   rs   r   r   r/   Ser   r   r   c_svds                 r   test_small_sigma_sparsez'SVDSCommonTests.test_small_sigma_sparse  s      YKK:;ii##A&A1a37GvaCcBBAGGAJ	!A#2q!,,,Aq!Q!#HHUO1DF1baAq"DEMr!   ))r   ri   )ri   ri   )ri   r   c           	      L   d}|\  }}t        j                  ||f|      }| j                  dk(  rAt        j                  t
        d      5  t        ||| j                        \  }}}	d d d        nt        ||| j                        \  }}}	t        ||	dd	       t        t        j                  |      t        j                  ||z               t        j                  t        |      d d
       dz   }t        j                  |      }
t        ||
       y # 1 sw Y   xY w)NrY   r   r   r   r_   r   TFro   rh   rW   )r   r   rb   rc   r   r   r   r6   r   rI   sqrtarraysorted	ones_like)rF   r&   rE   r   r/   r   r,   r   r   r   zs              r   test_svd_LM_ones_matrixz'SVDSCommonTests.test_svd_LM_ones_matrix  s     1GGQF%(;;("k1CD :1T[[91b: : Aq5HAq"Aq!QG 	q	2771Q3<0HHVAYs^$q(LLO1: :s   DD#)rY   rZ   )rZ   rZ   rl   )rZ   rX   c           	      F   d}|\  }}t        j                  ||f|      }| j                  dk(  r8|t        u r0|t	        |j
                        dz
  k(  rt        j                  d       | j                  dk(  rt        j                  d       | j                  dk(  rAt        j                  t        d	      5  t        ||| j                  
      \  }}}	d d d        nt        ||| j                  
      \  }}}	t        ||	dd       t        |d       y # 1 sw Y   (xY w)NrW   r   r   r   rm   z'PROPACK failures unrelated to PR #16712r   r   r_   r   TFro   r   )r   zerosrb   r	  r   r&   rc   rr   r   r   r   r6   r   )
rF   r&   rE   r   r/   r   r,   r   r   r   s
             r   test_zero_matrixz SVDSCommonTests.test_zero_matrix  s     1HHaV5)KK8#(8QWW))KK!;;)#KKAB;;("k1CD :1T[[91b: : Aq5HAq" 	Aq!QG 	1a : :s   6DD ))   r*  )r*     )r+  r*  c           
         t         st        j                  d       |t        k(  r$| j                  dk(  rt        j                  d       t
        j                  j                  d      }|j                  |      j                  |      }t        |d      \  }}}|t
        j                  k(  rd}nd}|t        j                  t        |             j                  |      z  }	||	z  j                  |      }d	}
t        ||
| j                  d
      \  }}}t        j                  |dkD        }	t!        |	|
       t#        ||
|||ddd       y )Nrn   rm   %PROPACK unsupported for complex dtypetA
F)full_matricesr  g      Y@rZ   r   )rb   r   r   r  r\   )r$   r%   r.   )rq   rc   rr   r	  rb   r   r   rp   r   r   float32r   lenr'   r   r8   r   r@   )rF   r&   rE   rs   r,   r   r   r   r  tr   r   s               r   test_small_sigmaz SVDSCommonTests.test_small_sigma  s    KK-.Gy 8KK?@ii##I.JJu$$U+q.1bBJJAA3r7##++E22qSIIbM1T[[#>1bFF1q5MQaAq"4cUKr!   zignore:The problem sizec                    | j                   dk(  rct        st        j                  d       nG|t        j
                  k(  rt        j                  d       n|t        k(  rt        j                  d       t        j                  j                  d      }d}d}|j                  |||z
  f      }|d d d |f   |j                  |      z  }t	        j                  ||f      }|j                  |      }t        |      }t        |j                  d   |       t        |      \  }	}
}t        |
| d  d	d
d       t        ||| d d d f   j                   z  d	d
d       t#        |      }t%        ||d| j                         \  }}}t        |d	dd       |j                  \  }}||k  r t        |j'                         |z  d	dd       t        ||j                   z  d	dd       y )Nrm   rn   z!Test failures in CI, see gh-17004r-  r.  rZ   rx   rW   r   r   r\   r#   r   )r   r   rb   gh㈵>)rb   rq   rc   rr   r   r0  r	  r   rp   hstackr   r   r   r&   r   r   r(   r   r   r   )rF   rE   rs   dimrJ   rL   ymatnzr   r   r   sp_matsusssvhr/   r   s                     r   test_small_sigma2z!SVDSCommonTests.test_small_sigma2  s    ;;)#12"**$?@'!CDii##I.JJd3h'(a#gJC(iiAjj_RXXa[#& s81b3$%!$S9b#lnn,adE C6ST[[IBADs3yy1q5F,,.3QTL3?r!   )?rQ   rR   rS   rb   _A_empty_msg_A_dtype_msg_A_type_msg_A_ndim_msgr   r   r   r{   _A_validation_inputsrc   markparametrizerg   ru   r   infnanr   r   r   r   r   r   r   intr   r   r   r   r   xfailplatformmachiner   r   r   r   r  rp   r   r   filterwarningsr   r   A1r   r   r   r   r  SHAPESfloatr	  r0  r  r%  r)  r3  r>  rT   r!   r   rV   rV      s   F ,LJL'K-K	RD	:|4	aVaV$	%z<@	y+&	r2hR)*	+ZE	G [[V%9:- ;-
 [[S"<=- >- 	9 [[UR$89: ::
 [[URJ/: 0: [[W&=>> ?> [[[-8[[S%1+.8 / 984 [[TD!WRWWRs-C#DE4 F4 [[Y5B 6B
	? [[UL1N 2N [[S1a&)[[WtTl39 4 *9( [['x'')X5.  0*'0*'X#'J 'D [[^a.0ii.C.CA.F.0ii.C.CA.F.H I"I"( [[^d.0ii.C.CA.F.0ii.C.CA.F.H I'I', [[ >?: @:8 [[U$<=[[W&>?A= @ >A=N Y		:B
.l	KB[[ 3'E   G[[S2r(+[[S%1+.[[V]3[[[-8[[YZ)9); <0< 9 4 / ,G0<Z.x 2F[[ <=[[ >?[[Wf-[[Wugrzz&BCN D . @ >
N2 [[W&>?[[Wug&67 8 @* [[ 3'E   G[[W&FG[[Wug&67! 8 HG!8 [[W&DE[[Wugrzz&BCL D FL. [[ 9:[[Wugrzz&BC'@ D ;'@r!   rV   c                   T    e Zd Zej                  j                  ddeg      d        Zy)Test_SVDS_oncerb   r   c                     d}t        j                  t        |      5  t        t	        j
                  d      d|       d d d        y # 1 sw Y   y xY w)Nzsolver must be one ofr_   r&  rX   ra   )rc   rd   r   r   r   r   )rF   rb   rf   s      r   !test_svds_input_validation_solverz0Test_SVDS_once.test_svds_input_validation_solverM  s>    )]]:W5 	6Af5	6 	6 	6s   "A		AN)rQ   rR   rS   rc   rD  rE  objectrS  rT   r!   r   rQ  rQ  L  s*    [[X'786 96r!   rQ  c            	           e Zd Zd Zej
                  j                  d e edd            ddgz         d        Z	d Z
y	)
Test_SVDS_ARPACKc                     d| _         y )Nr   r   rF   s    r   setup_methodzTest_SVDS_ARPACK.setup_methodV  	    r!   r   rh   r   g      @5c                 `   t         j                  j                  d      }|j                  d      }d}|dv r-t        |||| j                        \  }}}t        |||||       y d}t        j                  t        |      5  t        |||| j                         d d d        y # 1 sw Y   y xY w)Nr   )r   r   rY   >   rZ   ri   )r   r   rb   z#`ncv` must be an integer satisfyingr_   )	r   r   rp   r   rb   r6   rc   rd   r   )	rF   r   rs   r,   r   r   r   r   rf   s	            r    test_svds_input_validation_ncv_1z1Test_SVDS_ARPACK.test_svds_input_validation_ncv_1Y  s    ii##A&JJv&=ADKK@HAq" 1aB'<Gz9 :Q!T[[9: : :s   B$$B-c                    d}t        j                  t        t        j                  |            5  t        t        j                  d      g | j                         d d d        d}t        j                  t        |      5  t        t        j                  d      d| j                         d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)Nrw   r_   rx   )r   rb   ry   r[   rz   r   s     r    test_svds_input_validation_ncv_2z1Test_SVDS_ARPACK.test_svds_input_validation_ncv_2h  s     -]]9BIIg,>? 	9DKK8	9 .]]:W5 	;dkk:	; 	;		9 	9	; 	;r   N)rQ   rR   rS   rY  rc   rD  rE  listr   r]  r_  rT   r!   r   rV  rV  T  sF     [[UDr1$6#s$CD: E:	;r!   rV  c                       e Zd Zd Zd Zy)Test_SVDS_LOBPCGc                     d| _         y )Nr   r   rX  s    r   rY  zTest_SVDS_LOBPCG.setup_methody  rZ  r!   c                 .    t        j                  d       y )Nz'LOBPCG is having trouble with accuracy.rc   rI  rX  s    r   r   z(Test_SVDS_LOBPCG.test_svd_random_state_3|  s    >?r!   N)rQ   rR   rS   rY  r   rT   r!   r   rb  rb  w  s    @r!   rb  c                       e Zd Zd Zd Zd Zy)Test_SVDS_PROPACKc                     d| _         y )Nrm   r   rX  s    r   rY  zTest_SVDS_PROPACK.setup_method  s	    r!   c                 2    d}t        j                  |       y NzZPROPACK does not return orthonormal singular vectors associated with zero singular values.re  r   s     r   r%  z)Test_SVDS_PROPACK.test_svd_LM_ones_matrix  s    ; 	Wr!   c                 2    d}t        j                  |       y rj  re  r   s     r   test_svd_LM_zeros_matrixz*Test_SVDS_PROPACK.test_svd_LM_zeros_matrix  s    ;Wr!   N)rQ   rR   rS   rY  r%  rl  rT   r!   r   rg  rg    s     r!   rg  )r   )r   FT绽|=r  )r   TTrm  r  )%osrJ  r|   r   numpyr   numpy.testingr   r   r   rc   scipy.linalgr   r   scipy.sparser   r	   r
   r   scipy.sparse.linalgr   r   environgetrq   r   !scipy.sparse.linalg._eigen.arpackr   r    r6   r@   rB   rV   rQ  rV  rb  rg  rT   r!   r   <module>rw     s    	  	   K K  ( > > @::>>%&KK $ A#  :?15GB 9=37&:R+^ +&B@ B@N6 6; ;F@ @ r!   