o
    5Bi                     @   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 ]Zg ZeerKe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   f/var/www/html/Trade-python/venv/lib/python3.10/site-packages/scipy/sparse/linalg/tests/test_propack.pyis_complex_type   s   r   )marksidc           	      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_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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.   r(   )r   r   r   r	   r1   r3   r2   r   r4   r   Mspr+   sigma1vt1r,   sigma2vt2_r   r   r   
check_svdp5   s   
rB   ctorr	   irl)TFr2   )LMr5   c              	   C   s   t jd d\}}}|dkr6|s6d}tt|d t||| |||| W d    d S 1 s/w   Y  d S t||| |||| d S )Nr   )r         r5   z#`which`='SM' requires irl_mode=True)match)r   r   seedassert_raises
ValueErrorrB   )rC   r	   rD   r2   r   r   r1   messager   r   r   	test_svdpM   s   
"rM   )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| r5|d  | }n	|d  | }W d    n1 sHw   Y  d	}t|||d
d\}	}
}}t| rad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)allow_pickle	A_complexA_real   r   )r3   random_state   r!   )r$   )r   float32float64	complex64
complex128ospathdirname__file__joinloadr   itemr   r   r   r)   r*   r'   r(   r8   r9   todensediagnorm)r	   rD   r$   path_prefixrelative_pathfilenamedatar-   r1   usvhrA   sv_checku3s3vh3A3reconr   r   r   test_examples\   s>   $$rp   shifts)Nir   r!   r   F      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   rr   r   r!   r   T)rq   kmaxr3   )r   r   rI   minpytestr   rK   r   )rq   r	   r   r1   r-   r   r   r   test_shifts   s   &"rx   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   rt   r5   T)rq   r2   r3       )r   r   rI   r   rV   r   r   )
r   r1   r-   r+   s1r>   rA   r,   s2r@   r   r   r   test_shifts_accuracy   s   r|   )r/   ))rY   rw   numpyr   numpy.testingr   r   rJ   scipy.sparse.linalg._svdpr   scipy.sparser   r   rU   rV   rW   rX   r6   r   _dtypeskeysdtype_flavourr   markslowappendparam__name__tuplefloatr    r.   rB   parametrizearrayrM   timeoutrp   rx   xfailr|   r   r   r   r   <module>   sR    




/