o
    Eb                     @   s   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlZdd	lmZmZmZmZmZmZmZ dd
lmZmZ ddlZG dd dZdS )z@
Unit tests for the differential global minimization algorithm.
    N)DifferentialEvolutionSolver_ConstraintWrapperdifferential_evolution)BoundsNonlinearConstraintLinearConstraint)rosen)
csr_matrix)Version)assert_equalassert_allcloseassert_almost_equalassert_array_equalassert_string_equalassert_suppress_warnings)raiseswarnsc                   @   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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d)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zejje e!j"e d5k d6d7d8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBdC Z(dDdE Z)dFdG Z*dHdI Z+dJdK Z,dLdM Z-dNdO Z.dPdQ Z/dRdS Z0dTdU Z1dVdW Z2dXdY Z3dZd[ Z4d\d] Z5d^d_ Z6d`da Z7dbdc Z8ddde Z9dfdg Z:dhdi Z;djdk Z<dldm Z=dndo Z>ejj?ejj@eAB dpkdqd7drds ZCdtdu ZDdvS )wTestDifferentialEvolutionSolverc                 C   sx   t jdd| _t ddgddgg| _ddg| _t| jdg| _t| jdgdd	d
| _	t 
t dddj}|| j	_d S )Nraise)Zinvalid               @r   r   r   d   r               ?)popsizemutation皙?皙?)npseterr
old_seterrarraylimitsboundsr   	quadraticdummy_solverdummy_solver2Z
atleast_2darangeT
population)selfr/    r1   S/usr/lib/python3/dist-packages/scipy/optimize/tests/test__differential_evolution.pysetup_method   s   

z,TestDifferentialEvolutionSolver.setup_methodc                 C   s   t jdi | j d S )Nr1   )r$   r%   r&   r0   r1   r1   r2   teardown_method-   s   z/TestDifferentialEvolutionSolver.teardown_methodc                 C   s   |d d S )Nr      r1   )r0   xr1   r1   r2   r*   0   s   z)TestDifferentialEvolutionSolver.quadraticc                 C   s  t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd	 t t| jd
d}t|jd
 t|jjd t t| jdd}t|jd t|jjd	 t t| jdd}t|jd t|jjd	 t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd d S )Nbest1expstrategy_best1best1binrand1bin_rand1Zrand1expZrand2exp_rand2best2bin_best2Zrand2binZrandtobest1bin_randtobest1Zrandtobest1expZcurrenttobest1bin_currenttobest1Zcurrenttobest1exp)r   r	   r)   r   r:   Zmutation_func__name__r0   solverr1   r1   r2   test__strategy_resolves3   s   z7TestDifferentialEvolutionSolver.test__strategy_resolvesc                 C   H   t dg}| jd}t|| t dg}| jd}t|| d S )Ng?r6                     ?)r$   r'   r,   r;   r   r>   r0   resulttrialr1   r1   r2   test__mutate1~   s   
