
    S_f                        d Z ddlZddlZddlmZmZ ddlmZ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 y)z@
Unit tests for the differential global minimization algorithm.
    N)DifferentialEvolutionSolver_ConstraintWrapper)differential_evolutionOptimizeResult)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 Z9d8 Z:d9 Z;e<jz                  j|                  e<jz                  j                   e@j                         d:k(  d;<      d=               ZBd> ZCd? ZDd@ ZEdA ZFdB ZGdC ZHdD ZIyE)FTestDifferentialEvolutionSolverc                    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                  _        y )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.12/site-packages/scipy/optimize/tests/test__differential_evolution.pysetup_methodz,TestDifferentialEvolutionSolver.setup_method   s    ))G4hhR!#R * +*79A
D 9:@ABBEG ]]299S#s#;<>>
(2%    c                 B    t        j                  di | j                   y )N )r)   r*   r+   r6   s    r7   teardown_methodz/TestDifferentialEvolutionSolver.teardown_method,   s    
		$DOO$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       y )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 	V__j1V))22H=,U-1[[6@B 	V__j1V))22H=,U-1[[6@B 	V__j1V))22H=,U-1[[6@B 	V__j1V))22H=,U-1[[6@B 	V__j1V))22H=,U-1[[6@B 	V__j1V))22H=,U-1[[6@B 	V__j1V))22H=,U-1[[6@B 	V__j1V))22H=,U-1[[6FH 	V__&67V))22NC,U-1[[6FH 	V__&67V))22NC,U-1[[6IK 	V__&9:V))224EF,U-1[[6IK 	V__&9:V))224EFr9   c                     t        j                  dg      }| j                  j                  d      }t	        ||       t        j                  dg      }| j                  j                  d      }t	        ||       y )Ng?r?                     ?)r)   r,   r1   rE   r   rH   r6   resulttrials      r7   test__mutate1z-TestDifferentialEvolutionSolver.test__mutate1}   sb    4&!""))/:v&4&!""))/:v&r9   c                     t        j                  dg      }| j                  j                  d      }t	        ||       t        j                  dg      }| j                  j                  d      }t	        ||       y )Ngr[   r'   )r)   r,   r1   rM   r   rK   ra   s      r7   test__mutate2z-TestDifferentialEvolutionSolver.test__mutate2   sc     4&!""))/:v&3%""))/:v&r9   c                 ~    t        j                  dg      }| j                  j                  d      }t	        ||       y )Ng333333?r[   )r)   r,   r1   rP   r   ra   s      r7   test__randtobest1z1TestDifferentialEvolutionSolver.test__randtobest1   s2    4&!""//@v&r9   c                     t        j                  dg      }| j                  j                  dd      }t	        ||       y )Nr'   r"   r[   )r)   r,   r1   rS   r   ra   s      r7   test__currenttobest1z4TestDifferentialEvolutionSolver.test__currenttobest1   s3    3%""221oFv&r9   c                     d}t        | j                  | j                  |      }t        |j                  t        |             y )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   s6    ,T^^-1[[6>@ 	V]]DN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                         y )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                 r    d }t        t        d      5  t        |ddg       d d d        y # 1 sw Y   y xY w)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*    88RVVAF^RVVAY7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 EG 	= #4'7);<	= 	= 	=s   -6c                    t        j                  dg      }t        d| j                  j	                  |             t        j                  dgdgg      | j                  _        t        d| j                  j	                  |             y )N333333?   r    r   )r)   r,   r   r0   _scale_parametersr-   r6   rc   s     r7   test__scale_parametersz6TestDifferentialEvolutionSolver.test__scale_parameters   sh    #R**<<UCD $&88cURDM#: R**<<UCDr9   c                    t        j                  dg      }t        d| j                  j	                  |             t        j                  dgdgg      | j                  _        t        d| j                  j	                  |             y )Nr   r   r    r   )r)   r,   r   r0   _unscale_parametersr-   r   s     r7   test__unscale_parametersz8TestDifferentialEvolutionSolver.test__unscale_parameters   sh    "S$++??FG $&88cURDM#: S$++??FGr9   c                 *   t        j                  d      5  t        | j                  ddg      }|j	                  ddg      }t        |d       d d d        t        | j                  ddg      }t        |j                  dd	g       y # 1 sw Y   :xY w)
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:6AAs#	$ %T^^j*5MNSUUS#J'	$ 	$s   9B		Bc                     t        j                  g d      }| j                  j                  |       t	        |d   d       t        t        j                  |dk\  |dk        j                                y )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U1Xs#uz5A:6::<=r9   c                 h   t        | j                  dgdd      }|j                         }t        |j                  | j                  |j
                               t        | j                  dgdd      }|j                         }t        |j                  | j                  |j
                               y )Nr   r"   F)maxiterpolishT)r   r/   solver   funr@   r6   rX   rb   s      r7   test_differential_evolutionz;TestDifferentialEvolutionSolver.test_differential_evolution   s     -NNWIq
 VZZ!9:,NNWIq
 VZZ!9:r9   c                     t        | j                  dg      }|j                         }t        |j                  |j                         y )Nr   )r   r/   r   r   r@   r   s      r7   test_best_solution_retrievalz<TestDifferentialEvolutionSolver.test_best_solution_retrieval   s1    ,T^^gYGVXXvxx(r9   c                   	 d	fdd _         t        j                  _        	fdd_        d _        _        ddg}t        |dd      }t        di |d	i}t        di |d
	i}|j                  |j                  cxu rdu sJ  J j                  |j                  cxk(  r	k(  sJ  J |j                  dk(  sJ |j                  dk(  sJ |j                         D ]2  \  }}|dv rt        j
                  |   |       t        ||   |       4 d_        t        j                  _        d|d<   t        di |d	i}|j                  |j                  k  sJ y )N
   c                 X    t        |       }|j                  k  r| _        |_        |S N)r
   valr@   )r@   r   rx   s     r7   rx   zFTestDifferentialEvolutionSolver.test_intermediate_result.<locals>.func  s*    (CTXX~Jr9   c                    xj                   dz  c_         | _        | j                  j                  dk(  sJ | j                  j                  d   dk(  sJ | j                   j                   k(  sJ t        | j                  j                  j                         t        | j                  j                  j                         t        | j                  t        | j                               t        t        | j                              D ]5  }| j                  |   }t        | j                  |         }t        ||       7 t        | j                  | j                  d          t        | j                  | j                  d          | j                  dk(  sJ | j                  du sJ t!        | t"              sJ j                   k(  rt$        y )Nr"   r?   r   zin progressT)nitintermediate_resultr5   ndimshaper   r@   rx   r   r   r
   rangelenpopulation_energiesmessagesuccess
