U
    9%e                     @   s   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ ddlZdd
lmZmZmZmZmZmZ ddlmZm Z  ddlZG dd dZ!dS )z@
Unit tests for the differential global minimization algorithm.
    N)DifferentialEvolutionSolver_ConstraintWrapperdifferential_evolution)BoundsNonlinearConstraintLinearConstraint)rosenminimize)
csr_matrix)stats)Version)assert_equalassert_allcloseassert_almost_equalassert_string_equalassert_suppress_warnings)raiseswarnsc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8e9j:j;e9j:j<e=> dmkdndodpdq Z?drds Z@dtdu ZAdvdw ZBdxdy ZCdzd{ ZDd|d} ZEd~S )TestDifferentialEvolutionSolverc                 C   sx   t jdd| _t ddgddgg| _ddg| _t| jdg| _t| jdgdd	d
| _	t 
t dddj}|| j	_d S )Nraise)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)selfr2    r4   p/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/scipy/optimize/tests/test__differential_evolution.pysetup_method   s    

z,TestDifferentialEvolutionSolver.setup_methodc                 C   s   t jf | j d S N)r&   r'   r(   r3   r4   r4   r5   teardown_method-   s    z/TestDifferentialEvolutionSolver.teardown_methodc                 C   s   |d d S )Nr      r4   )r3   xr4   r4   r5   r,   0   s    z)TestDifferentialEvolutionSolver.quadraticc                 C   s  t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd	 t t| jd
d}t|jd
 t|jjd t t| jdd}t|jd t|jjd	 t t| jdd}t|jd t|jjd	 t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd t t| jdd}t|jd t|jjd d S )Nbest1expstrategy_best1best1binrand1bin_rand1Zrand1expZrand2exp_rand2best2bin_best2Zrand2binZrandtobest1bin_randtobest1Zrandtobest1expZcurrenttobest1bin_currenttobest1Zcurrenttobest1exp)r   r	   r+   r   r>   Zmutation_func__name__r3   solverr4   r4   r5   test__strategy_resolves3   s    z7TestDifferentialEvolutionSolver.test__strategy_resolvesc                 C   sH   t dg}| jd}t|| t dg}| jd}t|| d S )Ng?r:                     ?)r&   r)   r.   r?   r   rB   r3   resulttrialr4   r4   r5   test__mutate1~   s    
z-TestDifferentialEvolutionSolver.test__mutate1c                 C   sH   t dg}| jd}t|| t dg}| jd}t|| d S )NgrL   r$   )r&   r)   r.   rE   r   rC   rR   r4   r4   r5   test__mutate2   s    
z-TestDifferentialEvolutionSolver.test__mutate2c                 C   s&   t dg}| jd}t|| d S )Ng333333?rL   )r&   r)   r.   rF   r   rR   r4   r4   r5   test__randtobest1   s    z1TestDifferentialEvolutionSolver.test__randtobest1c                 C   s(   t dg}| jdd}t|| d S )Nr$   r   rL   )r&   r)   r.   rG   r   rR   r4   r4   r5   test__currenttobest1   s    z4TestDifferentialEvolutionSolver.test__currenttobest1c                 C   s*   d}t | j| j|d}t|jt| d S )Nr!   r   r#   )r   r,   r+   r   ditherlist)r3   r#   rJ   r4   r4   r5   test_can_init_with_dithering   s    z<TestDifferentialEvolutionSolver.test_can_init_with_ditheringc                 C   s   t }d}ttt|| j|d d}ttt|| j|d dtjf}ttt|| j|d d}t|| j|d}td|j td |j	 d S )N)r!   rM   rZ   r   r$   r!   )
r	   assert_raises
ValueErrorr   r+   r&   nanr   scaler[   )r3   funcr#   rJ   r4   r4   r5   +test_invalid_mutation_values_arent_accepted   s:    
zKTestDifferentialEvolutionSolver.test_invalid_mutation_values_arent_acceptedc              	   C   s2   dd }t tdd t|ddg W 5 Q R X d S )Nc                 S   s   t t | d t | gS Nr:   )r&   r)   sumr;   r4   r4   r5   rd      s    zETestDifferentialEvolutionSolver.test_invalid_functional.<locals>.funcz,func\(x, \*args\) must return a scalar valuematchr:   )r`   RuntimeErrorr   )r3   rd   r4   r4   r5   test_invalid_functional   s    z7TestDifferentialEvolutionSolver.test_invalid_functionalc                 C   sJ   t dg}td| j| t dgdgg| j_td| j| d S )N333333?   r   r   )r&   r)   r   r-   Z_scale_parametersr*   r3   rT   r4   r4   r5   test__scale_parameters   s    z6TestDifferentialEvolutionSolver.test__scale_parametersc                 C   sJ   t dg}td| j| t dgdgg| j_td| j| d S )Nrp   ro   r   r   )r&   r)   r   r-   _unscale_parametersr*   rq   r4   r4   r5   test__unscale_parameters   s    z8TestDifferentialEvolutionSolver.test__unscale_parametersc                 C   sP   t ddddddg}| j| t|d d tt |dk|d	k  d S )
N皙??r   g     r@gh㈵r:   r   r   )r&   r)   r-   Z_ensure_constraintr   r   logical_andallrq   r4   r4   r5   test__ensure_constraint   s    z7TestDifferentialEvolutionSolver.test__ensure_constraintc                 C   sd   t | jdgddd}| }t|j| |j t | jdgddd}| }t|j| |j d S )Nrk   r   F)maxiterpolishT)r   r,   solver   funr;   r3   rJ   rS   r4   r4   r5   test_differential_evolution   s           z;TestDifferentialEvolutionSolver.test_differential_evolutionc                 C   s(   t | jdg}| }t|j|j d S )Nrk   )r   r,   r}   r   r;   r   r4   r4   r5   test_best_solution_retrieval   s    z<TestDifferentialEvolutionSolver.test_best_solution_retrievalc                 C   sz   ddg}d}ddd}t t||d}t|j| ddd}t t||d}t|j| dd	d
}t t||d}|jsvtd S )Nr   r:   z8callback function requested stop early by returning Truer   c                 S   s   dS )NTr4   paramconvergencer4   r4   r5   callback_python_true   s    zVTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_python_true)callbackc                 S   s   dgS )N
   r4   r   r4   r4   r5   callback_evaluates_true  s    zYTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_truec                 S   s   g S r7   r4   r   r4   r4   r5   callback_evaluates_false  s    zZTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_false)r   )r   )r   )r   r	   r   messagesuccessAssertionError)r3   r+   Zexpected_msgr   rS   r   r   r4   r4   r5   test_callback_terminates   s    


z8TestDifferentialEvolutionSolver.test_callback_terminatesc                 C   s2   dg}d}dd }t |||dd}t|jd d S )Nr   )      ?r   g      @c                 W   s8   t |tkrtd|d |d |   |d | d   S )Nzargs should be a tupler   r   r:   r   )typetuplera   )r;   argsr4   r4   r5   r,     s    zLTestDifferentialEvolutionSolver.test_args_tuple_is_passed.<locals>.quadraticT)r   r|   gUUUUUU?)r   r   r~   )r3   r+   r   r,   rS   r4   r4   r5   test_args_tuple_is_passed  s    z9TestDifferentialEvolutionSolver.test_args_tuple_is_passedc                 C   s    t }dg}ttt||dd d S )NrM   abcr=   )r	   r`   ra   r   )r3   rd   r+   r4   r4   r5   test_init_with_invalid_strategy#  s    z?TestDifferentialEvolutionSolver.test_init_with_invalid_strategyc                 C   sV   t }dg}ttt|| ddg}ttt|| tt tddgddg}t|jd d S )Nr   r   )rM   rN   rO   r   r:   )r   r   )r	   r`   ra   r   r   r   r;   )r3   rd   r+   rS   r4   r4   r5   test_bounds_checking-  s    z4TestDifferentialEvolutionSolver.test_bounds_checkingc           
      C   s   t jddddd}tt|dd d f |dd d f }td |dd}d}||d	\}}}}}	ttt 	t 
