o
    Ö­j˜  ã                   @   sh   d dl Z d dlZd dlmZmZmZ d dlZd dlm	Z	m
Z
mZ G dd„ dƒZdd„ ZG dd	„ d	ƒZdS )
é    N)Úassert_allcloseÚassert_Úassert_array_equal)Úfmin_cobylaÚminimizeÚBoundsc                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	d	d
d�dd„ ƒZ
dd„ Zdd„ ZdS )Ú
TestCobylac                 C   s.   ddg| _ t d¡dg| _ddddd	œ| _d S )
NgÍÌÌÌÌÌ@g…ëQ¸å?gä8Žã8Ž8@gUUUUUUå?Fé   çñhãˆµøä>éd   )ÚdispÚrhobegÚtolÚmaxiter)Úx0ÚmathÚsqrtÚsolutionÚopts©Úself© r   ú]/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_cobyla.pyÚsetup_method   s
   
ÿzTestCobyla.setup_methodc                 C   s   |d d t |d ƒd  S )Nr   é   r	   é   )Úabs©r   Úxr   r   r   Úfun   ó   zTestCobyla.func                 C   s   |d d |d d  d S )Nr   r   r	   é   r   r   r   r   r   Úcon1   r    zTestCobyla.con1c                 C   s   |   |¡ S ©N)r"   r   r   r   r   Úcon2   ó   zTestCobyla.con2Tz&not slow, but noisy so only run rarely)Úreasonc              	   C   s6   t | j| j| j| jgddddd�}t|| jdd� d S )Nr	   r
   r   T)r   ÚrhoendÚmaxfunr   ç-Cëâ6?©Úatol)r   r   r   r"   r$   r   r   )r   Úcapfdr   r   r   r   Útest_simple   s   ÿzTestCobyla.test_simplec                 C   sÈ   G dd„ dƒ}|ƒ }d| j dœd| jdœf}t| j| jd||| jd�}t|j| jdd� t	|j
|jƒ t	|jd	k |ƒ t	|jd
k |ƒ t	|j|  | j¡d k |ƒ t	|j|jkdƒ t|j|jdƒ d S )Nc                   @   ó   e Zd Zdd„ Zdd„ ZdS )z1TestCobyla.test_minimize_simple.<locals>.Callbackc                 S   s   d| _ d | _d S )Nr   ©Ún_callsÚlast_xr   r   r   r   Ú__init__#   s   
z:TestCobyla.test_minimize_simple.<locals>.Callback.__init__c                 S   s   |  j d7  _ || _d S ©Nr	   r/   r   r   r   r   Ú__call__'   s   
z:TestCobyla.test_minimize_simple.<locals>.Callback.__call__N)Ú__name__Ú
__module__Ú__qualname__r2   r4   r   r   r   r   ÚCallback"   s    r8   Úineq©Útyper   Úcobyla)ÚmethodÚconstraintsÚcallbackÚoptionsr)   r*   r
   éF   çü©ñÒMbP?z<Callback is not called exactly once for every function eval.zGLast design vector sent to the callback is not equal to returned value.)r"   r$   r   r   r   r   r   r   r   r   ÚsuccessÚmessageÚmaxcvÚnfevr0   r   r1   )r   r8   r?   ÚconsÚsolr   r   r   Útest_minimize_simple!   s*   	

ÿÿÿýzTestCobyla.test_minimize_simplec           	         s¸   t j d¡}| dd¡‰| d¡‰‡fdd„‰ ‡fdd„}‡ fdd„}‡ fd	d
„}‡ fdd„}d|dœd|dœd|dœf}t  d¡}t||d|ddid�}t|jdkƒ t|j ƒ d S )NiÒ  é
   c                    s
   ˆ   | ¡S r#   )Údot©Úw)Úpbr   r   ÚpD   s   
z8TestCobyla.test_minimize_constraint_violation.<locals>.pc                    s   | ˆ    ¡  S r#   )ÚsumrL   )Úspreadr   r   ÚfG   ó   z8TestCobyla.test_minimize_constraint_violation.<locals>.fc                    ó   dt ˆ | ƒƒ ¡  S )Niô  ©r   rP   rL   ©rO   r   r   Úc1J   ó   z9TestCobyla.test_minimize_constraint_violation.<locals>.c1c                    s   dt ˆ | ƒ ¡ ƒ S ©Né   rU   rL   rV   r   r   Úc2M   rX   z9TestCobyla.test_minimize_constraint_violation.<locals>.c2c                    rT   rY   )r   ÚmaxrL   rV   r   r   Úc3P   rX   z9TestCobyla.test_minimize_constraint_violation.<locals>.c3r9   r:   )rJ   r<   Úcatolg�íµ ÷Æ°>)r=   r>   r@   )	ÚnpÚrandomÚRandomStateÚrandÚzerosr   r   rE   rC   )	r   ÚrngrR   rW   r[   r]   rG   Úw0rH   r   )rO   rN   rQ   r   Ú"test_minimize_constraint_violation?   s$   
þ