isinstancer   StopIteration)r   ir   refcallbackr   s       r7   r   zJTestDifferentialEvolutionSolver.test_intermediate_result.<locals>.callback  s   LLAL+>H(&1166!;;;&1177:a???&**hll::: ,..@,00(--2C2CD ,00%8K8M8M2NO32FFGH ')==a@/::1=>S#&' ,..,77:<,00,@@CE '..-???&..$6661>BBB||w&## 'r9   r   r   r?   ie F)rx   r.   seedr   r   r   &callback function requested stop early/Maximum number of iterations has been exceeded.>   r   r   Tr   r;   )r@   r)   infr   r   r   rx   dictr   r   r   itemsr   r   )
r6   r.   kwargsr   r   fieldr   r   rx   r   s
          @@@r7   test_intermediate_resultz8TestDifferentialEvolutionSolver.test_intermediate_result  sv    	 66	$8 '+$&!4VEJ$AvAA$?v?w? {{ckk2U22222||sww1'11111{{FFFF{{OOOO))+ 	*JE3..55e<cBUS)		* 66x$AvAAww   r9   c                 j   ddg}d}dd}t        t        ||      }t        |j                  |       d }t        t        ||      }|j                  rJ dd}t        t        ||      }t        |j                  |       |j                  rJ dd}t        t        ||      }|j                  sJ y )	Nr   r   c                      y)NTr;   paramconvergences     r7   callback_python_truezVTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_python_trueS  s    r9   )r   c                     t         r   )r   )r   s    r7   callback_stopzOTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_stop\  s    r9   c                     dgS )Nr   r;   r   s     r7   callback_evaluates_truezYTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_trueb  s	    4Kr9   c                     g S r   r;   r   s     r7   callback_evaluates_falsezZTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_falsej  s    Ir9   )r   )r   r
   r   r   r   )r6   r.   expected_msgr   rb   r   r   r   s           r7   test_callback_terminatesz8TestDifferentialEvolutionSolver.test_callback_terminatesO  s    &!?	 (6$8
 	FNNL9	  (vN>>!!	 (v@WXFNNL9>>!!	 (v1IK~~~r9   c                 ^    dg}d}d }t        |||d      }t        |j                  d       y )Nr   )r   r   r   c                 p    t        |      t        k7  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>.quadraticv  sB    DzU" !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_passedq  s:    	;
 (	(.-1/35 	FJJ/r9   c                 F    t         }dg}t        t        t        ||d       y )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       y )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_checking  sk    j0 	" 9%j0 	" (vq!fq!f/EFFHHh/r9   c                 j   t        j                  dd      j                  dd      }t        t	        |dd d f   |dd d f               }t        d |d      }d}|j                  |d	      \  }}}}}	t        t        t        j                  t        j                  ||||||	g                  d       y )
Ng      (@float64)dtyper?   r_   r   r"   r%   r^   )r)   r3   reshapero   zipr   _select_samplesr   r   uniquer,   )
r6   r-   r.   rX   	candidater1r2r3r4r5s
             r7   test_select_samplesz3TestDifferentialEvolutionSolver.test_select_samples  s    3i088A>c&A,q!t56,T61E	#33IqABB		"((Ir2r2r#BCDEq	Jr9   c                     t        t        | j                  d      }|j                         }t	        |j
                  d       t	        |j                  d       y )Nr"   )r   Fr   )r   r
   r.   r   r   r   r   r   s      r7   test_maxiter_stops_solvez8TestDifferentialEvolutionSolver.test_maxiter_stops_solve  sA     -UDKKKV^^U+V^^I	Kr9   c                    t        t        | j                  dd      }|j                         }t	        |j
                  d       t	        |j                  d       t	        |j                  d       t        t        | j                  ddd      }|j                         }t	        |j
                  d	       t	        |j                  d       t	        |j                  d       t        t        | j                  ddd