||||||	gd d S )
Ng      (@Zfloat64)dtyper:   rP   r   r   r"   rO   )r&   r0   reshaper\   zipr   Z_select_samplesr   lenuniquer)   )
r3   r*   r+   rJ   	candidater1r2Zr3Zr4Zr5r4   r4   r5   test_select_samples?  s    & z3TestDifferentialEvolutionSolver.test_select_samplesc                 C   s4   t t| jdd}| }t|jd t|jd d S )Nr   )r{   Fz/Maximum number of iterations has been exceeded.)r   r	   r+   r}   r   r   r   r   r4   r4   r5   test_maxiter_stops_solveI  s    z8TestDifferentialEvolutionSolver.test_maxiter_stops_solvec                 C   s   t t| jddd}| }t|jd t|jd t|jd t t| jdddd}| }t|jd	 t|jd t|jd t t| jddd
dd}| }t|jd
 t|jd t|jd d S )Nr   F)maxfunr|   r:   z9Maximum number of function evaluations has been exceeded.rO   (   )r"   r|   r   )   /   deferred)r"   r|   r   updatingz8Maximum number of function evaluations has been reached.)r   r	   r+   r}   r   nfevr   r   r   r4   r4   r5   test_maxfun_stops_solveR  sD    
	z7TestDifferentialEvolutionSolver.test_maxfun_stops_solvec                 C   s0   t | jdgdd}|  tt|jd d S )Nrv   r   {Gz?tolr   )r   r,   r}   r   r&   argminpopulation_energiesrI   r4   r4   r5   test_quadratic  s    z.TestDifferentialEvolutionSolver.test_quadraticc                 C   s   t | jdgdd d S )Nr   r   r   )r   r,   r8   r4   r4   r5   test_quadratic_from_diff_ev  s    z;TestDifferentialEvolutionSolver.test_quadratic_from_diff_evc                 C   sL   t | jdgdddd}t | jdgdddd}t|j|j t|j|j d S )Nr   Fr   r!   )r|   seedr   )r   r,   r   r;   r   )r3   rS   Zresult2r4   r4   r5   test_seed_gives_repeatability  s    z=TestDifferentialEvolutionSolver.test_seed_gives_repeatabilityc              	   C   s<   t j }ddddg}|D ]}t| jdgd|d|d qd S )	NrandomZlatinhypercubesobolhaltonr   Fr!   )r|   r   r   init)r&   r   default_rngr   r,   )r3   rngZinitsr   r4   r4   r5   test_random_generator  s    
