
    tKg                        d Z ddlZddlm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)Pool)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*e+jX                  j[                  d)      d*        Z.d+ Z/d, Z0d- Z1d. Z2e+jX                  j[                  d)      d/        Z3d0 Z4d1 Z5d2 Z6d3 Z7e+jX                  j[                  d4      d5        Z8e+jX                  j[                  d)      d6        Z9e+jX                  j[                  d)      d7        Z:e+jX                  j[                  d)      d8        Z;e+jX                  j[                  d)      d9        Z<e+jX                  j[                  d)      d:        Z=d; Z>e+jX                  j~                  e+jX                  j                   eAj                         d<k(  d=>      d?               ZCe+jX                  j[                  d)      d@        ZDe+jX                  j[                  d)      dA        ZEdB ZFe+jX                  j[                  d)      dC        ZGdD ZHdE ZIe+jX                  j[                  d4      dF        ZJyG)H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)selfr6   s     u/home/alanp/www/video.onchill/myenv/lib/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,   r7   s    r8   teardown_methodz/TestDifferentialEvolutionSolver.teardown_method-   s    
		$DOO$r:   c                     |d   dz  S )Nr      r<   )r7   xs     r8   r0   z)TestDifferentialEvolutionSolver.quadratic0   s    tQwr:   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   rE   mutation_func__name__r7   solvers     r8   test__strategy_resolvesz7TestDifferentialEvolutionSolver.test__strategy_resolves3   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Fr:   c                 L   t        j                  dg      }| j                  j                  t        j                  g d            }t	        ||       t        j                  dg      }| j                  j                  t        j                  g d            }t	        ||       y )N皙?r@                     ?)r*   r-   r2   rF   r   rI   r7   resulttrials      r8   test__mutate1z-TestDifferentialEvolutionSolver.test__mutate1~   st    4&!""))"((?*CDv&4&!""))"((?*CDv&r:   c                 L   t        j                  dg      }| j                  j                  t        j                  g d            }t	        ||       t        j                  dg      }| j                  j                  t        j                  g d            }t	        ||       y )Ngr]   r(   )r*   r-   r2   rN   r   rL   rc   s      r8   test__mutate2z-TestDifferentialEvolutionSolver.test__mutate2   su     4&!""))"((?*CDv&3%""))"((?*CDv&r:   c                     t        j                  dg      }| j                  j                  t        j                  g d            }t	        ||       y )Ng333333?r]   )r*   r-   r2   rQ   r   rc   s      r8   test__randtobest1z1TestDifferentialEvolutionSolver.test__randtobest1   s;    4&!""//0IJv&r:   c                     t        j                  dg      }| j                  j                  dt        j                  g d            }t	        ||       y )Nr(   r#   r]   )r*   r-   r2   rT   r   rc   s      r8   test__currenttobest1z4TestDifferentialEvolutionSolver.test__currenttobest1   sB    3%""22HH_%
 	v&r:   c                     d}t        | j                  | j                  |      }t        |j                  t        |             y )Nr%   r#   r'   )r   r0   r/   r   ditherlist)r7   r'   rY   s      r8   test_can_init_with_ditheringz<TestDifferentialEvolutionSolver.test_can_init_with_dithering   s6    ,T^^-1[[6>@ 	V]]DN3r:   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^   ro   r#   r(   r%   )