d      }|j                         }t	        |j
                  d
       t	        |j                  d       t	        |j                  d       y )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  s    -UDKK49;V[[!$V^^U+V^^&	' -U-1[[564946	8
 V[["%V^^U+V^^&	' -U-1[[5649466@B V[["%V^^U+V^^%	&r9   c                     t        | j                  dgd      }|j                          t        t	        j
                  |j                        d       y )Nr   r    {Gz?tolr   )r   r/   r   r   r)   argminr   rW   s     r7   test_quadraticz.TestDifferentialEvolutionSolver.test_quadratic  s>    ,T^^.9]157 	RYYv99:A>r9   c                 6    t        | j                  dgd       y )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                         y )Nr   Fr"   r$   )r   r   r   )r   r/   r   r@   r   )r6   rb   result2s      r7   test_seed_gives_repeatabilityz=TestDifferentialEvolutionSolver.test_seed_gives_repeatability  sf    ')4/4-.,/	1
 ))4/4-.,/	1
 	VXXwyy)V[[',,/r9   c           	          t         j                  j                         }g d}|D ]  }t        | j                  dgd|d|         y )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  sI     ii##%? 	.D"4>>$/=*/(+'*(,.	.r9   c                 ^    t        t        | j                  dd      }|j                          y )NrB   r"   )rD   r   r   r
   r.   r   rW   s     r7   test_exp_runsz-TestDifferentialEvolutionSolver.test_exp_runs
  s&    ,U-1[[6@568
 	r9   c                 2    ddg}t        t        |dd       y )N)r^   1   r"   )r%   r   )r   r
   )r6   r.   s     r7   test_gh_4511_regressionz7TestDifferentialEvolutionSolver.test_gh_4511_regression  s    
 7# 	ufb!Dr9   c                    t        t        | j                  d      }|j                  |j                         |j                          t        t        j                  |j                        d       t        |j                  d       y )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#  s]    ,UDKKK--f.?.?@%%'RYYv9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(  s y  y )Nr\      )r%   r   r   r?   2   )r   r
   r.   nextr   r)   sizer  rt   r   	enumerate)
r6   rX   r@   r   _fun_prevr   soln	x_currentfun_currents
             r7   test_iterationz.TestDifferentialEvolutionSolver.test_iteration-  s     -UDKK468f3RWWQ]A& 	V\\2& 	mT62 -UDKK@6l8 ( 	GAt%)"I{{***#[xABw	r9   c                     t        t        | j                  dd      }|j                          t	        |j
                  dk         y )N皙?F)r   r   )r   r
   r.   r   r   r   rW   s     r7   test_convergencez0TestDifferentialEvolutionSolver.test_convergenceG  s5    ,UDKKS49;""S()r9   c                 ^    t        t        | j                  d d       }|j                          y )N)r   r   r  rW   s     r7   test_maxiter_none_GH5731z8TestDifferentialEvolutionSolver.test_maxiter_none_GH5731M  s$    
 -UDKK48:r9   c           	         t        t        t        gt        | j                  fi ddi t        t        | j                        }|j                          t        |j                  d       t        t        j                  t        j                  |j                                     |j                          t        |j                  d       t        t        j                  t        j                  |j                                     |j                  d       t        |j                  d       t        t        j                  t        j                  |j                                     t        t        | j                  d      }|j                  d       t        |j                  d       t        t        j                  t        j                  |j                                     t        j                  dd	d
      j!                  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&                  |j)                  |      dd      }t+        |j,                  d d |       t+        t        j.                  |j,                  d d       d       t+        t        j0                  |j,                  d d       d       t        j                  dd	d      j!                  dd	      }t        t        t        gt        | j                  fi d|i t        j2                  j5                  ddd      }t        t        | j                  |      }t7        |j,                  d   |dz         y )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_populationr8  s        r7   test_population_initiationz:TestDifferentialEvolutionSolver.test_population_initiationV  s   
 	j1	-t{{+	-  +	-
 -UDKK@
 	%%'V\\1%rxx : :;<=""$V\\1%rxx : :;<=""h"7V\\1%rxx : :;<=,UDKKgN""g"6V\\1%rxx : :;<= [[Q+33Aq9
,UDKK2<6@26QK
 	V\\1%rxx : :;<=--23''612 !ggf&@&@&L&',F--bq13FG 	BFF6#4#4Ra#891=BFF6#4#4Ra#891= [[Q+33Aq9
j1	.t{{+	.  ,	. YY3Sq9,4;;2
 	))!,b3h7r9   c                     t        t        | j                  ddg      }|j                  sJ t	        t
              5  t        t        | j                  ddg       d d d        y # 1 sw Y   y xY w)Nr+  r(   r7   @)r   r
   r.   r   rt   ru   )r6   r   s     r7   test_x0z'TestDifferentialEvolutionSolver.test_x0  s[    $UDKKS#JG{{{ :& 	F"5$++3*E	F 	F 	Fs   A$$A-c                 .    d }ddg}t        ||d       y )Nc                 <    | d   dk  rt         j                  S | d   S )Nr   r$   r"   )r)   r   r~   s    r7   sometimes_infzWTestDifferentialEvolutionSolver.test_infinite_objective_function.<locals>.sometimes_inf  s    tbyvvQ4Kr9   r!   F)r.   disp)r   )r6   rK  r.   s      r7    test_infinite_objective_functionz@TestDifferentialEvolutionSolver.test_infinite_objective_function  s    	 &!}V%Hr9   c                     ddg}t        t        |d      }t        |j                  dk(         t        |j                  j
                  t        u        |j                          y )Nr   r   )r   )r   r
   r   	_updating_mapwrapper_mapfuncmapr   )r6   r.   rX   s      r7   test_deferred_updatingz6TestDifferentialEvolutionSolver.test_deferred_updating  sO    H%,UFZP  J./""++s23r9   c                    ddg}t        t        |      }t        |j                  dk(         t	        j
                  d      }|j                  d      5 }t        t              5  t        t        ||j                        5 }	 d d d        d d d        j                  dk(  sJ 	 d d d        y # 1 sw Y   ,xY w# 1 sw Y   0xY w# 1 sw Y   y xY w)Nr   	immediatespawnr?   )workersr   )
r   r
   r   rO  multiprocessingget_contextPoolr   UserWarningrR  )r6   r.   rX   ctxpss         r7   test_immediate_updatingz7TestDifferentialEvolutionSolver.test_immediate_updating  s    H%,UF;  K/0 ))'2XXa[ 	-A {# 0N RS ;;*,,,	- 	-  	- 	-s<   C#B9 B-B9