z-TestDifferentialEvolutionSolver.test__mutate1c                 C   rH   )NgrI   r"   )r$   r'   r,   rA   r   r?   rO   r1   r1   r2   test__mutate2   s   
z-TestDifferentialEvolutionSolver.test__mutate2c                 C   s&   t dg}| jd}t|| d S )Ng333333?rI   )r$   r'   r,   rB   r   rO   r1   r1   r2   test__randtobest1   s   z1TestDifferentialEvolutionSolver.test__randtobest1c                 C   s(   t dg}| jdd}t|| d S )Nr"   r   rI   )r$   r'   r,   rC   r   rO   r1   r1   r2   test__currenttobest1   s   z4TestDifferentialEvolutionSolver.test__currenttobest1c                 C   s*   d}t | j| j|d}t|jt| d S )N)r   r   r!   )r   r*   r)   r   ditherlist)r0   r!   rF   r1   r1   r2   test_can_init_with_dithering   s   z<TestDifferentialEvolutionSolver.test_can_init_with_ditheringc                 C   s   t }d}ttt|| j|d d}ttt|| j|d dtjf}ttt|| j|d d}t|| j|d}td|j td |j	 d S )N)r   rJ   rV   r   r"   r   )
r	   assert_raises
ValueErrorr   r)   r$   nanr   ZscalerW   )r0   funcr!   rF   r1   r1   r2   +test_invalid_mutation_values_arent_accepted   s:   
zKTestDifferentialEvolutionSolver.test_invalid_mutation_values_arent_acceptedc                 C   sH   dd }t tdd t|ddg W d    d S 1 sw   Y  d S )Nc                 S   s   t t | d t | gS )Nr6   )r$   r'   sumr7   r1   r1   r2   r_      s   zETestDifferentialEvolutionSolver.test_invalid_functional.<locals>.funcz,func\(x, \*args\) must return a scalar value)matchr6   )r\   RuntimeErrorr   )r0   r_   r1   r1   r2   test_invalid_functional   s   "z7TestDifferentialEvolutionSolver.test_invalid_functionalc                 C   J   t dg}td| j| t dgdgg| j_td| j| d S )N333333?   r   r   )r$   r'   r   r+   Z_scale_parametersr(   r0   rQ   r1   r1   r2   test__scale_parameters      z6TestDifferentialEvolutionSolver.test__scale_parametersc                 C   rh   )Nrj   ri   r   r   )r$   r'   r   r+   _unscale_parametersr(   rk   r1   r1   r2   test__unscale_parameters   rm   z8TestDifferentialEvolutionSolver.test__unscale_parametersc                 C   sH   t g d}| j| t|d d tt |dk|dk  d S )N)g??r   g     r@gh㈵r6   rq   r   r   )r$   r'   r+   Z_ensure_constraintr   r   Zlogical_andallrk   r1   r1   r2   test__ensure_constraint   s    z7TestDifferentialEvolutionSolver.test__ensure_constraintc                 C   s.   t | jdg}| }t|j| |j d S Nrd   )r   r*   solver   funr7   r0   rF   rP   r1   r1   r2   test_differential_evolution   s   z;TestDifferentialEvolutionSolver.test_differential_evolutionc                 C   s(   t | jdg}| }t|j|j d S rt   )r   r*   ru   r   r7   rw   r1   r1   r2   test_best_solution_retrieval   s   z<TestDifferentialEvolutionSolver.test_best_solution_retrievalc                 C   sz   ddg}d}ddd}t t||d}t|j| ddd}t t||d}t|j| dd	d
}t t||d}|js;J d S )Nr   r6   z8callback function requested stop early by returning Truer   c                 S   s   dS )NTr1   Zparamconvergencer1   r1   r2   callback_python_true      zVTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_python_true)callbackc                 S   s   dgS )N
   r1   r{   r1   r1   r2   callback_evaluates_true   s   zYTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_truec                 S   s   g S Nr1   r{   r1   r1   r2   callback_evaluates_false  r~   zZTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_false)r   )r   r	   r   messagesuccess)r0   r)   Zexpected_msgr}   rP   r   r   r1   r1   r2   test_callback_terminates   s   


z8TestDifferentialEvolutionSolver.test_callback_terminatesc                 C   s2   dg}d}dd }t |||dd}t|jd d S )Nr   )      ?r   g      @c                 W   s8   t |tkr
td|d |d |   |d | d   S )Nzargs should be a tupler   r   r6   r   )typetupler]   )r7   argsr1   r1   r2   r*     s   $zLTestDifferentialEvolutionSolver.test_args_tuple_is_passed.<locals>.quadraticT)r   polishgUUUUUU?)r   r   rv   )r0   r)   r   r*   rP   r1   r1   r2   test_args_tuple_is_passed  s   z9TestDifferentialEvolutionSolver.test_args_tuple_is_passedc                 C   s    t }dg}ttt||dd d S )NrJ   abcr9   )r	   r\   r]   r   )r0   r_   r)   r1   r1   r2   test_init_with_invalid_strategy  s   
z?TestDifferentialEvolutionSolver.test_init_with_invalid_strategyc                 C   sV   t }dg}ttt|| ddg}ttt|| tt tddgddg}t|jd d S )Nr   r   )rJ   rK   rL   r   r6   )r   r   )r	   r\   r]   r   r   r   r7   )r0   r_   r)   rP   r1   r1   r2   test_bounds_checking%  s   z4TestDifferentialEvolutionSolver.test_bounds_checkingc           
      C   s   t jddddd}tt|dd d f |dd d f }td |dd}d}||d	\}}}}}	ttt 	t 
||||||	gd d S )
Ng      (@Zfloat64)dtyper6   rM   r   r   r    rL   )r$   r-   reshaperX   zipr   Z_select_samplesr   lenuniquer'   )
r0   r(   r)   rF   	candidateZr1Zr2Zr3Zr4Zr5r1   r1   r2   test_select_samples7  s   & z3TestDifferentialEvolutionSolver.test_select_samplesc                 C   s4   t t| jdd}| }t|jd t|jd d S )Nr   )maxiterFz/Maximum number of iterations has been exceeded.)r   r	   r)   ru   r   r   r   rw   r1   r1   r2   test_maxiter_stops_solveA  s   z8TestDifferentialEvolutionSolver.test_maxiter_stops_solvec                 C   s   t t| jddd}| }t|jd t|jd t|jd t t| jdddd}| }t|jd	 t|jd t|jd t t| jddd
dd}| }t|jd
 t|jd t|jd d S )Nr   F)maxfunr   r6   z9Maximum number of function evaluations has been exceeded.rL   (   )r    r   r   )   /   deferred)r    r   r   updatingz8Maximum number of function evaluations has been reached.)r   r	   r)   ru   r   nfevr   r   rw   r1   r1   r2   test_maxfun_stops_solveJ  sD   
	z7TestDifferentialEvolutionSolver.test_maxfun_stops_solvec                 C   s0   t | jdgdd}|  tt|jd d S )Nrp   r   {Gz?tolr   )r   r*   ru   r   r$   argminpopulation_energiesrE   r1   r1   r2   test_quadraticz  s   z.TestDifferentialEvolutionSolver.test_quadraticc                 C   s   t | jdgdd d S )Nr   r   r   )r   r*   r4   r1   r1   r2   test_quadratic_from_diff_ev  s   