z5TestDifferentialEvolutionSolver.test_random_generatorc                 C   s   t t| jddd}|  d S )Nr<   r   )r>   r{   r   r	   r+   r}   rI   r4   r4   r5   test_exp_runs  s    z-TestDifferentialEvolutionSolver.test_exp_runsc                 C   s   ddg}t t|ddd d S )N)rO   1   r   )r"   r{   )r   r	   )r3   r+   r4   r4   r5   test_gh_4511_regression  s    	z7TestDifferentialEvolutionSolver.test_gh_4511_regressionc                 C   sF   t t| jdd}||j |  tt|j	d t|j
d d S )NrM   r   r   rP   )r   r	   r+   Z_calculate_population_energiesr2   _promote_lowest_energyr   r&   r   r   _nfevrI   r4   r4   r5   "test_calculate_population_energies  s
    zBTestDifferentialEvolutionSolver.test_calculate_population_energiesc           
      C   s   t t| jddd}t|\}}tt|dd t|jd tt	t| t t| j}t|\}}t
|D ]2\}}|\}}	||	kst||	 }}|dkrh qqhd S )NrM      )r"   r   r   r:   2   )r   r	   r+   nextr   r&   sizer   r`   StopIteration	enumerater   )
r3   rJ   r;   r~   _Zfun_previZsolnZ	x_currentZfun_currentr4   r4   r5   test_iteration  s    

z.TestDifferentialEvolutionSolver.test_iterationc                 C   s,   t t| jddd}|  t|jdk  d S )N皙?F)r   r|   )r   r	   r+   r}   r   r   rI   r4   r4   r5   test_convergence  s
    
z0TestDifferentialEvolutionSolver.test_convergencec                 C   s   t t| jd d d}|  d S )N)r{   r   r   rI   r4   r4   r5   test_maxiter_none_GH5731  s    
z8TestDifferentialEvolutionSolver.test_maxiter_none_GH5731c              	   C   s  t ttft| jfddi tt| j}|  t|jd tt	
t	|j |  t|jd tt	
t	|j |jdd t|jd tt	
t	|j tt| jdd}|jdd t|jd tt	
t	|j t	dd	d
dd}tt| j|ddddd}t|jd tt	
t	|j t|jdk t|jdk t	||dd}t|jd d | tt	|jd d d tt	|jd d d t	dd	ddd	}t ttft| jfd|i t	jjdddd}tt| j|d}t|jd |d  d S )Nr   Zrubbishr   r   )Z
qmc_enginer   )r   r_   rM   r   rO   r:   rD   {Gz?r   )r   r>   atolr   r"   )rO   r:      r   r   )lowhighr   x0)r`   ra   r   r	   r+   Zinit_population_randomr   r   r   r&   ry   isinfr   Zinit_population_lhsZinit_population_qmcZlinspacer   Znum_population_membersZpopulation_shapeZcliprs   r   r2   minmaxr   uniformr   )r3   rJ   r2   Zunscaled_populationr   r4   r4   r5   test_population_initiation  sn         z:TestDifferentialEvolutionSolver.test_population_initiationc              	   C   sJ   t t| jddgd}|jsttt t t| jddgd W 5 Q R X d S )Nr   r%   r    @)r   r	   r+   r   r   r`   ra   )r3   resr4   r4   r5   test_x0>  s    