C-B62B99C	>CCc                 8   ddg}t        j                  d      5 }t        t        |d|j                        5 }t        |j                  j                  d u       t        |j                  dk(         |j                          d d d        d d d        t        t        |dd      5 }t        |j                  j                  d u       t        |j                  dk(         |j                          d d d        y # 1 sw Y   wxY w# 1 sw Y   {xY w# 1 sw Y   y xY w)Nr   r?   r   )r   rW  )
rX  rZ  r   r
   rR  r   rP  poolrO  r   )r6   r.   r]  rX   s       r7   test_parallelz-TestDifferentialEvolutionSolver.test_parallel  s    H%!!!$ 	+Fv
AEE,C 	FLF&&++478F$$
23LLN		 	 )124 	7=F&&++478F$$
23LLN		 		 	 	 		 	s0   DA
C8D%A
D8D	=DDDc                 z    t        t        ddg      }|j                          t        |j	                                y )Nr   )r   r
   r   r   	convergedrW   s     r7   test_convergedz.TestDifferentialEvolutionSolver.test_converged  s-    ,UVV4DE  "#r9   c                 V   d }d t        |t        j                   d      }t        t        ddg|      }|j                  t        j                  ddg            }t        |d       t        t        j                   d      }t        t        ddg||f      }g d	}g d
}t        ||      D ]H  \  }}	|j                  t        j                  |            }t        |t        j                  |	             J t        |j                  t        j                  |            t        j                  |             t        j                  t        j                  |      D cg c]  }|j                  |       c}      }
|
j                  dk(  sJ fd}t        |t        j                   d      }t        t        ddg||fd      }d|_        t        j                  t        d      5  |j                  t        j                  |             d d d        y c c}w # 1 sw Y   y xY w)Nc                     | d   | d   z   gS Nr   r"   r;   r~   s    r7   constr_fzNTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f      aD1Q4K= r9   c                 Z    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  2    88QqT1Wqt^QqTAaD[9::r9   ffffff?r   constraintsr   r'   ?))333333?r"   r   )r$   r$   ))r   {Gz?r   )rG  @r   )r   r   r   )r\   r"   r\   c                 (     |       j                   S r   )r4   )r@   rn  s    r7   	constr_f3zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f3	  s    Q<>>!r9   F)rr  
vectorizedTz#An array returned from a Constraintr   )r   r)   r   r   r
   _constraint_violation_fnr,   r   r   r   r2   r   ry  pytestr   r   )r6   ri  nlcrX   cvnlc2xsvsr@   r   constraint_violationrx  rn  s               @r7   test_constraint_violation_fnz<TestDifferentialEvolutionSolver.test_constraint_violation_fn  s   	!	; "(RVVGS9,UVV4D:=@ ,,RXXsCj-ABB$"9rvvgs;,UVV4D:=tF
 0;BK 	2DAq00!=BBa 01	2
 	++BHHRL9288B<	
  "xx24((2,)@-. *0)H)H)K )@  A#))Y666	" #9rvvgs;,UVV4D:=t8=? !]]$I
 	: ++BHHRL9	: 	:)@	: 	:s   "H,%HH(c           	      L   d }d }t        |t        j                   d      }t        t        ddg|      }|j                  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 ]]  }t        t        ddg||f|d      }|j                  t        j                  ddgddgg            \  }}t        |ddg       t        |t        j                  g dg dg             |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 |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(  r^J  y )Nc                     | d   | d   z   gS rh  r;   r~   s    r7   ri  zZTestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f  rj  r9   c                 4    | d   dz  | d   z   | d   | d   z
  gS rl  r;   r~   s    r7   rn  z[TestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f2  s)    aD!GadNAaD1Q4K00r9   rp  r   rq  r$   r   Fr'   rG  )r?   r"   rs  )FTr   )rr  ry  r   g333333?)r'   r+  r   )r   ru  r   )rG  rv  r   )r?   r\   r`   T)r   r   r   )
r   r)   r   r   r
   #_calculate_population_feasibilitiesr,   r   r   r   )	r6   ri  rn  r|  rX   feasr}  r~  	vectorizes	            r7   (test_constraint_population_feasibilitieszHTestDifferentialEvolutionSolver.test_constraint_population_feasibilities  s   	!	1 "(RVVGS9,UVV4D:=@
 ==HHsCj2r(+,.bTE5>*B3%# 89xx6!!!"9rvvgs;& 	&I08H>A4[<E:DFF
 AA3*sCj124HD"u~.BHHm^-L$MNAA3*r2h/02HD"u~.BHHm]-K$LM88v%%%AA4,R124HD"e}-BHHnm-L$MN88v%%%+	&r9   c                    d }t        |t        j                   d      }t        t        ddg|      }t        t              5  |j                         }d d d         |j                        dk  sJ |j                  sJ y # 1 sw Y   /xY w)Nc                 @    t        j                  | d   | d   z   g      S rh  rm  r~   s    r7   ri  zGTestDifferentialEvolutionSolver.test_constraint_solve.<locals>.constr_fE      88QqTAaD[M**r9   rp  r   rq  )
r   r)   r   r   r
   r   r[  r   r@   r   )r6   ri  r|  rX   r   s        r7   test_constraint_solvez5TestDifferentialEvolutionSolver.test_constraint_solveD  s    	+ "(RVVGS9,UVV4D:=@ ; 	!,,.C	! #%%%{{{		! 	!s   BBc                 @   d }t        |t        j                   d      }t        t        ddg|dd      }t        t              5  |j                         }d d d        j                  dkD  sJ |j                  rJ t        t        ddg|d	      }t        |       |j                  j                         rJ t        j                  |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<   |j#                          t%        |j                  d   |       y # 1 sw Y   ?xY w)Nc                 @    t        j                  | d   | d   z   g      S rh  rm  r~   s    r7   ri  zLTestDifferentialEvolutionSolver.test_impossible_constraint.<locals>.constr_fU  r  r9   rs   r   r\   r"   )rr  r%   r   r   F)rr  r      )r   r)   r   r   r
   r   r[  r   maxcvr   r!  feasibler   isfiniter   r  r5   r  r   )r6   ri  r|  rX   r   lr}  s          r7   test_impossible_constraintz:TestDifferentialEvolutionSolver.test_impossible_constraintT  s   	+ "(RVVGR8,UVV4D:=235 ; 	!,,.C	! yy1}};;
 -UVV4D:=uNV??&&(((;;v99:>>@@@ ((+-3-G-GA-O""Aq6*'-'8'8!Q'C1a&!)$''A	2 	##QFAI. 	%%'V003R83	! 	!s   FF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            rJ y )Nc                     | d   | d   z   gS rh  r;   r~   s    r7   ri  zCTestDifferentialEvolutionSolver.test_accept_trial.<locals>.constr_f~  rj  r9   rp  r   rq  r'   Tr   r   Fg#@r$   g?)r   r)   r   r   r
   _accept_trialr,   )r6   ri  r|  rX   fns        r7   test_accept_trialz1TestDifferentialEvolutionSolver.test_accept_trial{  s   	!!(RVVGS9,UVV4D:=@!!#tRXXrd^S$"GGG3bhhuosD"((C5/JeSTS#tRXXrd^S$"GGG #tRXXrd^S%2$HHH 3rxxc
3rxxS	24 	5 43rxxc
3rxxT
35 	6 5sE288S#J#7E288S#J#79 	: : 9r9   c                 0  
 t        j                  g d      }t        j                  dt         j                  dg      }t        j                  g d      }t        t	        ||      |      }|j                  |      dkD  j                         sJ |j                  g d      dk(  j                         sJ t        j                  dd      j                  d	d
      }g }|D ]"  }|j                  |j                  |             $ t         j                  j                  |j                  |j                        t        j                  |      j                         t        j                  g d      }t        j                  g dg dg dg      
t        t        
t         j                   d      |      }|j                  |      dkD  j                         sJ |j                  g d      dk(  j                         sJ t        j                  dd      j                  dd      }g }|D ]"  }|j                  |j                  |             $ t         j                  j                  |j                  |j                        t        j                  |      j                         t        t        t        
      t         j                   d      |      }|j                  |      dkD  j                         sJ |j                  g d      dk(  j                         sJ 
fd}t!        |t         j                   d      }	t        |	g d      }|j                  |      dkD  j                         sJ |j                  g d      dk(  j                         sJ y )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                 &    j                  |       S r   )dot)r@   As    r7   r   zDTestDifferentialEvolutionSolver.test_constraint_wrapper.<locals>.fun  s    558Or9   )r)   r,   r   r   r   	violationanyr   r3   r   appendtestingr   r4   r	   r   r   )r6   lbubr8  pcr  
violationsr@   r   	nonlinearr  s             @r7   test_constraint_wrapperz7TestDifferentialEvolutionSolver.test_constraint_wrapper  s   XXk"XXsBFFB'(XXi r23R 1$))+++^,166888 YYq"%%a+
 	/Abll1o.	/


""2<<#5rxx
7K7M7MNXXl#HHlL,?@ 0RVVGQ ?DR 1$))+++-.!388::: YYq"%%a+
 	/Abll1o.	/


""2<<#5rxx
7K7M7MN 0A K "$R 1$))+++-.!388:::	 (bffWa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        |j                  |      |       " t        |j                  t        j                  |      j                        t        j                  |      j                         |j                  t        j                  |      j                        j                  dt        |      fk(  sJ |j                  t        j                  |      j                        j                  dt        |      fk(  sJ |j                  dk(  sJ |j                  dk(  sJ y )
Nc                 `    t        j                  | d   dz  | d   z   | d   dz  | d   z
  g      S rl  rm  r~   s    r7   cons_fzQTestDifferentialEvolutionSolver.test_constraint_wrapper_violation.<locals>.cons_f  sA     88QqTQY1-qTQY1-/ 0 0r9   rs   g333333r?   r$   r"   r   )rl   )r$   rt  )rt  rt  )r'   333333)r'   r   ))r   r   )r   r'   )ru  r   )gRQ?r   )r2  g=
