o
    tBh                     @   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s8ejd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g ZeD ]%Zdev rle rlejjgZndev rvejjgZng Ze ej!ee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 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_matrixUSE_PROPACKzUSE_PROPACK not setg-C6?g:0yE>singledoublecomplex8	complex16c                 C   s   t | j S )N)npdtypecharisupper)r    r   }/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/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!   s   
r   complex)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_matrix2   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   (r8   皙?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   r8   r2   )r#   r$   r"   r   r;   r=   r<   r%   r>   r)   Mspr5   sigma1vt1r6   sigma2vt2_r   r   r   
check_svdpE   s   
rL   ctor	precisionirl)TFr<   )LMr?   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         r?   z#`which`='SM' requires irl_mode=True)matchz1PROPACK complex-valued SVD methods not available )
r   r   seed
_dtype_mapassert_raises
ValueErrorrL   r   r   	TypeError)	rM   rN   rO   r<   r   r#   r$   r;   messager   r   r   	test_svdp]   s   
""rZ   )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 )NgiUMu?g&.>gMbP?r	   zpropack_test_data.npzT)allow_pickle>   r   r
   A_real>   r   r   	A_complex   r   )r=   random_state   r+   )r.   )ospathdirname__file__joinr   loadrU   itemr    r   r   r3   r4   r1   r2   rB   rC   todensediagnorm)rN   rO   r.   path_prefixrelative_pathfilenamedatar   r7   r;   usvhrK   sv_checku3s3vh3A3reconr   r   r   test_examplesr   s>   $$rx   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   rz   r   r+   r   T)ry   kmaxr=   )r   r   rT   minpytestr   rW   r   )ry   rN   r#   r;   r7   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{   r?   T)ry   r<   r=       )r   r   rT   r    r   r   r   )
r#   r;   r7   r5   s1rH   rK   r6   s2rJ   r   r   r   test_shifts_accuracy   s   r   )r9   ).ra   r~   r   numpyr   numpy.testingr   r   rV   scipy.sparse.linalg._svdpr   scipy.sparser   r   r   environgetmarkskip
pytestmarkfloat32float64	complex64
complex128r@   rU   r   r   _dtype_testingr   r   slowappendparamtuplefloatr*   r8   rL   parametrizearrayrZ   rx   r   xfailr   r   r   r   r   <module>   sb    

1