
    geP                         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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 dd
lmZmZ ddlZ G d d          ZdS )z@
Unit tests for the differential global minimization algorithm.
    N)DifferentialEvolutionSolver_ConstraintWrapperdifferential_evolution)BoundsNonlinearConstraintLinearConstraint)rosenminimize)
csr_matrix)stats)assert_equalassert_allcloseassert_almost_equalassert_string_equalassert_suppress_warnings)raiseswarnsc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9e:j;        j<        e:j;        =                     e>j?                    d8k    d9:          d;                         Z@d< ZAd= ZBd> ZCd? ZDd@ ZEdA ZFdBS )CTestDifferentialEvolutionSolverc                 n   t          j        d          | _        t          j        ddgddgg          | _        ddg| _        t          | j        dg          | _        t          | j        dgdd	
          | _	        t          j
        t          j        ddd                    j        }|| j	        _        d S )Nraiseinvalid               @r   r   r   d   r               ?)popsizemutation皙?皙?)npseterr
old_seterrarraylimitsboundsr   	quadraticdummy_solverdummy_solver2
atleast_2darangeT
population)selfr5   s     Qlib/python3.11/site-packages/scipy/optimize/tests/test__differential_evolution.pysetup_methodz,TestDifferentialEvolutionSolver.setup_method   s    )G444hR!#R * + +*79A
D D 9:@ABBEG G G ]29S#s#;#;<<>
(2%%%    c                 2    t          j        di | j         d S )N )r)   r*   r+   r6   s    r7   teardown_methodz/TestDifferentialEvolutionSolver.teardown_method,   s     
	$$DO$$$$$r9   c                     |d         dz  S )Nr      r;   )r6   xs     r7   r/   z)TestDifferentialEvolutionSolver.quadratic/   s    tQwr9   c                    t          t          | j        d          }t          |j        d           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d	           t          t          | j        d
          }t          |j        d
           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d	           t          t          | j        d          }t          |j        d           t          |j        j        d	           t          t          | j        d          }t          |j        d           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d           t          t          | j        d          }t          |j        d           t          |j        j        d           d S )Nbest1expstrategy_best1best1binrand1bin_rand1rand1exprand2exp_rand2best2bin_best2rand2binrandtobest1bin_randtobest1randtobest1expcurrenttobest1bin_currenttobest1currenttobest1exp)r   r
   r.   r   rD   mutation_func__name__r6   solvers     r7   test__strategy_resolvesz7TestDifferentialEvolutionSolver.test__strategy_resolves2   s    -U-1[6@B B B 	V_j111V)2H===,U-1[6@B B B 	V_j111V)2H===,U-1[6@B B B 	V_j111V)2H===,U-1[6@B B B 	V_j111V)2H===,U-1[6@B B B 	V_j111V)2H===,U-1[6@B B B 	V_j111V)2H===,U-1[6@B B B 	V_j111V)2H===,U-1[6@B B B 	V_j111V)2H===,U-1[6FH H H 	V_&6777V)2NCCC,U-1[6FH H H 	V_&6777V)2NCCC,U-1[6IK K K 	V_&9:::V)24EFFF,U-1[6IK K K 	V_&9:::V)24EFFFFFr9   c                    t          j        dg          }| j                            d          }t	          ||           t          j        dg          }| j                            d          }t	          ||           d S )Ng?r?                     ?)r)   r,   r1   rE   r   rH   r6   resulttrials      r7   test__mutate1z-TestDifferentialEvolutionSolver.test__mutate1}   sv    4&!!"))/::v&&&4&!!"))/::v&&&&&r9   c                    t          j        dg          }| j                            d          }t	          ||           t          j        dg          }| j                            d          }t	          ||           d S )Ngr[   r'   )r)   r,   r1   rM   r   rK   ra   s      r7   test__mutate2z-TestDifferentialEvolutionSolver.test__mutate2   sv     4&!!"))/::v&&&3%"))/::v&&&&&r9   c                     t          j        dg          }| j                            d          }t	          ||           d S )Ng333333?r[   )r)   r,   r1   rP   r   ra   s      r7   test__randtobest1z1TestDifferentialEvolutionSolver.test__randtobest1   s?    4&!!"//@@v&&&&&r9   c                     t          j        dg          }| j                            dd          }t	          ||           d S )Nr'   r"   r[   )r)   r,   r1   rS   r   ra   s      r7   test__currenttobest1z4TestDifferentialEvolutionSolver.test__currenttobest1   s?    3%"221oFFv&&&&&r9   c                     d}t          | j        | j        |          }t          |j        t          |                     d S )Nr$   r"   r&   )r   r/   r.   r   ditherlist)r6   r&   rX   s      r7   test_can_init_with_ditheringz<TestDifferentialEvolutionSolver.test_can_init_with_dithering   sJ    ,T^-1[6>@ @ @ 	V]DNN33333r9   c                    t           }d}t          t          t          || j        |           d}t          t          t          || j        |           dt
          j        f}t          t          t          || j        |           d}t          || j        |          }t          d|j                   t          d |j	                   d S )N)r$   r\   rm   r"   r'   r$   )
r
   assert_raises
