
    Ph0                     (   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 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_arrayissparse	dia_arrayrandom_array)LinearOperatoraslinearoperator)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          uC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-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_svdsr5   "   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   r0   errorr1   rurusrvhrvhsr2   r3   r4   A_rebuilt_svdr/   s                           r   _check_svds_nr?   C   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__m   s    WW
WW
r    c                     t        t        |j                        t        j                  |             | j
                  j                  |      S rC   )r   maxr%   r   sizer+   r&   rE   xs     r   _matveczCheckingLinearOperator._matvecr   s.    S\2771:.vvzz!}r    c                     t        t        |j                        t        j                  |             | j
                  j                  j                         j                  |      S rC   )	r   rH   r%   r   rI   r+   r'   	conjugater&   rJ   s     r   _rmatveczCheckingLinearOperator._rmatvecv   s>    S\2771:.vvxx!!#''**r    N)__name__
__module____qualname__rF   rL   rO    r    r   rA   rA   l   s    
+r    rA   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d
      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ddg      d        Z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j<                  d+e      f      d,        Z ej                  j!                  d-d.      d/        Z!d0 Z"ej                  j!                  d1d2      d3        Z#ej                  jH                  ej                  j!                  dd4d5g      ej                  j!                  dddg      d6                      Z%ej                  jM                  d7d89      d:        Z'd; Z(d< Z)d= Z*ej                  jM                  d7d89      d>        Z+ej                  jH                  ej                  jM                  d?      d@               Z,ej                  jH                  ej                  j!                  d1dA      ej                  j!                  dBdC      dD                      Z-g dEg dFg dGg dHgZ.g dIg dJg dKg dLgZ/ej                  jH                  ej                  jM                  dMdN9      ej                  j!                  dOe.e/f      ej                  j!                  d ed*d5            ej                  j!                  dPd#      ej                  j!                  d"dQ      ej                  j!                  dRej                  e0e1f      dS                                                  Z2ej                  jH                  dT        Z3dUZ4ej                  jM                  dV      ej                  jM                  d?      ej                  j!                  dBe4      ej                  j!                  dWe5e6ejn                  f      dX                             Z8ej                  jH                  ej                  j!                  dBdY      ej                  j!                  dWe5e6f      dZ                      Z9ej                  jH                  ej                  jM                  dMdN9      ej                  j!                  dBd[      ej                  j!                  dWe5e6f      d\                             Z:ej                  j!                  dBd]      ej                  j!                  dWe5e6ejn                  f      ej                  jM                  d7d89      d^                      Z;ej                  jM                  d_      ej                  j!                  dWe5e6ejn                  f      d`               Z<y)aSVDSCommonTestsNz`A` must not be empty.z `A` must be of numeric data typeztype not understoodzarray must have ndim <= 2abcdobjectrD   hi      ?       @g      @g      @argsc                     |\  }}}t        j                  ||      5  t        |d| j                  d       d d d        y # 1 sw Y   y xY w)Nmatch   r   r   solverrng)pytestraisesr   re   )rE   r_   r+   
error_typemessages        r   test_svds_input_validation_Az,SVDSCommonTests.test_svds_input_validation_A   s:    !%:w]]:W5a3 655s   AA
r   r   r   c                 D   t        j                  ddgddgg      }| j                  dk(  r?t        j                  t
        d      5  t        |d|| j                  d	      }d d d        nt        |d|| j                  d	      }t        |dg|d
d y # 1 sw Y   xY w)Nrc            lobpcgThe problem sizera   r   r   r   re   rf   g|>)r   r#   )r   asarrayre   rg   warnsUserWarningr   r5   )rE   r   r+   ress       r   test_svds_int_AzSVDSCommonTests.test_svds_int_A   s    JJAA'(;;("k1CD1t{{J ED qAU4;;AFCAq838e%8	 EDs   BBc                 `  	
 d 	d 
	