ףp=?)r   r   r)   r"  r.   r   r   r  r,   r4   r   r   r   
num_constrparameter_count)r6   r  r|  r  r  r  r@   r   s           r7   !test_constraint_wrapper_violationzATestDifferentialEvolutionSolver.test_constraint_wrapper_violation  s;   	0 "&2w-!Q@c1X.wwryy|$)))HCBK 	0DAqBLLOQ/	0 	RXXb\^^4	(vvbhhrlnn%++3r7|;;;||BHHRLNN+11aR\AAA}}!!!!!Q&&&r9   c                    t               5 }|j                  t               t        j                  g dg dg      }d d d        t        dd      }t        j                  d      }t        ||      }|j                  |      j                  dk(  sJ t        j                  d      j                  dd      }|j                  |      j                  d	k(  sJ y # 1 sw Y   xY w)
N)r"   r"   r"   r   )r?   r?   r?   r   r   r"   r]   )r?   r  r^   )r?   r^   )r   filterPendingDeprecationWarningr)   matrixr	   onesr   r  r   r3   r   )r6   supr  lcr8  cwxtrials          r7   test_matrix_linear_constraintz=TestDifferentialEvolutionSolver.test_matrix_linear_constraint  s       	0CJJ01YY - / 0F	0 fa+WWQZB' ||B%%--- 5!))!Q/||F#))V333	0 	0s   1CC!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         ||      |d !       |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 }|j                  t                t        ||d'd|d      }d d d        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               y # 1 sw Y   xY w)(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  s_    		A3(#A&&1Qq6"Qq1vXa!f_4rvva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   rr  r%   )r"   r"   r"   r"   r"   r"   r"   r"   r"   r\   r\   r\   r"   iga2U0*C?r3  g{Gzt?r   gMb@?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                 Z    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>.c24  s5    		A3(#Aad7QqT>AbE))r9   rG   )r)   zerosr,   r	   r   r   r   r   r@   r   r   r   r   r   r   r  r[  )r6   r  r  bLr.   r   x_optf_optr  r  L2NN2rr  r  s                   r7   test_L1z'TestDifferentialEvolutionSolver.test_L1  s   	
 HHX)!^