ValueErrorr   r.   r)   nanr   scalern   )r6   funcr&   rX   s       r7   +test_invalid_mutation_values_arent_acceptedzKTestDifferentialEvolutionSolver.test_invalid_mutation_values_arent_accepted   s    j5+#+		- 	- 	- 	- j5+#+		- 	- 	- 	- =j5+#+		- 	- 	- 	- ,T-1[6>@ @ @ 	S&,'''T6=)))))r9   c                     d }t          t          d          5  t          |ddg           d d d            d S # 1 swxY w Y   d S )Nc                 |    t          j        t          j        | dz            t          j        |           g          S Nr?   )r)   r,   sumr@   s    r7   rx   zETestDifferentialEvolutionSolver.test_invalid_functional.<locals>.func   s+    8RVAF^^RVAYY7888r9   z,func\(x, \*args\) must return a scalar valuematchr?   )rt   RuntimeErrorr   )r6   rx   s     r7   test_invalid_functionalz7TestDifferentialEvolutionSolver.test_invalid_functional   s    	9 	9 	9 EG G G 	= 	= #4'7);<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   :>>c                    t          j        dg          }t          d| j                            |                     t          j        dgdgg          | j        _        t          d| j                            |                     d S )N333333?   r    r   )r)   r,   r   r0   _scale_parametersr-   r6   rc   s     r7   test__scale_parametersz6TestDifferentialEvolutionSolver.test__scale_parameters   sx    #R*<<UCCDDD $&8cURDM#:#: R*<<UCCDDDDDr9   c                    t          j        dg          }t          d| j                            |                     t          j        dgdgg          | j        _        t          d| j                            |                     d S )Nr   r   r    r   )r)   r,   r   r0   _unscale_parametersr-   r   s     r7   test__unscale_parametersz8TestDifferentialEvolutionSolver.test__unscale_parameters   sx    "S$+??FFGGG $&8cURDM#:#: S$+??FFGGGGGr9   c                 :   t          j        d          5  t          | j        ddg          }|                    ddg          }t          |d           d d d            n# 1 swxY w Y   t          | j        ddg          }t          |j        dd	g           d S )
Nr   r   r   r   )      ?      @)r.   r   r$   )r   r   r   )	r)   errstater   r/   r   r   r   r   r@   )r6   rX   vress       r7   test_equal_boundsz1TestDifferentialEvolutionSolver.test_equal_bounds   s    [))) 	$ 	$0"J/  F **C:66AAs###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ %T^j*5MNNSUS#J'''''s   A A""A&)A&c                 
   t          j        g d          }| j                            |           t	          |d         d           t          t          j        |dk    |dk                                                         d S )N)皙??r   g     r@gh㈵r?   r   r   r"   )r)   r,   r0   _ensure_constraintr   r   logical_andallr   s     r7   test__ensure_constraintz7TestDifferentialEvolutionSolver.test__ensure_constraint   sw    ===>>,,U333U1Xs###uz5A:66::<<=====r9   c                 n   t          | j        dgdd          }|                                }t          |j        |                     |j                             t          | j        dgdd          }|                                }t          |j        |                     |j                             d S )Nr   r"   F)maxiterpolishT)r   r/   solver   funr@   r6   rX   rb   s      r7   test_differential_evolutionz;TestDifferentialEvolutionSolver.test_differential_evolution   s     -NWIq
 
 
 VZ!9!9:::,NWIq
 
 
 VZ!9!9:::::r9   c                     t          | j        dg          }|                                }t          |j        |j                   d S )Nr   )r   r/   r   r   r@   r   s      r7   test_best_solution_retrievalz<TestDifferentialEvolutionSolver.test_best_solution_retrieval   s<    ,T^gYGGVXvx(((((r9   c                    ddg}d}dd}t          t          ||          }t          |j        |           dd}t          t          ||          }t          |j        |           dd}t          t          ||          }|j        sJ d S )	Nr   r?   z8callback function requested stop early by returning Truer   c                     dS )NTr;   paramconvergences     r7   callback_python_truezVTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_python_true  s    4r9   )callbackc                     dgS )N
   r;   r   s     r7   callback_evaluates_truezYTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_true  s	    4Kr9   c                     g S Nr;   r   s     r7   callback_evaluates_falsezZTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_false  s    Ir9   )r   )r   r
   r   messagesuccess)r6   r.   expected_msgr   rb   r   r   s          r7   test_callback_terminatesz8TestDifferentialEvolutionSolver.test_callback_terminates  s    &!Q	 	 	 	 (v@TUUUFNL999	 	 	 	 (v@WXXXFNL999	 	 	 	 (v@XYYY~r9   c                 f    dg}d}d }t          |||d          }t          |j        d           d S )Nr   )r   r   r   c                     t          |          t          k    rt          d          |d         |d         | z  z   |d         | dz  z  z   S )Nzargs should be a tupler   r"   r?   r   )typetupleru   )r@   argss     r7   r/   zLTestDifferentialEvolutionSolver.test_args_tuple_is_passed.<locals>.quadratic#  sJ    DzzU"" !9:::7T!Wq[(47QU?::r9   T)r   r   gUUUUUU?)r   r   r   )r6   r.   r   r/   rb   s        r7   test_args_tuple_is_passedz9TestDifferentialEvolutionSolver.test_args_tuple_is_passed  sX    	; 	; 	;
 (	(.-1/35 5 5 	FJ/////r9   c                 V    t           }dg}t          t          t          ||d           d S )Nr\   abcrC   )r
   rt   ru   r   )r6   rx   r.   s      r7   test_init_with_invalid_strategyz?TestDifferentialEvolutionSolver.test_init_with_invalid_strategy.  s=    j0 #(		* 	* 	* 	* 	* 	*r9   c                 
   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   )r\   r]   r^   r   r?   )r   r   )r
   rt   ru   r   r   r   r@   )r6   rx   r.   rb   s       r7   test_bounds_checkingz4TestDifferentialEvolutionSolver.test_bounds_checking8  s    j0 	" 	" 	" 9%j0 	" 	" 	" (vq!fq!f/E/EFFFHh/////r9   c                    t          j        dd                              dd          }t          t	          |dd d f         |dd d f                             }t          d |d          }d}|                    |d	          \  }}}}}	t          t          t          j	        t          j
        ||||||	g                              d           d S )
Ng      (@float64)dtyper?   r_   r   r"   r%   r^   )r)   r3   reshapero   zipr   _select_samplesr   lenuniquer,   )
r6   r-   r.   rX   	candidater1r2r3r4r5s
             r7   test_select_samplesz3TestDifferentialEvolutionSolver.test_select_samplesJ  s    3i00088A>>c&AAA,q!!!t5566,T61EEE	#33IqAABB	"(Ir2r2r#BCCDDEEq	J 	J 	J 	J 	Jr9   c                     t          t          | j        d          }|                                }t	          |j        d           t	          |j        d           d S )Nr"   )r   Fz/Maximum number of iterations has been exceeded.)r   r
   r.   r   r   r   r   r   s      r7   test_maxiter_stops_solvez8TestDifferentialEvolutionSolver.test_maxiter_stops_solveT  sa     -UDKKKKV^U+++V^I	K 	K 	K 	K 	Kr9   c                    t          t          | j        dd          }|                                }t	          |j        d           t	          |j        d           t	          |j        d           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           d S )Nr"   F)maxfunr   r?   z9Maximum number of function evaluations has been exceeded.r^   (   )r%   r   r   )   /   deferred)r%   r   r   updatingz8Maximum number of function evaluations has been reached.)r   r
   r.   r   r   nfevr   r   r   s      r7   test_maxfun_stops_solvez7TestDifferentialEvolutionSolver.test_maxfun_stops_solve]  sg    -UDK49; ; ;V[!$$$V^U+++V^&	' 	' 	' -U-1[564946	8 8 8
 V["%%%V^U+++V^&	' 	' 	' -U-1[5649466@B B B V["%%%V^U+++V^%	& 	& 	& 	& 	&r9   c                     t          | j        dgd          }|                                 t          t	          j        |j                  d           d S )Nr   r    {Gz?tolr   )r   r/   r   r   r)   argminpopulation_energiesrW   s     r7   test_quadraticz.TestDifferentialEvolutionSolver.test_quadratic  sT    ,T^.9]157 7 7 	RYv9::A>>>>>r9   c                 6    t          | j        dgd           d S )Nr   r   r   )r   r/   r<   s    r7   test_quadratic_from_diff_evz;TestDifferentialEvolutionSolver.test_quadratic_from_diff_ev  s/    t~ +}#'	) 	) 	) 	) 	) 	)r9   c                     t          | j        dgddd          }t          | j        dgddd          }t          |j        |j                   t          |j        |j                   d S )Nr   Fr"   r$   )r   seedr   )r   r/   r   r@   r   )r6   rb   result2s      r7   test_seed_gives_repeatabilityz=TestDifferentialEvolutionSolver.test_seed_gives_repeatability  s    ')4/4-.,/	1 1 1
 ))4/4-.,/	1 1 1
 	VXwy)))V[',/////r9   c           	          t           j                                        }g d}|D ]}t          | j        dgd|d|           d S )N)randomlatinhypercubesobolhaltonr   Fr$   )r   r   r   init)r)   r   default_rngr   r/   )r6   rnginitsr   s       r7   test_random_generatorz5TestDifferentialEvolutionSolver.test_random_generator  sl     i##%%??? 	. 	.D"4>$/=*/(+'*(,. . . . .	. 	.r9   c                 h    t          t          | j        dd          }|                                 d S )NrB   r"   )rD   r   r   r
   r.   r   rW   s     r7   test_exp_runsz-TestDifferentialEvolutionSolver.test_exp_runs  s6    ,U-1[6@568 8 8
 	r9   c                 >    ddg}t          t          |dd           d S )N)r^   1   r"   )r%   r   )r   r
   )r6   r.   s     r7   test_gh_4511_regressionz7TestDifferentialEvolutionSolver.test_gh_4511_regression  s-    
 7# 	ufb!DDDDDDr9   c                    t          t          | j        d          }|                    |j                   |                                 t          t          j        |j	                  d           t          |j
        d           d S )Nr\   r   r   r_   )r   r
   r.   _calculate_population_energiesr5   _promote_lowest_energyr   r)   r   r   _nfevrW   s     r7   "test_calculate_population_energieszBTestDifferentialEvolutionSolver.test_calculate_population_energies  sx    ,UDKKKK--f.?@@@%%'''RYv9::A>>> 	V\1%%%%%r9   c                    t          t          | j        dd          }t          |          \  }}t	          t          j        |d          d           t	          |j        d           t          t          t          |           t          t          | j                  }t          |          \  }}t          |          D ]\  }}|\  }}	||	k    sJ ||	}}|dk    r d S  d S )Nr\      )r%   r   r   r?   2   )r   r
   r.   nextr   r)   sizer  rt   StopIteration	enumerate)