z'TestDifferentialEvolutionSolver.test_x0c                 C   s"   dd }ddg}t ||dd d S )Nc                 S   s   | d dk rt jS | d S )Nr   r!   r   )r&   infrh   r4   r4   r5   sometimes_infJ  s    zWTestDifferentialEvolutionSolver.test_infinite_objective_function.<locals>.sometimes_infr   F)r+   Zdispr   )r3   r   r+   r4   r4   r5    test_infinite_objective_functionG  s    z@TestDifferentialEvolutionSolver.test_infinite_objective_functionc                 C   s@   ddg}t t|dd}t|jdk t|jjtk |  d S )Nr   r   )r   )r   r	   r   	_updating_mapwrapperZ_mapfuncmapr}   r3   r+   rJ   r4   r4   r5   test_deferred_updatingQ  s
    z6TestDifferentialEvolutionSolver.test_deferred_updatingc              
   C   s`   ddg}t t|}t|jdk tt  t t|dd}W 5 Q R X W 5 Q R X t|jdk d S )Nr   Z	immediater:   )workersr   )r   r	   r   r   r   UserWarningr   r4   r4   r5   test_immediate_updatingY  s    

z7TestDifferentialEvolutionSolver.test_immediate_updatingc              
   C   s   ddg}t dJ}tt|d|jd,}t|jjd k	 t|jdk |	  W 5 Q R X W 5 Q R X tt|ddd,}t|jjd k	 t|jdk |	  W 5 Q R X d S )Nr   r:   r   )r   r   )
multiprocessingZPoolr   r	   r   r   r   poolr   r}   )r3   r+   prJ   r4   r4   r5   test_parallelf  s$       z-TestDifferentialEvolutionSolver.test_parallelc                 C   s&   t tddg}|  t|  d S )Nr   )r   r	   r}   r   Z	convergedrI   r4   r4   r5   test_convergedu  s    z.TestDifferentialEvolutionSolver.test_convergedc              	      sp  dd }dd  t |tj d}ttddg|dtddg}t|d	 t  tj d
}ttddg||fddddg}dddg}t||D ](\}}t|}t	|t
| qt	t|t| tfddt|D }	|	jdkst fdd}
t |
tj d
}ttddg||fddd_tjtdd t| W 5 Q R X d S )Nc                 S   s   | d | d  gS Nr   r   r4   rh   r4   r4   r5   constr_f{  s    zNTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_fc                 S   s*   t | d d | d  | d | d  gS Nr   r:   r   r&   r)   rh   r4   r4   r5   	constr_f2~  s    zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f2ffffff?r   constraintsr   r$   ?)333333?r   r   r   )r!   r!   )ro   {Gz?r   )r   @r   )r   r   r   c                    s   g | ]}  |qS r4   )_constraint_violation_fn).0r;   )rJ   r4   r5   
<listcomp>  s   zPTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.<listcomp>)rM   r   rM   c                    s
    | j S r7   )r1   rh   )r   r4   r5   	constr_f3  s    zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f3F)r   
vectorizedTz#An array returned from a Constraintri   )r   r&   r   r   r	   r   r)   r   r   r   r/   shaper   r  pytestr   rm   )r3   r   nlccvnlc2xsvsr;   vconstraint_violationr  r4   )r   rJ   r5   test_constraint_violation_fnz  sJ    




 
 z<TestDifferentialEvolutionSolver.test_constraint_violation_fnc           	   	   C   s  dd }dd }t |tj d}ttddg|d}|tddgd	d	gg\}}t|d
d
g t|tdgdgg |j	dkst
t |tj d}dD ]&}ttddg||f|dd}|tddgddgg\}}t|d
d
g t|tdddgdddgg |tddgd	d	gg\}}t|d
d
g t|tdddgdddgg |j	dksft
|tddgd	d	gg\}}t|dd
g t|tdddgdddgg |j	dkst
qd S )Nc                 S   s   | d | d  gS r   r4   rh   r4   r4   r5   r     s    zZTestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_fc                 S   s$   | d d | d  | d | d  gS r   r4   rh   r4   r4   r5   r     s    z[TestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f2r   r   r   r!   r   Fr$   r   )r:   r   r   )FTr   )r   r  r   g333333?r   r   ro   r   r   )r:   rM   rQ   Tr   )r   r&   r   r   r	   Z#_calculate_population_feasibilitiesr)   r   r   r  r   )	r3   r   r   r  rJ   Zfeasr  r  Z	vectorizer4   r4   r5   (test_constraint_population_feasibilities  sH    


   zHTestDifferentialEvolutionSolver.test_constraint_population_feasibilitiesc              	   C   sf   dd }t |tj d}ttddg|d}tt | }W 5 Q R X ||jdksXt	|j
sbt	d S )Nc                 S   s   t | d | d  gS r   r   rh   r4   r4   r5   r     s    zGTestDifferentialEvolutionSolver.test_constraint_solve.<locals>.constr_fr   r   r   )r   r&   r   r   r	   r   r   r}   r;   r   r   )r3   r   r  rJ   r   r4   r4   r5   test_constraint_solve  s    

z5TestDifferentialEvolutionSolver.test_constraint_solvec              	   C   s2  dd }t |tj d}ttddg|ddd}tt | }W 5 Q R X |jdksXt	|j
rbt	ttddg|d	d
}t| |j rt	t|j rt	d}|jd }|j|dg |jd|g< |j|dgd d f |jd|gd d f< |j|dgd d f |jd|gd d f< |  t|jd | d S )Nc                 S   s   t | d | d  gS r   r   rh   r4   r4   r5   r     s    zLTestDifferentialEvolutionSolver.test_impossible_constraint.<locals>.constr_fr_   r   rM   r   )r   r"   r   r   F)r   r|      )r   r&   r   r   r	   r   r   r}   Zmaxcvr   r   r   Zfeasiblery   isfiniter   r  r2   r   r   )r3   r   r  rJ   r   lr  r4   r4   r5   test_impossible_constraint  s4    
 


 
(z:TestDifferentialEvolutionSolver.test_impossible_constraintc              
   C   sV  dd }t |tj d}ttddg|d}|j}|ddtdgd	dtdgsVt|d	dtdgddtdgd
kst|ddtdgddtdgst|ddtdgd	d
td	gst|dd
tddgd	d
td	d	gst|dd
tddgd	d
td	dgs"t|d	d
tddgd	d
td	dgd
ksRtd S )Nc                 S   s   | d | d  gS r   r4   rh   r4   r4   r5   r     s    zCTestDifferentialEvolutionSolver.test_accept_trial.<locals>.constr_fr   r   r   r$   Tr   r   Fg#@r!   g?)r   r&   r   r   r	   Z_accept_trialr)   r   )r3   r   r  rJ   fnr4   r4   r5   test_accept_trial  s:    
& &&    
  z1TestDifferentialEvolutionSolver.test_accept_trialc           
         sZ  t dddg}t dt jdg}t dddg}tt|||}||dk sXt|d	d
dgdk sttt 	dd
dd}g }|D ]}||| qt j||jt |j t ddddg}t ddddgddddgddddgg tt t j d|}||dk s,t|ddddgdk sLtt 	dd
dd}g }|D ]}||| qht j||jt |j ttt t j d|}||dk st|ddddgdk st fdd}t|t j d}	t|	ddddg}||dk s6t|ddddgdk sVtd S )Nr   r  rp   r!   F   r   r:   rM   rQ            rO   rN   rP   r       r      c                    s
     | S r7   )dotrh   Ar4   r5   r~   V  s    zDTestDifferentialEvolutionSolver.test_constraint_wrapper.<locals>.fun)r&   r)   r   r   r   	violationanyr   ry   r0   r   appendtestingr   r1   r   r   r   )
r3   ZlbZubr   pcr	  Z
violationsr;   r~   Z	nonlinearr4   r  r5   test_constraint_wrapper2  s>    (  z7TestDifferentialEvolutionSolver.test_constraint_wrapperc                 C   s  dd }t |ddgddg}t|ddg}t|jd dksBtd	d
dddg}dddddg}t||D ]\}}t||| qht|t	|j
t	|j
 |t	|j
jdt|fkst|t	|j
jdt|fkst|jdkst|jdkstd S )Nc                 S   s.   t | d d | d  | d d | d  gS r   r   rh   r4   r4   r5   cons_f_  s    zQTestDifferentialEvolutionSolver.test_constraint_wrapper_violation.<locals>.cons_fr_   g333333r:   r!   r   r   rY   )r!   r   )r   r   )r$   333333)r$   r   )r   r   )r   r$   )r   r   )gRQ?r   )r   g=
ףp=?)r   r   r&   r   r+   r   r   r   r  r)   r1   r~   r  r   Z
num_constrZparameter_count)r3   r%  r  r#  r	  r
  r;   r  r4   r4   r5   !test_constraint_wrapper_violation^  s    	
$$zATestDifferentialEvolutionSolver.test_constraint_wrapper_violationc                 C   s  dd }t d}d|dddddgf< d	|dddgf< d
|ddddgf< d|dddddgf< d	|dddgf< d
|ddddgf< d|dddddgf< d	|dddgf< d
|ddddgf< |dd dd f }t dddddddddg	}t|t j |}dgd dgd  dg }t||dd|dd}d}d}t||| |jsDtt|j	|dd t|j
|dd tt ||j	 |k tt |j	t |d d df k tt |j	t |d d df k tt|t j |}t||dd|dd}t||| |js
tt|j	|dd t|j
|dd tt ||j	 |k tt |j	t |d d df k tt |j	t |d d df k dd }	d d! }
t|d dd d f t j |d d }t|ddd d f t j |dd }t|	t j |dd }t|
t j |dd }||||f}t $}|t t||d"d|dd}W 5 Q R X t|j	|dd t|j
|dd tt ||j	 |k tt |j	t |d d df k tt |j	t |d d df k d S )#Nc                 S   sX   t dg| f} t d| dd  d| dd  | dd   t | dd   }|S )Nr   rO   r   )r&   hstackrg   r;   r~   r4   r4   r5   f}  s    Dz2TestDifferentialEvolutionSolver.test_L1.<locals>.f)r      )r:   r:   r   r   r   r:   r      )r   )rl   r_   r   rM   rN   rO   rP   r    r   r  	   r   r   r   r@     r>   r   r   r"   )r   r   r   r   r   r   r   r   r   rM   rM   rM   r   igMb@?r   g{Gzt?c                 S   sL   t dg| f} d| d  d| d   | d  | d  d| d  | d  gS )Nr   r:   rM   r,  r   r-  r&   r(  rh   r4   r4   r5   c1  s    &z3TestDifferentialEvolutionSolver.test_L1.<locals>.c1c                 S   s,   t dg| f} d| d  | d  | d  S )Nr   rl   r  r.  r   r2  rh   r4   r4   r5   c2  s    z3TestDifferentialEvolutionSolver.test_L1.<locals>.c2rA   )r&   zerosr)   r   r   r   r   r   r   r;   r~   r   ry   r   r   r   filterr   )r3   r*  r  bLr+   r   x_optf_optr3  r4  ZL2NZN2r   supr4   r4   r5   test_L1z  sv    

 &&
 &&((
 &z'TestDifferentialEvolutionSolver.test_L1c           
   	   C   s  dd }dd }t |dtj}dgd }|}t "}|t t||dd	|d
}W 5 Q R X d}d}	t||	| t|j| t|j	|	dd |j
stttt||j	dk tt|j	t|d d df k tt|j	t|d d df k d S )Nc                 S   s   t dg| f} | d d d d| d d d   | d d  d| d d	 d   d| d d
   d| d
 d   | d d  d| d
  | d   d| d
   d| d   }|S )Nr   r   r   r:   rO   r   rM   rN   r,  rP   r    r  r2  r)  r4   r4   r5   r*    s    B


z2TestDifferentialEvolutionSolver.test_L2.<locals>.fc                 S   s   t dg| f} dd| d d   d| d d   | d  d| d d   d| d   dd	| d   | d d  d
| d
 d   d| d   dd| d   d| d   d| d d   | d  | d  d| d d  | d d  d| d  | d   d| d d   d| d
   d| d   gS )Nr      r:   r   rM   rN   rO         rP   r  r    i  r   r,  r2  rh   r4   r4   r5   r3    s    F6:>

z3TestDifferentialEvolutionSolver.test_L2.<locals>.c1r   r   r    rA   r/  r>   r   r   gy\
E@)gܤ@g$H8?g	޿g0ev@gn8)gk_@/?g0g+?h㈵>r1  r   )r   r&   r   r   r6  r   r   r   r~   r;   r   r   r   ry   r)   )
r3   r*  r3  r;  r+   r   r<  r   r:  r9  r4   r4   r5   test_L2  s(    

 
&z'TestDifferentialEvolutionSolver.test_L2c              	   C   s  dd }t d}d|dddddgf< d	|dddddgf< d
|dddddgf< |dd dd f }t dddg}dd }t||t j}t|dt j}dgd }||f}t "}	|	t t	||d|dd}
W 5 Q R X d}d}t
|||dd t
|
j|dd t
|
j|dd |
jsttt ||
j |k tt t ||
jdk tt |
jt |d d df k tt |
jt |d d df k d S )Nc                 S   s   t dg| f} | d d | d d  | d | d   d| d   d| d   | d d d  d| d d	 d   | d	 d d  d| d
 d d   d	| d d   d| d d d   d| d d d   | d d d  d }|S )Nr   r   r:   r+  r  rM   r   rN   rO   rP   r    r  r,  r.  -   r2  r)  r4   r4   r5   r*    s*    >z2TestDifferentialEvolutionSolver.test_L3.<locals>.f)rN   r,  )rA  r   rM   ir   r:   r    r  )r   r     rl   )r  rl   r   r:   rM   r.  r   ir   ic                 S   sX  t dg| f} d| d  d| d   d| d d d   d	| d
   d| d d d  d| d d d   d| d d   d	| d   d | d d  d| d d d   d| d  | d   d| d   d| d   d| d d  d| d   | d d d  d| d   d d| d d d  d| d d d   d| d d   | d  d gS )Nr   rM   r   rP   r:   r   r.  r  r    r   r   rN   x   r+  rO   r   r         rp   r2  rh   r4   r4   r5   r3    s    6FL:Bz3TestDifferentialEvolutionSolver.test_L3.<locals>.c1r   r/  )r   r   r"   )
gWXp?`@g@gVW@!@g3Ib@grq?g` ?g$F-t%?g6N#@g7h @g]y @g<6cN8@rC  r1  ư>)r&   r5  r)   r   r   r   r   r6  r   r   r   r;   r~   r   r   r   ry   r3   r*  r  r7  r3  r8  r;  r+   r   r<  r   r9  r:  r4   r4   r5   test_L3  s8    	


 &z'TestDifferentialEvolutionSolver.test_L3c              	   C   s  dd }t d}d|dddgf< d|d	d
ddgf< d|ddd
gf< |dd dd f }t dddg}dd }t|t j d}t|dt j}dgdgd	  dgd
  }||f}t $}	|	t t	||dd|dd}
W 5 Q R X d}dddddddd g}t
|||d!d" t
|
j|d!d" t d#krPt t jjdk rPt
|
j|d$d%d& nt
|
j|d'd(d& |
jsnttt ||
j |k tt t ||
jdk tt |
jt |d d df k tt |
jt |d d df k d S ))Nc                 S   s   t | d d S )NrM   r&   rg   rh   r4   r4   r5   r*  .  s    z2TestDifferentialEvolutionSolver.test_L4.<locals>.f)rN   r.  ){Gzd?rM  r   rN   rP   )rM  rM  g{Gzdr:   rO   r    )r   g{GzrM   r  c                 S   s   t dg| f} | d | d  d| d   d| d   d | d | d	  d
| d   | d | d   d
| d   | d | d  d | d | d   d| d   gS )Nr   r   rP   g!> 
@rN   r   gSUX@r:   r    i  rO   rM   r  i i	  r2  rh   r4   r4   r5   r3  8  s
    *6.z3TestDifferentialEvolutionSolver.test_L4.<locals>.c1r   )r   '  )  rN  )r   rO  rA   r/  r0  gh|?@got@g?@g:@gt$f@gVfyr@gh o?k@gCq@gVfx@MbP?r1  Windowsgv!>gy&1l?)rtolr   gh㈵>ga2U0*c?)r&   r5  r)   r   r   r   r   r6  r   r   r   r~   platformsystemr   Zintpitemsizer;   r   r   r   ry   )r3   r*  r  r7  r3  r8  r;  r+   r   r<  r   r:  r9  r4   r4   r5   test_L4,  sF    

 
  "&z'TestDifferentialEvolutionSolver.test_L4c           	      C   s   dd }dd }t |tj d}dgd }|}t||dd	|d
}d}d}t|||dd t|j|dd |jstttt	t
||jdk tt	|jt
|d d df k tt	|jt
|d d df k d S )Nc                 S   sf   t dg| f} t dt j | d  d t dt j | d   | d d | d | d    }| S )Nr   r:   r   rM   )r&   r(  sinpir)  r4   r4   r5   r*  b  s
    2z2TestDifferentialEvolutionSolver.test_L5.<locals>.fc                 S   sD   t dg| f} | d d | d  d d| d  | d d d  gS )Nr   r   r:   rN   r2  rh   r4   r4   r5   r3  h  s    z3TestDifferentialEvolutionSolver.test_L5.<locals>.c1r   r   r   r:   rA   r/  rB  )gJIť?gU(C@g#gh㈵>r1  -C6?r   )r   r&   r   r   r   r~   r   r   r   ry   r)   r;   	r3   r*  r3  r;  r+   r   r   r9  r:  r4   r4   r5   test_L5_  s     


&z'TestDifferentialEvolutionSolver.test_L5c           	      C   s   dd }dd }t |dtj}ddg}|}t||dd	|d
d}d}d}t|||dd t|j|dd t|j|dd |jstt	t
t||jdk t	t
|jt|d d df k t	t
|jt|d d df k d S )Nc                 S   s4   t dg| f} | d d d | d d d  }|S )Nr   r   r   rM   r:   r  r2  r)  r4   r4   r5   r*    s     z2TestDifferentialEvolutionSolver.test_L6.<locals>.fc                 S   sZ   t dg| f} | d d d | d d d  d | d d d  | d d d  d gS )Nr   r   rO   r:   r   rP   gp=
׳T@r2  rh   r4   r4   r5   r3    s    "$z3TestDifferentialEvolutionSolver.test_L6.<locals>.c1r   )   r   r   rA   r/  gHz>)r>   r   r   r   )gq=
ף0,@g??g1rI  r1  rP  rZ  r   )r   r&   r   r   r   r~   r;   r   r   r   ry   r)   r[  r4   r4   r5   test_L6}  s$    
 
&z'TestDifferentialEvolutionSolver.test_L6c           	   	   C   s>  dd }dd }t |dddgdd	d
g}ddgdgd  }|}t||dd|d}dddddg}d}t||| t|j|dd t|j|dd |jsttt	t
||jt
dddgk tt	t
||jt
dd	d
gk tt	|jt
|d d df k tt	|jt
|d d df k d S )Nc                 S   sH   t dg| f} d| d d  d| d  | d   d| d   d	 }|S )
Nr   g+dvqn@rM   r:   g"C?r   rO   gtۈB@gn@r2  r)  r4   r4   r5   r*    s    "
z2TestDifferentialEvolutionSolver.test_L7.<locals>.fc                 S   s   t dg| f} dd| d  | d   d| d  | d   d	| d
  | d   dd| d  | d   d| d  | d   d| d
 d   dd| d
  | d   d| d  | d
   d| d
  | d   gS )Nr   gl#fUU@g+WPIw?r:   rO   g=BD?r   rN   gOlb?rM   gaۢ T@g+<$!6}?g h?g^5a?g/h"@gxLCs?gݗT?g^gED_?r2  rh   r4   r4   r5   r3    s    ***z3TestDifferentialEvolutionSolver.test_L7.<locals>.c1r   Z   r  \   n      )N   f   )!   rE  )   rE  rM   rA   r/  rB  gq S@g] @@g˻f=@g:F@g%ShMcB@gCgbrP  r1  r   )r   r   r   r;   r~   r   r   r   r&   ry   r)   r[  r4   r4   r5   test_L7  s(    

**&z'TestDifferentialEvolutionSolver.test_L7ppc64lezfails on ppc64le)reasonc              	   C   s  dd }t d}d|dddgf< d|dddgf< |dd dd f }t d	d	g}d
d }t||t j}t|t ddt dd}dgd dgd  }||f}t $}	|	t	 t
||dd|dd}
W 5 Q R X d}d}t|||dd t|
jd d |d d dd t|
jdd  |dd  dd t|
j|dd |
jsHttt ||
j |k tt t ||
jdk tt t ||
jdk tt |
jt |d d df k tt |
jt |d d df k d S )Nc                 S   sL   t dg| f} d| d  d| d d   d| d   d| d d   }|S )Nr   rM   r   rI  r:   g^>r2  r)  r4   r4   r5   r*    s    8z2TestDifferentialEvolutionSolver.test_L8.<locals>.f)rM   rO   )r   r_   r   rN   rM   r:   皙c              	   S   s   t dg| f} dt | d  d  dt | d  d   d | d  dt | d d  dt | d | d  d   d | d  dt | d d  dt | d | d  d   d	 gS )
Nr   rO  rM   rQ   rN   gfffff@r   r:   g33333;@)r&   r(  rW  rh   r4   r4   r5   r3    s    .22z3TestDifferentialEvolutionSolver.test_L8.<locals>.c1MbPrP  )r   i  )rj  g?r@   r/  i  )r>   r   r   r{   )gEGr?@gT㥛D@g&D
n?gd,[ٿg#J{@r1  gMb`?r   r   )r&   r5  r)   r   r   r   fullr   r6  r   r   r   r;   r~   r   r   r   ry   rJ  r4   r4   r5   test_L8  s<    


   &z'TestDifferentialEvolutionSolver.test_L8c           	      C   s   dd }dd }t |dgdg}dgd }|}t||d	d