z;TestDifferentialEvolutionSolver.test_quadratic_from_diff_evc                 C   sL   t | jdgdddd}t | jdgdddd}t|j|j t|j|j d S )Nr   Fr   r   )r   seedr   )r   r*   r   r7   r   )r0   rP   Zresult2r1   r1   r2   test_seed_gives_repeatability  s   z=TestDifferentialEvolutionSolver.test_seed_gives_repeatabilityz1.17z)Generator not available for numpy, < 1.17)reasonc              	   C   s8   t j }g d}|D ]}t| jdgd|d|d qd S )N)randomZlatinhypercubesobolhaltonr   Fr   )r   r   r   init)r$   r   Zdefault_rngr   r*   )r0   rngZinitsr   r1   r1   r2   test_random_generator  s   
z5TestDifferentialEvolutionSolver.test_random_generatorc                 C   s   t t| jddd}|  d S )Nr8   r   )r:   r   r   r	   r)   ru   rE   r1   r1   r2   test_exp_runs  s   z-TestDifferentialEvolutionSolver.test_exp_runsc                 C   s   ddg}t t|ddd d S )N)rL   1   r   )r    r   )r   r	   )r0   r)   r1   r1   r2   test_gh_4511_regression  s   	z7TestDifferentialEvolutionSolver.test_gh_4511_regressionc                 C   sF   t t| jdd}||j |  tt|j	d t|j
d d S )NrJ   r   r   rM   )r   r	   r)   Z_calculate_population_energiesr/   _promote_lowest_energyr   r$   r   r   _nfevrE   r1   r1   r2   "test_calculate_population_energies  s
   zBTestDifferentialEvolutionSolver.test_calculate_population_energiesc           
      C   s   t t| jddd}t|\}}tt|dd t|jd tt	t| t t| j}t|\}}t
|D ]\}}|\}}	||	ksBJ ||	}}|dkrN d S q4d S )NrJ      )r    r   r   r6   2   )r   r	   r)   nextr   r$   sizer   r\   StopIteration	enumerate)
r0   rF   r7   rv   _Zfun_previZsolnZ	x_currentZfun_currentr1   r1   r2   test_iteration  s"   

z.TestDifferentialEvolutionSolver.test_iterationc                 C   s,   t t| jddd}|  t|jdk  d S )N皙?F)r   r   )r   r	   r)   ru   r   r|   rE   r1   r1   r2   test_convergence  s
   
