o
    Ö­jÏ  ã                   @   sV   d dl Zd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
mZmZ G dd„ dƒZdS )é    N)Úassert_allcloseÚassert_equal)ÚBoundsÚLinearConstraintÚNonlinearConstraintÚOptimizeResultÚminimizec                   @   sn   e Zd Zdd„ Zeddd„ƒZe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S )Ú
TestCOBYQAc                 C   s   ddg| _ ddi| _d S )NçÍÌÌÌÌÌ@ç…ëQ¸å?Úmaxfevéd   )Úx0Úoptions©Úself© r   ú]/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_cobyqa.pyÚsetup_method   s   
zTestCOBYQA.setup_methodç      ð?c                 C   s    | d d |t | d ƒd   S )Nr   é   é   é   )Úabs)ÚxÚcr   r   r   Úfun   s    zTestCOBYQA.func                 C   s   | d d | d d  d S )Nr   r   r   g      9@r   ©r   r   r   r   Úcon   s   zTestCOBYQA.conc           
      C   sf  G dd„ dƒ}G dd„ dƒ}ddg}|ƒ }|ƒ }t | jddƒ}t| j|d||| jd	�}t| j|d||| jd	�}t d
¡dg}	t|j|	dd� |j	sNJ |j
ƒ‚|jdk sWJ |ƒ‚|jdks`J |ƒ‚|j|  |	¡d k snJ |ƒ‚|j|jksxJ dƒ‚t|j|jƒ |j	s‡J |j
ƒ‚|j|jks�J ‚|j|jks—J ‚|j|jksŸJ ‚|j|jks§J ‚|j|jks±J dƒ‚d S )Nc                   @   ó   e Zd Zdd„ Zdd„ ZdS )z1TestCOBYQA.test_minimize_simple.<locals>.Callbackc                 S   ó   t  ¡ | _d| _d S ©Nr   ©Ú	threadingÚLockÚlockÚn_callsr   r   r   r   Ú__init__   ó   

z:TestCOBYQA.test_minimize_simple.<locals>.Callback.__init__c                 S   sJ   t |tjƒsJ ‚| j� |  jd7  _W d   ƒ d S 1 sw   Y  d S ©Nr   )Ú
isinstanceÚnpÚndarrayr%   r&   )r   r   r   r   r   Ú__call__#   s   "ÿz:TestCOBYQA.test_minimize_simple.<locals>.Callback.__call__N©Ú__name__Ú
__module__Ú__qualname__r'   r-   r   r   r   r   ÚCallback   ó    r2   c                   @   r   )z:TestCOBYQA.test_minimize_simple.<locals>.CallbackNewSyntaxc                 S   r    r!   r"   r   r   r   r   r'   )   r(   zCTestCOBYQA.test_minimize_simple.<locals>.CallbackNewSyntax.__init__c                 S   sH   t |tƒsJ ‚| j� |  jd7  _W d   ƒ d S 1 sw   Y  d S r)   )r*   r   r%   r&   )r   Úintermediate_resultr   r   r   r-   -   s   "ÿzCTestCOBYQA.test_minimize_simple.<locals>.CallbackNewSyntax.__call__Nr.   r   r   r   r   ÚCallbackNewSyntax(   r3   r5   r
   r   ç        Úcobyqa)ÚmethodÚconstraintsÚcallbackr   çä8Žã8Ž8@çUUUUUUå?ç-Cëâ6?©Úatolç:Œ0âŽyE>r   çü©ñÒMbP?z<Callback is not called exactly once for every function eval.)r   r   r   r   r   r+   Úsqrtr   r   ÚsuccessÚmessageÚmaxcvÚnfevr&   r   Únit)
r   r2   r5   r   r:   Úcallback_new_syntaxr9   ÚsolÚsol_newÚsolutionr   r   r   Útest_minimize_simple   sP   

úúÿÿzTestCOBYQA.test_minimize_simplec                    sn  ‡ ‡fdd„}t ddgddgƒ‰ tˆjddƒ}t|ˆjdˆ |ˆjd	�}t d
¡dg}t|j	|dd� |j
s:J |jƒ‚|jdk sCJ |ƒ‚t ˆ j|j	k¡rUt |j	ˆ jk¡sYJ |ƒ‚|jdksbJ |ƒ‚|jˆ |¡d k spJ |ƒ‚t ddgddgƒ‰ t|ˆjdˆ |ˆjd	�}|j
r�J |jƒ‚|jdks–J |ƒ‚t ˆ j|j	k¡r¨t |j	ˆ jk¡s¬J |ƒ‚|jdksµJ |ƒ‚d S )Nc                    s.   t  ˆ j| k¡rt  | ˆ jk¡sJ ‚ˆ | ¡S ©N)r+   ÚallÚlbÚubr   r   ©Úboundsr   r   r   Úfun_check_boundsZ   s   $
z9TestCOBYQA.test_minimize_bounds.<locals>.fun_check_boundsç      @ç333333ã?ç      @çffffffæ?r6   r7   ©r8   rR   r9   r   r;   r<   r=   r>   r@   r   rA   g      @gÍÌÌÌÌÌä?gffffffÖ?)r   r   r   r   r   r   r+   rB   r   r   rC   rD   rE   rN   rO   rP   rF   r   )r   rS   r9   rI   rK   r   rQ   r   Útest_minimize_boundsY   s>   ú,ú,zTestCOBYQA.test_minimize_boundsc                 C   s°   t ddgddƒ}t| j| jd|| jd�}dt d¡ d t d¡d d g}t|j|dd	� |j	s6J |j
ƒ‚|jd
k s?J |ƒ‚|jdksHJ |ƒ‚|j|  |¡d k sVJ |ƒ‚d S )Nr   r7   ©r8   r9   r   é   é   r   r   r=   r>   r@   r   rA   )r   r   r   r   r   r+   rB   r   r   rC   rD   rE   rF   ©r   r9   rI   rK   r   r   r   Ú test_minimize_linear_constraints€   s   û$ z+TestCOBYQA.test_minimize_linear_constraintsc                 C   sœ   t | jddƒ}t| j| jdd|| jd�}t d¡dg}t|j	|dd� |j
s+J |jƒ‚|jd	k s4J |ƒ‚|jd
ks=J |ƒ‚|j|  |d¡d k sLJ |ƒ‚d S )Nr6   )ç       @r7   )Úargsr8   r9   r   g9Žã8Žã8@gUUUUUUÕ?r=   r>   r@   r   r_   rA   )r   r   r   r   r   r   r+   rB   r   r   rC   rD   rE   rF   r]   r   r   r   Útest_minimize_args�   s   ú"zTestCOBYQA.test_minimize_argsc              
      s  ‡ fdd„}t ddgddgƒ}tˆ jddƒ}tˆ jˆ jd||ˆ jd	�}d
D ]?}t|ˆ j|fd||ˆ jd�}t|j|jƒ |j	sDJ |j
ƒ‚|j|jksLJ ‚|j|jksTJ ‚|j|jks\J ‚|j|jksdJ ‚q%t t¡� t‡ fdd„ˆ jd||ˆ jd	� W d   ƒ d S 1 s†w   Y  d S )Nc                    s    t  ˆ  | ¡¡}t  |d| ¡S )N)r   )r+   Úarrayr   Úreshape)r   ÚdimÚfr   r   r   Ú	fun_array¢   s   z1TestCOBYQA.test_minimize_array.<locals>.fun_arrayrT   rU   rV   rW   r6   r7   rX   )r   r   r   )r`   r8   rR   r9   r   c                    s   t  ˆ  | ¡ˆ  | ¡g¡S rM   )r+   rb   r   r   r   r   r   Ú<lambda>Å   s    z0TestCOBYQA.test_minimize_array.<locals>.<lambda>)r   r   r   r   r   r   r   r   r   rC   rD   rE   rF   rG   ÚpytestÚraisesÚ	TypeError)r   rf   rR   r9   rI   rd   Ú	sol_arrayr   r   r   Útest_minimize_array¡   sJ   úù	
ú"ÿzTestCOBYQA.test_minimize_arrayc                 C   óR   t | jddƒ}ddi}t| j| jd||d�}|jrJ |jƒ‚|jdks'J |ƒ‚d S )Nr6   r   r   r7   rZ   )r   r   r   r   r   rC   rD   rF   ©r   r9   r   rI   r   r   r   Útest_minimize_maxfevÍ   ó   ûzTestCOBYQA.test_minimize_maxfevc                 C   rm   )Nr6   Úmaxiterr   r7   rZ   )r   r   r   r   r   rC   rD   rG   rn   r   r   r   Útest_minimize_maxiterÚ   rp   z TestCOBYQA.test_minimize_maxiterc                 C   sž   t | jddƒ}t| j| jd|| jd�}t| jƒ}|j|d< t| j| jd||d�}|js0J |jƒ‚|j	dk s9J |ƒ‚|j
|j
ksCJ |ƒ‚|j|jksMJ |ƒ‚d S )Nr6   r7   rZ   Úf_targetr@   )r   r   r   r   r   r   ÚdictrC   rD   rE   rF   )r   r9   Úsol_refr   rI   r   r   r   Útest_minimize_f_targetç   s*   û

ûz!TestCOBYQA.test_minimize_f_targetN)r   )r/   r0   r1   r   Ústaticmethodr   r   rL   rY   r^   ra   rl   ro   rr   rv   r   r   r   r   r	      s    
<',r	   )Únumpyr+   rh   r#   Únumpy.testingr   r   Úscipy.optimizer   r   r   r   r   r	   r   r   r   r   Ú<module>   s    	