r   assert_raises
ValueErrorr   r/   r*   nanr   scalerp   )r7   funcr'   rY   s       r8   +test_invalid_mutation_values_arent_acceptedzKTestDifferentialEvolutionSolver.test_invalid_mutation_values_arent_accepted   s    j5++#+		- j5++#+		- =j5++#+		- ,T-1[[6>@ 	S&,,'T6==)r:   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rA   s    r8   rz   zETestDifferentialEvolutionSolver.test_invalid_functional.<locals>.func   s*    88RVVAF^RVVAY788r:   z,func\(x, \*args\) must return a scalar valuematchr@   )rv   RuntimeErrorr   )r7   rz   s     r8   test_invalid_functionalz7TestDifferentialEvolutionSolver.test_invalid_functional   s<    	9 EG #4'7);<G G G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   r1   _scale_parametersr.   r7   re   s     r8   test__scale_parametersz6TestDifferentialEvolutionSolver.test__scale_parameters   sh    #R**<<UCD $&88cURDM#: R**<<UCDr:   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   r1   _unscale_parametersr.   r   s     r8   test__unscale_parametersz8TestDifferentialEvolutionSolver.test__unscale_parameters   sh    "S$++??FG $&88cURDM#: S$++??FGr:   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   r0   r   r   r   r   rA   )r7   rY   vress       r8   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-   r1   _ensure_constraintr   r   logical_andallr   s     r8   test__ensure_constraintz7TestDifferentialEvolutionSolver.test__ensure_constraint   sW    =>,,U3U1Xs#uz5A:6::<=r:   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   r0   solver   funrA   r7   rY   rd   s      r8   test_differential_evolutionz;TestDifferentialEvolutionSolver.test_differential_evolution   s     -NNWIq
 VZZ!9:,NNWIq
 VZZ!9:r:   c                     t        | j                  dg      }|j                         }t        |j                  |j                         y )Nr   )r   r0   r   r   rA   r   s      r8   test_best_solution_retrievalz<TestDifferentialEvolutionSolver.test_best_solution_retrieval  s1    ,T^^gYGVXXvxx(r:   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   valrA   )rA   r   rz   s     r8   rz   zFTestDifferentialEvolutionSolver.test_intermediate_result.<locals>.func  s*    (CTXX~Jr:   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_resultr6   ndimshaper   rA   rz   r   r   r   rangelenpopulation_energiesmessagesuccess
isinstancer   StopIteration)r   ir   refcallbackr   s       r8   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#& I ,..,77:<,00,@@CE '..-???&..$6661>BBB||w&## 'r:   r   r   r@   ie F)rz   r/   seedr   r   r   &callback function requested stop early/Maximum number of iterations has been exceeded.>   r   r   Tr   r<   )rA   r*   infr   r   r   rz   dictr   r   r   itemsr   r   )
r7   r/   kwargsr   r   fieldr   r   rz   r   s
          @@@r8   test_intermediate_resultz8TestDifferentialEvolutionSolver.test_intermediate_result
  sq    	 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   r:   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     r8   callback_python_truezVTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_python_trueW  s    r:   )r   c                     t         r   )r   )r   s    r8   callback_stopzOTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_stop`  s    r:   c                     dgS )Nr   r<   r   s     r8   callback_evaluates_truezYTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_truef  s	    4Kr:   c                     g S r   r<   r   s     r8   callback_evaluates_falsezZTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_falsen  s    Ir:   )r   )r   r   r   r   r   )r7   r/   expected_msgr   rd   r   r   r   s           r8   test_callback_terminatesz8TestDifferentialEvolutionSolver.test_callback_terminatesS  s    &!?	 (6$8
 	FNNL9	  (vN>>!!	 (v@WXFNNL9>>!!	 (v1IK~~~r:   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tuplerw   )rA   argss     r8   r0   zLTestDifferentialEvolutionSolver.test_args_tuple_is_passed.<locals>.quadraticz  sB    DzU" !9::7T!Wq[(47QU?::r:   T)r   r   gUUUUUU?)r   r   r   )r7   r/   r   r0   rd   s        r8   test_args_tuple_is_passedz9TestDifferentialEvolutionSolver.test_args_tuple_is_passedu  s:    	;
 (	(.-1/35 	FJJ/r:   c                 F    t         }dg}t        t        t        ||d       y )Nr^   abcrD   )r   rv   rw   r   )r7   rz   r/   s      r8   test_init_with_invalid_strategyz?TestDifferentialEvolutionSolver.test_init_with_invalid_strategy  s$    j0 #(		*r:   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   rv   rw   r   r   r   rA   )r7   rz   r/   rd   s       r8   test_bounds_checkingz4TestDifferentialEvolutionSolver.test_bounds_checking  sk    j0 	" 9%j0 	" (vq!fq!f/EFFHHh/r:   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@   ra   r   r#   r&   r`   )r*   r4   reshaperq   zipr   _select_samplesr   r   uniquer-   )
