o
    Ö­j¿  ã                   @   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j$ej !de¡ej !d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_arrayÚ	csc_arrayg-Cëâ6?g:Œ0âŽyE>c                 C   s   t  | ¡jdkS )NÚc)ÚnpÚdtypeÚkind)r	   © r   úc/var/www/html/CropPilot/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 arrayéûÿÿÿé
   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|
||||tj d¡d�\}}}}| 	¡ dkrHt 
||d¡}t 
||d¡}t 
||¡}t|d |… |||d� t||||d� t|j|j||d� d S )NF)Úfull_matricesr   )ÚkÚwhichÚirl_modeÚtolr   ÚSMr!   r"   )ÚTOLSr    r   ÚasarrayÚlinalgÚsvdr   r   Údefault_rngÚ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   
ÿrC   Ú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Ú
ValueErrorrC   )rD   r	   rE   r2   r   r   r1   Úmessager   r   r   Ú	test_svdpM   s   
"ÿrN   )FTc                 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|||t j d
¡d�\}	}
}}t| ƒred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 )NgCÅ8
!?g•Ö&è.>gü©ñÒMbP?zpropack_test_data.npzT)Úallow_pickleÚ	A_complexÚA_realéÈ   r   )r3   r   é   r!   )r$   )r   Úfloat32Úfloat64Ú	complex64Ú
complex128ÚosÚpathÚdirnameÚ__file__ÚjoinÚloadr   Úitemr   r   r   r:   r   r)   r*   r'   r(   r8   r9   ÚtodenseÚdiagÚnorm)r	   rE   r$   Úpath_prefixÚrelative_pathÚfilenameÚdatar-   r1   ÚuÚsÚvhrB   Úsv_checkÚu3Ús3Úvh3ÚA3Úreconr   r   r   Útest_examples\   s>   üû€ü $$ro   Úshifts)Niöÿÿÿr   r!   r   éF   é   c              	   C   s¬   t j d¡}d\}}| ||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   ©rq   r   r!   r   T)rp   Úkmaxr3   r   )r   r   r:   ÚminÚpytestr   rL   r   )rp   r	   r   r   r1   r-   r   r   r   Útest_shiftsŽ   s   &"ÿrw   c                  C   sp   t j d¡} d\}}|  ||f¡ t j¡}t||d dd| d�\}}}}t||ddd| d�\}}	}
}t||	ƒ d S )Nr   rs   r5   T)rp   r2   r3   r   é    )r   r   r:   r   rU   r   r   )r   r   r1   r-   r+   Ús1r?   rB   r,   Ús2rA   r   r   r   Útest_shifts_accuracy›   s   r{   )r/   ))rX   rv   Únumpyr   Únumpy.testingr   r   rK   Úscipy.sparse.linalg._svdpr   Úscipy.sparser   r   rT   rU   rV   rW   r6   r   Ú_dtypesÚkeysÚdtype_flavourr   ÚmarkÚslowÚappendÚparamÚ__name__ÚtupleÚfloatr    r.   rC   ÚparametrizeÚarrayrN   Úxslowro   rw   Úxfailr{   r   r   r   r   Ú<module>   sR    ü

ÿ
ÿ
/