r6   rX   r@   r   _fun_previsoln	x_currentfun_currents
             r7   test_iterationz.TestDifferentialEvolutionSolver.test_iteration  s     -UDK468 8 8f3RWQ]]A&&& 	V\2&&& 	mT6222 -UDK@@6ll8 (( 	 	GAt%)"I{{****#[xABww 	 	r9   c                     t          t          | j        dd          }|                                 t	          |j        dk                d S )N皙?F)r   r   )r   r
   r.   r   r   r   rW   s     r7   test_convergencez0TestDifferentialEvolutionSolver.test_convergence  sJ    ,UDKS49; ; ;"S()))))r9   c                 h    t          t          | j        d d           }|                                 d S )N)r   r   r   rW   s     r7   test_maxiter_none_GH5731z8TestDifferentialEvolutionSolver.test_maxiter_none_GH5731  s4    
 -UDK48: : :r9   c           	         t          t          t          gt          | j        fR i ddi t          t          | j                  }|                                 t          |j        d           t          t          j
        t          j        |j                                       |                                 t          |j        d           t          t          j
        t          j        |j                                       |                    d           t          |j        d           t          t          j
        t          j        |j                                       t          t          | j        d          }|                    d           t          |j        d           t          t          j
        t          j        |j                                       t          j        dd	d
                              dd          }t          t          | j        |dddd          }t          |j        d           t          t          j
        t          j        |j                                       t          |j        dk               t          |j        dk               t          j        |                    |          dd          }t+          |j        d d         |           t+          t          j        |j        d d                   d           t+          t          j        |j        d d                   d           t          j        dd	d                              dd	          }t          t          t          gt          | j        fR i d|i t          j                            ddd          }t          t          | j        |          }t7          |j        d         |dz             d S )Nr   rubbishr   r   )
qmc_enginer   )r   rs   r\   r   r^   r?   rL   {Gz?r"   )r   rD   atolr   r%   )r^   r?      r   r   )lowhighr  x0)rt   ru   r   r
   r.   init_population_randomr   r  r   r)   r   isinfr   init_population_lhsinit_population_qmclinspacer   num_population_memberspopulation_shapeclipr   r   r5   minmaxr   uniformr   )r6   rX   r5   unscaled_populationr#  s        r7   test_population_initiationz:TestDifferentialEvolutionSolver.test_population_initiation  s   
 	j1	-t{+	- 	- 	-  +	- 	- 	-
 -UDK@@
 	%%'''V\1%%%rx :;;<<===""$$$V\1%%%rx :;;<<===""h"777V\1%%%rx :;;<<===,UDKgNNN""g"666V\1%%%rx :;;<<=== [Q++33Aq99
,UDK2<6@26QK K K
 	V\1%%%rx :;;<<===-2333'61222 !gf&@&@&L&L&', ,F-bqb13FGGG 	BF6#4RaR#8991===BF6#4RaR#8991=== [Q++33Aq99
j1	.t{+	. 	. 	.  ,	. 	. 	. Y3Sq99,4;2
 
 
 	)!,b3h77777r9   c                     t          t          | j        ddg          }|j        sJ t	          t
                    5  t          t          | j        ddg           d d d            d S # 1 swxY w Y   d S )Nr  r(   r"   @)r   r
   r.   r   rt   ru   )r6   r   s     r7   test_x0z'TestDifferentialEvolutionSolver.test_x0I  s    $UDKS#JGGG{ :&& 	F 	F"5$+3*EEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs   A((A,/A,c                 8    d }ddg}t          ||d           d S )Nc                 B    | d         dk     rt           j        S | d         S )Nr   r$   r"   )r)   infr~   s    r7   sometimes_infzWTestDifferentialEvolutionSolver.test_infinite_objective_function.<locals>.sometimes_infU  s    tbyyvQ4Kr9   r!   F)r.   dispr   )r6   r7  r.   s      r7    test_infinite_objective_functionz@TestDifferentialEvolutionSolver.test_infinite_objective_functionR  s8    	 	 	 &!}V%HHHHHHr9   c                     ddg}t          t          |d          }t          |j        dk               t          |j        j        t          u            |                                 d S )Nr   r   )r   )r   r
   r   	_updating_mapwrapper_mapfuncmapr   r6   r.   rX   s      r7   test_deferred_updatingz6TestDifferentialEvolutionSolver.test_deferred_updating\  s`    H%,UFZPPP J.///"+s2333r9   c                 P   ddg}t          t          |          }t          |j        dk               t	          t
                    5  t          t          |d          5 }	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          |j        dk               d S )Nr   	immediater?   )workersr   )r   r
   r   r;  r   UserWarningr?  s      r7   test_immediate_updatingz7TestDifferentialEvolutionSolver.test_immediate_updatingd  s   H%,UF;; K/000 ; 	 	,UFAFFF &              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 J./////s6   BA, B,A0	0B3A0	4BB
Bc                 N   ddg}t          j        d          5 }t          t          |d|j                  5 }t          |j        j        d u           t          |j        dk               |	                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          t          |dd          5 }t          |j        j        d u           t          |j        dk               |	                                 d d d            d S # 1 swxY w Y   d S )Nr   r?   r   )r   rC  )
multiprocessingPoolr   r
   r>  r   r<  poolr;  r   )r6   r.   prX   s       r7   test_parallelz-TestDifferentialEvolutionSolver.test_parallelq  s   H%!!$$ 	+Fv
AE,C ,C ,C 	FLF&+47888F$
2333LLNNN		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 )124 4 4 	7=F&+47888F$
2333LLNNN		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   B"AB?B"B	B"B	B""B&)B&ADD!Dc                     t          t          ddg          }|                                 t          |                                           d S )Nr   )r   r
   r   r   	convergedrW   s     r7   test_convergedz.TestDifferentialEvolutionSolver.test_converged  sC    ,UVV4DEE  ""#####r9   c                 x   d }d t          |t          j         d          }t          t          ddg|                              t          j        ddg                    }t          |d           t          t          j         d          }t          t          ddg||f          g d	}g d
}t          ||          D ]N\  }}                    t          j        |                    }t          |t          j
        |                     Ot                              t          j        |                    t          j        |                     t          j        fdt          j        |          D                       }	|	j        dk    sJ fd}
t          |
t          j         d          }t          t          ddg||fd          d_        t          j        t          d          5                      t          j        |                     d d d            d S # 1 swxY w Y   d S )Nc                 &    | d         | d         z   gS Nr   r"   r;   r~   s    r7   constr_fzNTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f      aD1Q4K= r9   c                 p    t          j        | d         dz  | d         z   | d         | d         z
  g          S Nr   r?   r"   r)   r,   r~   s    r7   	constr_f2zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f2  3    8QqT1Wqt^QqTAaD[9:::r9   ffffff?r   constraintsr   r'   ?))333333?r"   r   )r$   r$   ))r   {Gz?r   )r2  @r   )r   r   r   c                 :    g | ]}                     |          S r;   )_constraint_violation_fn).0r@   rX   s     r7   
<listcomp>zPTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.<listcomp>  s=     )@ )@ )@-. *0)H)H)K)K )@ )@ )@r9   )r\   r"   r\   c                 $     |           j         S r   )r4   )r@   rW  s    r7   	constr_f3zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f3  s    9Q<<>!r9   F)r[  
vectorizedTz#An array returned from a Constraintr   )r   r)   r6  r   r
   ra  r,   r   r   r   r2   shaperf  pytestr   r   )r6   rR  nlccvnlc2xsvsr@   r   constraint_violationre  rW  rX   s              @@r7   test_constraint_violation_fnz<TestDifferentialEvolutionSolver.test_constraint_violation_fn  s   	! 	! 	!	; 	; 	; "(RVGS99,UVV4D:=@ @ @ ,,RXsCj-A-ABBB$$$"9rvgs;;,UVV4D:=tF F F
 0//;;;BKK 	2 	2DAq00!==BBa 0 01111 	++BHRLL9928B<<	
 	
 	
  "x )@ )@ )@ )@24(2,,)@ )@ )@  A  A#)Y6666	" 	" 	" 	" 	" #9rvgs;;,UVV4D:=t8=? ? ? !]$I
 
 
 	: 	: ++BHRLL999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   :(H//H36H3c           	         d }d }t          |t          j         d          }t          t          ddg|          }|                    t          j        ddgddgg                    \  }}t          |ddg           t          |t          j        d	gd
gg                     |j	        dk    sJ t          |t          j         d          }dD ]x}t          t          ddg||f|d          }|                    t          j        ddgddgg                    \  }}t          |ddg           t          |t          j        g dg dg                     |                    t          j        ddgddgg                    \  }}t          |ddg           t          |t          j        g dg dg                     |j	        dk    sJ |                    t          j        ddgddgg                    \  }}t          |ddg           t          |t          j        g dg dg                     |j	        dk    sJ zd S )Nc                 &    | d         | d         z   gS rQ  r;   r~   s    r7   rR  zZTestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f  rS  r9   c                 L    | d         dz  | d         z   | d         | d         z
  gS rU  r;   r~   s    r7   rW  z[TestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f2  s)    aD!GadNAaD1Q4K00r9   rY  r   rZ  r$   r   Fr'   r2  )r?   r"   r\  )FTr   )r[  rf  r   g333333?)r'   r  r   )r   r^  r   )r2  r_  r   )r?   r\   r`   T)r   r   r   )
r   r)   r6  r   r
   #_calculate_population_feasibilitiesr,   r   r   rg  )	r6   rR  rW  ri  rX   feasrj  rk  	vectorizes	            r7   (test_constraint_population_feasibilitieszHTestDifferentialEvolutionSolver.test_constraint_population_feasibilities  s   	! 	! 	!	1 	1 	1 "(RVGS99,UVV4D:=@ @ @
 ==HsCj2r(+,,. .bTE5>***B3%# 8 8999x6!!!!"9rvgs;;& 	& 	&I08H>A4[<E:DF F FF
 AA3*sCj1224 4HD"u~...BHmmm^^^-L$M$MNNNAA3*r2h/002 2HD"u~...BHmmm]]]-K$L$LMMM8v%%%%AA4,R1224 4HD"e}---BHnnnmmm-L$M$MNNN8v%%%%%+	& 	&r9   c                 4   d }t          |t          j         d          }t          t          ddg|          }t          t                    5  |                                }d d d            n# 1 swxY w Y    ||j                  dk    sJ |j	        sJ d S )Nc                 J    t          j        | d         | d         z   g          S rQ  rV  r~   s    r7   rR  zGTestDifferentialEvolutionSolver.test_constraint_solve.<locals>.constr_f       8QqTAaD[M***r9   rY  r   rZ  )
r   r)   r6  r   r
   r   rD  r   r@   r   )r6   rR  ri  rX   r   s        r7   test_constraint_solvez5TestDifferentialEvolutionSolver.test_constraint_solve  s    	+ 	+ 	+ "(RVGS99,UVV4D:=@ @ @ ; 	! 	!,,..C	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! x#%%%%{s   A..A25A2c                 :   d }t          |t          j         d          }t          t          ddg|dd          }t          t                    5  |                                }d d d            n# 1 swxY w Y   |j        dk    sJ |j	        rJ t          t          ddg|d	          }t          |           |j                                        rJ t          j        |j                                                  rJ 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                 J    t          j        | d         | d         z   g          S rQ  rV  r~   s    r7   rR  zLTestDifferentialEvolutionSolver.test_impossible_constraint.<locals>.constr_f  ry  r9   rs   r   r\   r"   )r[  r%   r   r   F)r[  r      )r   r)   r6  r   r
   r   rD  r   maxcvr   r
  feasibler   isfiniter   rn  r5   r  r   )r6   rR  ri  rX   r   lrj  s          r7   test_impossible_constraintz:TestDifferentialEvolutionSolver.test_impossible_constraint  s   	+ 	+ 	+ "(RVGR88,UVV4D:=235 5 5 ; 	! 	!,,..C	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! y1}}}};
 -UVV4D:=uN N NV?&&(((((;v9::>>@@@@@ (+-3-GA-O"Aq6*'-'8!Q'C1a&!!!)$'A	2 	#QFAAAI. 	%%'''V03R88888s   A00A47A4c                    d }t          |t          j         d          }t          t          ddg|          }|j        } |ddt          j        dg          ddt          j        dg                    sJ  |ddt          j        dg          ddt          j        dg                    d	u sJ  |ddt          j        dg          ddt          j        dg                    sJ  |d
