o
    Ö­jU1  ã                   @   sš   d dl Z d dl mZ d dlZd dlmZmZmZm	Z	m
Z
 d dlmZmZmZ ejejgZejejgZee ZG dd„ dƒZG dd„ dƒZG d	d
„ d
ƒZdS )é    N)Úraises)ÚluÚ	lu_factorÚlu_solveÚget_lapack_funcsÚsolve)Úassert_allcloseÚassert_array_equalÚassert_equalc                   @   s²   e Zd Zdd„ Zdd„ Zej dddgddgddgddgddgddgg d	¢g d
¢g d¢g	¡dd„ ƒZej dddgddgddgddgddgddgg¡dd„ ƒZ	dd„ Z
dd„ ZdS )ÚTestLUc                 C   ó   t j d¡| _d S ©Nì   n
ª@h/ ©ÚnpÚrandomÚdefault_rngÚrng©Úself© r   ú^/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp_lu.pyÚsetup_method   ó   zTestLU.setup_methodc              	   C   s¸  t  g d¢g d¢g d¢g¡}t|ƒ\}}}t  g d¢g d¢g d¢g¡}t|t  t  d¡¡ƒ t|t j|dd�t  d¡ ƒ t|t  |¡ƒ t  g d¢g d¢g d	¢g¡}t|ƒ\}}}t  g d
¢g d¢g d¢g¡}t|t  t  d¡¡ƒ t|t j|dd�t  d¡ ƒ t|t  |¡ƒ t  g d¢g d¢g d¢g¡}t|ƒ\}}}t|t  g d¢g d¢g d¢g¡ƒ t|t  g d¢g d¢g d¢g¡ƒ t|t  g d¢g d¢g d¢g¡ddd� t  g d¢g d¢g d¢g¡}t|ƒ\}}}t|t  g d¢g d¢g d¢g¡ƒ t|t  g d¢g d¢g d¢g¡ƒ t|t  g d¢g d¢g d¢g¡d ddd� t  g d¢g d¢g d¢g¡}t|ƒ\}}}t|t  g d¢g d¢g d¢g¡ƒ t|t  g d¢g d¢g d ¢g¡ƒ t|t  g d¢g d!¢g d"¢g¡ddd� t  g d¢g d¢g d¢g¡d }	t|	ƒ\}}}t|t  g d¢g d¢g d¢g¡ƒ t|t  g d¢g d¢g d ¢g¡ƒ t|t  g d¢g d!¢g d"¢g¡d ddd� t  g d¢g d¢g d¢g d#¢g¡}
t|
ƒ\}}}t|t  d$¡g d%¢d&d&…f ƒ t|t  g d'¢g d(¢g d)¢g d*¢g¡ƒ t|t  g d#¢g d+¢g d,¢g¡ƒ t  g d¢g d¢g d¢g d#¢g¡d }t|ƒ\}}}t|t  d$¡g d%¢d&d&…f ƒ t|t  g d'¢g d(¢g d)¢g d*¢g¡ƒ t|t  g d#¢g d+¢g d,¢g¡d ƒ d&S )-z*Tests from old fortran based lu test suite©é   é   é   ©r   é   é   )ç       @g      @ç      @)ç      à?ç      à¿ç        )r#   ç      ð?r%   r   éÿÿÿÿ)Úk©r   ù              @r    )r!   r*   r"   )r#   y       @      Àr%   ©é   r   r    ©é   é   é	   )r   r   r   )r   r   r   ©r   r   r   )g’$I’$IÂ?r   r   )g’$I’$Iâ?r#   r   )r   gÛ¶mÛ¶më?gÛ¶mÛ¶mû?©r   r   r   r%   g›+¡†›„=)ÚrtolÚatol©ù              ð?y               @y              @©y              @r*   y              @©y              @y               @y              "@r6   ©r   r   r   r,   ©r   r    r.   r/   ©r0   é
   é   r=   )gÇqÇq¼?r   r   )grÇqÇá?r#   r   )r   gÇqÇqì?g«ªªªªªú?gUUUUUU@)r   r   r$   r   ©r<   r=   r=   r,   )r   r   r   r   N)r&   r   r   )gš™™™™™¹?r   r   )gffffffæ?r$   r   )gš™™™™™Ù?g      Ð?r#   )r   gš™™™™™é?gÍÌÌÌÌÌü?)r   r   g      ø?)r   Úarrayr   r   Úrot90ÚeyeÚtrilÚtriu)r   ÚaÚpÚlÚuÚ	result_luÚbÚcbÚhrectÚchrectÚvrectÚcvrectr   r   r   Útest_old_lu_smoke_tests   sŒ   ""ÿ"""ÿ""ÿÿ ""ÿÿÿ" ÿþ& ýþ