r7   r.   r/   rY   	candidater1r2r3r4r5s
             r8   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r:   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      r8   test_maxiter_stops_solvez8TestDifferentialEvolutionSolver.test_maxiter_stops_solve  sA     -UDKKKV^^U+V^^I	Kr:   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      r8   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^^%	&r:   c                     t        | j                  dgd      }|j                          t        t	        j
                  |j                        d       y )Nr   r!   {Gz?tolr   )r   r0   r   r   r*   argminr   rX   s     r8   test_quadraticz.TestDifferentialEvolutionSolver.test_quadratic  s>    ,T^^.9]157 	RYYv99:A>r:   c                 6    t        | j                  dgd       y )Nr   r   r  )r   r0   r=   s    r8   test_quadratic_from_diff_evz;TestDifferentialEvolutionSolver.test_quadratic_from_diff_ev  s    t~~ +}#'	)r:   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   r0   r   rA   r   )r7   rd   result2s      r8   test_seed_gives_repeatabilityz=TestDifferentialEvolutionSolver.test_seed_gives_repeatability  sf    ')4/4-.,/	1
 ))4/4-.,/	1
 	VXXwyy)V[[',,/r:   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   r0   )r7   rnginitsr  s       r8   test_random_generatorz5TestDifferentialEvolutionSolver.test_random_generator   sD     ii##%?D"4>>$/=*/(+'*(,. r:   c                 ^    t        t        | j                  dd      }|j                          y )NrC   r#   )rE   r   r   r   r/   r   rX   s     r8   test_exp_runsz-TestDifferentialEvolutionSolver.test_exp_runs  s&    ,U-1[[6@568
 	r:   c                 2    ddg}t        t        |dd       y )N)r`   1   r#   )r&   r   )r   r   )r7   r/   s     r8   test_gh_4511_regressionz7TestDifferentialEvolutionSolver.test_gh_4511_regression  s    
 7# 	ufb!Dr:   c                    t        t        | j                  d      }|j                  |j                         |j                          t        t        j                  |j                        d       t        |j                  d       y )Nr^   r   r   ra   )r   r   r/   _calculate_population_energiesr6   _promote_lowest_energyr   r*   r  r   _nfevrX   s     r8   "test_calculate_population_energieszBTestDifferentialEvolutionSolver.test_calculate_population_energies'  s]    ,UDKKK--f.?.?@%%'RYYv99:A> 	V\\1%r:   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  rv   r   	enumerate)
r7   rY   rA   r   _fun_prevr   soln	x_currentfun_currents
             r8   test_iterationz.TestDifferentialEvolutionSolver.test_iteration1  s     -UDKK468f3RWWQ]A& 	V\\2& 	mT62 -UDKK@6l8 (GAt%)"I{{***#[xABw )r:   c                     t        t        | j                  dd      }|j                          t	        |j
                  dk         y )N皙?F)r  r   )r   r   r/   r   r   r   rX   s     r8   test_convergencez0TestDifferentialEvolutionSolver.test_convergenceK  s5    ,UDKKS49;""S()r:   c                 ^    t        t        | j                  d d       }|j                          y )N)r   r   r  rX   s     r8   test_maxiter_none_GH5731z8TestDifferentialEvolutionSolver.test_maxiter_none_GH5731Q  s$    
 -UDKK48:r:   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  ru   r^   r   r`   r@   rM   {Gz?r#   )r  rE   atolr   r&   )r`   r@      r   r   )lowhighr$  x0)rv   rw   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   r6   minmaxr  uniformr   )r7   rY   r6   unscaled_populationr:  s        r8   test_population_initiationz:TestDifferentialEvolutionSolver.test_population_initiationZ  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7r:   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)   r9   @)r   r   r/   r   rv   rw   )r7   r   s     r8   test_x0z'TestDifferentialEvolutionSolver.test_x0  sN    $UDKKS#JG{{{ :&"5$++3*E '&&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    r8   sometimes_infzWTestDifferentialEvolutionSolver.test_infinite_objective_function.<locals>.sometimes_inf  s    tbyvvQ4Kr:   r"   F)r/   disp)r   )r7   rM  r/   s      r8    test_infinite_objective_functionz@TestDifferentialEvolutionSolver.test_infinite_objective_function  s    	 &!}V%Hr:   c                 (   ddg}t        t        |d      }t        |j                  dk(         t        |j                  j
                  t        u        |j                         }|j                  sJ t        t        |dd      }|j                  sJ y )Nr   r   )r   rC   )r   rE   )