dt          j        dg          dd	t          j        dg                    sJ  |dd	t          j        ddg          dd	t          j        ddg                    sJ  |dd	t          j        ddg          dd	t          j        ddg                    sJ  |dd	t          j        ddg          dd	t          j        ddg                    d	u sJ d S )Nc                 &    | d         | d         z   gS rQ  r;   r~   s    r7   rR  zCTestDifferentialEvolutionSolver.test_accept_trial.<locals>.constr_f%  rS  r9   rY  r   rZ  r'   Tr   r   Fg#@r$   g?)r   r)   r6  r   r
   _accept_trialr,   )r6   rR  ri  rX   fns        r7   test_accept_trialz1TestDifferentialEvolutionSolver.test_accept_trial"  s   	! 	! 	!!(RVGS99,UVV4D:=@ @ @!r#tRXrd^^S$"GGGGG3bhuoosD"(C5//JJeSSSSr#tRXrd^^S$"GGGGG r#tRXrd^^S%2$HHHHH 3rxc
33ubhCy113 3 	4 	4 	43rxc
33ubhDz224 4 	5 	5 	53rxc
33S%3PS*AUAUVVZ_______r9   c                   
 t          j        g d          }t          j        dt           j        dg          }t          j        g d          }t          t	          ||          |          }|                    |          dk                                    sJ |                    g d          dk                                    sJ t          j        dd          	                    d	d
          }g }|D ]*}|
                    |                    |                     +t           j                            |                    |j                  t          j        |          j                   t          j        g d          }t          j        g dg dg dg          
t          t          
t           j         d          |          }|                    |          dk                                    sJ |                    g d          dk                                    sJ t          j        dd          	                    dd          }g }|D ]*}|
                    |                    |                     +t           j                            |                    |j                  t          j        |          j                   t          t          t          
          t           j         d          |          }|                    |          dk                                    sJ |                    g d          dk                                    sJ 
fd}t!          |t           j         d          }	t          |	g d          }|                    |          dk                                    sJ |                    g d          dk                                    sJ d S )N)r   r}  r   r$   F   )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]   c                 .                         |           S r   )dot)r@   As    r7   r   zDTestDifferentialEvolutionSolver.test_constraint_wrapper.<locals>.fun_  s    5588Or9   )r)   r,   r6  r   r   	violationanyr   r3   r   appendtestingr   r4   r	   r   r   )r6   lbubr#  pcrl  
violationsr@   r   	nonlinearr  s             @r7   test_constraint_wrapperz7TestDifferentialEvolutionSolver.test_constraint_wrapper;  s   Xkkk""XsBFB'((Xiii  r233R  1$))+++++^^^,,16688888 Yq"%%a++
 	/ 	/Abll1oo....

""2<<#5#5rx
7K7K7MNNNXlll##HlllLLL,,,?@@ 0RVGQ ? ?DDR  1$))+++++---..!388::::: Yq"%%a++
 	/ 	/Abll1oo....

""2<<#5#5rx
7K7K7MNNN 0A K K "$ $R  1$))+++++---..!388:::::	 	 	 	 	 (bfWa88		+;+;+;<<R  1$))+++++---..!388:::::::r9   c                    d }t          |ddgddg          }t          |ddg          }t          j        |j        d                   dk    sJ g d}g d	}t          ||          D ](\  }}t          |                    |          |           )t          |                    t          j        |          j	                  t          j        |          j	                   |
                    t          j        |          j	                  j        dt          |          fk    sJ |                    t          j        |          j	                  j        dt          |          fk    sJ |j        dk    sJ |j        dk    sJ d S )