fd}d} ||      }t        |ddd      \  }}}d	t        j                  t        j                  t        j                  d
d      z  d	|z  z        z  }t        j
                  d|z        t        j                  t        j                  t        j                  t        j                  d
|      t        j                  d
d            z  |z        z  }t        ||d       t        t        j                  |      t        j                  |      d       y )Nc                 0    t        j                  | d      S )Nr   )axis)r   diff)rV   s    r   diff0z@SVDSCommonTests.test_svds_diff0_docstring_example.<locals>.diff0   s    7711%%r    c                 T   | j                   dk(  r| d d t        j                  f   } t        j                  | j                  d   dz   | j                  d   f| j
                        }| dd d f    |dd d f<   | ddd d f   | dd d d f   z
  |ddd d f<   | dd d f   |dd d f<   |S )Nrc   r   r[   )ndimr   newaxiszerosr%   rD   )rV   rY   s     r   diff0tzASVDSCommonTests.test_svds_diff0_docstring_example.<locals>.diff0t   s    vv{a

lO!''!*q.!''!*5QWWEA!Q$iAadG1R47aAh.AadAgJQxAb!eHHr    c                 .    t        | dz
  | f      S )Nrc   )matvecmatmatrmatvecrmatmatr%   )r   )r.   r|   r   s    r   diff0_func_aslo_defzNSVDSCommonTests.test_svds_diff0_docstring_example.<locals>.diff0_func_aslo_def   s&    !).*0*0)*Q
	4 4r    d   rn   r   r   )r   r   random_stater^   rc   ro   rm   MbP?r#   ư>)	r   r   sinpiarangesqrtouterr   r*   )rE   r   r.   diff0_func_aslor   r   _seuer|   r   s            @@r   !test_svds_diff0_docstring_examplez1SVDSCommonTests.test_svds_diff0_docstring_example   s    	&		4 -a0!4aH1a"&&1a0BF;<<WWQU^bffRUURXXbii1o%'YYq!_.6 &689&: ; ;2D)q	266":D9r    r   )r~   r   rn   ro      g      ?1c                 x   t         j                  j                  d      }|j                  d      }| j                  dk(  r0|dk(  r+t	        ||| j                  d      }t        ||g|ddd y d}t        j                  t        |	      5  t	        ||| j                  d       d d d        y # 1 sw Y   y xY w)
Nr   ro   rn   propackrn   rd   Tr,   r-   z!`k` must be an integer satisfyingra   )	r   randomdefault_rngre   r   r5   rg   rh   r   )rE   r   rf   r+   rv   rj   s         r   test_svds_input_validation_k_1z.SVDSCommonTests.test_svds_input_validation_k_1   s    ii##A&JJv ;;)#QqAdkkq9C1FsFF6]]:W5a3 655s   B00B9c                    d}t        j                  t        t        j                  |            5  t        t        j                  d      g | j                  d       d d d        d}t        j                  t        |      5  t        t        j                  d      d| j                  d       d d d        y # 1 sw Y   \xY w# 1 sw Y   y xY w)Nint() argument must be ara   
   r   rd   invalid literal for int()r\   