r   r   r   	_updating_mapwrapper_mapfuncmapr   r   r   )r7   r/   rY   r   s       r8   test_deferred_updatingz6TestDifferentialEvolutionSolver.test_deferred_updating  s    H%,UFZP  J./""++s23lln{{{ %6J
 {{{r:   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   rQ  multiprocessingget_contextr   r   UserWarningrT  )r7   r/   rY   ctxpss         r8   test_immediate_updatingz7TestDifferentialEvolutionSolver.test_immediate_updating  s    H%,UF;  K/0 ))'2XXa[A {#0NRS O $ ;;*,,, [ ON $# [s<   C#B9 B-B9
C-B62B99C	>CCr`   c           	         ddg}t        d      5 }t        t        |d|j                  dd      5 }|j                  j
                  J |j                  dk(  sJ |j                          d d d        d d d        t        t        |dddd      5 }|j                  j
                  J |j                  dk(  sJ |j                          d d d        y # 1 sw Y   ixY w# 1 sw Y   mxY w# 1 sw Y   y xY w)Nr   r@   r   r(   r^   )r   rY  r  r&   )r   rY  r&   r  )
ThreadPoolr   r   rT  rR  poolrQ  r   )r7   r/   r^  rY   s       r8   test_parallelz-TestDifferentialEvolutionSolver.test_parallel  s     H%]a!<6J3PQ"
%%**666##z111LLN"
] )6J1#
%%**666##z111LLN
 
"
 "
]]
 
s.    C:C*C:C*C	CC'*C3c                 z    t        t        ddg      }|j                          t        |j	                                y )Nr   )r   r   r   r   	convergedrX   s     r8   test_convergedz.TestDifferentialEvolutionSolver.test_converged  s-    ,UVV4DE  "#r:   c                 X   d }d t        |t        j                   d      }t        t        ddg|f      }|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    r8   constr_fzNTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f      aD1Q4K= r:   c                 Z    t        j                  | d   dz  | d   z   | d   | d   z
  g      S Nr   r@   r#   r*   r-   r   s    r8   	constr_f2zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f2  2    88QqT1Wqt^QqTAaD[9::r:   ffffff?r   constraintsr   r(   ?))333333?r#   r   )r%   r%   ))r   {Gz?r   )rI  @r   )r   r   r   )r^   r#   r^   c                 (     |       j                   S r   )r5   )rA   rp  s    r8   	constr_f3zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f3  s    Q<>>!r:   F)rt  
vectorizedTz#An array returned from a Constraintr   )r	   r*   r   r   r   _constraint_violation_fnr-   r   r   r   r3   r   r{  pytestr   r   )r7   rk  nlcrY   cvnlc2xsvsrA   r   constraint_violationrz  rp  s               @r8   test_constraint_violation_fnz<TestDifferentialEvolutionSolver.test_constraint_violation_fn  s   	!	; "(RVVGS9,UVV4D:=A ,,RXXsCj-ABB$"9rvvgs;,UVV4D:=tF
 0;BKDAq00!=BBa 01  
 	++BHHRL9288B<	
  "xx24((2,)@2>Q *0)H)H)K2>)@  A#))Y666	" #9rvvgs;,UVV4D:=t8=? !]]$I
 ++BHHRL9
 
)@
 
s   #H-%H  H)c           	      N   d }d }t        |t        j                   d      }t        t        ddg|f      }|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 rj  r<   r   s    r8   rk  zZTestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f'  rl  r:   c                 4    | d   dz  | d   z   | d   | d   z
  gS rn  r<   r   s    r8   rp  z[TestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f2*  s)    aD!GadNAaD1Q4K00r:   rr  r   rs  r%   r   Fr(   rI  )r@   r#   ru  )FTr   )rt  r{  r   g333333?)r(   r-  r   )r   rw  r   )rI  rx  r   )r@   r^   rb   T)r   r   r   )
r	   r*   r   r   r   #_calculate_population_feasibilitiesr-   r   r   r   )	r7   rk  rp  r~  rY   feasr  r  	vectorizes	            r8   (test_constraint_population_feasibilitieszHTestDifferentialEvolutionSolver.test_constraint_population_feasibilities&  s   	!	1 "(RVVGS9,UVV4D:=A
 ==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%%%+ 'r:   c                    d }t        |t        j                   d      }t        t        ddg|f      }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 rj  ro  r   s    r8   rk  zGTestDifferentialEvolutionSolver.test_constraint_solve.<locals>.constr_fT      88QqTAaD[M**r:   rr  r   rs  )
r	   r*   r   r   r   r   r\  r   rA   r   )r7   rk  r~  rY   r   s        r8   test_constraint_solvez5TestDifferentialEvolutionSolver.test_constraint_solveS  s}    	+ "(RVVGS9,UVV4D:=A ;,,.C   #%%%{{{	  s   BBc                 F   d }t        |t        j                   d      }t        t        ddg|fddd      }t        t              5  |j                         }d d d        j                  dkD  sJ |j                  rJ t        t        ddg|f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 rj  ro  r   s    r8   rk  zLTestDifferentialEvolutionSolver.test_impossible_constraint.<locals>.constr_fe  r  r:   ru   r   r#   r!   )rt  r&   r   r   r   F)rt  r      )r	   r*   r   r   r   r   r\  r   maxcvr   r#  feasibler   isfiniter   r  r6   r  r   )r7   rk  r~  rY   r   lr  s          r8   test_impossible_constraintz:TestDifferentialEvolutionSolver.test_impossible_constraintc  s   	+ "(RVVGR8,FF##TW
 ;,,.C   yy1}};;
 -FF##G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|f      }|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 rj  r<   r   s    r8   rk  zCTestDifferentialEvolutionSolver.test_accept_trial.<locals>.constr_f  rl  r:   rr  r   rs  r(   Tr   r   Fg#@r%   g?)r	   r*   r   r   r   _accept_trialr-   )r7   rk  r~  rY   fns        r8   test_accept_trialz1TestDifferentialEvolutionSolver.test_accept_trial  s   	!!(RVVGS9,UVV4D:=A!!#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 	: : 9r:   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   )rb         r#      r`   r^   )r#   r@   r^   r_   )r`   r   r   ra   )r$   r      r   )r   r@   r   r_      r$   r_   c                 &    j                  |       S r   )dot)rA   As    r8   r   zDTestDifferentialEvolutionSolver.test_constraint_wrapper.<locals>.fun  s    558Or:   )r*   r-   r   r   r   	violationanyr   r4   r   appendtestingr   r5   r
   r   r	   )r7   lbubr:  pcr  
violationsrA   r   	nonlinearr  s             @r8   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:::r:   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 rn  ro  r   s    r8   cons_fzQTestDifferentialEvolutionSolver.test_constraint_wrapper_violation.<locals>.cons_f  sA     88QqTQY1-qTQY1-/ 0 0r:   ru   g333333r@   r%   r#   r   )rn   )r%   rv  )rv  rv  )r(   333333)r(   r   ))r   r   )r   r(   )rw  r   )gRQ?r   )r4  g=
ףp=?)r	   r   r*   r$  r/   r   r   r  r-   r5   r   r   r   
num_constrparameter_count)r7   r  r~  r  r  r  rA   r   s           r8   !test_constraint_wrapper_violationzATestDifferentialEvolutionSolver.test_constraint_wrapper_violation  s6   	0 "&2w-!Q@c1X.wwryy|$)))HCBKDAqBLLOQ/   	RXXb\^^4	(vvbhhrlnn%++3r7|;;;||BHHRLNN+11aR\AAA}}!!!!!Q&&&r:   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   r4   r   )r7   supr  lcr:  cwxtrials          r8   test_matrix_linear_constraintz=TestDifferentialEvolutionSolver.test_matrix_linear_constraint  s      CJJ01YY - / 0F ! fa+WWQZB' ||B%%--- 5!))!Q/||F#))V333 ! s   1CC!r   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|f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|f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 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   rA   r   s     r8   fz2TestDifferentialEvolutionSolver.test_L1.<locals>.f  s_    		A3(#A&&1Qq6"Qq1vXa!f_4rvvae}DCJr:   )r      )r@   r@   r#   r#   r#   )r#   r@   r      )r#   r@   r   )r   ru   r#   r^   )r_   r`   r   r_   )r#   r^   r   r  r`   r  ra   )ra   r$   r  r$   )r@   r^   r  r!  r  r!  	   )r  r  r!  )	r   r   r   r   r   r   r   r   r   r"   r    rG     r\   rE   r   rt  r&   r  )r#   r#   r#   r#   r#   r#   r#   r#   r#   r^   r^   r^   r#   iga2U0*C?r5  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    r8   c1z3TestDifferentialEvolutionSolver.test_L1.<locals>.c1C  s\    		A3(#AadFQqtVOae+ae3qtGaeO% %r:   c                 Z    t        j                  dg| f      } d| d   z  | d   z
  | d   z   S )Nr   r   r  r  r!  r  r   s    r8   c2z3TestDifferentialEvolutionSolver.test_L1.<locals>.c2H  s5    		A3(#Aad7QqT>AbE))r:   )r*   zerosr-   r
   r   r   r   r   rA   r   r   r   r   r	   r   r  r\  )r7   r  r  bLr/   r   x_optf_optr  r  L2NN2rt  r  s                   r8   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 %v