Nc                 v    t          j        | d         dz  | d         z   | d         dz  | d         z
  g          S rU  rV  r~   s    r7   cons_fzQTestDifferentialEvolutionSolver.test_constraint_wrapper_violation.<locals>.cons_fh  sD     8QqTQY1-qTQY1-/ 0 0 0r9   rs   g333333r?   r$   r"   r   )rl   )r$   r]  )r]  r]  )r'   333333)r'   r   ))r   r   )r   r'   )r^  r   )gRQ?r   )r  g=
ףp=?)r   r   r)   r  r.   r   r   r  r,   r4   r   rg  r   
num_constrparameter_count)r6   r  ri  r  rl  rm  r@   r   s           r7   !test_constraint_wrapper_violationzATestDifferentialEvolutionSolver.test_constraint_wrapper_violationg  s|   	0 	0 	0 "&2w-!Q@@c1X..wry|$$))))HHHCCCBKK 	0 	0DAqBLLOOQ//// 	RXb\\^44	( 	( 	(vvbhrlln%%+3r77|;;;;||BHRLLN++1aR\AAAA}!!!!!Q&&&&&&r9   c           	      *
   d }t          j        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          j        g d          }t          |t           j         |          }dgdz  dgd
z  z   dgz   }t          ||dd|d          }d}d}t           ||          |           |j        sJ t          |j        |d !           t          |j	        |d"!           t          t          j        ||j        z  |k                         t          t          j        |j        t          j        |          d d d#f         k                         t          t          j        |j        t          j        |          d d df         k                         t          t          |          t           j         |          }t          ||dd|d          }t           ||          |           |j        sJ t          |j        |d !           t          |j	        |d"!           t          t          j        ||j        z  |k                         t          t          j        |j        t          j        |          d d d#f         k                         t          t          j        |j        t          j        |          d d df         k                         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                      5 }|                    t                      t          ||d&d|d          }d d d            n# 1 swxY w Y   t          |j        |d !           t          |j	        |d"!           t          t          j        ||j        z  |k                         t          t          j        |j        t          j        |          d d d#f         k                         t          t          j        |j        t          j        |          d d df         k                         d S )'Nc                     t          j        dg| f          } t          j        d| dd         z            d| dd         z  | dd         z  z
  t          j        | dd                    z
  }|S )Nr   r^   r"   )r)   hstackr}   r@   r   s     r7   fz2TestDifferentialEvolutionSolver.test_L1.<locals>.f  si    	A3(##A&1QqS6""Qq1vXa!f_4rvae}}DCJr9   )r      )r?   r?   r"   r"   r"   )r"   r?   r      )r"   r?   r   )r   rs   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   r   r   r   r!   r   rF     rD   r   r[  r%   )r"   r"   r"   r"   r"   r"   r"   r"   r"   r\   r\   r\   r"   igMb@?r  g{Gzt?r   c                     t          j        dg| f          } d| d         z  d| d         z  z   | d         z   | d         z   d| d         z  | d         z   gS )Nr   r?   r\   r  r  r  r)   r  r~   s    r7   c1z3TestDifferentialEvolutionSolver.test_L1.<locals>.c1  s]    	A3(##AadFQqtVOae+ae3qtGaeO% %r9   c                 j    t          j        dg| f          } d| d         z  | d         z
  | d         z   S )Nr   r   r  r  r  r  r~   s    r7   c2z3TestDifferentialEvolutionSolver.test_L1.<locals>.c2  s6    	A3(##Aad7QqT>AbE))r9   rG   )r)   zerosr,   r	   r6  r   r   r   r@   r   r   r   r   r   r   filterrD  )r6   r  r  bLr.   r   x_optf_optr  r  L2NN2r[  sups                   r7   test_L1z'TestDifferentialEvolutionSolver.test_L1  ss   	 	 	
 HX)!^^^
!aW*$!ZZZ-)!^^^
!aW*$!ZZZ-)!^^^
!aW*$!ZZZ-abb!""fIH33344Q++!xjl*fX5 %Q$23aA A A 8%%((({u40000T2222qw!|$$%%%su 0 0A 6677888su 0 0A 6677888 Z]]RVGQ77 %Q$23aA A A 	%%((({u40000T2222qw!|$$%%%su 0 0A 6677888su 0 0A 6677888
	% 	% 	%
	* 	* 	* Qrr111uXw"1"66a!QQQi"&!AaC&99RVGQqsV44 bfWa!f55!Rn   	4CJJ{###(FZ.2124 4 4C	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	u40000T2222qw!|$$%%%su 0 0A 6677888su 0 0A 667788888s   %0P!!P%(P%c           	      F   d }d }t          |dt          j                  }dgdz  }|}t                      5 }|                    t
                     t          ||dd|          }d d d            n# 1 swxY w Y   d	}d
}	t           ||	          |           t          |j        |           t          |j	        |	d           |j
        sJ t          t          j        t          j         ||j	                            dk                         t          t          j        |j	        t          j        |          d d df         k                         t          t          j        |j	        t          j        |          d d df         k                         d S )Nc                 ^   t          j        dg| f          } | d         dz
  dz  d| d         dz
  dz  z  z   | d         dz  z   d| d         d	z
  dz  z  z   d| d         d
z  z  z   d| d
         dz  z  z   | d         dz  z   d| d
         z  | d         z  z
  d| d
         z  z
  d| d         z  z
  }|S )Nr   r"   r   r?   r^   r  r\   r]   r  r_   r#   r  r  r  s     r7   r  z2TestDifferentialEvolutionSolver.test_L2.<locals>.f  s    	A3(##AaDGa<!QqT"WqL.01Q47:Q!R!|^KadAg: !!A$'	*,-aD!G467!fQqTkBDFqtGLQqT6C Jr9   c                 @   t          j        dg| f          } dd| d         dz  z  z
  d| d         dz  z  z
  | d         z
  d| d         dz  z  z
  d| d         z  z
  dd	| d         z  z
  | d         dz  z
  d