rg   rh   	TypeErrorreescaper   r   eyere   r   rE   rj   s     r   test_svds_input_validation_k_2z.SVDSCommonTests.test_svds_input_validation_k_2   s     -]]9BIIg,>?r$++1= @ .]]:W5tDKKQ? 65	 @? 65   -B9-C9CCtolr~   c                     d}t        j                  t        |      5  t        t	        j
                  d      || j                  d       d d d        y # 1 sw Y   y xY w)Nz2`tol` must be a non-negative floating point value.ra   r   r   r   re   rf   rg   rh   r   r   r   r   re   rE   r   rj   s      r    test_svds_input_validation_tol_1z0SVDSCommonTests.test_svds_input_validation_tol_1   s;    F]]:W5T[[a@ 655   -AAc                     d}t        j                  t        |      5  t        t	        j
                  d      || j                  d       d d d        y # 1 sw Y   y xY w)Nz#'<' not supported between instancesra   r   r   r   )rg   rh   r   r   r   r   re   r   s      r    test_svds_input_validation_tol_2z0SVDSCommonTests.test_svds_input_validation_tol_2   s=     8]]9G4T[[a@ 544r   )LASAekkir   c                     t        j                  t        d      5  t        t	        j
                  d      || j                  d       d d d        y # 1 sw Y   y xY w)Nz`which` must be inra   r   r   r   re   rf   r   )rE   r   s     r    test_svds_input_validation_whichz0SVDSCommonTests.test_svds_input_validation_which   s:     ]]:-AB5!D CBBs   -AA	transpose)TFr.   ro   	   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 d        y y # 1 sw Y   y xY w)Nr   r      rm   `v0` must have shaper   ra   r   v0re   rf   )r   r   r   r'   re   r%   minrg   rh   r   r   )	rE   r   r.   rf   r+   r   r   rj   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Q!4;;A> :9  99s   'CCc                     t        j                  d      }t        j                  d      }d}t        j                  t        |      5  t        |d|| j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   )rc   r   r   ra   rc   r   r   r   onesrg   rh   r   r   re   )rE   r+   r   rj   s       r   test_svds_input_validation_v0_2z/SVDSCommonTests.test_svds_input_validation_v0_2   sQ    GGHWWW(]]:W5aBt{{: 655s   A,,A5r   rc   r   c                     t        j                  d      }d}t        j                  t        |      5  t        |d|| j                  d       d d d        y # 1 sw Y   y xY w)Nr   z7`v0` must be of floating or complex floating data type.ra   rc   r   r   r   )rE   r   r+   rj   s       r   test_svds_input_validation_v0_3z/SVDSCommonTests.test_svds_input_validation_v0_3  sC    GGHK]]:W5aBt{{: 655s   AA maxiter)r~   r   g      @c                     d}t        j                  t        |      5  t        t	        j
                  d      || j                  d       d d d        y # 1 sw Y   y xY w)Nz%`maxiter` must be a positive integer.ra   r   r   r   re   rf   r   )rE   r   rj   s      r   $test_svds_input_validation_maxiter_1z4SVDSCommonTests.test_svds_input_validation_maxiter_1	  s;    :]]:W5WT[[aH 655r   c                    d}t        j                  t        t        j                  |            5  t        t        j                  d      g | j                  d       d d d        d}t        j                  t        |      5  t        t        j                  d      d| j                  d       d d d        y # 1 sw Y   \xY w# 1 sw Y   y xY w)Nr   ra   r   r   r   r   r\   r   r   s     r   $test_svds_input_validation_maxiter_2z4SVDSCommonTests.test_svds_input_validation_maxiter_2  s     -]]9BIIg,>?RC @ .]]:W5T$++1E 65	 @? 65r   rsv)r   r   c                     d}t        j                  t        |      5  t        t	        j
                  d      || j                  d       d d d        y # 1 sw Y   y xY w)Nz$`return_singular_vectors` must be inra   r   r   return_singular_vectorsre   rf   r   )rE   r   rj   s      r   2test_svds_input_validation_return_singular_vectorszBSVDSCommonTests.test_svds_input_validation_return_singular_vectors  s<    8]]:W5SRST 655r   rn   r   c                 p   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d	 y # 1 sw Y   xY w)
Nr   r   rp   rq   ra   rr   &.>gvIh%L=)r   r#   r$   )	r   r   r   re   rg   rt   ru   r   r5   )rE   r   r   rf   r+   rv   s         r   test_svds_parameter_k_whichz+SVDSCommonTests.test_svds_parameter_k_which!  s     ii##A&JJx ;;("k1CD1t{{J ED qAU4;;AFCAqC3Ce$UC	 EDs   B,,B5zignore:ExitedzIgnore LOBPCG early exit.)reasonc                 n   	
 dd