z0TestDifferentialEvolutionSolver.test_convergencec                 C   s   t t| jd d d}|  d S )N)r   r   r   rE   r1   r1   r2   test_maxiter_none_GH5731  s   
z8TestDifferentialEvolutionSolver.test_maxiter_none_GH5731c              	   C   s(  t ttgt| jfR i ddi tt| j}|  t|jd tt	
t	|j |  t|jd tt	
t	|j |jdd t|jd tt	
t	|j tt| jdd}|jdd t|jd tt	
t	|j t	dd	d
dd}tt| j|ddddd}t|jd tt	
t	|j t|jdk t|jdk t	||dd}t|jd d | tt	|jd d d tt	|jd d d t	dd	ddd	}t ttgt| jfR i d|i t	jjdddd}tt| j|d}t|jd |d  d S )Nr   Zrubbishr   r   )Z
qmc_enginer   )r   r[   rJ   r   rL   r6   r@   {Gz?r   )r   r:   atolr   r    )rL   r6      r   r   )ZlowZhighr   x0)r\   r]   r   r	   r)   Zinit_population_randomr   r   r   r$   rr   Zisinfr   Zinit_population_lhsZinit_population_qmcZlinspacer   Znum_population_membersZpopulation_shapeZcliprn   r   r/   minmaxr   Zuniformr   )r0   rF   r/   Zunscaled_populationr   r1   r1   r2   test_population_initiation  sd   z:TestDifferentialEvolutionSolver.test_population_initiationc                 C   s`   t t| jddgd}|jsJ tt t t| jddgd W d    d S 1 s)w   Y  d S )Nr   r#   r    @)r   r	   r)   r   r\   r]   )r0   resr1   r1   r2   test_x08  s
   

"z'TestDifferentialEvolutionSolver.test_x0c                 C   s"   dd }ddg}t ||dd d S )Nc                 S   s   | d dk r	t jS | d S )Nr   r   r   )r$   infrb   r1   r1   r2   sometimes_infD  s   zWTestDifferentialEvolutionSolver.test_infinite_objective_function.<locals>.sometimes_infr   F)r)   Zdispr   )r0   r   r)   r1   r1   r2    test_infinite_objective_functionA  s   z@TestDifferentialEvolutionSolver.test_infinite_objective_functionc                 C   s@   ddg}t t|dd}t|jdk t|jjtu  |  d S )Nr   r   )r   )r   r	   r   	_updating_mapwrapperZ_mapfuncmapru   r0   r)   rF   r1   r1   r2   test_deferred_updatingK  s
   z6TestDifferentialEvolutionSolver.test_deferred_updatingc              	   C   s   ddg}t t|}t|jdk tt t t|dd}W d    n1 s'w   Y  W d    n1 s6w   Y  t|jdk d S )Nr   Z	immediater6   )workersr   )r   r	   r   r   r   UserWarningr   r1   r1   r2   test_immediate_updatingS  s   

z7TestDifferentialEvolutionSolver.test_immediate_updatingc              	   C   s   ddg}t d4}tt|d|jd}t|jjd u t|jdk |	  W d    n1 s1w   Y  W d    n1 s@w   Y  tt|ddd}t|jjd u t|jdk |	  W d    d S 1 slw   Y  d S )Nr   r6   r   )r   r   )
multiprocessingZPoolr   r	   r   r   r   Zpoolr   ru   )r0   r)   prF   r1   r1   r2   test_parallel`  s&   

 
"z-TestDifferentialEvolutionSolver.test_parallelc                 C   s&   t tddg}|  t|  d S )Nrz   )r   r	   ru   r   Z	convergedrE   r1   r1   r2   test_convergedo  s   z.TestDifferentialEvolutionSolver.test_convergedc                 C   s   dd }dd }t |tj d}ttddg|d}|ddg}t|d	 t |tj d
}ttddg||fd}|ddg}t|g d |ddg}t|g d |ddg}t|g d d S )Nc                 S      | d | d  gS Nr   r   r1   rb   r1   r1   r2   constr_fu     zNTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_fc                 S   $   | d d | d  | d | d  gS Nr   r6   r   r1   rb   r1   r1   r2   	constr_f2x     $zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f2ffffff?rz   constraintsr   r"   ?333333?ri   {Gz?r   r   r   g@r   r   r   r   r   )r   r$   r   r   r	   Z_constraint_violation_fnr   )r0   r   r   nlcrF   cvnlc2r1   r1   r2   test_constraint_violation_fnt  s$   


z<TestDifferentialEvolutionSolver.test_constraint_violation_fnc                 C   s  dd }dd }t |tj d}ttddg|d}|tddgd	d	gg\}}t|d
d
g t|tdgdgg |j	dksCJ t |tj d}ttddg||fd}|tddgddgg\}}t|d
d
g t|tg dg dg |tddgd	d	gg\}}t|d
d
g t|tg dg dg |j	dksJ |tddgd	d	gg\}}t|dd
g t|tg dg dg |j	dksJ d S )Nc                 S   r   r   r1   rb   r1   r1   r2   r     r   zZTestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_fc                 S   r   r   r1   rb   r1   r1   r2   r     r   z[TestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f2r   rz   r   r   r   Fr"   r   )r6   r   r   g333333?)r"   r   r   r   r   )r6   rJ   rN   Tr   )
r   r$   r   r   r	   Z#_calculate_population_feasibilitiesr'   r   r   shape)r0   r   r   r   rF   Zfeasr   r   r1   r1   r2   (test_constraint_population_feasibilities  sB   

zHTestDifferentialEvolutionSolver.test_constraint_population_feasibilitiesc                 C   sz   dd }t |tj d}ttddg|d}tt | }W d    n1 s(w   Y  ||jdks6J |j	s;J d S )Nc                 S      t | d | d  gS r   r$   r'   rb   r1   r1   r2   r        zGTestDifferentialEvolutionSolver.test_constraint_solve.<locals>.constr_fr   rz   r   )
r   r$   r   r   r	   r   r   ru   r7   r   )r0   r   r   rF   r   r1   r1   r2   test_constraint_solve  s   