ÿz-TestCobyla.test_minimize_constraint_violationN)r5   r6   r7   r   r   r"   r$   ÚpytestÚmarkÚxslowr-   rI   rf   r   r   r   r   r   
   s    
r   c            	         s  dd„ ‰ ‡ fdd„} dd„ }dd„ }t  d	d
g¡}ˆ ||g}ddg}d}tˆ ||dd�}t||dd� tˆ || dd�}tˆ |ƒddd� dd„ |D ƒ}tˆ ||dd�}t|j|dd� t|j|jƒ t|j	|dd� d| dœ}tˆ ||dd�}t|j	ddd� d S )Nc                 S   s    | d d d | d d d  S )Nr   r	   r   g      @r   ©r   r   r   r   r   `   s    z$test_vector_constraints.<locals>.func                    s   ˆ | ƒd S r3   r   rj   ©r   r   r   Úfminc   r%   z%test_vector_constraints.<locals>.fminc                    s>   t  g d¢g d¢g d¢g¡‰ t  ‡ ‡fdd„ttˆ ƒƒD ƒ¡S )N)r	   éþÿÿÿr   )éÿÿÿÿrm   é   )rn   r   r   c                    s@   g | ]}ˆ |d f ˆd   ˆ |df ˆd   ˆ |df  ‘qS )r   r	   r   r   )Ú.0Úi©Úar   r   r   Ú
<listcomp>h   s
    &ÿ
ÿz:test_vector_constraints.<locals>.cons1.<locals>.<listcomp>)r_   ÚarrayÚrangeÚlenrj   r   rr   r   Úcons1f   s   
ÿz&test_vector_constraints.<locals>.cons1c                 S   s   | S r#   r   rj   r   r   r   Úcons2k   s   z&test_vector_constraints.<locals>.cons2r   r   gffffffö?g333333û?gš™™™™™é?r
   )r'   r)   r*   r	   c                 S   s   g | ]}d |dœ‘qS )r9   r:   r   )rp   rG   r   r   r   rt   |   s    z+test_vector_constraints.<locals>.<listcomp>)r>   r   r9   r:   )
r_   ru   r   r   r   r   r   rC   rD   r   )	rl   rx   ry   r   Ú	cons_listÚxsolÚfsolrH   r>   r   rk   r   Útest_vector_constraints]   s(   

r}   c                   @   r.   )Ú
TestBoundsc                 C   sf   dd„ }g d¢}g d¢}dd„ t ||ƒD ƒ}t|g d¢d|d	�}g d
¢}|js)J ‚t|j|dd� d S )Nc                 S   ó   t  | d ¡S ©Nr   ©r_   rP   rj   r   r   r   rR   �   rS   z TestBounds.test_basic.<locals>.f)rn   Nr	   Nç      à¿)r‚   r‚   NNr‚   c                 S   s   g | ]\}}||f‘qS r   r   )rp   rs   Úbr   r   r   rt   ’   s    z)TestBounds.test_basic.<locals>.<listcomp>)r	   r   r   é   rZ   r<   ©r   r=   Úbounds)r‚   r‚   r	   r   r‚   rB   r*   )Úzipr   rC   r   r   )r   rR   ÚlbÚubr†   ÚresÚrefr   r   r   Ú
test_basicŒ   s   
zTestBounds.test_basicc                 C   s¤   dd„ }t tj tj gtjtjgƒ}t|ddgd|d�}|js"J ‚t|jddd	� t dtj gtjtjgƒ}t|ddgd|d�}|jsFJ ‚t|jddgdd	� d S )
Nc                 S   r   r€   r�   rj   r   r   r   rR   ›   rS   z$TestBounds.test_unbounded.<locals>.fr	   r   r<   r…   r   rB   r*   )r   r_   Úinfr   rC   r   r   )r   rR   r†   rŠ   r   r   r   Útest_unboundedš   s   

zTestBounds.test_unboundedN)r5   r6   r7   rŒ   rŽ   r   r   r   r   r~   ‡   s    r~   )r   Únumpyr_   Únumpy.testingr   r   r   rg   Úscipy.optimizer   r   r   r   r}   r~   r   r   r   r   Ú<module>   s    S*