A44

 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 %v
A44

 	%%({{{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 CJJ{#(6JT'C ! 	u40T2qw!|$%suu 0A 6678suu 0A 6678 ! s   >(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  ra   r$   r  r  r  s     r8   r  z2TestDifferentialEvolutionSolver.test_L2.<locals>.fc  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 Jr:   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`         ra   r  r$   i  r   r  r  r   s    r8   r  z3TestDifferentialEvolutionSolver.test_L2.<locals>.c1j  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%& &r:   r   r   r$   rG   r  rE   r   rt  gy\
E@)gܤ@g$H8?g	޿g0ev@gn8)gk_@/?g0g+?h㈵>r  r#   )r	   r*   r   r   r  r\  r   r   r   rA   r   r   r   r-   )
r7   r  r  r  r/   rt  r  r   r  r  s
             r8   test_L2z'TestDifferentialEvolutionSolver.test_L2_  s/   		&  Arvv.Q CJJ{#(FZ.2MC !
 "1 	%%('u40{{{rxx355	*a/01suu 0A 6678suu 0A 6678 ! 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`   ra   r$   r  r  r  -   r  r  s     r8   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
 Jr:   )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#   ra   r@   r!  r  r  r$   r   r   r_   x   r  r`   r  r         r   r  r   s    r8   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r:   r   r   r   r  )r   rt  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   rA   r   r   r   r   r7   r  r  r  r  r  r  r/   rt  r  r   r  r  s                r8   test_L3z'TestDifferentialEvolutionSolver.test_L3  s   	 HHW*!\/+!\/*!]
ab!"fIHH^$	N Q266*Arvv.R!f CJJ{#(F5@!MC !
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! ! s   #&H$$H.c           
      F   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        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    r8   r  z2TestDifferentialEvolutionSolver.test_L4.<locals>.f  s    66!BQ%= r:   )r_   r  ){Gzd?r  r#   r_   ra   )r  r  g{Gzdr@   )r`   r$   r_   )r4  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#   ra   g!> 
@r_   r!   gSUX@r@   r$   i  r`   r^   r  i i	  r  r   s    r8   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r:   r   )r!   '  )  r  )r   r  rG   r  r\   r  gh|?@)got@g?@g:@gt$f@gVfyr@gh o?k@gCq@gVfx@MbP?r  Windowsgv!>gy&1l?)rtolr5  gh㈵>ga2U0*c?)r*   r  r-   r
   r   r	   r   r  r\  r   r   r   platformsystemr   intpitemsizerA   r   r   r   )r7   r  r  r  r  r  r  r/   rt  r  r   r  r  s                r8   test_L4z'TestDifferentialEvolutionSolver.test_L4  s   	! HHV%!aV)1!Y,"!aV)ab!"fIHHY	A Q+Arvv.=/!"33zl1nD!f CJJ{#(6JT'C ! 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85 ! s   /(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     r8   r  z2TestDifferentialEvolutionSolver.test_L5.<locals>.f  s    		A3(#A66!BEE'!A$,'*266!BEE'!A$,+??aD!GQqT!A$Y')C4Kr:   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    r8   r  z3TestDifferentialEvolutionSolver.test_L5.<locals>.c1  sT    		A3(#AaD!GadNQ&!H!Q{*, ,r:   r   r   r   r@   rH   r  r  )gJIť?gU(C@g#gh㈵>r  -C6?r#   )r	   r*   r   r   r   r   r   r   r   r-   rA   	r7   r  r  r  r/   rt  r   r  r  s	            r8   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8r:   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     r8   r  z2TestDifferentialEvolutionSolver.test_L6.<locals>.f  s=    		A3(#AQ47Q,!A$)a/CJr:   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!   ra   gp=
׳T@r  r   s    r8   r  z3TestDifferentialEvolutionSolver.test_L6.<locals>.c1  sl    		A3(#AqT!VaK1Q4!8a-/#5d1fq[LAaD1Hq=058: :r:   r   )   r!   r    rH   r  gHz>)rE   r   rt  r  )gq=
ף0,@g??g1r  r  r  r  r#   )r	   r*   r   r   r   r   rA   r   r   r   r-   r  s	            r8   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8r:   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     r8   r  z2TestDifferentialEvolutionSolver.test_L7.<locals>.f-  s[    		A3(#AQqT1W$y1~ad'::QqT>"$-.CJr:   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    r8   r  z3TestDifferentialEvolutionSolver.test_L7.<locals>.c13  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'(	 	r:   )r   Z   r  )\   n      )N   f   )!   r  )   r  r^   rH   r  r  )gq S@g] @@g˻f=@g:F@g%ShMcB@gCgbr  r  r   r#   )
r	   r   r   rA   r   r   r   r*   r   r-   r  s	            r8   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8r:   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     r8   r  z2TestDifferentialEvolutionSolver.test_L8.<locals>.f]  sY    		A3(#AAaD&8AaD!G++a!f4z!A$'7IICJr:   )r^   r`   )r#   ru   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^   rb   r_   gfffff@r#   r@   g33333;@)r*   r  r  r   s    r8   r  z3TestDifferentialEvolutionSolver.test_L8.<locals>.c1h  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 r:   MbPr  )r   i  )r  g?rG   r  i  )rE   r   rt  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   rA   r   r   r   r   r  s                r8   test_L8z'TestDifferentialEvolutionSolver.test_L8Y  s'   	
 HHV!aV)!aV)ab!"fIHHdD\"		 Q266*BGGAv$658IJQ}Q.!f CJJ{# )FZ.2157C ! <%%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+ ! s   ;'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    r8   r  z2TestDifferentialEvolutionSolver.test_L9.<locals>.f  s5    		A3(#AQ47ad1fq[((r:   c                 P    t        j                  dg| f      } | d   | d   dz  z
  gS rn  r  r   s    r8   r  z3TestDifferentialEvolutionSolver.test_L9.<locals>.c1  s/    		A3(#AaD1Q47N##r:   r  r  rt   r@   rH   r  r  r%   g      ?r  r   r#   )r	   r   r*   sqrtr   absrA   r   r   r   r   r-   r  s	            r8   test_L9z'TestDifferentialEvolutionSolver.test_L9  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8r:   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 )Nru   axis)r*   logpmfr   isnanr   )r^  r   distrA   lls        r8   rz   z>TestDifferentialEvolutionSolver.test_integrality.<locals>.func  sQ    GD!&&!a)--2-66Bxx|VVIr:   TF)r#      )r   gffffff?)r   integralityr   r   r   r`   g?)r  c                 T    |\  }}} t        j                  || d   g      ||      S )Nr   ro  )r^  r   nr0  rA   rz   s        r8   func2z?TestDifferentialEvolutionSolver.test_integrality.<locals>.func2  s.    JAtQ!QqT+T155r:   r#   )r   r/   )r*   r  r  r   nbinomrvsr   rA   r   r   r   )r7   r  r0  shapesrA   r3  r/   r   res2r6  LBFGSBrz   s              @r8   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"""r:   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    r8   r  zBTestDifferentialEvolutionSolver.test_integrality_limits.<locals>.f  s    Hr:   )TFT))r-  r   r   皙@)ffffff
@皙@F)r/   r   r3  r   )r-  r   rA  r#   )r   r@  rB  )r%   r   g      @)g      ?r@        @))r  gr?  )g$gffffff@)g      r         %)r  r@  rC  )      r   g      $)rE  r   g      @))ffffff$g333333 r?  g%gr#)rD  r   rD  )g      !r@  g      #))rF  g333333$r?  rG  zOne of the integralityr   )r   r   r.   r   r3  r   r*   roundr}  r   rw   )r7   r  r3  r/   rY   s        r8   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'&4?A GFFs   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    r8   r0   zBTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic
  s    66!Q$<r:   c                 6    t        j                  | dz  d      S )Nr@   r   r+  r  r   s    r8   quadratic_veczFTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic_vec  s    66!Q$Q''r:   zThe vectorized functionr   Tr   )r{  r   z#differential_evolution: the 'vector)r{  z$differential_evolution: the 'workers)r{  rY  r   r   c                 4    dxx   dz  cc<   t        |       S rj  )r   )rA   ncallss    r8   	rosen_veczBTestDifferentialEvolutionSolver.test_vectorized.<locals>.rosen_vec"  s    1INI8Or:   r  r#   )r   r   )r{  r   r   )r}  r   r   r   r/   r   r\  rT  r   r   rA   r   r   )r7   r0   rM  rP  r/   res1r:  rO  s          @r8   test_vectorizedz/TestDifferentialEvolutionSolver.test_vectorized  s,   	 	( ]]</HI"9dkk.2ZI J
 ;&KL"=$++.24 M
 ;&LM"=$++.2C,68 N
 	 7#%eVj+,.%iD/9C 	'ayDII%%%xx488###= JI
 ML
 NMs#   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 rj  ro  r   s    r8   rk  zMTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f2  r  r:   c                 Z    t        j                  | d   dz  | d   z   | d   | d   z
  g      S rn  ro  r   s    r8   rp  zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f25  rq  r:   rr  )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#   ru   r   )r*   squeeze)rA   r   s     r8   rP  zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.rosen_vec;  sM    quq"vs{*S00A!af*s""A::a= r:   r  r   r#   F)r   r   rt  r   T)r{  r   r   rt  r   )r	   r*   r   r   r   r   rA   )	r7   rk  rp  nlc1r  rP  r/   rQ  r:  s	            r8   test_vectorized_constraintsz;TestDifferentialEvolutionSolver.test_vectorized_constraints1  s    	+	; #8bffWc:"9j*E	! 7#%eVj+,4,-24 &iD/937,-24
 	'r:   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 rj  )r*   cosr  r   s    r8   rz   zUTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.funcO  s%    66!A$<"&&1,..r:   c                 $    | d   | d   dz
  dz  z
  S Nr#   r   r@   r<   r   s    r8   <lambda>zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>S  s    1Q41Q46A++=r:   r   c                     | d   | d   dz  z   S r^  r<   r   s    r8   r_  zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>T  s    1Q4!A$'>r:   )ru   r@   rt   r   Fi3)r/   rt  r   r   r   zMAXCV = 0.4)r	   r*   r   r   r   r   )r7   rz   c0r  rd   s        r8   'test_constraint_violation_error_messagezGTestDifferentialEvolutionSolver.test_constraint_violation_error_messageM  s}    	/ !!=q"&&I !9BFF7AF'07/A57H02/4-68 ~~&&& ...r:   c                   	
 dd}dgz  }|z  