z5TestDifferentialEvolutionSolver.test_constraint_solvec                 C   sF  dd }t |tj d}ttddg|ddd}tt | }W d    n1 s*w   Y  |jdks6J |j	r;J ttddg|d	d
}t
| |j rPJ t|j rZJ d}|jd }|j|dg |jd|g< |j|dgd d f |jd|gd d f< |j|dgd d f |jd|gd d f< |  t|jd | d S )Nc                 S   r   r   r   rb   r1   r1   r2   r     r   zLTestDifferentialEvolutionSolver.test_impossible_constraint.<locals>.constr_fr[   rz   rJ   r   )r   r    r   r   F)r   r      )r   r$   r   r   r	   r   r   ru   Zmaxcvr   r   Zfeasiblerr   Zisfiniter   Zconstraint_violationr/   r   r   )r0   r   r   rF   r   lr   r1   r1   r2   test_impossible_constraint  s2   





(z:TestDifferentialEvolutionSolver.test_impossible_constraintc              
   C   sR  dd }t |tj d}ttddg|d}|j}|ddtdgd	dtdgs+J |d	dtdgddtdgd
ks@J |ddtdgddtdgsSJ |ddtdgd	d
td	gsfJ |dd
tddgd	d
td	d	gs{J |dd
tddgd	d
td	dgsJ |d	d
tddgd	d
td	dgd
ksJ d S )Nc                 S   r   r   r1   rb   r1   r1   r2   r     r   zCTestDifferentialEvolutionSolver.test_accept_trial.<locals>.constr_fr   rz   r   r"   Tr   r   Fg#@r   g?)r   r$   r   r   r	   Z_accept_trialr'   )r0   r   r   rF   fnr1   r1   r2   test_accept_trial  s.   
& &&z1TestDifferentialEvolutionSolver.test_accept_trialc                    s  t g d}t dt jdg}t g d}tt|||}||dk s*J |g ddk s7J t g d}t g dg dg d	g tt t j d|}||dk sbJ |g d
dk soJ ttt	 t j d|}||dk sJ |g d
dk sJ  fdd}t
|t j d}t|g d
}||dk sJ |g d
dk sJ d S )N)r   r   rj   r   F   )r   r6   rJ   r   )rN         )r   r6   rJ   rK   )rL   r   r   rM   )r   r      r   )r   r6   r   rK   c                    s
     | S r   )dotrb   Ar1   r2   rv   !  s   
zDTestDifferentialEvolutionSolver.test_constraint_wrapper.<locals>.fun)r$   r'   r   r   r   	violationanyrr   r   r
   r   )r0   ZlbZubr   pcrv   Z	nonlinearr1   r
  r2   test_constraint_wrapper  s*   z7TestDifferentialEvolutionSolver.test_constraint_wrapperc                 C   s   dd }t |ddgddg}t|ddg}t|jd dks!J t|ddgd	d	g t|dd
gd	dg t|d
d
gddg t|ddgddg t|ddgddg d S )Nc                 S   s.   t | d d | d  | d d | d  gS r   r   rb   r1   r1   r2   cons_f*  s   .zQTestDifferentialEvolutionSolver.test_constraint_wrapper_violation.<locals>.cons_fr[   g333333r6   r   r   r   r   r   r"   r   g333333gRQ?r   g=
ףp=?)r   r   r$   r   r)   r   r  r   )r0   r  r   r  r1   r1   r2   !test_constraint_wrapper_violation)  s   zATestDifferentialEvolutionSolver.test_constraint_wrapper_violationc              	   C   s  dd }t d}d|dg df< d|ddd	gf< d
|dg df< d|dg df< d|dddgf< d
|dg df< d|dg df< d|dddgf< d
|dg df< |dd dd f }t g d}t|t j |}dgd dgd  dg }t||dd|dd}d}d }t||| |jsJ t|j|d!d" t|j	|d#d" t
t ||j |k t
t |jt |d d d$f k t
t |jt |d d df k tt|t j |}t||dd|dd}t||| |jsJ t|j|d!d" t|j	|d#d" t
t ||j |k t
t |jt |d d d$f k t
t |jt |d d df k d%d& }	d'd( }
t|d dd d f t j |d d }t|ddd d f t j |dd }t|	t j |dd }t|
t j |dd }||||f}t }|t t||d)d|dd}W d    n	1 sw   Y  t|j|d!d" t|j	|d#d" t
t ||j |k t
t |jt |d d d$f k t
t |jt |d d df k d S )*Nc                 S   sX   t dg| f} t d| dd  d| dd  | dd   t | dd   }|S )Nr   rL   r   )r$   hstackra   r7   rv   r1   r1   r2   f:  s   Dz2TestDifferentialEvolutionSolver.test_L1.<locals>.f)r      )r6   r6   r   r   r   )r   r6   r      )r   r6   r   )re   r[   r   rJ   )rK   rL   r   rK   )r   rJ   r   r  rL   r  rM   )rM   r   r  r   )r6   rJ   r  r   r  r   	   )r  r  r   )	r   r   r   r   r   r   r   r   r   r   r   r<     r:   r   r   r    )r   r   r   r   r   r   r   r   r   rJ   rJ   rJ   r   igMb@?r   g{Gzt?r   c                 S   sL   t dg| f} d| d  d| d   | d  | d  d| d  | d  gS )Nr   r6   rJ   r  r   r  r$   r  rb   r1   r1   r2   c1u  s   &z3TestDifferentialEvolutionSolver.test_L1.<locals>.c1c                 S   s,   t dg| f} d| d  | d  | d  S )Nr   re   r  r  r   r  rb   r1   r1   r2   c2z     z3TestDifferentialEvolutionSolver.test_L1.<locals>.c2r=   )r$   zerosr'   r   r   r   r   r   r7   rv   r   rr   r
   r   r   filterr   )r0   r  r  bLr)   r   x_optf_optr  r  ZL2NZN2r   supr1   r1   r2   test_L17  sr   


