
    tKg                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZmZ ej                  dej                  dej                  dej                   diZd Zg Zej)                         D ]Q  Zg Z ee      rej.                  j0                  gZej3                   ej4                  eeej6                  	             S  ee      Zed fd
Zd ZddZ ej.                  jC                  dejD                  eef      ej.                  jC                  de      ej.                  jC                  dd      ej.                  jC                  dd      d                             Z#ej.                  jH                  ej.                  jC                  de      ej.                  jC                  dd      ej.                  jK                  d      d                             Z&ej.                  jC                  dd      ej.                  jC                  dedd       d               Z'ej.                  j0                  ej.                  jQ                         d               Z)y)    N)assert_allclose)raises)_svdp)
csr_matrix
csc_matrixg-C6?g:0yE>c                 F    t        j                  |       j                  dk(  S )Nc)npdtypekind)r   s    j/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/sparse/linalg/tests/test_propack.pyis_complex_typer      s    88E?3&&    )marksidc                 h   t         j                  j                  |      }t        |      rAdd|j	                  ||      z  z   dz
  d|j	                  ||      z  z   j                  |      }n'dd|j	                  ||      z  z   j                  |      }d||j                  d|z  dz
  kD  <    | |fi |S )zGenerate a random sparse matrix
   y              @y              $@r      )r
   randomRandomStater   randastypereal)	constructornmfr   rseedkwargsrngMs	            r   generate_matrixr#   "   s     ))


&Cu2A&&#((1a.()*0&- 	
 "sxx1~%%--e4AaffrAvzq#F##r   c                     t        t        j                  | j                         j                  |            }t        |t        j                  | j                  d   |j                  d         ||       y)z7Check that the first k rows of u1 and u2 are orthogonal   rtolatolN)absr
   dotconjTr   eyeshape)u1u2r'   r(   As        r   assert_orthogonalr2   /   sJ    BFF2779;;#$AArvvbhhqk288A;7dNr   c                 
   t         |   }t        t        j                  | |||      }	 ||	      }
t        j                  j                  |	d      \  }}}t        |
||||      \  }}}}|j                         dk(  rDt        j                  ||d      }t        j                  ||d      }t        j                  ||      }t        |d | |||       t        ||||       t        |j                  |j                  ||       y )NF)full_matrices)kwhichirl_modetolSMr%   r   r&   )TOLSr#   r
   asarraylinalgsvdr   upperrollr   r2   r,   )r   r   r   r   r5   r7   r6   r   r8   r"   Mspr/   sigma1vt1r0   sigma2vt2_s                     r   
check_svdprF   5   s    
u+C

Aq!U3A
a.CiimmAUm;OBsaux#&(BQ {{}WWRAggc1a # F2AJSs; b"3S1ceeSUU37r   ctorr   irl)TFr6   )LMr9   c           
          t         j                  j                  d       d\  }}}|dk(  r0|s.d}t        t        |      5  t        ||| ||||       d d d        y t        ||| ||||       y # 1 sw Y   y xY w)Nr   )r         r9   z#`which`='SM' requires irl_mode=True)match)r
   r   seedassert_raises
ValueErrorrF   )rG   r   rH   r6   r   r   r5   messages           r   	test_svdprR   M   sr    
 IINN1GAq!}S7:W5q!T5!S%8 65 	1auae4 65s    A--A6)FTx   c                    t         j                  dt         j                  dt         j                  dt         j                  di|    }t
        j                  j                  t              }d}t
        j                  j                  ||      }t        j                  |d      5 }t        |       r#|d   j                         j                  |       }n"|d   j                         j                  |       }d d d        d	}t        ||d
      \  }	}
}}t        |       rdn|}|	d d d |f   }	|d |d d f   }|
d | }
t        t        j                   |	j"                  d         |	j%                         j&                  |	z  |       t        t        j                   |j"                  d
         ||j%                         j&                  z  |       t         j(                  j+                  |j-                               \  }}}|d d d |f   }|d | }|d |d d f   }|t        j.                  |      z  |z  }|	t        j.                  |
      z  |z  }t        t         j(                  j1                  ||z
        d
|       y # 1 sw Y   xY w)NgC8
!?g&.>gMbP?zpropack_test_data.npzT)allow_pickle	A_complexA_real   r   )r7   random_state   r%   )r(   )r
   float32float64	complex64
complex128ospathdirname__file__joinloadr   itemr   r   r   r-   r.   r+   r,   r<   r=   todensediagnorm)r   rH   r(   path_prefixrelative_pathfilenamedatar1   r5   usvhrE   sv_checku3s3vh3A3recons                      r   test_examplesrv   \   s    	

F


D
d
t	
 D ''//(+K ,Mww||K7H		-5![!&&(//6AX##%,,U3A	 
. 	A1s;KAq"a %U+rH	!YhY,A	IXIqL	B	)8A BFF1771:&

QTBBFF288A;'bggikk)9E ))--		,KBC	AyyL	B	IXB
ixil
C	bggbk	C	B
NREBIINN2:.=9 
.	-s   "AI>>Jshifts)Nir   r%   r   F      c                 p   t         j                  j                  d       d\  }}t         j                  j                  ||f      }| P| dk  s|t        |dz
  | z
  |      kD  r6t	        j
                  t              5  t        ||| d|z  d       d d d        y t        ||| d|z  d       y # 1 sw Y   y xY w)Nr   rx   r   r%   r   T)rw   kmaxr7   )r
   r   rN   minpytestr   rP   r   )rw   r   r   r5   r1   s        r   test_shiftsr      s     IINN1DAq
		!Q A
C!F
A4F0F]]:&!QvAaC$? '& 	a6!d; '&s   ;B,,B5c                  4   t         j                  j                  d       d\  } }t         j                  j                  | | f      j                  t         j                        }t        ||d dd      \  }}}}t        ||ddd      \  }}}	}t        ||       y )Nr   r{   r9   T)rw   r6   r7       )r
   r   rN   r   r\   r   r   )
r   r5   r1   r/   s1rB   rE   r0   s2rD   s
             r   test_shifts_accuracyr      s     IINN1DAq
		!Q ''

3A1aD4HNBC1a$FNBC Br   )g?)*r_   r~   numpyr
   numpy.testingr   r   rO   scipy.sparse.linalg._svdpr   scipy.sparser   r   r[   r\   r]   r^   r:   r   _dtypeskeysdtype_flavourr   markslowappendparam__name__tuplefloatr#   r2   rF   parametrizearrayrR   xslowtimeoutrv   r   xfailr    r   r   <module>r      s&   	   ) * + /
 JJJJLL$MM4	' YY[ME}%!!"NN<6<<U#0#9#9; <	 ! .  q
$O80 "((J
!CD'*.,/5 0 / + E5 '*.S,>  / + ,>^ #<='"1+.< / ><   r   