|d}tdd dg}d}t||| tt|j|dd t|j|dd |jst	t
tt||jdk t
tt||jdk t
t|jt|d d df k t
t|jt|d d df k d S )Nc                 S   s,   t dg| f} | d d | d d d  S )Nr   r   r:   r2  rh   r4   r4   r5   r*     s    z2TestDifferentialEvolutionSolver.test_L9.<locals>.fc                 S   s&   t dg| f} | d | d d  gS r   r2  rh   r4   r4   r5   r3    s    z3TestDifferentialEvolutionSolver.test_L9.<locals>.c1rk  rP  r^   r:   rA   r/  rB  r!   g      ?r1  r   r   )r   r   r&   sqrtr   absr;   r~   r   r   r   ry   r)   r[  r4   r4   r5   test_L9  s$    


&z'TestDifferentialEvolutionSolver.test_L9c                    s   t jd}tj}d}|j|d|d}dd  ddg}d	d
g}t |||f|d|d}|jd dksjtt	|j|dd t |||f|d|d} fdd}	t
|	|jd d||fd
gd}
t	|jd |
j |j|jkstd S )Nl   b	)rO   r!   rN  )r   Zrandom_statec                 W   s<   |\}}t |j|f|  jdd }t |r8t j}|S )Nr_   Zaxis)r&   logZpmfrg   isnanr   )r   r   distr;   llr4   r4   r5   rd   "  s
     