&&

&&((
&*z'TestDifferentialEvolutionSolver.test_L1c           
      C   s  dd }dd }t |dtj}dgd }|}t }|t t||dd	|d
}W d    n1 s2w   Y  d}d}	t||	| t|j| t|j	|	dd |j
sUJ ttt||j	dk tt|j	t|d d df k tt|j	t|d d df k d S )Nc                 S   s   t dg| f} | d d d d| d d d   | d d  d| d d	 d   d| d d
   d| d
 d   | d d  d| d
  | d   d| d
   d| d   }|S )Nr   r   r   r6   rL   r   rJ   rK   r  rM   r   r  r  r  r1   r1   r2   r    s   B


z2TestDifferentialEvolutionSolver.test_L2.<locals>.fc                 S   s   t dg| f} dd| d d   d| d d   | d  d| d d   d| d   dd	| d   | d d  d
| d
 d   d| d   dd| d   d| d   d| d d   | d  | d  d| d d  | d d  d| d  | d   d| d d   d| d
   d| d   gS )Nr      r6   r   rJ   rK   rL         rM   r  r   i  r   r  r  rb   r1   r1   r2   r    s   F6:>

z3TestDifferentialEvolutionSolver.test_L2.<locals>.c1r   r   r   r=   r  r:   r   r   gy\
E@)gܤ@g$H8?g	޿g0ev@gn8)gk_@/?g0g+?h㈵>r  r   )r   r$   r   r   r!  r   r   r   rv   r7   r   r   rr   r'   )
r0   r  r  r&  r)   r   r'  r   r%  r$  r1   r1   r2   test_L2  s(   


&*z'TestDifferentialEvolutionSolver.test_L2c                 C   s  dd }t d}d|dg df< d|dg df< d	|d
g df< |dd dd f }t g d}dd }t||t j}t|dt j}dgd }||f}t }	|	t t	||d|d
d}
W d    n1 siw   Y  d}d}t
|||dd t
|
j|dd t
|
j|dd |
jsJ tt ||
j |k tt t ||
jdk tt |
jt |d d df k tt |
jt |d d df k d S )Nc                 S   s   t dg| f} | d d | d d  | d | d   d| d   d| d   | d d d  d| d d	 d   | d	 d d  d| d
 d d   d	| d d   d| d d d   d| d d d   | d d d  d }|S )Nr   r   r6   r     rJ   r   rK   rL   rM   r   r  r  r  -   r  r  r1   r1   r2   r    s*   >z2TestDifferentialEvolutionSolver.test_L3.<locals>.f)rK   r  )r,  r   rJ   ir   )r   r6   r   r  )r   r     re   r6   )r  re   r   r6   rJ   )r   r6   r  r   )ir   ic                 S   sX  t dg| f} d| d  d| d   d| d d d   d	| d
   d| d d d  d| d d d   d| d d   d	| d   d | d d  d| d d d   d| d  | d   d| d   d| d   d| d d  d| d   | d d d  d| d   d d| d d d  d| d d d   d| d d   | d  d gS )Nr   rJ   r   rM   r6   r   r  r  r   r   r   rK   x   r  rL   r   r   g      rj   r  rb   r1   r1   r2   r    s   6FL:Bz3TestDifferentialEvolutionSolver.test_L3.<locals>.c1r   r   r   r  )r   r   r    )
