o
    Ö­jÏ*  ã                   @   sÞ   d dl Z d dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ e dd	gd
dgddgg¡Ze g d¢¡ZG dd„ dƒZG dd„ dƒZG dd„ deeƒZG dd„ deƒZG dd„ dƒZdS )é    N)Úlstsq)Úassert_allcloseÚassert_equalÚassert_)ÚrandÚ
coo_matrix)Úaslinearoperator)Ú
lsq_linear)ÚBoundsgÙÎ÷SãÅ?gÉv¾Ÿ/­¿gJ+‡©¿gX9´Èv¾Ï¿gsh‘í|?Å¿gÙÎ÷Sã¥«?)g‹lçû©ñ²?gÓMbX9ð?gP�—nƒØ¿c                   @   sd   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
ejjdd„ ƒZdd„ ZdS )Ú	BaseMixinc                 C   s   t j d¡| _d S )Nr   )ÚnpÚrandomÚRandomStateÚrnd)Úself© r   úa/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_lsq_linear.pyÚsetup_method   s   zBaseMixin.setup_methodc                 C   sN   | j D ]!}ttt| j|d�}t|jtttdd�d ƒ t|j|jd ƒ qd S )N©ÚmethodÚ
lsq_solveréÿÿÿÿ©Úrcondr   )	Úlsq_solversr	   ÚAÚbr   r   Úxr   Úunbounded_sol)r   r   Úresr   r   r   Útest_dense_no_bounds   s
   
ýzBaseMixin.test_dense_no_boundsc                 C   sd  t  ddg¡}t  ddg¡}tttdd�d }| jD ]#}ttt||f| j|d�}t|j	tttdd�d ƒ t|j
d |ƒ qt  dt j g¡}| jD ]$}ttt|t jf| j|d�}t|j	t  ddg¡d	d
� t|j
d |ƒ qJt  ddg¡}| jD ]$}ttt|t jf| j|d�}t|j	t  ddg¡dd
� t|j
d |ƒ qyt  t jdg¡}| jD ]#}tttt j |f| j|d�}t|j	t  ddg¡ƒ t|j
d |ƒ q©t  dt jg¡}| jD ]#}tttt j |f| j|d�}t|j	t  ddg¡ƒ t|j
d |ƒ qØt  ddg¡}t  ddg¡}| jD ]"}ttt||f| j|d�}t|j	t  ddg¡ƒ t|j
d |ƒ �qd S )Nr   iöÿÿÿé   r   r   r   ç        gçÞÒ1VÀç�íµ ÷Æ°>©Úatolg‡Ô¡w³Ü?gVçž¯Ò<éûÿÿÿgÀî­»¿gUw-Ör¹Àéüÿÿÿç³¾ 
su?)r   Úarrayr   r   r   r   r	   r   r   r   r   Úinf)r   ÚlbÚubr   r   r   r   r   r   Útest_dense_bounds   sd   
ÿ
ÿÿ
ÿÿ
ÿ
ÿ
ÿüzBaseMixin.test_dense_boundsc           
      C   s”   t  ddg¡}| jjdd�}|| }t  ddg¡}t  ddg¡}||f}t||ƒ}t|||ƒ}t|||ƒ}	t  |	j|	jd ¡rAJ ‚t	|j|	jƒ d S )Nr!   é   )é   r/   ©Úsizer/   r   )
r   r)   r   Úuniformr
   r	   Úallcloser   r   r   )
r   r   r   r   r+   r,   Ú
bounds_oldÚ
bounds_newÚres_oldÚres_newr   r   r   Útest_bounds_variantsP   s   
zBaseMixin.test_bounds_variantsc                 C   sf   t j ¡ �}| t¡ t  g d¢g d¢g¡}W d   ƒ n1 s w   Y  t  ddg¡}t||ƒ d S )N)é   r'   r   r/   r.   )é
   éþÿÿÿr!   r   r   r9   é   )r   ÚtestingÚsuppress_warningsÚfilterÚPendingDeprecationWarningÚmatrixr)   r	   )r   Úsupr   Úkr   r   r   Útest_np_matrix]   s   