z>TestDifferentialEvolutionSolver.test_integrality.<locals>.funcTF)r      )r   gffffff?)r   integralityr|   r   r   rO   r   )rR  c                    s$   |\}}} t || d g||S )Nr   r   )r   r   nrt  r;   rd   r4   r5   func2:  s    
z?TestDifferentialEvolutionSolver.test_integrality.<locals>.func2r   )r   r+   )r&   r   r   r   ZnbinomZrvsr   r;   r   r   r
   r~   )r3   r   rt  Zshapesr;   rw  r+   r   res2rz  ZLBFGSBr4   ry  r5   test_integrality  s2      z0TestDifferentialEvolutionSolver.test_integralityc              	   C   s  dd }dddg}dddg}t ||ddd}t|jd	 d
ddg t|jd dddg t ||d|d}t|jd	 dddg t|jd dddg t|jdddg |jdkstdddg}t ||d|d}t|jd	 dddg t|jd dddg tt|jd	 dddg tt|jd dddg ddd g}t ||d|d}t|jd	 dddg t|jd d!dd"g d#dd g}t	j
td$d% t ||d|d W 5 Q R X d S )&Nc                 S   s   | S r7   r4   rh   r4   r4   r5   r*  H  s    zBTestDifferentialEvolutionSolver.test_integrality_limits.<locals>.fTF)r   ru   )rw   皙@)ffffff
@皙@)r+   r|   rw  r   r   rw   r~  r   ru   r}  r  r!   g      @g      ?g      @)r&  g)g$gffffff@g      g      %rH  g      r   g      $r   g      @)ffffff$g333333 )g%gr#g      !g      #)r  g333333$zOne of the integralityri   )r   r   r*   r   rw  r|   r   r&   roundr  r   ra   )r3   r*  rw  r+   rJ   r4   r4   r5   test_integrality_limitsG  sD    