gWXp?`@g@gVW@!@g3Ib@grq?g` ?g$F-t%?g6N#@g7h @g]y @g<6cN8@r.  r  ư>)r$   r   r'   r   r   r   r   r!  r   r   r   r7   rv   r   r   rr   r0   r  r  r"  r  r#  r&  r)   r   r'  r   r$  r%  r1   r1   r2   test_L3  s8   
	


&*z'TestDifferentialEvolutionSolver.test_L3c              	   C   s  dd }t d}d|dddgf< d|d	g d
f< d|dddgf< |dd dd f }t g d}dd }t|t j d}t|dt j}dgdgd	  dgd  }||f}t }	|	t t	||dd|dd}
W d    n1 ssw   Y  d}g d}t
|||dd t
|
j|dd t dkrt t jjdk rt
|
j|ddd  n	t
|
j|d!d"d  |
jsJ tt ||
j |k tt t ||
jdk tt |
jt |d d df k tt |
jt |d d df k d S )#Nc                 S   s   t | d d S )NrJ   )r$   ra   rb   r1   r1   r2   r    r   z2TestDifferentialEvolutionSolver.test_L4.<locals>.f)rK   r  ){Gzd?r7  r   rK   rM   )r7  r7  g{Gzdr6   )rL   r   rK   )r   g{GzrJ   r  rL   )r   r   r   c                 S   s   t dg| f} | d | d  d| d   d| d   d | d | d	  d
| d   | d | d   d
| d   | d | d  d | d | d   d| d   gS )Nr   r   rM   g!> 
@rK   r   gSUX@r6   r   i  rL   rJ   r  i i	  r  rb   r1   r1   r2   r    s
   *6.z3TestDifferentialEvolutionSolver.test_L4.<locals>.c1r   )r   '  )  r8  )r   r9  r=   r  r  gh|?@)got@g?@g:@gt$f@gVfyr@gh o?k@gCq@gVfx@MbP?r  ZWindowsgv!>gy&1l?)Zrtolr   gh㈵>ga2U0*c?)r$   r   r'   r   r   r   r   r!  r   r   r   rv   platformsystemr   Zintpitemsizer7   r   r   rr   )r0   r  r  r"  r  r#  r&  r)   r   r'  r   r%  r$  r1   r1   r2   test_L4  s>   


&*z'TestDifferentialEvolutionSolver.test_L4c           	      C   s   dd }dd }t |tj d}dgd }|}t||dd	|d
}d}d}t|||dd t|j|dd |js:J ttt	||j
dk tt|j
t	|d d df k tt|j
t	|d d df k d S )Nc                 S   sf   t dg| f} t dt j | d  d t dt j | d   | d d | d | d    }| S )Nr   r6   r   rJ   )r$   r  sinZpir  r1   r1   r2   r    s
   2z2TestDifferentialEvolutionSolver.test_L5.<locals>.fc                 S   sD   t dg| f} | d d | d  d d| d  | d d d  gS )Nr   r   r6   rK   r  rb   r1   r1   r2   r  %  s   z3TestDifferentialEvolutionSolver.test_L5.<locals>.c1r   )r   r   r6   r=   r  r-  )gJIť?gU(C@g#gh㈵>r  -C6?r   )r   r$   r   r   r   rv   r   r   rr   r'   r7   	r0   r  r  r&  r)   r   r   r$  r%  r1   r1   r2   test_L5  s    


&*z'TestDifferentialEvolutionSolver.test_L5c           	      C   s   dd }dd }t |dtj}ddg}|}t||dd	|d
d}d}d}t|||dd t|j|dd t|j|dd |jsAJ tt	t
||jdk tt	|jt
|d d df k tt	|jt
|d d df k d S )Nc                 S   s4   t dg| f} | d d d | d d d  }|S )Nr   r   r   rJ   r6   r   r  r  r1   r1   r2   r  <  s    z2TestDifferentialEvolutionSolver.test_L6.<locals>.fc                 S   sZ   t dg| f} | d d d | d d d  d | d d d  | d d d  d gS )Nr   r   rL   r6   r   rM   gp=
׳T@r  rb   r1   r1   r2   r  A  s   "$z3TestDifferentialEvolutionSolver.test_L6.<locals>.c1r   )   r   r   r=   r  gHz>)r:   r   r   r   )gq=
ף0,@g??g1r4  r  r:  r@  r   )r   r$   r   r   r   rv   r7   r   r   rr   r'   rA  r1   r1   r2   test_L6:  s"   

&*z'TestDifferentialEvolutionSolver.test_L6c           	      C   s0  dd }dd }t |g dg d}ddgd	gd
  }|}t||dd|d}g d}d}t||| t|j|dd t|j|dd |jsHJ ttt	||jt	g dk ttt	||jt	g dk tt|jt	|d d df k tt|jt	|d d df k d S )Nc                 S   sH   t dg| f} d| d d  d| d  | d   d| d   d	 }|S )