| d
         dz  z  z
  d| d         z  z   dd| d         z  z
  d| d         z  z
  d| d         dz  z  z
  | d         z
  | d         z   d| d         dz  z  | d         dz  z
  d| d         z  | d         z  z   d| d         dz  z  z
  d| d
         z  z
  d| d         z  z   gS )Nr      r?   r"   r\   r]   r^         r_   r  r#   i  r   r  r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L2.<locals>.c1  sG   	A3(##A!AaD!G)Oa!ai/!A$61Q47BQqtVK"QqT'MAaD!G+a!ai7!AaD&@!AaD&L1QqT6)BqtQwJ61=!DqtQwJ1q(1QqT6!A$;61Q47BadF!W%& &r9   r   r   r#   rG   r  rD   r   r[  gy\
E@)gܤ@g$H8?g	޿g0ev@gn8)gk_@/?g0g+?h㈵>r  r"   )r   r)   r6  r   r  rD  r   r   r   r@   r   r   r   r,   )
r6   r  r  r  r.   r[  r  r   r  r  s
             r7   test_L2z'TestDifferentialEvolutionSolver.test_L2  s   	 	 		& 	& 	&  Arv..Q   	MCJJ{###(FZ.2M M MC	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M
 "1 	%%((('''u40000{rx35		**a/00111su 0 0A 6677888su 0 0A 667788888s   /A33A7:A7c           	         d }t          j        d          }d|dg df<   d|dg df<   d|d	g d
f<   |dd dd f         }t          j        g d          }d }t          ||t           j                  }t          |dt           j                  }dgdz  }||f}t                      5 }	|	                    t                     t          ||d|d	          }
d d d            n# 1 swxY w Y   d}d}t           ||          |d           t          |
j        |d           t          |
j        |d           |
j        sJ t          t          j        ||
j        z  |k                         t          t          j        t          j         ||
j                            dk                         t          t          j        |
j        t          j        |          d d df         k                         t          t          j        |
j        t          j        |          d d df         k                         d S )Nc                    t          j        dg| f          } | d         dz  | d         dz  z   | d         | d         z  z   d| d         z  z
  d| d         z  z
  | d         dz
  dz  z   d| d         d	z
  dz  z  z   | d	         dz
  dz  z   d| d
         dz
  dz  z  z   d	| d         dz  z  z   d| d         dz
  dz  z  z   d| d         dz
  dz  z  z   | d         dz
  dz  z   dz   }|S )Nr   r"   r?   r  r  r\   r   r]   r^   r_   r#   r  r  r  -   r  r  s     r7   r  z2TestDifferentialEvolutionSolver.test_L3.<locals>.f  s    	A3(##AQ47QqT1W$qtAaDy02ad7:R!WDaDGa< "#QqT!VaK-034Q46A+>@A1Q46A+NQqT1W9 !A$r'A~.011Q47Q,? bEAI>" %''C
 Jr9   )r]   r  )r  r   r\   ir"   )r"   r?   r#   r  )r   r     r   r?   )r  r   r   r?   r\   )r"   r?   r  r   )ir   ic                    t          j        dg| f          } d| d         z  d| d         z  z
  d| d         dz
  dz  z  z
  d	| d
         z  z   d| d         dz
  dz  z  d| d         dz
  dz  z  z
  d| d         dz  z  z
  d	| d         z  z   dz   | d         dz   d| d         dz
  dz  z  z
  d| d         z  | d         z  z   d| d         z  z
  d| d         z  z   d| d         dz  z  d| d         z  z
  | d         dz
  dz  z
  d| d         z  z   dz   d| d         dz
  dz  z  d| d         dz
  dz  z  z
  d| d         dz  z  z
  | d         z   dz   gS )Nr   r\   r"   r_   r?   r  r  r  r#   r   r   r]   x   r  r^   r   r         r   r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L3.<locals>.c1  s   	A3(##AadFQqtVOb!A$q&1n4q2w>!Q{NQ!Q{]2QqtQwY>1Q4G#MqT1WHq!A$q&1},q1vad{:R!WDq1vMqtQwJ1Q4'1Q46A+5!A$>C!A$q&1$q!A$q&1}4q1qy@1Q4G"L	N Nr9   r   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	   r6  r   r   r  rD  r   r   r@   r   r   r   r   r6   r  r  r  r  r  r  r.   r[  r  r   r  r  s                r7   test_L3z'TestDifferentialEvolutionSolver.test_L3  s   	 	 	 HW*!\\\/+!\\\/*!]]]
abb!""fIH^^^$$	N 	N 	N Q26**Arv..R!f   	MCJJ{###(F5@!M M MC	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M
C%%d3333u40000T2222{q35yA~&&'''rx35		**a/00111su 0 0A 6677888su 0 0A 667788888s   (/C##C'*C'c           	      V   d }t          j        d          }d|dddgf<   d|dg d	f<   d
|dddgf<   |dd dd f         }t          j        g d          }d }t          |t           j         d          }t          |dt           j                  }dgdgdz  z   dgdz  z   }||f}t                      5 }	|	                    t                     t          ||dd|d          }
d d d            n# 1 swxY w Y   d}g d}t           ||          |d           t          |
j        |d           t          j                    dk    r@t          j        t           j                  j        dk     rt          |
j        |dd           nt          |
j        |dd            |
j        sJ t'          t          j        ||
j        z  |k                         t'          t          j        t          j         ||
j                            dk                         t'          t          j        |
j        t          j        |          d d df         k                         t'          t          j        |
j        t          j        |          d d df         k                         d S )!Nc                 :    t          j        | d d                   S )Nr\   r)   r}   r~   s    r7   r  z2TestDifferentialEvolutionSolver.test_L4.<locals>.f7  s    6!BQB%== r9   )r]   r  ){Gzd?r  r"   r]   r_   )r  r  g{Gzdr?   )r^   r#   r]   )r  g{Gzr\   r  r^   )r"   r"   r"   c                 `   t          j        dg| f          } | d         | d         z  d| d         z  z
  d| d         z  z
  dz   | d         | d	         z  d
| d         z  z
  | d         | d         z  z
  d
| d         z  z   | d         | d         z  dz
  | d         | d         z  z
  d| d         z  z   gS )Nr   r"   r_   g!> 
@r]   r    gSUX@r?   r#   i  r^   r\   r  i i	  r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L4.<locals>.c1A  s    	A3(##AaD1I	!A$.QqT9IEaD1IQqT	)AaD1I5QqT	AaD1I'!A$qt)3d1Q4i?A Ar9   r   )r    '  )  r  )r   r  rG   r  r  gh|?@)got@g?@g:@gt$f@gVfyr@gh o?k@gCq@gVfx@MbP?r  Windowsgv!>gy&1l?)rtolr  gh㈵>ga2U0*c?)r)   r  r,   r	   r6  r   r   r  rD  r   r   r   platformsystemr   intpitemsizer@   r   r   r   )r6   r  r  r  r  r  r  r.   r[  r  r   r  r  s                r7   test_L4z'TestDifferentialEvolutionSolver.test_L45  s   	! 	! 	! HV%!aV)1!YYY,"!aV)abb!""fIHYYY	A 	A 	A Q++Arv..=/!"33zl1nD!f   	0CJJ{###(FZ*.K-.0 0 0C	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 2 2 2 	%%e4444U3333 O**rx/@/@/IA/M/MCE5vFCCCCC CE5t&AAAA{q35yA~&&'''rx35		**a/00111su 0 0A 6677888su 0 0A 667788888s   40C00C47C4c           	         d }d }t          |t          j         d          }dgdz  }|}t          ||dd|          }d	}d
}t	           ||          |d           t	          |j        |d           |j        sJ t          t          j        t          j	         ||j
                            dk                         t          t          j        |j
        t          j	        |          d d df         k                         t          t          j        |j
        t          j	        |          d d df         k                         d S )Nc                 "   t          j        dg| f          } t          j        dt           j        z  | d         z            dz  t          j        dt           j        z  | d         z            z  | d         dz  | d         | d         z   z  z  }| S )Nr   r?   r"   r\   )r)   r  sinpir  s     r7   r  z2TestDifferentialEvolutionSolver.test_L5.<locals>.fk  s~    	A3(##A6!BE'!A$,''*26!BE'!A$,+?+??aD!GQqT!A$Y')C4Kr9   c                     t          j        dg| f          } | d         dz  | d         z
  dz   d| d         z
  | d         dz
  dz  z   gS )Nr   r"   r?   r]   r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L5.<locals>.c1q  sU    	A3(##AaD!GadNQ&!H!Q{*, ,r9   r   r   r   r?   rG   r  r  )gJIť?gU(C@g#gh㈵>r  -C6?r"   )r   r)   r6  r   r   r   r   r   r   r,   r@   	r6   r  r  r  r.   r[  r   r  r  s	            r7   test_L5z'TestDifferentialEvolutionSolver.test_L5h  sW   	 	 		, 	, 	,
  RVGQ//1$Q$1<> > > )%%d3333T2222{rx35		**a/00111su 0 0A 6677888su 0 0A 667788888r9   c           	         d }d }t          |dt          j                  }ddg}|}t          ||dd|d	          }d
}d}t	           ||          |d           t	          |j        |d           t	          |j        |d           |j        sJ t          t          j	        t          j
         ||j                            dk                         t          t          j	        |j        t          j
        |          d d df         k                         t          t          j	        |j        t          j
        |          d d df         k                         d S )Nc                 n    t          j        dg| f          } | d         dz
  dz  | d         dz
  dz  z   }|S )Nr   r"   r   r\   r?   r}  r  r  s     r7   r  z2TestDifferentialEvolutionSolver.test_L6.<locals>.f  s>    	A3(##AQ47Q,!A$)a/CJr9   c                     t          j        dg| f          } | d         dz
  dz  | d         dz
  dz  z   dz
  | d         dz
  dz   | d         dz
  dz  z
  dz   gS )Nr   r"   r^   r?   r    r_   gp=