t         j                  j                  d      }|j                  f      	d		dkD  <   		j                  z  	t	        	      \  }}t        	      		
 fd}g d}g dg dg d	d
}t        || j                           D ]  \  }} ||      }||k  rJ  y )Nr   rn   r   皙?c           	          t        t        j                        dj                  | d      \  }}}t        j                  j                  |dz
  d d   z
  dz
  d d   z        S )N  r   )r   r   r   re   r   rf   rc   r~   )r   r   r   re   linalgnorm)r   r   r3   r+   r   r.   r   rE   s      r   errz4SVDSCommonTests.test_svds_parameter_tol.<locals>.errH  sg    Arwwqz4#';;CQ@HAr199>>2!A#'r'
?Aacg2gJ">??r    )-C6?g{Gz?r]   )g-q=r   r   )g+<绽|=r   )g-=g{Gz?rm   )r   arpackrp   )r   r   r   r'   r   r   zipre   )rE   rf   r   r   tols
accuraciesr   accuracyr9   r+   r   r.   r   s   `        @@@@r   test_svds_parameter_tolz'SVDSCommonTests.test_svds_parameter_tol2  s      ii##A&JJ1v!b&	Ga&1a aL	@ 	@
 !!4 7 02
 !z$++'>?MCHE8### @r    c                    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)Nr   rc   r   r   re   rf   rn   V瞯<缉ؗҬ<r$   r#   rm   Arrays are not equalra   r   r   r   r   re   ranger   r5   rg   rh   AssertionErrorr   )rE   r.   r   rf   r+   v0ares1ares2aidxv0bres1bres2brj   s                r   test_svd_v0zSVDSCommonTests.test_svd_v0W  s;    ii##A&JJ1v jjmQc$++1=Qc$++1=8CE#Jc
UK Aq!5! jjmQc$++1=Qc$++1=8CE#Jc
UK Aq!5! )]]>9& :99s   EE!c                 |   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)Nr   rc   r   re   rf   rn   r   r   r   r   ra   r   )rE   r.   r   rf   r+   r   r   r   r   r   rj   s              r   test_svd_rngzSVDSCommonTests.test_svd_rngy  s    ii##A&JJ1v Q$++15Q$++158CE#Jc
UK Aq!5! Q$++15Q$++158CE#Jc
UK Aq!5! )]]>9& :99s   D22D;c                 b   d}d}t         j                  j                  d      }|j                  ||f      }t        j                  |      }t        ||| j                  |      }t        ||| j                  |      }t        d      D ]  }t        ||   ||   dd        t        ||g|  y )	Nr   rc   i r   rn   r   r   r   )
r   r   r   copydeepcopyr   re   r   r   r5   )	rE   r.   r   rf   r+   rng_2r   r   r   s	            r   test_svd_rng_2zSVDSCommonTests.test_svd_rng_2  s    ii##F+JJ1vc" Q$++37Q$++598CE#Jc
UK Aq!5!r    c                    d}d}t         j                  j                  d      }t         j                  j                  d      }|j                  ||f      }t        ||| j                  |d      }t        ||| j                  |d      }t        ||g|ddi t        ||g|ddi d	}t        j                  t        |
      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r   r   iP r   )re   rf   r   r#   gH׊>r   ra   )
r   r   r   r   re   r5   rg   rh   r   r   )	rE   r.   r   rng1rng2r+   r   r   rj   s	            r   test_svd_rng_3zSVDSCommonTests.test_svd_rng_3  s     yy$$Q'yy$$V,KKA Q$++4FQ$++4FAq,5,t,Aq,5,t,(]]>9& :99s   CC&zignore:Exited postprocessingc           	         t        j                  t        j                  d            j                  t         j                        }d}t        ||      \  }}}d }| j                  dk(  rBd}t        j                  t        |      5  t        ||dd| j                  d       d d d        n| j                  d	k(  rAd
}t        j                  t        d      5  t        ||d| j                  d       d d d        nc| j                  dk(  rTd}t        j                  t         j                  j                  |      5  t        ||d| j                  d       d d d        t        ||| j                  |d      \  }}	}
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)Nr   rc   r   zARPACK error -1: No convergencera   rn   r   )ncvr   re   rf   rp      zExited at iterationr   r   z-k=1 singular triplets did not converge withinre   r   rf   g:0yE>r   r   )r   diagr   astypefloat64r   re   rg   rh   r   r   rt   ru   r   LinAlgErrorr5   r   r*   )rE   r+   r   r   r   r   r   rj   udsdvhds              r   test_svd_maxiterz SVDSCommonTests.test_svd_maxiter  s   
 GGBIIaL!((4a#1b;;("7G2'BQq!DKKQG CB[[H$ Gk1FGQ1T[[a@ HG[[I%EGryy44GDQ1T[[a@ E 1aW!LBAq"b#D1r
BFF1ID9sRVVBZd;r
BFF1ID9# CB HG EDs$   H*H6;I*H36H?I)TFr   r   r%   )r   )   r  )r   r   c                    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)Nr   rm   r   Trp   rq   ra   Fr   r   r   )r   r   r   r   re   rg   rt   ru   r   r   r*   )rE   r   r%   rf   r+   r   MNr   r   r   	respect_u
respect_vhr3   r2   r4   s                   r    test_svd_return_singular_vectorsz0SVDSCommonTests.test_svd_return_singular_vectors  s(   
 ii##A&JJu1a#1b KK94D!q&	![[I5T1q5
;;("k1CD%<aC%)[[c;B#B*CZI"&q!S.2kks#DKBC#BFF2Jq	:#B*;&;D[Z"&q!S.2kks#DKBC:%:#B*#BFF3K<"&q!S.2kks#DKBC~'r
BFF1I>#B*'sRVVBZ@1 ED4 e|!Q!%#7A&	"1a*.++3@Br
BFF1I6A&{"{"1a*.++3@Bz!zA&sRVVBZ8"1a*.++3@B>#BFF2Jq	:A&?#BFF3K< #a EDs   FOO)rc   rm   rn   )rn   ro   rn   )y      ?      ?r   rm   )r   r   rc   )rc   rm   rn   y       @      @)y      @       ro   rn   r   )rc   r   rm   rn   )r   r   rc   r   zignore:k >= N - 1zneeded to demonstrate #16725r+   real)FTlo_typec                     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       d}| j                  dk(  rd}| j                  d	k(  rBt        j                  t        d
      5  t        ||| j                  d      \  }}	}
d d d        nt        ||| j                  d      \  }}	}
t        ||	
|       y # 1 sw Y   xY w)Nz)`k` cannot be greater than `min(A.shape)`r   z"Only PROPACK supports complete SVDr   rc   #16725gLa㧝=gA:)>rp   rq   ra   r   r   r   )r   rs   r  r'   r   r%   rg   skipre   rt   ru   r   r5   )rE   r+   r   r  r   r  A2r#   r   r   r   s              r   test_svd_simplezSVDSCommonTests.test_svd_simple%  s9    JJqMBGGAJAACC!QZ s177|KKCD;;)#S\(9KK<=;;("4AQWW9I4IKK!;;)#D;;("k1CDAdkkqA1b ED B$++1=HAq"Aq!Q.	 EDs   .FFc                    | j                   }g d}d }|D ]  \  }}}t        j                  j                  d      j	                  ||      }t        |      }|dk(  rt        j                  |      }	n(t        j                  t        |j                              }	|dk(  rYt        j                  t        d      5   |t        |||	|d	            \  }
}} |t        |||	|d	            \  }}}d d d        n4 |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                   |      |                   t        j                  j                  d
      j	                  ||      }t        |      }|dvrd|	ini }| j                   dk(  r[t        j                  t        d      5   |t        ||fd|dd|      \  }
}} |t        ||fd|dd|      \  }}}d d d        n6 |t        ||fd|dd|      \  }
}} |t        ||fd|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 ]  \  }}t        j                  j                  d      }|j	                  ||      d|j	                  ||      z  z   j'                  |      }t        |      }| j                   dk(  rYt        j                  t        d      5   |t        ||d|d            \  }
}} |t        ||d|d            \  }}}d d d        n4 |t        ||d|d            \  }
}} |t        ||d|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                   |      |            |          y # 1 sw Y   xY w# 1 sw Y   BxY w# 1 sw Y   %xY w)N))r  r   rn   )r   r   ro   )r      r   c                 d    | \  }}}t        j                  |      }|d d |f   ||   ||d d f   fS rC   )r   r   )r_   Ur   VHjs        r   reorderz/SVDSCommonTests.test_svd_linop.<locals>.reorderR  s;    HAq"

1AQT7AaD"QT(**r    4   r   rp   rq   ra   r   r   iu  >   Nr   r   r   r   rc   Hz>g~jth?ip                ?r   )r$   )re   r   r   RandomStaterandnrA   r   r   r%   rg   rt   ru   r   r   r*   r&   r  complex	complex64r  )rE   re   nmksr)  r.   r   r   r+   Lr   U1s1VH1U2r3   VH2kwargsdtepsrf   s                       r   test_svd_linopzSVDSCommonTests.test_svd_linopJ  sL   	+
 GAq!		%%b)//15A&q)A"WWQZWWS\*!\\+5GH")$q!6q*Q"RKBC")$q!6q*Q"RKBC IH &d1aBv1&MNB%d1aBv1&MNBBFF2Jr
3B#BFF3K5BFF2rvvbggbk3'?@FF2rvvbggbk3'?@B 		%%d+11!Q7A&q)A $*1A#AdBZrF{{h&\\+5GH")$q! +@434+@8>+@ #AKBC")$q! +@434+@8>+@ #AKBC IH &d1a '<tF/0'<4:'< =B%d1a '<tF/0'<4:'< =B BFF2Jr
3BFBF+BFF3K5BFF2rvvbggbk3'?@FF2rvvbggbk3'?@B 3q!9q= #*D/BLL$3G!HIR))//5C1a2		!Q+??GGKA.q1A{{h.#\\+0BD*1$q!4>D!3M +NKBC*1$q!4>D!3M +NKBC	D D '.d1at:@a/I 'JB&-d1at:@a/I 'JB $BFF2Jr
E#B5#BFF3K3G#BFF2rvvbggbk3/G$H$&FF2rvvbggbk3/G$H),.+ "Ic  IH( IH2D Ds$   ;5X.7X;;5Y.X8	;Y	Y))r   r   )r   e   )r<  r   zignore:Exited at iterationrD   c           
         | j                   }t        j                  j                  d      }d}|\  }}t	        ||fd|      }|t
        u rdt	        ||fd|      z  }t        j                  |      }	|	ddxxx dt        j                  ddd      z  z  ccc t        |	df||f	      |z  }|j                  |      }t        ||d
|dd      \  }
}}d}t        |||
||d
|d       y )Nr   r   r   )r%   densityrf   r,        $@rc   )r%   r   r   )r   re   r   rf   Fg?)r   r-   r#   )re   r   r   r   r   r/  r   r   r
   r  r   r?   )rE   r%   rD   re   rf   r   r   r.   Ser   r   r   c_svds                 r   test_small_sigma_sparsez'SVDSCommonTests.test_small_sigma_sparse  s      ii##A&A1vs<G|1a&#3GGAGGAJ	!A#2q!,,,q!fQF+a/HHUO1D1M1baAq"DEMr    ))r  r   )r   r   )r   r  c           	      P   d}|\  }}t        j                  ||f|      }| j                  dk(  rBt        j                  t
        d      5  t        ||| j                  d      \  }}}	d d d        nt        ||| j                  d      \  }}}	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)Nrn   r[   rp   rq   ra   r   r   TFr   r~   rc   )r   r   re   rg   rt   ru   r   r5   r   rH   r   arraysorted	ones_like)rE   r%   rD   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[[a@1b ED Aq!<HAq"Aq!QG 	q	2771Q3<0HHVAYs^$q(LLO1 EDs   DD%)rn   ro   )ro   ro   r   )ro   rm   c           	         d}|\  }}t        j                  ||f|      }| j                  dk(  rt        j                  d       | 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(  rBt        j                  t        d	
      5  t        ||| j                  d      \  }}}	d d d        nt        ||| j                  d      \  }}}	t        ||	dd       t        |d       y # 1 sw Y   (xY w)Nrc   r[   r   zSee gh-21110.r  r   z'PROPACK failures unrelated to PR #16712rp   rq   ra   r   r   TFr   )r   r   re   rg   r   r/  r   r%   rt   ru   r   r5   r   )
rE   r%   rD   r   r.   r   r+   r&  r   r'  s
             r   test_zero_matrixz SVDSCommonTests.test_zero_matrix  s    1HHaV5)KK8#KK(KK8#(8QWW))KK!;;)#KKAB;;("k1CD1T[[a@1b ED Aq!<HAq" 	Aq!QG 	1a  EDs   D==E))   rN  )rN     )rO  rN  c           
         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d	      \  }}}t        j                  |dkD        }	t        |	|
       t        ||
|||d
dd       y )NtA
F)full_matricesr?  g      Y@ro   r   r   r  r   r]   )r#   r$   r-   )r   r   r   r  r   float32r   lenr&   r   re   r7   r   r?   )rE   r%   rD   rf   r+   r   r   r   rB  tr   r   s               r   test_small_sigmaz SVDSCommonTests.test_small_sigma  s     ii##I.JJu$$U+q.1bBJJAA3r7##++E22qSIIbM1T[[#1E1bFF1q5MQaAq"4cUKr    zignore:The problem sizec                    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                  d
      \  }}}t        |ddd       |j                  \  }}||k  r t        |j                         |z  ddd       t        ||j                  z  ddd       y )NrQ  ro   r   rc   r   r   r]   r"   r   rr   gh㈵>)r   r   r   hstackr  r   r   r%   r   r   r'   r   r   re   r   )rE   rD   rf   dimrI   rK   ymatnzr   r   r   sp_matsusssvhr.   r   s                     r   test_small_sigma2z!SVDSCommonTests.test_small_sigma2  sW    ii##I.JJd3h'(a#gJC(iiAjj_RXXa[#& s81b3$%!$S9b#lnn,adE 36ST[[aPBADs3yy1q5F,,.3QTL3?r    )=rP   rQ   rR   re   _A_empty_msg_A_dtype_msg_A_type_msg_A_ndim_msgr   rs   r   rF  r   _A_validation_inputsrg   markparametrizerk   rw   r   r   r   infnanr   r   r   r   r   r   r   intr   r   r   r   thread_unsafer   filterwarningsr   r   r   r  r  r  r  A1r!  r   r   r"  r;  SHAPESfloatr/  rS  rD  rJ  rM  rV  ra  rS   r    r   rU   rU      s   F ,L5L'K-K	RD	:|4	C:Sz*(	;ZV	y+&	r2hR)*	+ZE	G [[V%9:4 ;4
 [[WtTl39 49:6 [[S"<=4 >4	@ [[UR$89A :A
 [[URJ/A 0A [[W&=>E ?E [[[-8[[S%1+.? / 9?; [[TD!WRWWRs-C#DE; F; [[Y5I 6I
	F [[UL1U 2U [[[[S1a&)[[WtTl3D 4 * D [['B   D $D $D 'D'>" [['B   D'D'& [[[[ >?: @ :< [[[[U$<=[[W&>?== @ > ==F Y		:B
.l	KB[[[[ 3'E   G[[S2r(+[[S%1+.[[V]3[[[-8[[YY)9); </< 9 4 / ,G /4 [[T. T.l 2F[[ <=[[ >?[[Wf-[[Wugrzz&BCN D . @ >
N, [[[[W&>?[[Wug&67 8 @ * [[[[ 3'E   G[[W&FG[[Wug&67! 8 HG 
!> [[W&DE[[Wugrzz&BC[['B   DLD D F
L$ [[ 9:[[Wugrzz&BC@ D ;@r    rU   c                   T    e Zd Zej                  j                  ddeg      d        Zy)Test_SVDS_oncere   r   c                     d}t        j                  t        |      5  t        t	        j
                  d      d|d       d d d        y # 1 sw Y   y xY w)Nzsolver must be one ofra   rK  rm   r   rd   )rg   rh   r   r   r   r   )rE   re   rj   s      r   !test_svds_input_validation_solverz0Test_SVDS_once.test_svds_input_validation_solver7  s7    )]]:W5Af!< 655s   #A

AN)rP   rQ   rR   rg   rg  rh  rZ   rt  rS   r    r   rr  rr  6  s*    [[X'78= 9=r    rr  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   re   rE   s    r   setup_methodzTest_SVDS_ARPACK.setup_method@  	    r    r
  r~   r$  g      @5c                 d   t         j                  j                  d      }|j                  d      }d}|dv r.t        |||| j                  d      \  }}}t        |||||       y d}t        j                  t        |      5  t        |||| j                  d       d d d        y # 1 sw Y   y xY w)Nr   )r  r   rn   >   ro   r   )r   r
  re   rf   z#`ncv` must be an integer satisfyingra   )	r   r   r   r   re   r5   rg   rh   r   )	rE   r
  rf   r+   r   r   r   r   rj   s	            r    test_svds_input_validation_ncv_1z1Test_SVDS_ARPACK.test_svds_input_validation_ncv_1C  s    ii##A&JJv&=ADKKQGHAq" 1aB'<Gz9Q!T[[a@ :99s   B&&B/c                    d}t        j                  t        t        j                  |            5  t        t        j                  d      g | j                  d       d d d        d}t        j                  t        |      5  t        t        j                  d      d| j                  d       d d d        y # 1 sw Y   \xY w# 1 sw Y   y xY w)Nr   ra   r   r   )r
  re   rf   r   r\   r   r   s     r    test_svds_input_validation_ncv_2z1Test_SVDS_ARPACK.test_svds_input_validation_ncv_2R  s     -]]9BIIg,>?DKKQ? @ .]]:W5dkkqA 65	 @? 65r   N)rP   rQ   rR   rz  rg   rg  rh  listr   r~  r  rS   r    r   rv  rv  >  sI     [[UDr1$6#s$CDA EA	Br    rv  c                       e Zd Zd Zy)Test_SVDS_LOBPCGc                     d| _         y )Nrp   rx  ry  s    r   rz  zTest_SVDS_LOBPCG.setup_methodc  r{  r    N)rP   rQ   rR   rz  rS   r    r   r  r  a  s    r    r  c                       e Zd Zd Zd Zd Zy)Test_SVDS_PROPACKc                     d| _         y )Nr   rx  ry  s    r   rz  zTest_SVDS_PROPACK.setup_methodi  s	    r    c                 2    d}t        j                  |       y NzZPROPACK does not return orthonormal singular vectors associated with zero singular values.rg   xfailr   s     r   rJ  z)Test_SVDS_PROPACK.test_svd_LM_ones_matrixl  s    ; 	Wr    c                 2    d}t        j                  |       y r  r  r   s     r   test_svd_LM_zeros_matrixz*Test_SVDS_PROPACK.test_svd_LM_zeros_matrixs  s    ;Wr    N)rP   rQ   rR   rz  rJ  r  rS   r    r   r  r  g  s     r    r  )r   )r   FTr   r+  )r   TTr   r+  ) r   r  numpyr   numpy.testingr   r   r   rg   scipy.linalgr   r   scipy.sparser   r	   r
   r   scipy.sparse.linalgr   r   r   !scipy.sparse.linalg._eigen.arpackr   r   r5   r?   rA   rU   rr  rv  r  r  rS   r    r   <module>r     s    	   K K  ( E E @ $ A#  :?15GB 9=37&:R+^ +&r
@ r
@n= =B BF  r    