z7TestDifferentialEvolutionSolver.test_integrality_limitsc              	      s   dd }dd }t jtdd t|| jddd	 W 5 Q R X ttd
d t|| jdd W 5 Q R X ttdd t|| jdtdd W 5 Q R X dg  fdd}ddg}tt|ddd}t||dddd}t	|j
|j
  d |jkst|j|jkstd S )Nc                 S   s   t | d S rf   rL  rh   r4   r4   r5   r,   u  s    zBTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadraticc                 S   s   t j| d ddS )Nr:   r   rq  rL  rh   r4   r4   r5   quadratic_vecx  s    zFTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic_veczThe vectorized functionri   Tr   )r  r   z#differential_evolution: the 'vector)r  z$differential_evolution: the 'workers)r  r   r   r   c                    s    d  d7  < t | S r   )r	   rh   Zncallsr4   r5   	rosen_vec  s    zBTestDifferentialEvolutionSolver.test_vectorized.<locals>.rosen_vecrY  r   )r   r   )r  r   r   )r  r   rm   r   r+   r   r   r   r	   r   r;   r   r   nit)r3   r,   r  r  r+   res1r{  r4   r  r5   test_vectorizedt  s<       z/TestDifferentialEvolutionSolver.test_vectorizedc           	   	   C   s   dd }dd }t |tj d}t |dd}dd	 }d