!aW*$!Z-)!^
!aW*$!Z-)!^
!aW*$!Z-ab!"fIHH34Q+!xjl*fX5 %Q$23aA 8%%d3{{{u40T2qw!|$%suu 0A 6678suu 0A 6678 Z]RVVGQ7 %Q$23aA 	%%({{{u40T2qw!|$%suu 0A 6678suu 0A 6678
	%
	* Qrr1uXw"16a!Qi"&&!Aa&9RVVGQqV4 bffWa!f5!Rn  	4CJJ{#(FZ.2124C	4 	u40T2qw!|$%suu 0A 6678suu 0A 6678	4 	4s   :'SSc           	          d }d }t        |dt        j                        }dgdz  }|}t               5 }|j	                  t
               t        ||dd|      }d d d        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               y # 1 sw Y   +xY w)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>.fM  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>.c1T  sF   		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   rr  gy\
E@)gܤ@g$H8?g	޿g0ev@gn8)gk_@/?g0g+?h㈵>r  r"   )r   r)   r   r   r  r[  r   r   r   r@   r   r   r   r,   )
r6   r  r  r  r.   rr  r  r   r  r  s
             r7   test_L2z'TestDifferentialEvolutionSolver.test_L2J  s:   		&  Arvv.Q  	MCJJ{#(FZ.2MC	M
 "1 	%%('u40{{{rxx355	*a/01suu 0A 6678suu 0A 6678	M 	Ms   &FFc           	      b   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 }	|	j                  t               t        ||d|d	      }
