U
    »mœdåï  ã                   @   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   új/home/sam/Atlas/atlas_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 )Ngš™™™™™¹¿rL   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 )Nç333333Ó?é   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@gñhãˆµøä¾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   ç{®Gáz”?©Ú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s„t‚||	 }}|dkrh qœqhd 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   ç{®Gáz„?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 
|¡ƒ q”t	ˆ 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_f2çffffffþ?r‚   ©Úconstraintsr‘   r$   çÍÌÌÌÌÌü?)ç333333ó?r   ©r   r   )r!   r!   )ro   ç{®Gázä?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s†t
‚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sšt
‚qšd 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 ¡ rŒt	‚t |j¡ ¡ r t	‚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s€t‚|ddt dg¡ddt dg¡ƒs¦t‚|ddt dg¡d	d
t d	g¡ƒsÌt‚|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¡ƒ�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 ]}| | |¡¡ q�t 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 ¡ �sÐt‚| ddddg¡dk ¡ �sðt‚‡ 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sÆt‚| t 	|¡j
¡jdt|ƒfksêt‚|jdksøt‚|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_   g333333ë¿r:   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   iñÿÿÿgü©ñÒMb@?©rÔ   g{®Gázt?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
s–t‚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$H¥ØÑ8ÿ?g„ßÍ	�Þ¿g0eà€v@gnÞ8)Ìûã¿g k_@/œð?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   i÷ÿÿÿr   r:   r    r  )r�   r  é   rl   )r  rl   rÁ   r:   rM   r.  rˆ   i—ÿÿÿr   iôÿÿÿc                 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:Büz3TestDifferentialEvolutionSolver.test_L3.<locals>.c1r�   r/  )r¶   rù   r"   )
g°WXp?`@g¬ãø¡Òè@gVW@Œ!@gÎÁ3¡Ib@grô±q³ï?g` �¡ãö?g$FÏ-t%õ?g–°6ÆN¨#@g¾÷7h� @gæ]õ€yÀ @gÓ<6¸cN8@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.  )ç{®Gázd?rM  r   rN   rP   )rM  rM  g{®Gázd¿r:   rO   r    )rÓ   g{®Gáz„¿rM   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   gÙÎ÷SUXô@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‘í|?‰»@g�oït‚@gªÔìá?•@g:’Ëøõ³@gt$—ÿ�Àf@gVô‡fžyr@gŒÛh o?k@gå�Cªæq@gVô‡fž¹x@çü©ñÒMbP?r1  ÚWindowsgvƒôõ!Ä>gyé&1¬l?)ÚrtolrÔ   gñhãˆµøÔ>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  )g­ÌJIÅ¥ó?gUÖ(Cû@gœ¢#¹ü‡¸¿gñhãˆµøô>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s‚t‚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   g¤p=
×³T@r2  rh   r4   r4   r5   r3  „  s    "$ÿz3TestDifferentialEvolutionSolver.test_L6.<locals>.c1r   )é   r   r   rA   r/  gH¯¼šò×z>)r>   r¶   rù   r±   )gq=
×£0,@gÓÁú?‡ùê?g�“Ð1»ÀrI  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sšt‚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   g´tÛˆ¥B@g˜nƒëã@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+WÓPþIw?r:   rO   g=¨Bò„D?r   rN   gO€lÙb?rM   g»aÛ¢Ì T@g+ö<$!6}?g¤ ÑŠh?g‡^5…„Þa?g/¾h�š"@gxL“Cs?g·×Ý—ŽT?g^gEÔD_?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@gCŽ­gbòÝÀrP  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>.c1çü©ñÒMbP¿rP  )r   i°  )rj  gš™™™™™á?r@   r/  iˆ  )r>   r¶   rù   r{   )gEGrù�?…@gTã¥›D�@g &D
¯n¾?gÙâd,ä[Ù¿g#J{ƒ´@r1  gü©ñÒMb`?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s”t	‚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sÞt‚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s´t‚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sìt‚|j|jksüt‚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ˆ   Fiœ›‚3)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    