d
g}tt|dd||gdd}t||ddd||gdd}t|j|j d S )Nc                 S   s   t | d | d  gS r   r   rh   r4   r4   r5   r     s    zMTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_fc                 S   s*   t | d d | d  | d | d  gS r   r   rh   r4   r4   r5   r     s    zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f2r   )rw   r!   r   c                 S   sF   d| dd  | d d d  d  }|d| d d  d 7 }t |S )Nr   r   r_   r   )r&   Zsqueeze)r;   r  r4   r4   r5   r    s    $zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.rosen_vecrY  r   r   F)r   r   r   r|   T)r  r   r   r   r|   )r   r&   r   r   r	   r   r;   )	r3   r   r   Znlc1r  r  r+   r  r{  r4   r4   r5   test_vectorized_constraints  s$      z;TestDifferentialEvolutionSolver.test_vectorized_constraintsc                 C   sj   dd }t dd dtj}t dd tj d}t|ddg||gd	d
dd}|jd
ksXtd|jksftd S )Nc                 S   s   t | d t | d  S r   )r&   cosrW  rh   r4   r4   r5   rd     s    zUTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.funcc                 S   s   | d | d d d  S Nr   r   r:   r4   rh   r4   r4   r5   <lambda>      zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>r   c                 S   s   | d | d d  S r  r4   rh   r4   r4   r5   r    r  )r_   r:   r^   r   Fi3)r+   r   r{   r|   r   zMAXCV = 0.404)r   r&   r   r   r   r   r   )r3   rd   Zc0r3  rS   r4   r4   r5   'test_constraint_violation_error_message  s    zGTestDifferentialEvolutionSolver.test_constraint_violation_error_messageN)FrH   
__module____qualname__r6   r9   r,   rK   rU   rV   rW   rX   r]   re   rn   rr   rt   rz   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=  rD  rK  rV  r\  r^  rg  r  markZslowZxfailrS  machinerm  rp  r|  r  r  r  r  r4   r4   r4   r5   r      s   K
	

	0	
	F	
9-',Y'23.3,-(r   )"__doc__r   rS  Z%scipy.optimize._differentialevolutionr   r   Zscipy.optimizer   Zscipy.optimize._constraintsr   r   r   r	   r
   Zscipy.sparser   Zscipyr   Zscipy._lib._pep440r   numpyr&   Znumpy.testingr   r   r   r   r   r   r  r   r`   r   r   r4   r4   r4   r5   <module>   s    