þzTestLU.test_old_lu_smoke_testsÚshaper   r,   é   )r   r   r0   r0   )r   r   é   r   )r   r   é   r.   c                 C   sž   | j jdd|d�}t|ƒ\}}}t||| | ƒ t|dd�\}}t||| ƒ | j jdd|d�d }|| j jdd|d�7 }t|dd�\}}t||| ƒ d S )	Nç      $Àç      $@©ÚsizeT©Ú	permute_lr6   iöÿÿÿr<   ©r   Úuniformr   r   )r   rP   rD   rE   rF   rG   ÚplrI   r   r   r   Ú"test_simple_lu_shapes_real_complexS   s   z)TestLU.test_simple_lu_shapes_real_complexc                 C   sB   | j jdd|d�}t|dd�\}}}t|||d d …f | ƒ d S )NrT   rU   rV   T©Ú	p_indicesrZ   )r   rP   rD   rE   rF   rG   r   r   r   Ú-test_simple_lu_shapes_real_complex_2d_indicesb   s   z4TestLU.test_simple_lu_shapes_real_complex_2d_indicesc                 C   sN  | j jg d¢tjd�}t|dd�\}}}t|tjdtd�ƒ t|tjdtjd�ƒ t||ƒ | j jg d¢tjd�}t|ƒ\}}}t|tjdtjd�ƒ t|tjdtjd�ƒ t||ƒ t|dd�\}}t|tjdtjd�ƒ t||ƒ | j jg d¢tjd�t 	d¡ }t|ƒ\}}}t|tjdtj	d�ƒ t|tjdtj	d�ƒ t||ƒ d S )	N)r,   r   r   r   ©ÚdtypeTr^   )r,   r   r   ©rP   rb   rX   r6   )
r   r   r   Úfloat32r   r   ÚzerosÚintÚonesÚ	complex64©r   rD   rE   rF   rG   r\   r   r   r   Útest_1by1_input_outputi   s$   


 zTestLU.test_1by1_input_outputc                 C   sL  t  ddg¡}t|ƒ\}}}t|t jdt jd�ƒ t|t jdt jd�ƒ t|t jdt jd�ƒ t jddgt jd�}t|ƒ\}}}t|t jdt jd�ƒ t|t jdt jd�ƒ t|t jdt jd�ƒ t jddgt jd�}t|ƒ\}}}t|t jdt jd�ƒ t|t jdt jd�ƒ t|t jdt jd�ƒ t|dd	�\}}}t|t jd