dd	dgd	
fd	}t        t        ||	d|dd	
	      }|j                  |u sJ |j                          d   dkD  sJ t	        t        ||d      }|j
                  s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?r   c                 ~   dxx   dz  cc<   t        j                  ||          }|j                        }t        j                        }|j	                  |       |d d }||| k7     d d }|d d \  }}|d   ||   ||   z
  z  z   }	|j                        }
|
k  }
d|
|<   t        j                  |
|	|      }|S )Nr   r#   r^   r@   )r$  T)r*   copychoicer4   shufflerE  where)r   r6   r  re   
fill_pointrc  idxsr0r   bprime
crossoverscallsr'   r  recombinationtotal_popsizes              r8   custom_strategy_fnzLTestDifferentialEvolutionSolver.test_strategy_fn.<locals>.custom_strategy_fnp  s    !HMHGGJy12EO4J99]+DKK<D	)*2A.D"1XFB mh^jn4'6 6F /:J#m3J%)Jz"HHZ7ELr:   r@   F)r&   ro  r'   r   rE   r   r   r   )rE   r   c                 0    t        j                  ddg      S )Nr   r   ro  )r   r6   r  s      r8   rq  zLTestDifferentialEvolutionSolver.test_strategy_fn.<locals>.custom_strategy_fn  s    88S#J''r:   z	strategy*r   rD   r   )	r   r   rE   r   r   r   r}  r   r   )r7   r&   r/   rq  rY   r   rn  r'   r  ro  rp  s         @@@@@r8   test_strategy_fnz0TestDifferentialEvolutionSolver.test_strategy_fnd  s     o-''1	 	* -''

 "4444Qx!|| %6$6
 {{{	( ]]<{;"+ <;;s   (CCN)KrW   
__module____qualname__r9   r>   r0   rZ   rf   rh   rj   rl   rr   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.  r0  rG  rJ  rO  rU  r`  r}  mark	fail_slowrd  rg  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  xslowxfailr  machiner!  r'  r<  rI  rR  rY  rb  rs  r<   r:   r8   r   r      s   3&%IGV'
'''4*<=EH
(>;)G!R D0 *0$JK.&`?)0.E &4*D8LFI-& [[1 $$
7:r+&Z  [[1%9 %9N:4*;X'84& [[2\9 \9| [[1%9 %9N [[109 09d [[129 29h [[19 9< [[19 98,9\ [[[['x'')Y60  2192 19f [[19 9< [[1*# *#X+AZ [[1&$ &$P(8/. [[2= =r:   r   )$__doc__rZ  multiprocessing.dummyr   rb  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   rv   r   r   r<   r:   r8   <module>r     sR     4 G A; ; * #  L L 1 J Jr:   