d d d        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               y # 1 sw Y   ]xY w)Nc                 r   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>.ft  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   rr  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   r@   r   r   r   r   r6   r  r  r  r  r  r  r.   rr  r  r   r  r  s                r7   test_L3z'TestDifferentialEvolutionSolver.test_L3q  s   	 HHW*!\/+!\/*!]
ab!"fIHH^$	N Q266*Arvv.R!f  	MCJJ{#(F5@!MC	M
C%%d3u40T2{{{q355yA~&'rxx355	*a/01suu 0A 6678suu 0A 6678!	M 	Ms   #&H$$H.c           	      D   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 }	|	j                  t               t        ||dd|d      }
d d d        d}g d}t         ||      |d       t        
j                  |d       t        j                         dk(  rJt        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               y # 1 sw Y   xY w)!Nc                 2    t        j                  | d d       S )Nr\   r)   r}   r~   s    r7   r  z2TestDifferentialEvolutionSolver.test_L4.<locals>.f  s    66!BQ%= r9   )r]   r  ){Gzd?r  r"   r]   r_   )r  r  g{Gzdr?   )r^   r#   r]   )r2  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>.c1  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?)rtolr3  gh㈵>ga2U0*c?)r)   r  r,   r	   r   r   r   r  r[  r   r   r   platformsystemr   intpitemsizer@   r   r   r   )r6   r  r  r  r  r  r  r.   rr  r  r   r  r  s                r7   test_L4z'TestDifferentialEvolutionSolver.test_L4  s$   	! HHV%!aV)1!Y,"!aV)ab!"fIHHY	A Q+Arvv.=/!"33zl1nD!f  	0CJJ{#(FZ*.K-.0C	0 2 	%%e4U3 OO*rxx/@/I/IA/MCEE5vFC CEE5t&A{{{q355yA~&'rxx355	*a/01suu 0A 6678suu 0A 66783	0 	0s   /'JJ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               y )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>.f  s    		A3(#A66!BEE'!A$,'*266!BEE'!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>.c1  sT    		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)   r   r   r   r   r   r   r   r,   r@   	r6   r  r  r  r.   rr  r   r  r  s	            r7   test_L5z'TestDifferentialEvolutionSolver.test_L5  s    		,
  RVVGQ/1$Q$1<> )%%d3T2{{{rxx355	*a/01suu 0A 6678suu 0A 667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               y )Nc                 d    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  sl    		A3(#AqT!VaK1Q4!8a-/#5d1fq[LAaD1Hq=058: :r9   r   )   r    r   rG   r  gHz>)rD   r   rr  r   )gq=
ף0,@g??g1r  r  r  r  r"   )r   r)   r   r   r   r   r@   r   r   r   r,   r  s	            r7   test_L6z'TestDifferentialEvolutionSolver.test_L6  s   	
	:
  Arvv.X&$Q$1<$H!%%d3U3u40{{{rxx355	*a/01suu 0A 6678suu 0A 667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               y )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                 D   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  sK   		  K?X&(A5$Q$1<>
 %%(u40T2{{{rxx355	*bhh{.CCDErxx355	*bhh}.EEFGsuu 0A 6678suu 0A 6678r9   ppc64lezfails on ppc64le)reasonc           	      d   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 }	|	j                  t               t        ||dd|d      }
d d d        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               y # 1 sw Y   xY w)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>.fB  sY    		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>.c1M  s    		A3(#A1d
++d2661Q4%*3E.EEaD!!T	**T"&&1ad42H-HHaD!!T	**T"&&1ad42H-HH r9   MbPr  )r   i  )r  g?rF   r  i  )rD   r   rr  r   )gEGr?@gT㥛D@g&D
n?gd,[ٿg#J{@r  gMb`?r   r   )r)   r  r,   r	   r   r   fullr   r  r[  r   r   r@   r   r   r   r   r  s                r7   test_L8z'TestDifferentialEvolutionSolver.test_L8>  s.   	
 HHV!aV)!aV)ab!"fIHHdD\"		 Q266*BGGAv$658IJQ}Q.!f  	7CJJ{# )FZ.2157C	7 <%%d3bq	5!948ab	5948T2{{{qw!|$%rxx355	*f456rxx355	*e345suu 0A 6678suu 0A 6678+	7 	7s   ;'J%%J/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               y )Nc                 Z    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>.fw  s5    		A3(#AQ47ad1fq[((r9   c                 P    t        j                  dg| f      } | d   | d   dz  z
  gS rl  r  r~   s    r7   r  z3TestDifferentialEvolutionSolver.test_L9.<locals>.c1{  s/    		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_L9t  sJ   	)	$  UGeW51$Q$1<> As#%%(suuu48T2{{{rxx355	*f456rxx355	*e345suu 0A 6678suu 0A 6678r9   c                    t         j                  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 y )Nl   b	)r^   r$   r  )r"  random_statec                     |\  }}t        j                   |j                  |g|        j                  d       }t        j                  |      rt         j
                  }|S )Nrs   axis)r)   logpmfr}   isnanr   )r]  r   distr@   lls        r7   rx   z>TestDifferentialEvolutionSolver.test_integrality.<locals>.func  sQ    GD!&&!a)--2-66Bxx|VVIr9   TF)r"      )r   gffffff?)r   integralityr   r   r   r^   g?)r  c                 T    |\  }}} t        j                  || d   g      ||      S )Nr   rm  )r]  r   nr.  r@   rx   s        r7   func2z?TestDifferentialEvolutionSolver.test_integrality.<locals>.func2  s.    JAtQ!QqT+T155r9   r"   )r   r.   )r)   r	  r  r   nbinomrvsr   r@   r   r   r   )r6   r  r.  shapesr@   r1  r.   r   res2r4  LBFGSBrx   s              @r7   test_integralityz0TestDifferentialEvolutionSolver.test_integrality  s	   ii##M2||DHHf5s;	 Um9%$T6q	1<U*-/
 uuQx1}}vE2 &dF$2=d+.0	6 %!T1"+.q	688,xx377"""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        y # 1 sw Y   y xY w)Nc                     | S r   r;   r~   s    r7   r  zBTestDifferentialEvolutionSolver.test_integrality_limits.<locals>.f  s    Hr9   )TFT))r+  r   r   皙@)ffffff
