o
    &?e                     @   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   g/home/www/facesmatcher.com/pyenv/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   randomZRandomStater   Zrandastypereal)	constructornmfr	   Z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   (r3   皙?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)Zfull_matrices)kwhichirl_modetolSMr&   r   r'   )TOLSr%   r   Zasarraylinalgsvdr   upperZrollr   r3   r-   )r   r    r   r	   r5   r7   r6   r!   r8   r$   ZMspr0   Zsigma1vt1r1   Zsigma2vt2_r   r   r   
check_svdpE   s   
rA   ctorr	   irl)TFr6   )ZLMr9   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         r9   z#`which`='SM' requires irl_mode=True)matchz1PROPACK complex-valued SVD methods not available )	r   r   seedassert_raises
ValueErrorrA   r   r   	TypeError)rB   r	   rC   r6   r   r    r5   messager   r   r   	test_svdp]   s   
""rL   )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)Zallow_pickleZ	A_complexZA_real   r   )r7   Zrandom_state   r&   )r)   )r   float32float64	complex64
complex128ospathdirname__file__joinloadr   itemr   r   r   r.   r/   r,   r-   r;   r<   ZtodenseZdiagZnorm)r	   rC   r)   Zpath_prefixZrelative_pathfilenamedatar2   r5   usZvhr@   Zsv_checku3Zs3Zvh3ZA3Zreconr   r   r   test_examplesq   s:   $$r`   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   rb   r   r&   r   T)ra   Zkmaxr7   )r   r   rG   minpytestr   rI   r   )ra   r	   r   r5   r2   r   r   r   test_shifts   s   &"rg   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   rd   r9   T)ra   r6   r7       )r   r   rG   r   doubler   r   )
r   r5   r2   r0   s1r>   r@   r1   s2r?   r   r   r   test_shifts_accuracy   s   rl   )r4   )/rT   rf   r   numpyr   Znumpy.testingr   r   rH   Zscipy.sparse.linalg._svdpr   Zscipy.sparser   r   rP   rQ   rR   rS   r:   r   r   r   Z_dtypeskeysZdtype_flavourr   markskipr	   itemsizeZslowappendparam__name__tuplefloatr%   r3   rA   ZparametrizearrayrL   timeoutr`   rg   Zxfailrl   r   r   r   r   <module>   s`    




0