o
    `^h                     @   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?maxfevd   )x0optionsself r   ^/home/air/shanriGPT/back/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	sJ |j
|j|jksJ |j|jksJ |j|jksJ |j|jksJ |j|jksJ 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   888@UUUUUU?-C6?atol:0yE>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
rJ |j|jdksJ |t j|j	krt|j	 jksJ ||jdksJ |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   g988@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 sw   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    	