þzBaseMixin.test_np_matrixc                 C   s  t  ddgg¡}t  dg¡}ddg}ddg}| jD ]%}t||||f| j|d�}t|jddgƒ t|jd t||dd	�d ƒ qt  d
dgddgddgg¡}t  g d¢¡}ddg}ddg}| jD ]%}t||||f| j|d�}t|j	ddd� t|jd t||dd	�d ƒ q_d S )NgÙÎ÷Sã¥Ó¿gZd;ßO�Ç¿g#Ûù~j¼è?çš™™™™™¹¿gš™™™™™¹?r   r   r   r   gÇK7‰A`Õ?gÇK7‰A`å?gP�—nƒà¿gP�—nƒð¿gú~j¼t“È?gú~j¼t“Ø?)g`åÐ"Ûùö¿gHáz®GÁ?gJ+‡í?r!   g      à¿g•dyáý¥=r$   )
r   r)   r   r	   r   r   r   r   r   Ú
optimality)r   r   r   r+   r,   r   r   r   r   r   Útest_dense_rank_deficiente   s2   
ÿ ý
ÿ üz#BaseMixin.test_dense_rank_deficientc                 C   sø   t  ddg¡}t  ddg¡}ttt||f| jd�}t|jddgƒ t|jd t	ttdd�d ƒ t 
|j¡t }t|jdt  
||¡ ƒ t|j|ƒ t|jd	d
d� t|jddgƒ t|jdk ƒ t|jdkpk|jdkƒ tt|jtƒƒ t|jƒ d S )Nr   r'   r!   ©r   r(   r   r   g      à?r"   gê-�™—q=r$   r<   r.   )r   r)   r	   r   r   r   r   r   r   r   ÚdotÚcostÚfunrF   r   Úactive_maskr   ÚnitÚstatusÚ
isinstanceÚmessageÚstrÚsuccess)r   r+   r,   r   Úrr   r   r   Útest_full_result~   s   zBaseMixin.test_full_resultc                 C   sL   t  g d¢g d¢g d¢g¡}t  g d¢¡}t||| jd�}t|jdk ƒ d S )N)gSQ�cUì?gn-É(8´¢?güø²(8´¢?)gƒÚŒ¥ó×?g®«ì,»Š?gk§ªì,»Š?)g\s…`úî?gAÊ¨çþY ?g ¼¨çþY ?)gÏt\O?Šv?gÃ"ÈHªÚe?gFÎýÔH{?rH   gg5_PŸG>)r   r)   r	   r   r   rJ   )r   r   r   Úresultr   r   r   Útest_almost_singular’   s   þÿÿzBaseMixin.test_almost_singularc                 C   s(  t j d¡ t  t jjdddd�¡\}}|d9 }dt jjdd||gd� }dt jjdd|gd� }dt jt jjddd|fd�dd� }|d	d d …f  d7  < t j ||¡}|d d …|f }t|||d
d�j}t|||dd�j}t  || | d ¡}	t  || | d ¡}
t	t
|	|
 ƒ|
d k ƒ d S )Nr   r/   éè  r0   ç      ð?i�ÿÿÿéc   )Úaxisr!   Úbvls©Úboundsr   Útrfç»½×Ùß|Û=)r   r   ÚseedÚsortÚrandintÚchoicer	   r   Úsumr   Úabs)r   ÚnÚmr   r   r]   ÚwÚx_bvlsÚx_trfÚ	cost_bvlsÚcost_trfr   r   r   Útest_large_rank_deficientž   s   $z#BaseMixin.test_large_rank_deficientc                 C   s¬   t  g d¢g d¢g d¢g¡}t  g d¢¡}t  g d¢g d¢g¡}t|||dd�j}t|||d	d�j}t  || | d
 ¡}t  || | d
 ¡}tt|| ƒ|d k ƒ d S )N)g     €H@g     €D@ç      @À)g      3Àrn   g       À)g      *Àg      $@g     @Q@)g     €DÀg     €VÀg     €G@)g      ?@g      FÀg      :@)g      K@rn   g      <@r[   r\   r^   r/   r_   )r   r)   r	   r   rd   r   re   )r   r   r   r]   ri   rj   rk   rl   r   r   r   Útest_convergence_small_matrix´   s   
þ
ÿz'BaseMixin.test_convergence_small_matrixN)Ú__name__Ú
__module__Ú__qualname__r   r    r-   r8   rD   rG   rT   rV   ÚpytestÚmarkÚxslowrm   ro   r   r   r   r   r      s    1
r   c                   @   s0   e Zd Zdd„ Zej d¡dd„ ƒZdd„ ZdS )	ÚSparseMixinc                 C   sl   d}d}t j d¡}t|||d�}| |¡}t||ƒ}t|jddd� t|ƒ}t||ƒ}t|jddd� d S )Néˆ  rW   r   ©Úrandom_stater#   r$   )	r   r   r   r   Úrandnr	   r   rF   r   )r   rg   rf   Úrngr   r   r   r   r   r   Útest_sparse_and_LinearOperatorÆ   s   


z*SparseMixin.test_sparse_and_LinearOperatorr:   c           	      C   s¬   d}d}t j d¡}t|||d�}| |¡}| |¡}|d }t||||fƒ}t|jddd� t||||fd	d
d�}t|jddd� t||||fdd�}t|jddd� d S )Nrw   rW   r   rx   r!   r"   r#   r$   g‚vIhÂ%<=iÜ  )Úlsmr_tolÚlsmr_maxiterÚauto)r}   )r   r   r   r   rz   r	   r   rF   )	r   rg   rf   r{   r   r   r+   r,   r   r   r   r   Útest_sparse_boundsÓ   s   

ÿzSparseMixin.test_sparse_boundsc                 C   s¼   t  g d¢¡}t  g d¢¡}t  g d¢¡}t|||ffdd�}t| ¡ tdd�}t|tdd�}tjtd	d
�� t	|j
|j
ƒ W d   ƒ n1 sHw   Y  t|tddd�}t	|j
|j
ƒ d S )N)rX   rX   rX   gzo ð?rX   )r   r   r!   r/   r/   )r   r/   r!   r   r/   )r.   r.   )ÚshapeÚexact)r   ÚlsmrÚ ©Úmatchr:   ©r   r~   )r   r)   r   r	   Útoarrayr   rs   ÚraisesÚAssertionErrorr   r   )r   ÚdataÚrowÚcolr   Ú	exact_solÚdefault_lsmr_solÚ	conv_lsmrr   r   r   Útest_sparse_ill_conditionedæ   s   ÿz'SparseMixin.test_sparse_ill_conditionedN)	rp   rq   rr   r|   rs   rt   Ú	fail_slowr€   r‘   r   r   r   r   rv   Å   s
    

rv   c                   @   s   e Zd ZdZddgZdS )ÚTestTRFr^   r‚   rƒ   N©rp   rq   rr   r   r   r   r   r   r   r“   ú   s    r“   c                   @   s   e Zd ZdZdgZdS )ÚTestBVLSr[   r‚   Nr”   r   r   r   r   r•   ÿ   s    
r•   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestErrorCheckingc                 C   sô   t ttddd�}t ttddd�}t ttdd d�}d}tjt|d�� t ttddd�}W d   ƒ n1 s4w   Y  tjt|d�� t ttddd�}W d   ƒ n1 sSw   Y  tjt|d�� t ttdd	d�}W d   ƒ d S 1 ssw   Y  d S )
Nrƒ   g{®Gáz„?)r   r}   r   z3`lsmr_tol` must be None, 'auto', or positive float.r…   rE   Úfoor!   ©r	   r   r   rs   r‰   Ú
ValueError©r   Ú_Úerr_messager   r   r   Útest_option_lsmr_tol  s   ÿÿ"ÿz&TestErrorChecking.test_option_lsmr_tolc                 C   s¦   t ttddd�}t ttdd d�}d}tjt|d�� t ttddd�}W d   ƒ n1 s,w   Y  tjt|d�� t ttddd�}W d   ƒ d S 1 sLw   Y  d S )Nrƒ   r!   r‡   z0`lsmr_maxiter` must be None or positive integer.r…   r   r   r˜   rš   r   r   r   Útest_option_lsmr_maxiter  s   ÿ"ÿz*TestErrorChecking.test_option_lsmr_maxiterN)rp   rq   rr   r�   rž   r   r   r   r   r–     s    r–   )rs   Únumpyr   Únumpy.linalgr   Únumpy.testingr   r   r   Úscipy.sparser   r   Úscipy.sparse.linalgr   Úscipy.optimizer	   Úscipy.optimize._minimizer
   r)   r   r   r   rv   r“   r•   r–   r   r   r   r   Ú<module>   s(    ý 15