a
    h                     @   s  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d	 Zg Ze D ]2Zg ZeerejjgZeejeeejd
 q|e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ej$ddd Z%ej!ddej!dedd  d!d" Z&ejjej' d#d$ Z(dS )&    N)assert_allclose)raises)_svdp)
csr_matrix
csc_matrixg-C6?g:0yE>c                 C   s   t | jdkS )Nc)npdtypekind)r	    r   b/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/sparse/linalg/tests/test_propack.pyis_complex_type   s    r   )marksidc           	      K   s   t j|}t|rDdd|||  d d|||  |}ndd|||  |}d||jd| d k< | |fi |S )zGenerate a random sparse matrix
   y              @y              $@r      )r   randomZRandomStater   Zrandastypereal)	constructornmfr	   ZrseedkwargsrngMr   r   r   generate_matrix"   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u2r    r!   Ar   r   r   assert_orthogonal/   s    r+   皙?c                 C   s   t | }ttj| |||}	||	}
tjj|	dd\}}}t|
||||d\}}}}| dkrt||d}t||d}t||}t	|d | |||d t
||||d t
|j|j||d d S )NF)Zfull_matrices)kwhichirl_modetolSMr   r   r   )TOLSr   r   Zasarraylinalgsvdr   upperZrollr   r+   r%   )r   r   r   r	   r-   r/   r.   r   r0   r   ZMspr(   Zsigma1vt1r)   Zsigma2vt2_r   r   r   
check_svdp5   s    
r9   ctorr	   irl)TFr.   )ZLMr1   c              	   C   s   t jd d\}}}|dkrh|shd}tt|d$ t||| |||| W d    q|1 s\0    Y  nt||| |||| d S )Nr   )r         r1   z#`which`='SM' requires irl_mode=True)match)r   r   seedassert_raises
ValueErrorr9   )r:   r	   r;   r.   r   r   r-   messager   r   r   	test_svdpM   s    
4rC   )FTx   c                 C   s  t jdt jdt jdt jdi|  }tjt}d}tj	||}t j
|dd>}t| rj|d  | }n|d  | }W d    n1 s0    Y  d	}t|||d
d\}	}
}}t| rd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?zpropack_test_data.npzT)Zallow_pickleZ	A_complexZA_real   r   )r/   Zrandom_state   r   )r!   )r   float32float64	complex64
complex128ospathdirname__file__joinloadr   itemr   r   r   r&   r'   r$   r%   r3   r4   ZtodenseZdiagZnorm)r	   r;   r!   Zpath_prefixrelative_pathfilenamedatar*   r-   usZvhr8   Zsv_checku3Zs3Zvh3ZA3Zreconr   r   r   test_examples\   s:    0$$rX   shifts)Nir   r   r   F      c                 C   s   t jd d\}}t j||f}| d ur| dk sJ|t|d |  |krtt& t||| d| dd W d    q1 s0    Y  nt||| d| dd d S )Nr   rZ   r   r   r   T)rY   Zkmaxr/   )r   r   r?   minpytestr   rA   r   )rY   r	   r   r-   r*   r   r   r   test_shifts   s    &6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\   r1   T)rY   r.   r/       )r   r   r?   r   rH   r   r   )
r   r-   r*   r(   s1r6   r8   r)   s2r7   r   r   r   test_shifts_accuracy   s    rc   )r,   ))rK   r^   numpyr   Znumpy.testingr   r   r@   Zscipy.sparse.linalg._svdpr   Zscipy.sparser   r   rG   rH   rI   rJ   r2   r   Z_dtypeskeysZdtype_flavourr   markZslowappendparam__name__tuplefloatr   r+   r9   ZparametrizearrayrC   timeoutrX   r_   Zxfailrc   r   r   r   r   <module>   sP   




/