׳T@r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L6.<locals>.c1  sm    	A3(##AqT!VaK1Q4!8a-/#5d1fq[LAaD1Hq=058: :r9   r   )   r    r   rG   r  gHz>)rD   r   r[  r   )gq=
ף0,@g??g1r  r  r  r  r"   )r   r)   r6  r   r   r   r@   r   r   r   r,   r  s	            r7   test_L6z'TestDifferentialEvolutionSolver.test_L6  sn   	 	 	
	: 	: 	:
  Arv..X&$Q$1<$H H H!%%d3333U3333u40000{rx35		**a/00111su 0 0A 6677888su 0 0A 667788888r9   c           	         d }d }t          |g dg d          }ddgdgdz  z   }|}t          ||d	d
|          }g d}d}t           ||          |           t          |j        |d           t          |j        |d           |j        sJ t          t          j        t          j	         ||j                            t          j	        g d          k                         t          t          j        t          j	         ||j                            t          j	        g d          k                         t          t          j        |j        t          j	        |          d d df         k                         t          t          j        |j        t          j	        |          d d df         k                         d S )Nc                     t          j        dg| f          } d| d         dz  z  d| d         z  | d         z  z   d| d         z  z   d	z
  }|S )
Nr   g+dvqn@r\   r?   g"C?r"   r^   gtۈB@gn@r  r  s     r7   r  z2TestDifferentialEvolutionSolver.test_L7.<locals>.f  s\    	A3(##AQqT1W$y1~ad'::QqT>"$-.CJr9   c                    t          j        dg| f          } dd| d         z  | d         z  z   d| d         z  | d         z  z   d	| d
         z  | d         z  z
  dd| d         z  | d         z  z   d| d         z  | d         z  z   d| d
         dz  z  z   dd| d
         z  | d         z  z   d| d         z  | d
         z  z   d| d
         z  | d         z  z   gS )Nr   gl#fUU@g+WPIw?r?   r^   g=BD?r"   r]   gOlb?r\   gaۢ T@g+<$!6}?g h?g^5a?g/h"@gxLCs?gݗT?g^gED_?r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L7.<locals>.c1  s    	A3(##A	!A$qt 33i!nQqT6IIadN1Q4'( y1~ad22Yqt^AaD5HHadAg%& y1~ad22Yqt^AaD5HHadN1Q4'(	 	r9   )r   Z   r}  )\   n      )N   f   )!   r  )   r  r\   rG   r  r  )gq S@g] @@g˻f=@g:F@g%ShMcB@gCgbr  r  r   r"   )
r   r   r   r@   r   r   r   r)   r   r,   r  s	            r7   test_L7z'TestDifferentialEvolutionSolver.test_L7  s   	 	 		 	 	  KKK??X&(A5$Q$1<> > >
   %%(((u40000T2222{rx35		**bh{{{.C.CCDDEEErx35		**bh}}}.E.EEFFGGGsu 0 0A 6677888su 0 0A 667788888r9   ppc64lezfails on ppc64le)reasonc           	         d }t          j        d          }d|dddgf<   d|dddgf<   |dd dd f         }t          j        ddg          }d	 }t          ||t           j                  }t          |t          j        dd
          t          j        dd                    }dgdz  dgdz  z   }||f}t                      5 }	|	                    t                     t          ||dd|d          }
d d d            n# 1 swxY w Y   d}d}t           ||          |d           t          |
j        d d         |d d         d           t          |
j        dd          |dd          d           t          |
j        |d           |
j        sJ t          t          j        ||
j        z  |k                         t          t          j        t          j         ||
j                            d
k                         t          t          j        t          j         ||
j                            dk                         t          t          j        |
j        t          j        |          d d df         k                         t          t          j        |
j        t          j        |          d d df         k                         d S )Nc                     t          j        dg| f          } d| d         z  d| d         dz  z  z   d| d         z  z   d| d         dz  z  z   }|S )Nr   r\   r"   r  r?   g^>r  r  s     r7   r  z2TestDifferentialEvolutionSolver.test_L8.<locals>.f  sZ    	A3(##AAaD&8AaD!G++a!f4z!A$'7IICJr9   )r\   r^   )r"   rs   r"   r]   r\   r?   皙c           	         t          j        dg| f          } dt          j        | d          dz
            z  dt          j        | d          dz
            z  z   dz   | d         z
  dt          j        | d         dz
            z  dt          j        | d         | d         z
  dz
            z  z   dz   | d         z
  dt          j        | d         dz
            z  dt          j        | d         | d         z
  dz
            z  z   d	z   gS )
Nr   r  r\   r`   r]   gfffff@r"   r?   g33333;@)r)   r  r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L8.<locals>.c1  s   	A3(##A1d
+++d261Q4%*3E3E.EEaD!!T	***T"&1ad42H2H-HHaD!!T	***T"&1ad42H2H-HH r9   MbPr  )r   i  )r   g?rF   r  i  )rD   r   r[  r   )gEGr?@gT㥛D@g&D
n?gd,[ٿg#J{@r  gMb`?r   r   )r)   r  r,   r	   r6  r   fullr   r  rD  r   r   r@   r   r   r   r   r  s                r7   test_L8z'TestDifferentialEvolutionSolver.test_L8  s   	 	 	
 HV!aV)!aV)abb!""fIHdD\""		 		 		 Q26**BGAv$6$658I8IJJQ}Q.!f   	7CJJ{### )FZ.2157 7 7C	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 <%%d3333bqb	5!948888abb	5948888T2222{qw!|$$%%%rx35		**f455666rx35		**e344555su 0 0A 6677888su 0 0A 667788888s   0C>>DDc           	         d }d }t          |dgdg          }dgdz  }|}t          ||dd|	          }t          j        d          dz  d
g}d}t	           ||          |           t	          t          j        |j                  |d           t	          |j        |d           |j        sJ t          t          j
        t          j         ||j                            dk                         t          t          j
        t          j         ||j                            dk                         t          t          j
        |j        t          j        |          d d df         k                         t          t          j
        |j        t          j        |          d d df         k                         d S )Nc                 d    t          j        dg| f          } | d         dz  | d         dz
  dz  z   S )Nr   r"   r?   r  r~   s    r7   r  z2TestDifferentialEvolutionSolver.test_L9.<locals>.f	  s6    	A3(##AQ47ad1fq[((r9   c                 Z    t          j        dg| f          } | d         | d         dz  z
  gS rU  r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L9.<locals>.c1  s0    	A3(##AaD1Q47N##r9   r  r  rr   r?   rG   r  r  r$   g      ?r  r   r"   )r   r   r)   sqrtr   absr@   r   r   r   r   r,   r  s	            r7   test_L9z'TestDifferentialEvolutionSolver.test_L9  s   	) 	) 	)	$ 	$ 	$  UGeW551$Q$1<> > > As#%%(((suu48888T2222{rx35		**f455666rx35		**e344555su 0 0A 6677888su 0 0A 667788888r9   c                    t           j                            d          }t          j        }d} |j        |d|d}d ddg}dd	g}t          |||f|d|
          }|j        d         dk    sJ t          |j        |d           t          |||f|d|
          }fd}	t          |	|j        d         d||fd	g          }