@皙@F)r.   r   r1  r   )r+  r   r?  r"   )r   r>  r@  )r$   r   g      @)g      ?r>        @))r  gr=  )g$gffffff@)g      r         %)r  r>  rA  )      r   g      $)rC  r   g      @))ffffff$g333333 r=  g%gr#)rB  r   rB  )g      !r>  g      #))rD  g333333$r=  rE  zOne of the integralityr   )r   r   r-   r   r1  r   r)   roundr{  r   ru   )r6   r  r1  r.   rX   s        r7   test_integrality_limitsz7TestDifferentialEvolutionSolver.test_integrality_limits  s   	 *5 -Qve9>@a(/:a(/: -Qve9DFa(/:a(/:V'')<=}}%%%9,Qve9DFa(*<=a(*:; 	q!124FGq!124DE>,Qve9DFa(*=>a(*;<?]]:-EF 	A'&4?A	A 	A 	As   G$$G-c                    d }d }t        j                  t        d      5  t        || j                  dd       d d d        t        t        d      5  t        || j                  d	       d d d        t        t        d
      5  t        || j                  dt        d       d d d        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 y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nc                 2    t        j                  | dz        S r|   r  r~   s    r7   r/   zBTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic  s    66!Q$<r9   c                 6    t        j                  | dz  d      S )Nr?   r   r)  r  r~   s    r7   quadratic_veczFTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic_vec  s    66!Q$Q''r9   zThe vectorized functionr   Tr   )ry  r   z#differential_evolution: the 'vector)ry  z$differential_evolution: the 'workers)ry  rW  r   r   c                 4    dxx   dz  cc<   t        |       S rh  )r
   )r@   ncallss    r7   	rosen_veczBTestDifferentialEvolutionSolver.test_vectorized.<locals>.rosen_vec  s    1INI8Or9   r  r"   )r   r   )ry  r   r   )r{  r   r   r   r.   r   r[  rR  r
   r   r@   r   r   )r6   r/   rK  rN  r.   res1r8  rM  s          @r7   test_vectorizedz/TestDifferentialEvolutionSolver.test_vectorized  s?   	 	( ]]</HI 	I"9dkk.2ZI	I
 ;&KL 	4"=$++.24	4
 ;&LM 	8"=$++.2C,68	8
 	 7#%eVj+,.%iD/9C 	'ayDII%%%xx488###=	I 	I
	4 	4
	8 	8s#   D.D:E.D7:EE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                         y )Nc                 @    t        j                  | d   | d   z   g      S rh  rm  r~   s    r7   ri  zMTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f  r  r9   c                 Z    t        j                  | d   dz  | d   z   | d   | d   z
  g      S rl  rm  r~   s    r7   rn  zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f2  ro  r9   rp  )r   r$   r   c                 p    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   rN  zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.rosen_vec  sM    quq"vs{*S00A!af*s""A::a= r9   r  r   r"   F)r   r   rr  r   T)ry  r   r   rr  r   )r   r)   r   r   r
   r   r@   )	r6   ri  rn  nlc1r~  rN  r.   rO  r8  s	            r7   test_vectorized_constraintsz;TestDifferentialEvolutionSolver.test_vectorized_constraints  s    	+	; #8bffWc:"9j*E	! 7#%eVj+,4,-24 &iD/937,-2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 y )Nc                 d    t        j                  | d         t        j                  | d         z   S rh  )r)   cosr  r~   s    r7   rx   zUTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.func1  s%    66!A$<"&&1,..r9   c                 $    | d   | d   dz
  dz  z
  S Nr"   r   r?   r;   r~   s    r7   <lambda>zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>5  s    1Q41Q46A++= r9   r   c                     | d   | d   dz  z   S r\  r;   r~   s    r7   r]  zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>6  s    1Q4!A$'> r9   )rs   r?   rr   r   Fi3)r.   rr  r   r   r   zMAXCV = 0.414)r   r)   r   r   r   r   )r6   rx   c0r  rb   s        r7   'test_constraint_violation_error_messagezGTestDifferentialEvolutionSolver.test_constraint_violation_error_message/  s}    	/ !!=q"&&I !9BFF7AF'07/A57H02/4-68 ~~&&& &..000r9   c                   	
 dd}dgz  }|z  
dd	d	
fd	}t        t        ||	d|dd		      }|j                  |u sJ |j                         }t	        t        ||	dd
dd	      }t        |j                  |j                         t        |j                  |j                         dd}t        j                  t        d      5  t	        t        ||       d d d        y # 1 sw Y   y xY w)Nr]   r   )r   g      $@r(   gffffff?c                    t        j                  ||          }|j                        }t        j                        }|j	                  |       g }t        |      dk  rKt        |      dkD  r=|d   }|dd  }|| k7  r|j                  |       t        |      dk  rt        |      dkD  r=|d d \  }}	|d   ||   ||	   z
  z  z   }
|j                        }|k  }d||<   t        j                  ||
|      }|S )Nr?   r   r"   )r"  T)	r)   copychoicer3   shuffler   r  rC  where)r   r5   r  rc   
fill_pointra  idxsidxr0r   bprime
crossoversr&   r  recombinationtotal_popsizes               r7   custom_strategy_fnzLTestDifferentialEvolutionSolver.test_strategy_fn.<locals>.custom_strategy_fnP  s
   GGJy12EO4J99]+DKKDd)a-CIM1gABx)#KK$	 d)a-CIM "1XFB mh^jn4'6 6F /:J#m3J%)Jz"HHZ7ELr9   r?   F)r%   rm  r&   r   rD   r   r   rF   )r&   r%   rm  r   rD   r   r   c                 0    t        j                  ddg      S )Nr   r   rm  )r   r5   r  s      r7   ro  zLTestDifferentialEvolutionSolver.test_strategy_fn.<locals>.custom_strategy_fn  s    88S#J''r9   z	strategy*r   rC   r   )r   r
   rD   r   r   r   r5   r@   r{  r   r   )r6   r%   r.   ro  rX   r   r8  r&   r  rm  rn  s          @@@@r7   test_strategy_fnz0TestDifferentialEvolutionSolver.test_strategy_fnF  s    o-''1	 	2 -''

 "4444lln%'

 	8tvv&	( ]]<{; 	"+	 	 	s   C,,C5N)JrV   
__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,  r.  rE  rH  rM  rS  r_  rb  re  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r{  markslowxfailr  machiner  r%  r:  rG  rP  rW  r`  rq  r;   r9   r7   r   r      s   3&%IGV'
'''4*<=EH
(>;)G!R D0 *0$JK.&`?)0.E &4*D8LFI-&$
7:r+&Z %9N:4*;X'84(W9r%9N09d19f9<98,9\ [[[['x'')Y60  2192 19f9<*#X+AZ&$P(81.Gr9   r   )!__doc__rX  r  %scipy.optimize._differentialevolutionr   r   scipy.optimizer   r   scipy.optimize._constraintsr   r   r	   r
   r   scipy.sparser   scipyr   numpyr)   numpy.testingr   r   r   r   r   r   r{  r   rt   r   r   r;   r9   r7   <module>r     sO     G A; ; * #  L L 1 v vr9   