td�ƒ t|t jdt jd�ƒ t|t jdt jd�ƒ t|dd�\}}t|t jdt jd�ƒ t|t jdt jd�ƒ t jg d¢t jd�}t|ƒ\}}}t|t jdt jd�ƒ t|t jdt jd�ƒ t|t jdt jd�ƒ t  g d¢¡}t|ƒ\}}}t|t jdd�ƒ t|t jdd�ƒ t|t jdd�ƒ t	t
dd�� tt  g ¡ƒ W d   ƒ n	1 �sNw   Y  t  g g¡}t|ƒ\}}}t|t jdd�ƒ t|t jdd�ƒ t|t jdd�ƒ t  g gg¡}t|ƒ\}}}t|t jdd�ƒ t|t jdd�ƒ t|t jdd�ƒ d S )Nr   ©r   r   rc   r   ra   )r   r   )r   r   Tr^   ©r   rX   )r   r   r   )r   r   r   r2   )rP   zat least two-dimensional)Úmatch)r   r   r1   )r   r   r   )r   Úemptyr   r   Úfloat64Úfloat16rd   rh   rf   Úassert_raisesÚ
ValueErrorr?   ri   r   r   r   Útest_empty_edge_cases€   sZ   ÿzTestLU.test_empty_edge_casesN)Ú__name__Ú
__module__Ú__qualname__r   rO   ÚpytestÚmarkÚparametrizer]   r`   rj   rs   r   r   r   r   r      s     Aþ
 ÿ
r   c                   @   s°   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zej dg d¢¡ej dg d¢¡ej de¡dd„ ƒƒƒZej dg d¢¡dd„ ƒZdS ) ÚTestLUFactorc                 C   sB  t j d¡| _t  g d¢g d¢g d¢g¡| _t  g d¢g d¢g d¢g¡| _t  g d¢g d¢g d¢g¡| _t  g d¢g d¢g d	¢g¡| _t  g d
¢g d¢g d¢g¡| _	t  g d
¢g d¢g d¢g¡d | _
t  g d¢g d¢g d¢g d¢g¡| _dt  g d¢g d¢g d¢g d¢g¡ | _| j d¡| _| j d¡d| j d¡  | _d S )Nr   r   r   r)   r+   r-   r5   r7   r8   r9   r:   r;   r6   r>   )é   é(   )r   r   r   r   r?   rD   ÚcarI   rJ   rK   rL   rM   rN   ÚmedÚcmedr   r   r   r   r   ·   s&   ÿÿ$
ý"zTestLUFactor.setup_methodc                 C   sD   t |ƒ\}}td|fƒ\}||dd�\}}}t||ƒ t||ƒ d S )N)ÚgetrfF)Úoverwrite_a)r   r   r   )r   ÚdataÚl_and_u1Úpiv1r€   Úl_and_u2Úpiv2Ú_r   r   r   Ú_test_common_lu_factorÐ   s
   
z#TestLUFactor._test_common_lu_factorc                 C   ó   |   | j¡ d S ©N)rˆ   rK   r   r   r   r   Útest_hrectangularÙ   ó   zTestLUFactor.test_hrectangularc                 C   r‰   rŠ   )rˆ   rM   r   r   r   r   Útest_vrectangularÜ   rŒ   zTestLUFactor.test_vrectangularc                 C   r‰   rŠ   )rˆ   rL   r   r   r   r   Útest_hrectangular_complexß   rŒ   z&TestLUFactor.test_hrectangular_complexc                 C   r‰   rŠ   )rˆ   rN   r   r   r   r   Útest_vrectangular_complexâ   rŒ   z&TestLUFactor.test_vrectangular_complexc                 C   ó   |   | j¡ dS ©z:Check lu decomposition on medium size, rectangular matrix.N)rˆ   r~   r   r   r   r   Útest_medium1æ   ó   zTestLUFactor.test_medium1c                 C   r�   r‘   )rˆ   r   r   r   r   r   Útest_medium1_complexê   r“   z!TestLUFactor.test_medium1_complexc                 C   s,   t | jdd�\}}}t|| | | jƒ d S )NF©Úcheck_finite)r   rD   r   )r   rE   rF   rG   r   r   r   Útest_check_finiteî   s   zTestLUFactor.test_check_finitec                 C   sd   dD ]-}t jddgddgg|d�}t|ƒ\}}t|t  ddgddgg¡ƒ t|t  ddg¡ƒ qd S )N©ÚCÚFr   r   r   r&   ©Úorder)r   r?   r   r   r	   )r   rœ   ÚAÚLUÚPr   r   r   Útest_simple_knownò   s   üzTestLUFactor.test_simple_knownÚm)r   r   r   Únrb   c                 C   sb   t ||ƒ}tj|||d�}t|ƒ\}}t|j||fƒ t|j|ƒ t|j|fƒ t|jtjƒ d S )Nra   )Úminr   rA   r   r
   rP   rb   Úint32)r   r¡   r¢   rb   r(   rD   r   rE   r   r   r   Útest_shape_dtypeú   s   
zTestLUFactor.test_shape_dtype)r¡   r¢   )rk   )r   r   )r   r   c                 C   sB   t  ||f¡}t|ƒ\}}t|t  ||f¡ƒ t|t  d¡ƒ d S )Nr   )r   re   r   r   rn   Úarange)r   r¡   r¢   rD   r   rE   r   r   r   Ú
test_empty  s   zTestLUFactor.test_emptyN)rt   ru   rv   r   rˆ   r‹   r�   rŽ   r�   r’   r”   r—   r    rw   rx   ry   ÚDTYPESr¥   r§   r   r   r   r   rz   ¶   s"    	
rz   c                	   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zej de	e
ejeejg¡ej de	e
ejeejg¡d	d
„ ƒƒZdS )ÚTestLUSolvec                 C   r   r   r   r   r   r   r   r     r   zTestLUSolve.setup_methodc                 C   sZ   | j  d¡}| j  d¡}dD ]}tj||d�}t||ƒ}t|ƒ}t||ƒ}t||ƒ qd S )N©r<   r<   ©r<   r˜   r›   )r   r   r   r?   r   r   r   r   )r   Úa0rI   rœ   rD   Úx1Úlu_aÚx2r   r   r   Útest_lu  s   

ûzTestLUSolve.test_luc                 C   sJ   | j  d¡}| j  d¡}t||ƒ}t|dd�}t||dd�}t||ƒ d S )Nrª   r«   Fr•   )r   r   r   r   r   r   )r   rD   rI   r­   r®   r¯   r   r   r   r—     s   
zTestLUSolve.test_check_finiteÚdtÚdt_bc                 C   s®   t jd|d�t  g ¡f}t jg |d�}t||ƒ}|jdksJ ‚tt jd|d�ddgft jd|d�ƒ}|j|jks:J ‚t jd|d�}t||ƒ}|jdksMJ ‚|j|jksUJ ‚d S )Nrk   ra   rl   r   r   r   )	r   rn   r?   Úasarrayr   rP   rA   rg   rb   )r   r±   r²   Ú
lu_and_pivrI   Úxr¡   r   r   r   r§   &  s   
&
zTestLUSolve.test_emptyN)rt   ru   rv   r   r°   r—   rw   rx   ry   rf   Úfloatr   rd   Úcomplexrh   r§   r   r   r   r   r©     s    r©   )rw   r   rq   Únumpyr   Úscipy.linalgr   r   r   r   r   Únumpy.testingr   r	   r
   rd   ro   ÚREAL_DTYPESrh   Ú
complex128ÚCOMPLEX_DTYPESr¨   r   rz   r©   r   r   r   r   Ú<module>   s     )Y