o
    g                     @   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 ejdejdejdejdiZdd	 Zd
d Zdd Zg Ze D ]3Zg Zeerqe r[ejjgZne rleejdkrlejjgZnejjgZeej eeej!d qJe"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   d/home/ubuntu/cloudmapper/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      
r   c                   C   s
   dt jv S )Nwin32)r   platformr   r   r   r   
is_windows   r   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_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   (r6   皙?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   r6   r0   )r!   r"   r    r	   r9   r;   r:   r#   r<   r'   Mspr3   sigma1vt1r4   sigma2vt2_r   r   r   
check_svdpE   s   
rJ   ctorr	   irl)TFr:   )LMr=   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 rbt|rbd}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assert_raises
ValueErrorrJ   r   r   	TypeError)rK   r	   rL   r:   r!   r"   r9   messager   r   r   	test_svdp]   s   
""rV   )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| r4|d  | }n	|d  | }d	}t|||d
d\}	}
}}t| rQd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   )r;   random_state   r)   )r,   )r   float32float64	complex64
complex128ospathdirname__file__joinloadr   itemr   r   r   r1   r2   r/   r0   r@   rA   todensediagnorm)r	   rL   r,   path_prefixrelative_pathfilenamedatar5   r9   usvhrI   sv_checku3s3vh3A3reconr   r   r   test_examplesq   s:   $$ry   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   r{   r   r)   r   T)rz   kmaxr;   )r   r   rQ   minpytestr   rS   r   )rz   r	   r!   r9   r5   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)rz   r:   r;       )r   r   rQ   r   doubler   r   )
r!   r9   r5   r3   s1rF   rI   r4   s2rH   r   r   r   test_shifts_accuracy   s   r   )r7   )/rb   r   r   numpyr   numpy.testingr   r   rR   scipy.sparse.linalg._svdpr   scipy.sparser   r   r^   r_   r`   ra   r>   r   r   r   _dtypeskeysdtype_flavourr   markskipr	   itemsizeslowappendparam__name__tuplefloatr(   r6   rJ   parametrizearrayrV   timeoutry   r   xfailr   r   r   r   r   <module>   s`    




0