o
    5ήc                     @   s  d dl Z 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mZ ejdejdejdejdiZejejejejdZd	d
 Zdd Zdd Zg ZeD ]2Zdev rde rdejjgZndev rqe rqejjgZndev r{ejjgZng Zeejeed qUe eZe!d fddZ"dd Z#d+ddZ$ej%dej&eefej%deej%ddej%dddd  Z'ej%deej%dd!d"d# Z(ej%d$d%ej%dd&d'd( Z)ejjej* d)d* Z+dS ),    N)assert_allclose)raises)_svdp)
csr_matrix
csc_matrix
coo_matrixg-C6?g:0yE>singledoublecomplex8	complex16c                 C   s   t | j S )N)npdtypecharisupper)r    r   M/tmp/pip-target-vg8gfxp4/lib/python/scipy/sparse/linalg/tests/test_propack.pyis_complex_type   s   r   c                   C   s
   t jdkS )Nl        )sysmaxsizer   r   r   r   is_32bit      
r   c                   C   s
   dt jv S )Nwin32)r   platformr   r   r   r   
is_windows"   r   r   complexr   )marksc           	      K   s   t j|}t|r"dd|||  d d|||  |}ndd|||  |}d||jd| d k< | |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Mr   r   r   generate_matrix6   s   r-   c                 C   s>   t t|  j|}t|t| jd |jd ||d dS )z7Check that the first k rows of u1 and u2 are orthogonal   rtolatolN)absr   dotconjTr   eyeshape)u1u2r0   r1   Ar   r   r   assert_orthogonalC   s   (r;   皙?c                 C   s   t | }ttj| |||}	||	}
tjj|	dd\}}}t|
||||d\}}}}| dkrCt||d}t||d}t||}t	|d | |||d t
||||d t
|j|j||d d S )NF)full_matrices)kwhichirl_modetolSMr.   r   r/   )TOLSr-   r   asarraylinalgsvdr   upperrollr   r;   r5   )r&   r'   r%   r   r>   r@   r?   r(   rA   r,   Mspr8   sigma1vt1r9   sigma2vt2_r   r   r   
check_svdpI   s   
rO   ctor	precisionirl)TFr?   )LMrB   c           	   	   C   s   t jd t| }d\}}}|dkr:|s:d}tt|d t||| |||| W d    d S 1 s3w   Y  d S t rft|rfd}tt	|d t||| |||| W d    d S 1 s_w   Y  d S t||| |||| d S )Nr   )r         rB   z#`which`='SM' requires irl_mode=True)matchz1PROPACK complex-valued SVD methods not available )
r   r    seed
_dtype_mapassert_raises
ValueErrorrO   r   r   	TypeError)	rP   rQ   rR   r?   r   r&   r'   r>   messager   r   r   	test_svdpa   s   
""r]   )FTc                 C   s  ddddd|  }t jt}d}t j||}tj|dd}t|  }| dv r1|d	  	|}n| d
v r>|d  	|}d}	t
||	|dd\}
}}}| d
v rRdn|	}|
d d d |f }
|d |d d f }|d | }tt|
jd |
 j|
 |d tt|jd || j |d tj| \}}}|d d d |f }|d | }|d |d d f }|t| | }|
t| | }ttj|| d|d d S )NgC8
!?g&.>gMbP?r   zpropack_test_data.npzT)allow_pickle>   r
   r	   A_real>   r   r   	A_complex   r   )r@   random_state   r.   )r1   )ospathdirname__file__joinr   loadrX   itemr#   r   r   r6   r7   r4   r5   rE   rF   todensediagnorm)rQ   rR   r1   path_prefixrelative_pathfilenamedatar   r:   r>   usvhrN   sv_checku3s3vh3A3reconr   r   r   test_examplesv   s>   $$r{   shifts)Nir   r.   r   F   )r	   r
   c                 C   s   t jd d\}}t j||f}| d urH| dk s%|t|d |  |krHtt t||| d| dd W d    d S 1 sAw   Y  d S t||| d| dd d S )Nr   r}   r   r.   r   T)r|   kmaxr@   )r   r    rW   minpytestr   rZ   r   )r|   rQ   r&   r>   r:   r   r   r   test_shifts   s   &"r   c            
      C   sn   t jd d\} }t j| | ft j}t||d ddd\}}}}t||dddd\}}}	}t|| d S )Nr   r~   rB   T)r|   r?   r@       )r   r    rW   r#   r
   r   r   )
r&   r>   r:   r8   s1rK   rN   r9   s2rM   r   r   r   test_shifts_accuracy   s   r   )r<   ),rd   r   r   numpyr   numpy.testingr   r   rY   scipy.sparse.linalg._svdpr   scipy.sparser   r   r   float32float64	complex64
complex128rC   rX   r   r   r   _dtype_testingr   markskipr   slowappendparamtuplefloatr-   r;   rO   parametrizearrayr]   r{   r   xfailr   r   r   r   r   <module>   sd    

1