Nr   g+dvqn@rJ   r6   g"C?r   rL   gtۈB@gn@r  r  r1   r1   r2   r  X  s   "
z2TestDifferentialEvolutionSolver.test_L7.<locals>.fc                 S   s   t dg| f} dd| d  | d   d| d  | d   d	| d
  | d   dd| d  | d   d| d  | d   d| d
 d   dd| d
  | d   d| d  | d
   d| d
  | d   gS )Nr   gl#fUU@g+WPIw?r6   rL   g=BD?r   rK   gOlb?rJ   gaۢ T@g+<$!6}?g h?g^5a?g/h"@gxLCs?gݗT?g^gED_?r  rb   r1   r1   r2   r  ^  s   ***z3TestDifferentialEvolutionSolver.test_L7.<locals>.c1)r   Z   r   )\   n      )N   f   )!   r1  )   r1  rJ   r=   r  r-  )gq S@g] @@g˻f=@g:F@g%ShMcB@gCgbr:  r  r   r   )
r   r   r   r7   rv   r   r   r$   rr   r'   rA  r1   r1   r2   test_L7V  s$   

((&*z'TestDifferentialEvolutionSolver.test_L7Zppc64lezfails on ppc64lec              	   C   s  dd }t d}d|dddgf< d|dddgf< |dd dd f }t d	d	g}d
d }t||t j}t|t ddt dd}dgd dgd  }||f}t }	|	t	 t
||dd|dd}
W d    n1 snw   Y  d}d}t|||dd t|
jd d |d d dd t|
jdd  |dd  dd t|
j|dd |
jsJ tt ||
j |k tt t ||
jdk tt t ||
jdk tt |
jt |d d df k tt |
jt |d d df k d S )Nc                 S   sL   t dg| f} d| d  d| d d   d| d   d| d d   }|S )Nr   rJ   r   r4  r6   g^>r  r  r1   r1   r2   r    s   8z2TestDifferentialEvolutionSolver.test_L8.<locals>.f)rJ   rL   )r   r[   r   rK   rJ   r6   皙c              	   S   s   t dg| f} dt | d  d  dt | d  d   d | d  dt | d d  dt | d | d  d   d | d  dt | d d  dt | d | d  d   d	 gS )
Nr   r9  rJ   rN   rK   gfffff@r   r6   g33333;@)r$   r  r?  rb   r1   r1   r2   r    s   .22z3TestDifferentialEvolutionSolver.test_L8.<locals>.c1MbPr:  )r   i  )rN  g?r<   r  i  )r:   r   r   r   )gEGr?@gT㥛D@g&D
n?gd,[ٿg#J{@r  gMb`?r   r   )r$   r   r'   r   r   r   Zfullr   r!  r   r   r   r7   rv   r   r   rr   r5  r1   r1   r2   test_L8  s<   


	  
&*z'TestDifferentialEvolutionSolver.test_L8c           	      C   s   dd }dd }t |dgdg}dgd }|}t||d	d
|d}tdd dg}d}t||| tt|j|dd t|j|dd |jsJJ t	t
t||jdk t	t
t||jdk t	t
|jt|d d df k t	t
|jt|d d df k d S )Nc                 S   s,   t dg| f} | d d | d d d  S )Nr   r   r6   r  rb   r1   r1   r2   r    r  z2TestDifferentialEvolutionSolver.test_L9.<locals>.fc                 S   s&   t dg| f} | d | d d  gS r   r  rb   r1   r1   r2   r    s   z3TestDifferentialEvolutionSolver.test_L9.<locals>.c1rO  r:  rZ   r6   r=   r  r-  r   g      ?r  r   r   )r   r   r$   Zsqrtr   absr7   rv   r   r   rr   r'   rA  r1   r1   r2   test_L9  s$   


&*z'TestDifferentialEvolutionSolver.test_L9N)ErD   
__module____qualname__r3   r5   r*   rG   rR   rS   rT   rU   rY   r`   rg   rl   ro   rs   rx   ry   r   r   r   r   r   r   r   r   r   r   pytestZmarkZskipifr   r$   __version__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r(  r/  r6  r>  rB  rD  rM  ZslowZxfailr;  machinerP  rR  r1   r1   r1   r2   r      s    K
	

	0
	
	F	
)'Y'23.3r   ) __doc__r   r;  Z%scipy.optimize._differentialevolutionr   r   Zscipy.optimizer   Zscipy.optimize._constraintsr   r   r   r	   Zscipy.sparser
   Zscipy._lib._pep440r   Znumpyr$   Znumpy.testingr   r   r   r   r   r   r   rU  r   r\   r   r   r1   r1   r1   r2   <module>   s    $