t          |j        d         |
j                   |j
        |j
        k    sJ d S )Nl   b	)r^   r$   r  )r  random_statec                     |\  }}t          j         |j        |g| R                                d           }t          j        |          rt           j        }|S )Nrs   axis)r)   logpmfr}   isnanr6  )rJ  r   distr@   lls        r7   rx   z>TestDifferentialEvolutionSolver.test_integrality.<locals>.func+  sZ    GD!&!a))--2-666Bx|| VIr9   TF)r"      )r   gffffff?)r   integralityr   r   r   r^   r   )r  c                 ^    |\  }}} t          j        || d         g          ||          S )Nr   rV  )rJ  r   nr  r@   rx   s        r7   func2z?TestDifferentialEvolutionSolver.test_integrality.<locals>.func2C  s4    JAtQ4!QqT++T1555r9   r"   )r   r.   )r)   r   r   r   nbinomrvsr   r@   r   r   r   )r6   r   r  shapesr@   r  r.   r   res2r  LBFGSBrx   s              @r7   test_integralityz0TestDifferentialEvolutionSolver.test_integrality$  sS   i##M22|DHf5s;;;	 	 	 Um9%$T6q	1<U*-/ / /
 uQx1}}}}vD1111 &dF$2=d+.0 0 0	6 	6 	6 	6 	6 %!T1"+. . .q	68,,,x37""""""r9   c                 *   d }g d}g d}t          ||dd          }t          |j        d         g d           t          |j        d         g d	           t          ||d|          }t          |j        d         g d
           t          |j        d         g d           t          |j        g d           |j        du sJ g d}t          ||d|          }t          |j        d         g d           t          |j        d         g d           t          t          j        |j        d                   g d           t          t          j        |j        d                   g d           g d}t          ||d|          }t          |j        d         g d           t          |j        d         g d           g d}t          j	        t          d          5  t          ||d|           d d d            d S # 1 swxY w Y   d S )Nc                     | S r   r;   r~   s    r7   r  zBTestDifferentialEvolutionSolver.test_integrality_limits.<locals>.fQ  s    Hr9   )TFT))r  r   r   皙@)ffffff
@皙@F)r.   r   r  r   )r  r   r$  r"   )r   r#  r%  )r$   r   g      @)g      ?r#        @))r  gr"  )g$gffffff@)g      r         %)r  r#  r&  )      r   g      $)r(  r   g      @))ffffff$g333333 r"  g%gr#)r'  r   r'  )g      !r#  g      #))r)  g333333$r"  r*  zOne of the integralityr   )r   r   r-   r   r  r   r)   roundrh  r   ru   )r6   r  r  r.   rX   s        r7   test_integrality_limitsz7TestDifferentialEvolutionSolver.test_integrality_limitsP  s   	 	 	 *))555 -Qve9>@ @ @a(///:::a(///::: -Qve9DF F Fa(///:::a(///:::V')<)<)<===}%%%%999,Qve9DF F Fa(*<*<*<===a(*:*:*:;;; 	q!1224F4F4FGGGq!1224D4D4DEEE>>>,Qve9DF F Fa(*=*=*=>>>a(*;*;*;<<<???]:-EFFF 	A 	A'&4?A A A A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   'HHHc                    d }d }t          j        t          d          5  t          || j        dd           d d d            n# 1 swxY w Y   t          t          d          5  t          || j        d	           d d d            n# 1 swxY w Y   t          t          d
          5  t          || j        dt          d           d d d            n# 1 swxY w Y   dgfd}ddg}t          t          |dd          }t          ||ddd          }t          |j
        |j
                   d         |j        k    sJ |j        |j        k    sJ d S )Nc                 0    t          j        | dz            S r|   r  r~   s    r7   r/   zBTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic~  s    6!Q$<<r9   c                 4    t          j        | dz  d          S )Nr?   r   r  r  r~   s    r7   quadratic_veczFTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic_vec  s    6!Q$Q''''r9   zThe vectorized functionr   Tr   )rf  r   z#differential_evolution: the 'vector)rf  z$differential_evolution: the 'workers)rf  rC  r   r   c                 B    dxx         dz  cc<   t          |           S rQ  )r
   )r@   ncallss    r7   	rosen_veczBTestDifferentialEvolutionSolver.test_vectorized.<locals>.rosen_vec  s#    1IIINIII88Or9   r  r"   )r   r   )rf  r   r   )rh  r   r   r   r.   r   rD  r>  r
   r   r@   r   nit)r6   r/   r0  r3  r.   res1r  r2  s          @r7   test_vectorizedz/TestDifferentialEvolutionSolver.test_vectorized}  s   	  	  	 	( 	( 	( ]</HIII 	I 	I"9dk.2ZI I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I
 ;&KLLL 	4 	4"=$+.24 4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4
 ;&LMMM 	8 	8"=$+.2C,68 8 8 8	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8
 	 	 	 	 	 7#%eVj+,. . .%iD/9C C C 	'''ayDI%%%%x48######s5   AAA)BBB.CC Cc           	         d }d }t          |t          j         d          }t          |dd          }d }ddg}t          t          |dd	||gd
          }t          ||ddd	||gd
          }t          |j        |j                   d S )Nc                 J    t          j        | d         | d         z   g          S rQ  rV  r~   s    r7   rR  zMTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f  ry  r9   c                 p    t          j        | d         dz  | d         z   | d         | d         z
  g          S rU  rV  r~   s    r7   rW  zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f2  rX  r9   rY  )r   r$   r   c                     d| dd          | d d         dz  z
  dz  z  }|d| d d         z
  dz  z  }t          j        |          S )Nr    r"   rs   r   )r)   squeeze)r@   r   s     r7   r3  zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.rosen_vec  sS    quq"vs{*S00A!af*s""A:a== r9   r  r   r"   F)r   r   r[  r   T)rf  r   r   r[  r   )r   r)   r6  r   r
   r   r@   )	r6   rR  rW  nlc1rk  r3  r.   r5  r  s	            r7   test_vectorized_constraintsz;TestDifferentialEvolutionSolver.test_vectorized_constraints  s    	+ 	+ 	+	; 	; 	; #8bfWc::"9j*EE	! 	! 	! 7#%eVj+,4,-24 4 4 &iD/937,-24 4 4
 	'''''r9   c                     d }t          d dt          j                  }t          d t          j         d          }t          |ddg||gddd	
          }|j        du sJ d|j        v sJ d S )Nc                 l    t          j        | d                   t          j        | d                   z   S rQ  )r)   cosr  r~   s    r7   rx   zUTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.func  s%    6!A$<<"&1,,..r9   c                 0    | d         | d         dz
  dz  z
  S Nr"   r   r?   r;   r~   s    r7   <lambda>zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>  s    1Q41Q46A++= r9   r   c                 *    | d         | d         dz  z   S rB  r;   r~   s    r7   rC  zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>  s    1Q4!A$'> r9   )rs   r?   rr   r   Fi3)r.   r[  r   r   r   zMAXCV = 0.404)r   r)   r6  r   r   r   )r6   rx   c0r  rb   s        r7   'test_constraint_violation_error_messagezGTestDifferentialEvolutionSolver.test_constraint_violation_error_message  s    	/ 	/ 	/ !!=!=q"&II !9!9BF7AFF'07/A57H02/4-68 8 8 ~&&&& &.000000r9   N)GrV   
__module____qualname__r8   r=   r/   rY   rd   rf   rh   rj   rp   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r0  r3  r9  r@  rE  rK  rN  ro  rv  rz  r  r  r  r  r  r  r  r  r  r  r  rh  markslowxfailr  machiner  r
  r  r,  r6  r=  rF  r;   r9   r7   r   r      s9       3 3 3&% % %  IG IG IGV' ' '
' 
' 
'' ' '' ' '4 4 4* * *<= = =E E EH H H
( 
( 
(> > >; ; ;) ) )  00 0 0 * * *0 0 0$J J JK K K.& .& .&`? ? ?) ) )0 0 0. . .  E E E & & &  4* * *  D8 D8 D8LF F FI I I  0 0 0  $ $ $
7: 7: 7:r+& +& +&Z   %9 %9 %9Na a a2*; *; *;X' ' '8W9 W9 W9r%9 %9 %9N09 09 09d19 19 19f9 9 9<9 9 98,9 ,9 ,9\ [['x'))Y60  2 219 192 2 19f9 9 9<*# *# *#X+A +A +AZ&$ &$ &$P( ( (81 1 1 1 1r9   r   ) __doc__rG  r  %scipy.optimize._differentialevolutionr   r   scipy.optimizer   scipy.optimize._constraintsr   r   r	   r
   r   scipy.sparser   scipyr   numpyr)   numpy.testingr   r   r   r   r   r   rh  r   rt   r   r   r;   r9   r7   <module>rU     s        G G G G G G G G 1 1 1 1 1 1; ; ; ; ; ; ; ; ; ; * * * * * * * * # # # # # #          L L L L L L L L L L L L L L L L 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1r9   