o
    Ö­j’ ã                   @   sÎ   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„ dƒZ#dS )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                   @   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)e*j+j,dOdP„ ƒZ-e*j+ .dQ¡dRdS„ ƒZ/dTdU„ Z0dVdW„ Z1dXdY„ Z2e*j+j,dZd[„ ƒZ3e*j+ .dQ¡e*j+j,d\d]„ ƒƒZ4d^d_„ Z5d`da„ Z6dbdc„ Z7ddde„ Z8e*j+ .df¡dgdh„ ƒZ9e*j+ .dQ¡didj„ ƒZ:e*j+ .dQ¡dkdl„ ƒZ;e*j+ .dQ¡dmdn„ ƒZ<e*j+ .dQ¡dodp„ ƒZ=e*j+ .dQ¡dqdr„ ƒZ>dsdt„ Z?e*j+j@e*j+jAeB C¡ dukdvdw�dxdy„ ƒƒZDe*j+ .dz¡d{d|„ ƒZEe*j+ .dQ¡d}d~„ ƒZFdd€„ ZGe*j+j,e*j+ .dQ¡d�d‚„ ƒƒZHdƒd„„ ZId…d†„ ZJe*j+ .df¡d‡dˆ„ ƒZKd‰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)Úselfr3   © r5   ún/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test__differential_evolution.pyÚsetup_method   s   
ÿ
ÿýz,TestDifferentialEvolutionSolver.setup_methodc                 C   s   t jdi | j¤Ž d S )Nr5   )r'   r(   r)   ©r4   r5   r5   r6   Úteardown_method-   s   z/TestDifferentialEvolutionSolver.teardown_methodc                 C   s   |d d S )Nr   é   r5   )r4   Úxr5   r5   r6   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Ú_rand1Úrand1expÚrand2expÚ_rand2Úbest2binÚ_best2Úrand2binÚrandtobest1binÚ_randtobest1Úrandtobest1expÚcurrenttobest1binÚ_currenttobest1Úcurrenttobest1exp)r   r
   r,   r   r>   Úmutation_funcÚ__name__©r4   Úsolverr5   r5   r6   Útest__strategy_resolves3   s�   þþþþþþþþþþþþz7TestDifferentialEvolutionSolver.test__strategy_resolvesc                 C   ó\   t  dg¡}| j t  g d¢¡¡}t||ƒ t  dg¡}| j t  g d¢¡¡}t||ƒ d S )Nçš™™™™™©?©r:   é   é   é   é   ç      Ð?)r'   r*   r/   r?   r   rB   ©r4   ÚresultÚtrialr5   r5   r6   Útest__mutate1~   s   
z-TestDifferentialEvolutionSolver.test__mutate1c                 C   rT   )Ngš™™™™™¹¿rV   r%   )r'   r*   r/   rG   r   rE   r\   r5   r5   r6   Útest__mutate2ˆ   s   
z-TestDifferentialEvolutionSolver.test__mutate2c                 C   s0   t  dg¡}| j t  g d¢¡¡}t||ƒ d S )Ng333333Ã?rV   )r'   r*   r/   rJ   r   r\   r5   r5   r6   Útest__randtobest1”   s   z1TestDifferentialEvolutionSolver.test__randtobest1c                 C   s2   t  dg¡}| j dt  g d¢¡¡}t||ƒ d S )Nr%   r    rV   )r'   r*   r/   rM   r   r\   r5   r5   r6   Ú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)r4   r$   rR   r5   r5   r6   Ú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"   rW   rd   ©éÿÿÿÿr    r%   r"   )
r
   Úassert_raisesÚ
ValueErrorr   r,   r'   Únanr   Úscalere   )r4   Úfuncr$   rR   r5   r5   r6   Ú+test_invalid_mutation_values_arent_accepted«   s:   üü
üþzKTestDifferentialEvolutionSolver.test_invalid_mutation_values_arent_acceptedc                 C   sH   dd„ }t tdd�� t|ddgƒ W d   ƒ d S 1 sw   Y  d S )Nc                 S   s   t  t  | d ¡t  | ¡g¡S ©Nr:   )r'   r*   Úsum©r;   r5   r5   r6   rn   Ê   s   zETestDifferentialEvolutionSolver.test_invalid_functional.<locals>.funcz,func\(x, \*args\) must return a scalar value©Úmatch©éþÿÿÿr:   )rj   ÚRuntimeErrorr   )r4   rn   r5   r5   r6   Útest_invalid_functionalÉ   s   þ"ýz7TestDifferentialEvolutionSolver.test_invalid_functionalc                 C   óJ   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.   Ú_scale_parametersr+   ©r4   r^   r5   r5   r6   Útest__scale_parametersÒ   ó   z6TestDifferentialEvolutionSolver.test__scale_parametersc                 C   ry   )Nr{   rz   r   r   )r'   r*   r   r.   Ú_unscale_parametersr+   r}   r5   r5   r6   Útest__unscale_parametersÚ   r   z8TestDifferentialEvolutionSolver.test__unscale_parametersc                 C   sz   t jdd�� t| jddgd�}| ddg¡}t|dƒ W d   ƒ n1 s&w   Y  t| jddgƒ}t|jdd	gƒ d S )
Nr   r   ©r   r   )ç      ð?ç      @)r,   r   r"   )r„   r„   r„   )	r'   Úerrstater   r-   r€   r   r   r   r;   )r4   rR   ÚvÚresr5   r5   r6   Útest_equal_boundsâ   s   þúz1TestDifferentialEvolutionSolver.test_equal_boundsc                 C   sH   t  g d¢¡}| j |¡ t|d dƒ tt  |dk|dk¡ ¡ ƒ d S )N)çš™™™™™ñ?éœÿÿÿçÍÌÌÌÌÌì?r   g     Àr@gñhãˆµøä¾r:   r‹   r   r    )r'   r*   r.   Ú_ensure_constraintr   r   Úlogical_andÚallr}   r5   r5   r6   Ú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 )Nru   r    F)ÚmaxiterÚpolishT)r   r-   Úsolver   Úfunr;   ©r4   rR   r]   r5   r5   r6   Útest_differential_evolutionõ   s   ÿÿz;TestDifferentialEvolutionSolver.test_differential_evolutionc                 C   s(   t | jdgƒ}| ¡ }t|j|jƒ d S )Nru   )r   r-   r’   r   r;   r”   r5   r5   r6   Útest_best_solution_retrieval  s   z<TestDifferentialEvolutionSolver.test_best_solution_retrievalc                    sX  d‰‡fdd„‰d ˆ_ tjˆ_‡ ‡fdd„‰ dˆ _d ˆ _ˆˆ _ddg}tˆ|dd	d
�}tdi |¤dˆ i¤Ž}tdi |¤dˆi¤Ž}|j	|j	  u rNd	u sQJ ‚ J ‚ˆ j|j  kr^ˆksaJ ‚ J ‚|j
dkshJ ‚|j
dksoJ ‚| ¡ D ]\}}|dv r|qstˆ j| |ƒ t|| |ƒ qsdˆ _tjˆ_d|d< tdi |¤dˆ i¤Ž}|j|jk sªJ ‚d S )Né
   c                    s"   t | ƒ}|ˆ jk r| ˆ _|ˆ _|S ©N)r
   Úvalr;   )r;   r™   ©rn   r5   r6   rn     s
   
zFTestDifferentialEvolutionSolver.test_intermediate_result.<locals>.funcc                    s  ˆ  j d7  _ | ˆ _| 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 ]}| j| }t
| j| ƒ}t||ƒ qDt| j| jd ƒ t| j| jd ƒ | jdksqJ ‚| jdu sxJ ‚t| tƒsJ ‚ˆ j ˆkr†t‚d S )Nr    r:   r   zin progressT)ÚnitÚintermediate_resultr3   ÚndimÚshaper   r;   rn   r“   r™   r
   ÚrangeÚlenÚpopulation_energiesÚmessageÚsuccessÚ
isinstancer   ÚStopIteration)rœ   Úir‡   Úref)Úcallbackr�   r5   r6   r¨     s0   
ÿÿ
ÿzJTestDifferentialEvolutionSolver.test_intermediate_result.<locals>.callbackr   ©r   r:   ieÊ F)rn   r,   Úrngr‘   r¨   r�   ú&callback function requested stop earlyú/Maximum number of iterations has been exceeded.>   r¢   r£   Tr‘   r5   )r;   r'   Úinfr™   r›   rœ   rn   Údictr   r£   r¢   Úitemsr   r“   )r4   r,   Úkwargsr‡   r§   Úfieldr™   r5   )r¨   rn   r�   r6   Útest_intermediate_result
  s4     z8TestDifferentialEvolutionSolver.test_intermediate_resultc                 C   s¤   ddg}d}ddd„}t t||d�}t|j|ƒ dd„ }t t||d�}|jr(J ‚dd	d
„}t t||d�}t|j|ƒ |jr?J ‚ddd„}t t||d�}|jsPJ ‚d S )Nr©   r«   r   c                 S   s   dS )NTr5   ©ÚparamÚconvergencer5   r5   r6   Úcallback_python_trueW  ó   zVTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_python_true)r¨   c                 S   s   t ‚r˜   )r¥   )rœ   r5   r5   r6   Úcallback_stop`  r·   zOTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_stopc                 S   s   dgS )Nr—   r5   r³   r5   r5   r6   Úcallback_evaluates_truef  s   zYTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_truec                 S   s   g S r˜   r5   r³   r5   r5   r6   Úcallback_evaluates_falsen  r·   zZTestDifferentialEvolutionSolver.test_callback_terminates.<locals>.callback_evaluates_false)r   )r   r
   r   r¢   r£   )r4   r,   Úexpected_msgr¶   r]   r¸   r¹   rº   r5   r5   r6   Útest_callback_terminatesS  s&   
ÿ



ÿz8TestDifferentialEvolutionSolver.test_callback_terminatesc                 C   s2   dg}d}dd„ }t |||dd�}t|jdƒ d S )N©éöÿÿÿr—   )rƒ   r   r„   c                 W   s6   t |tƒs	tdƒ‚|d |d |   |d | d   S )Nzargs should be a tupler   r    r:   r   )r¤   Útuplerk   )r;   Úargsr5   r5   r6   r-   z  s   
$zLTestDifferentialEvolutionSolver.test_args_tuple_is_passed.<locals>.quadraticT)rÀ   r‘   gUUUUUUå?)r   r   r“   )r4   r,   rÀ   r-   r]   r5   r5   r6   Útest_args_tuple_is_passedu  s   ýz9TestDifferentialEvolutionSolver.test_args_tuple_is_passedc                 C   s    t }dg}ttt||dd� d S )N©éýÿÿÿrW   Úabcr=   )r
   rj   rk   r   )r4   rn   r,   r5   r5   r6   Ú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Â   )rW   rX   rY   r   r:   )rƒ   rƒ   )r
   rj   rk   r   r   r   r;   )r4   rn   r,   r]   r5   r5   r6   Ú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      (@Úfloat64)Údtyper:   rZ   r   r    ©r#   rY   )r'   r1   Úreshaperf   Úzipr   Ú_select_samplesr   r    Úuniquer*   )
r4   r+   r,   rR   Ú	candidateÚr1Úr2Úr3Úr4Úr5r5   r5   r6   Ú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�   Fr¬   )r   r
   r,   r’   r   r£   r¢   r”   r5   r5   r6   Útest_maxiter_stops_solve«  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.rY   é(   )r#   r‘   rÖ   é)   é/   Údeferred)r#   r‘   rÖ   Úupdatingz8Maximum number of function evaluations has been reached.)r   r
   r,   r’   r   Únfevr£   r¢   r”   r5   r5   r6   Útest_maxfun_stops_solve´  sD   
ÿÿ	üÿûÿz7TestDifferentialEvolutionSolver.test_maxfun_stops_solvec                 C   s0   t | jdgdd�}| ¡  tt |j¡dƒ d S )N©rŠ   r   ç{®Gáz”?)Útolr   )r   r-   r’   r   r'   Úargminr¡   rQ   r5   r5   r6   Útest_quadraticä  s   þz.TestDifferentialEvolutionSolver.test_quadraticc                 C   s   t | jdgddd� d S )NrÞ   rß   r    )rà   Úseed)r   r-   r8   r5   r5   r6   Ú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‘   rª   rà   )r   r-   r   r;   rÜ   )r4   r]   Úresult2r5   r5   r6   Útest_rng_gives_repeatabilityó  s   üüz<TestDifferentialEvolutionSolver.test_rng_gives_repeatabilityc              	   C   s8   t j ¡ }g d¢}|D ]}t| jdgd|d|d� qd S )N)ÚrandomÚlatinhypercubeÚsobolÚhaltonrÞ   Fr"   )r‘   rª   rà   Úinit)r'   rç   Údefault_rngr   r-   )r4   rª   Úinitsrë   r5   r5   r6   Ú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’   rQ   r5   r5   r6   Útest_exp_runs  s   ýz-TestDifferentialEvolutionSolver.test_exp_runsc                 C   s   ddg}t t|ddd� d S )N)éûÿÿÿrY   é1   r    )r#   r�   )r   r
   )r4   r,   r5   r5   r6   Ú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 )NrW   rÉ   r   rZ   )r   r
   r,   Ú_calculate_population_energiesr3   Ú_promote_lowest_energyr   r'   rá   r¡   Ú_nfevrQ   r5   r5   r6   Ú"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 ]\}}|\}}	||	ksBJ ‚||	}}|dkrN d S q4d S )NrW   é   )r#   rÖ   r   r:   é2   )r   r
   r,   Únextr   r'   Úsizerö   rj   r¥   Ú	enumerate)
r4   rR   r;   r“   Ú_Úfun_prevr¦   ÚsolnÚ	x_currentÚfun_currentr5   r5   r6   Útest_iteration2  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µ   rQ   r5   r5   r6   Útest_convergenceL  s
   
ÿz0TestDifferentialEvolutionSolver.test_convergencec                 C   s   t t| jd d d�}| ¡  d S )N)r�   rÖ   rï   rQ   r5   r5   r6   Útest_maxiter_none_GH5731R  s   
ÿz8TestDifferentialEvolutionSolver.test_maxiter_none_GH5731c              	   C   s(  t ttgt| jf¢R i 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gt| jf¢R i d|i¤Ž t	jjdddd�}tt| j|d�}t|jd |d ƒ d S )Nrë   Úrubbishr   rê   )Ú
qmc_engineré   )rë   ri   rW   r—   rY   r:   rF   ç{®Gáz„?r    )rë   r>   Úatolrª   r#   )rY   r:   é   r   r   )ÚlowÚhighrû   ©Úx0)rj   rk   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   r3   ÚminÚmaxrç   Úuniformr   )r4   rR   r3   Úunscaled_populationr  r5   r5   r6   Útest_population_initiation[  sd   ÿþýýÿÿþýÿz:TestDifferentialEvolutionSolver.test_population_initiationc                 C   s`   t t| jddgd�}|jsJ ‚ttƒ� t t| jddgd� W d   ƒ d S 1 s)w   Y  d S )Nr  r&   r  çÍÌÌÌÌÌ @)r   r
   r,   r£   rj   rk   )r4   r‡   r5   r5   r6   Ú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'   r­   rr   r5   r5   r6   Úsometimes_inf­  s   zWTestDifferentialEvolutionSolver.test_infinite_objective_function.<locals>.sometimes_infr   F)r,   Údisp)r   )r4   r  r,   r5   r5   r6   Ú test_infinite_objective_functionª  s   z@TestDifferentialEvolutionSolver.test_infinite_objective_functionc                 C   sd   ddg}t t|dd�}t|jdkƒ t|jjtu ƒ | ¡ }|js#J ‚t	t|ddd�}|js0J ‚d S )Nr   rÚ   )rÛ   r<   )rÛ   r>   )
r   r
   r   Ú	_updatingÚ_mapwrapperÚ_mapfuncÚmapr’   r£   r   )r4   r,   rR   r‡   r5   r5   r6   Útest_deferred_updating´  s   
ÿz6TestDifferentialEvolutionSolver.test_deferred_updatingc              
   C   sÈ   ddg}t t|ƒ}t|jdkƒ t d¡}| d¡�@}ttƒ�$ t t||j	d��}| 
¡  W d   ƒ n1 s7w   Y  W d   ƒ n1 sFw   Y  |jdksRJ ‚W d   ƒ d S 1 s]w   Y  d S )Nr   Ú	immediateÚspawnr:   )ÚworkersrÚ   )r   r
   r   r!  ÚmultiprocessingÚget_contextr   r   ÚUserWarningr$  r’   )r4   r,   rR   ÚctxÚpÚsr5   r5   r6   Útest_immediate_updatingÃ  s   



ÿ€ÿ"úz7TestDifferentialEvolutionSolver.test_immediate_updatingr—   c              	   C   sì   ddg}t dƒ�6}tt|d|jddd��}|jjd usJ ‚|jdks$J ‚| ¡  W d   ƒ n1 s2w   Y  W d   ƒ n1 sAw   Y  tt|ddddd��}|jjd usYJ ‚|jdks`J ‚| ¡  W d   ƒ d S 1 sow   Y  d S )Nr   r:   rÚ   r%   rW   )rÛ   r(  rà   r#   )rÛ   r(  r#   rà   )Ú
ThreadPoolr   r
   r$  r"  Úpoolr!  r’   )r4   r,   r-  rR   r5   r5   r6   Útest_parallel×  s&   ÿ
û€ ÿ
"ûz-TestDifferentialEvolutionSolver.test_parallelc                 C   s&   t tddgƒ}| ¡  t| ¡ ƒ d S )Nr©   )r   r
   r’   r   Ú	convergedrQ   r5   r5   r6   Útest_convergedê  s   z.TestDifferentialEvolutionSolver.test_convergedc                    s‚  dd„ }dd„ ‰ t |tj dƒ}ttddg|fd�‰ˆ t ddg¡¡}t|d	ƒ t ˆ tj d
ƒ}ttddg||fd�‰g d¢}g d¢}t||ƒD ]\}}ˆ t |¡¡}t	|t 
|¡ƒ qIt	ˆ t |¡¡t |¡ƒ t ‡fdd„t |¡D ƒ¡}	|	jdks‚J ‚‡ fdd„}
t |
tj d
ƒ}ttddg||fdd�‰dˆ_tjtdd�� ˆ t |¡¡ W d   ƒ d S 1 sºw   Y  d S )Nc                 S   ó   | d | d  gS ©Nr   r    r5   rr   r5   r5   r6   Úconstr_fð  ó   zNTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_fc                 S   ó*   t  | d d | d  | d | d  g¡S ©Nr   r:   r    ©r'   r*   rr   r5   r5   r6   Ú	constr_f2ó  ó   *zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f2çffffffþ?r©   ©Úconstraintsrƒ   r%   çÍÌÌÌÌÌü?))ç333333ó?r    r‚   )r"   r"   ))rz   ç{®Gázä?r   )r  çÍÌÌÌÌÌ@r   )r   r   r   c                    s   g | ]}ˆ   |¡‘qS r5   )Ú_constraint_violation_fn)Ú.0r;   )rR   r5   r6   Ú
<listcomp>  s    ÿzPTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.<listcomp>)rW   r    rW   c                    s
   ˆ | ƒj S r˜   )r2   rr   )r<  r5   r6   Ú	constr_f3  s   
zOTestDifferentialEvolutionSolver.test_constraint_violation_fn.<locals>.constr_f3F)r@  Ú
vectorizedTz#An array returned from a Constraintrs   )r   r'   r­   r   r
   rE  r*   r   rË   r   r0   rž   rI  Úpytestr   rw   )r4   r7  ÚnlcÚcvÚnlc2ÚxsÚvsr;   r†   Úconstraint_violationrH  r5   )r<  rR   r6   Útest_constraint_violation_fnï  sH   
ÿ

ÿÿÿ
þÿ"ýz<TestDifferentialEvolutionSolver.test_constraint_violation_fnc           	      C   sº  dd„ }dd„ }t |tj dƒ}ttddg|fd�}| t ddgd	d	gg¡¡\}}t|d
d
gƒ t|t dgdgg¡ƒ |j	dksDJ ‚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 g d¢g d¢g¡ƒ | t ddgd	d	gg¡¡\}}t|d
d
gƒ t|t g d¢g d¢g¡ƒ |j	dks®J ‚| t ddgd	d	gg¡¡\}}t|dd
gƒ t|t g d¢g d¢g¡ƒ |j	dksÚJ ‚qNd S )Nc                 S   r5  r6  r5   rr   r5   r5   r6   r7  )  r8  zZTestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_fc                 S   s$   | d d | d  | d | d  gS r:  r5   rr   r5   r5   r6   r<  ,  s   $z[TestDifferentialEvolutionSolver.test_constraint_population_feasibilities.<locals>.constr_f2r>  r©   r?  r"   rƒ   Fr%   r  )r:   r    rA  )FTrÚ   )r@  rI  rÛ   g333333ã?)r%   r  r   )rz   rC  r   )r  rD  r   )r:   rW   r[   T)r   r   r   )
r   r'   r­   r   r
   Ú#_calculate_population_feasibilitiesr*   r   r   rž   )	r4   r7  r<  rK  rR   ÚfeasrL  rM  Ú	vectorizer5   r5   r6   Ú(test_constraint_population_feasibilities(  sJ   
ÿÿ
ýÿÿÿëzHTestDifferentialEvolutionSolver.test_constraint_population_feasibilitiesc                 C   s|   dd„ }t |tj dƒ}ttddg|fd�}ttƒ� | ¡ }W d   ƒ n1 s)w   Y  ||jƒdks7J ‚|j	s<J ‚d S )Nc                 S   ó   t  | d | d  g¡S r6  r;  rr   r5   r5   r6   r7  W  ó   zGTestDifferentialEvolutionSolver.test_constraint_solve.<locals>.constr_fr>  r©   r?  )
r   r'   r­   r   r
   r   r+  r’   r;   r£   )r4   r7  rK  rR   r‡   r5   r5   r6   Útest_constraint_solveU  s   
ÿ

ÿz5TestDifferentialEvolutionSolver.test_constraint_solvec                 C   sL  dd„ }t |tj dƒ}ttddg|fdddd�}ttƒ� | ¡ }W d   ƒ n1 s,w   Y  |jdks8J ‚|j	r=J ‚ttddg|fd	d
�}t
|ƒ |j ¡ rSJ ‚t |j¡ ¡ r]J ‚d}|jd }|j|dg |jd|g< |j|dgd d …f |jd|gd d …f< |j|dgd d …f |jd|gd d …f< | ¡  t|jd |ƒ d S )Nc                 S   rV  r6  r;  rr   r5   r5   r6   r7  i  rW  zLTestDifferentialEvolutionSolver.test_impossible_constraint.<locals>.constr_fri   r©   r    r   )r@  r#   rª   r�   r   F)r@  r‘   é   )r   r'   r­   r   r
   r   r+  r’   Úmaxcvr£   rú   ÚfeasiblerŽ   Úisfiniter¡   rP  r3   rõ   r   )r4   r7  rK  rR   r‡   ÚlrL  r5   r5   r6   Útest_impossible_constraintf  s0   ÿ

ÿ
ÿ
(ÿz:TestDifferentialEvolutionSolver.test_impossible_constraintc              
   C   sP  dd„ }t |tj dƒ}ttddg|fd�}|j}|ddt dg¡d	dt dg¡ƒs,J ‚|d	dt dg¡ddt dg¡ƒd
u sAJ ‚|ddt dg¡ddt dg¡ƒsTJ ‚|ddt dg¡d	d
t d	g¡ƒsgJ ‚|dd
t ddg¡d	d
t d	d	g¡ƒs|J ‚|dd
t ddg¡d	d
t d	dg¡ƒs‘J ‚|d	d
t ddg¡d	d
t d	dg¡ƒr¦J ‚d S )Nc                 S   r5  r6  r5   rr   r5   r5   r6   r7  ’  r8  zCTestDifferentialEvolutionSolver.test_accept_trial.<locals>.constr_fr>  r©   r?  r%   Tr   rƒ   FgÍÌÌÌÌÌ#@r"   gš™™™™™Ù?)r   r'   r­   r   r
   Ú_accept_trialr*   )r4   r7  rK  rR   Úfnr5   r5   r6   Útest_accept_trial�  s&   
ÿ&*&&ÿÿÿz1TestDifferentialEvolutionSolver.test_accept_trialc           
         s*  t  g d¢¡}t  dt jdg¡}t  g d¢¡}tt||ƒ|ƒ}| |¡dk ¡ s*J ‚| g d¢¡dk ¡ s7J ‚t  dd¡ 	d	d
¡}g }|D ]
}| 
| |¡¡ qEt j | |j¡t  |¡j¡ t  g d¢¡}t  g d¢g d¢g d¢g¡‰ ttˆ t j dƒ|ƒ}| |¡dk ¡ sŠJ ‚| g d¢¡dk ¡ s—J ‚t  dd¡ 	dd¡}g }|D ]
}| 
| |¡¡ q¥t j | |j¡t  |¡j¡ tttˆ ƒt j dƒ|ƒ}| |¡dk ¡ s×J ‚| g d¢¡dk ¡ säJ ‚‡ fdd„}t|t j dƒ}	t|	g d¢ƒ}| |¡dk ¡ �sJ ‚| g d¢¡dk ¡ �sJ ‚d S )N)r   rY  r{   r"   éF   )r    r:   rW   r   )r[   é   é   r    é   rY   rW   )r    r:   rW   rX   )rY   r   r   rZ   )r!   r   é   r   )r¾   r:   r¾   rX   é   r!   rX   c                    s
   ˆ   | ¡S r˜   )Údotrr   ©ÚAr5   r6   r“   Í  s   
zDTestDifferentialEvolutionSolver.test_constraint_wrapper.<locals>.fun)r'   r*   r­   r   r   Ú	violationÚanyrŽ   r1   rÊ   ÚappendÚtestingr   r2   r	   r   r   )
r4   ÚlbÚubr  ÚpcrN  Ú
violationsr;   r“   Ú	nonlinearr5   ri  r6   Útest_constraint_wrapper©  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s!J ‚g d	¢}g d
¢}t||ƒD ]\}}t| |¡|ƒ q.t| t |¡j	¡t |¡j	ƒ | 
t |¡j	¡jdt|ƒfks]J ‚| t |¡j	¡jdt|ƒfksoJ ‚|jdksvJ ‚|jdks}J ‚d S )Nc                 S   s.   t  | d d | d  | d d | d  g¡S r:  r;  rr   r5   r5   r6   Úcons_fÖ  s   ÿzQTestDifferentialEvolutionSolver.test_constraint_wrapper_violation.<locals>.cons_fri   g333333ë¿r:   r"   r    r   )rc   )r"   rB  )rB  rB  )r%   ç333333ó¿)r%   r   ))r   r   )r   r%   )rC  r   )gR¸…ëQÈ?r   )r  g=
×£p=ò?)r   r   r'   rû   r,   rË   r   rk  r*   r2   r“   rž   r    Ú
num_constrÚparameter_count)r4   ru  rK  rq  rN  rO  r;   r†   r5   r5   r6   Ú!test_constraint_wrapper_violationÕ  s   	
ÿ$$zATestDifferentialEvolutionSolver.test_constraint_wrapper_violationc                 C   s¤   t ƒ �}| t¡ t g d¢g d¢g¡}W d   ƒ n1 sw   Y  t|ddƒ}t d¡}t||ƒ}| |¡j	dks=J ‚t 
d¡ dd¡}| |¡j	d	ksPJ ‚d S )
N)r    r    r    rƒ   )r:   r:   r:   r   r   r    rX   )r:   rY  rY   )r:   rY   )r   ÚfilterÚPendingDeprecationWarningr'   Úmatrixr	   Úonesr   rk  rž   r1   rÊ   )r4   Úsupr|  Úlcr  ÚcwÚxtrialr5   r5   r6   Útest_matrix_linear_constraintñ  s   

ÿþ

z=TestDifferentialEvolutionSolver.test_matrix_linear_constraintrY  c              
   C   sâ  dd„ }t  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  g d¢¡}t|t j |ƒ}dgd dgd  dg }t||dd|fddd�}d }d!}t||ƒ|d"d#� |js•J ‚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&|fdd'd�}t||ƒ|ƒ |jsùJ ‚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'd�}W d   ƒ n	1 �s¨w   Y  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   rY   r    )r'   Úhstackrq   ©r;   r“   r5   r5   r6   Úf  s   Dz2TestDifferentialEvolutionSolver.test_L1.<locals>.f)r—   é   )r:   r:   r    r    r    )r    r:   r—   é   )éøÿÿÿr    r:   r—   )rv   ri   r    rW   )rX   rY   r—   rX   )r    rW   r—   r‡  rY   r‡  rZ   )rZ   r!   r‡  r!   )r:   rW   r‡  rø   rf  rø   é	   )rf  r‰  rø   )	r—   r   r   r—   r   r   r—   r   r   r   r   r@   i90  r  ©r>   rª   r@  r#   rà   )r    r    r    r    r    r    r    r    r    rW   rW   rW   r    iñÿÿÿga2U0*©C?©r	  g{®Gázt?r   iþz rU   gü©ñÒMb@?c                 S   sL   t  dg| f¡} d| d  d| d   | d  | d  d| d  | d  gS )Nr   r:   rW   r‡  rø   rˆ  ©r'   rƒ  rr   r5   r5   r6   Úc1G  s   &ÿz3TestDifferentialEvolutionSolver.test_L1.<locals>.c1c                 S   s,   t  dg| f¡} d| d  | d  | d  S )Nr   rv   rf  r‰  rø   rŒ  rr   r5   r5   r6   Úc2L  ó   z3TestDifferentialEvolutionSolver.test_L1.<locals>.c2)r'   Úzerosr*   r	   r­   r   r   r£   r;   r“   r   rŽ   r   r   r   rz  r+  )r4   r…  rj  ÚbÚLr,   r‡   Úx_optÚf_optr�  rŽ  ÚL2ÚNÚN2r@  r~  r5   r5   r6   Útest_L1  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 d   ƒ n1 s2w   Y  d}d}	t||	ƒ|ƒ t|j|ƒ t|j	|	dd� |j
sUJ ‚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:   rY   rø   rW   rX   r‡  rZ   r!   rf  rŒ  r„  r5   r5   r6   r…  g  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    rW   rX   rY   éÄ   é   rZ   rf  r!   i  r—   éüÿÿÿr‡  rŒ  rr   r5   r5   r6   r�  n  s   F6:>
ÿ
ÿýz3TestDifferentialEvolutionSolver.test_L2.<locals>.c1r   r½   r!   r@   éÒ  ©r>   rª   r@  gyÔÞ\
E…@)g¹ââ¨Ü¤@g$H¥ØÑ8ÿ?g„ßÍ	�Þ¿g0eà€v@gnÞ8)Ìûã¿g k_@/œð?g0g¶+ô�ù?çñhãˆµøä>r‹  r    )r   r'   r­   r   rz  r+  r   r   r“   r;   r£   r   rŽ   r*   )
r4   r…  r�  r–  r,   r@  r~  r‡   r”  r“  r5   r5   r6   Útest_L2c  s(   

ÿþ
&*z'TestDifferentialEvolutionSolver.test_L2c                 C   s¦  dd„ }t  d¡}d|dg d¢f< d|dg d¢f< d	|d
g d¢f< |dd …dd …f }t  g d¢¡}dd„ }t||t jƒ}t|dt jƒ}dgd }||f}tƒ �}	|	 t¡ t	||d|d
d�}
W d   ƒ n1 siw   Y  d}d}t
||ƒ|dd� t
|
j|dd� t
|
j|dd� |
js�J ‚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†  re  rW   r—   rX   rY   rZ   r!   rf  r‡  r‰  é-   rŒ  r„  r5   r5   r6   r…  �  s*   >ÿÿÿÿþþþýýz2TestDifferentialEvolutionSolver.test_L3.<locals>.f)rX   r‡  )rœ  rñ   rW   i÷ÿÿÿr    )r    r:   r!   rf  )r¾   rf  é   rv   r:   )rf  rv   rñ   r:   rW   )r    r:   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   rW   r    rZ   r:   rø   r‰  rf  r!   r—   rÃ   rX   éx   r†  rY   rñ   r×   ç      à¿r{   rŒ  rr   r5   r5   r6   r�  Ÿ  s   6FL:Büz3TestDifferentialEvolutionSolver.test_L3.<locals>.c1r   r½   r—   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@rŸ  r‹  ç�íµ ÷Æ°>)r'   r�  r*   r	   r­   r   r   rz  r+  r   r   r;   r“   r£   r   rŽ   ©r4   r…  rj  r‘  r�  r’  r–  r,   r@  r~  r‡   r“  r”  r5   r5   r6   Útest_L3‹  s8   
	

ÿþ
&*z'TestDifferentialEvolutionSolver.test_L3c              
   C   sô  dd„ }t  d¡}d|dddgf< d|d	g d
¢f< d|dddgf< |dd …dd …f }t  g d¢¡}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d�}
W d   ƒ n1 stw   Y  d}g d¢}t
||ƒ|dd� t
|
j|dd� t ¡ dkr©t  t j¡jdk r©t
|
j|dd d!� n	t
|
j|d"d#d!� |
js·J ‚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 )NrW   ©r'   rq   rr   r5   r5   r6   r…  Á  r8  z2TestDifferentialEvolutionSolver.test_L4.<locals>.f)rX   r‰  )ç{®Gázd?r©  r    rX   rZ   )r©  r©  g{®Gázd¿r:   )rY   r!   rX   )r  g{®Gáz„¿rW   rf  rY   )r    r    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    rZ   g!ê> ©
Š@rX   r   gÙÎ÷SUXô@r:   r!   iâ  rY   rW   rf  iÐ iÄ	  rŒ  rr   r5   r5   r6   r�  Ë  s
   *6.þz3TestDifferentialEvolutionSolver.test_L4.<locals>.c1r   )r   é'  )éè  rª  )r—   r«  r@   r�  rU   rŠ  gh‘í|?‰»@)g�oït‚@gªÔìá?•@g:’Ëøõ³@gt$—ÿ�Àf@gVô‡fžyr@gŒÛh o?k@gå�Cªæq@gVô‡fž¹x@çü©ñÒMbP?r‹  ÚWindowsgvƒôõ!Ä>gyé&1¬l?)Úrtolr	  gñhãˆµøÔ>ga2U0*©c?)r'   r�  r*   r	   r­   r   r   rz  r+  r   r   r“   ÚplatformÚsystemrÈ   ÚintpÚitemsizer;   r£   r   rŽ   )r4   r…  rj  r‘  r�  r’  r–  r,   r@  r~  r‡   r”  r“  r5   r5   r6   Útest_L4¾  s>   

þþ
&*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s:J ‚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    rW   )r'   rƒ  ÚsinÚpir„  r5   r5   r6   r…  ÷  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:   rX   rŒ  rr   r5   r5   r6   r�  ý  s   ÿz3TestDifferentialEvolutionSolver.test_L5.<locals>.c1r   ©r   r—   r:   rA   r�  rž  )g­ÌJIÅ¥ó?gUÖ(Cû@gœ¢#¹ü‡¸¿gñhãˆµøô>r‹  ç-Cëâ6?r    )r   r'   r­   r   r   r“   r£   r   rŽ   r*   r;   ©	r4   r…  r�  r–  r,   r@  r‡   r“  r”  r5   r5   r6   Ú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sAJ ‚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—   rW   r:   rY  rŒ  r„  r5   r5   r6   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    rY   r:   r   rZ   g¤p=
×³T@rŒ  rr   r5   r5   r6   r�    s   "$ÿz3TestDifferentialEvolutionSolver.test_L6.<locals>.c1r   )é   r   r   rA   r�  gH¯¼šò×z>)r>   rª   r@  rà   )gq=
×£0,@gÓÁú?‡ùê?g�“Ð1»Àr¥  r‹  r¬  r·  r    )r   r'   r­   r   r   r“   r;   r£   r   rŽ   r*   r¸  r5   r5   r6   Útest_L6  s"   
ÿ
&*z'TestDifferentialEvolutionSolver.test_L6c           	      C   s0  dd„ }dd„ }t |g d¢g d¢ƒ}ddgd	gd
  }|}t||dd|d�}g d¢}d}t||ƒ|ƒ t|j|dd� t|j|dd� |jsHJ ‚tt t 	||jƒ¡t 	g d¢¡k¡ƒ tt t 	||jƒ¡t 	g d¢¡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@rW   r:   g"õC÷½ê?r    rY   g´tÛˆ¥B@g˜nƒëã@rŒ  r„  r5   r5   r6   r…  1  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:   rY   g=¨Bò„D?r    rX   gO€lÙb?rW   g»aÛ¢Ì T@g+ö<$!6}?g¤ ÑŠh?g‡^5…„Þa?g/¾h�š"@gxL“Cs?g·×Ý—ŽT?g^gEÔD_?rŒ  rr   r5   r5   r6   r�  7  s   *ÿ*ÿ*ÿùz3TestDifferentialEvolutionSolver.test_L7.<locals>.c1)r   éZ   rY  )é\   én   é   )éN   éf   )é!   r¡  )é   r¡  rW   rA   r�  rž  )gqÞÅ €S@gä] €@@gÉË»fÉþ=@gÐ:‘ýÿF@g—%ShMcB@gCŽ­gbòÝÀr¬  r‹  r   r    )
r   r   r   r;   r“   r£   r   r'   rŽ   r*   r¸  r5   r5   r6   Ú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 d   ƒ n1 snw   Y  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s­J ‚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   rW   r    r¥  r:   g’ò€Ÿ^¦>rŒ  r„  r5   r5   r6   r…  a  s   8z2TestDifferentialEvolutionSolver.test_L8.<locals>.f)rW   rY   )r    ri   r    rX   rW   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   r«  rW   r[   rX   gfffffö‹@r    r:   g33333;”@)r'   rƒ  r´  rr   r5   r5   r6   r�  l  s   .ÿÿ2ÿÿ2ÿûz3TestDifferentialEvolutionSolver.test_L8.<locals>.c1çü©ñÒMbP¿r¬  )r   i°  )rÇ  gš™™™™™á?r@   r�  iˆ  )r>   rª   r@  r�   )gEGrù�?…@gTã¥›D�@g &D
¯n¾?gÙâd,ä[Ù¿g#J{ƒ´@r‹  gü©ñÒMb`?rß   r   )r'   r�  r*   r	   r­   r   Úfullr   rz  r+  r   r   r;   r“   r£   r   rŽ   r¦  r5   r5   r6   Útest_L8]  s<   


þû	  
&*z'TestDifferentialEvolutionSolver.test_L8rY   c           	      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sJJ ‚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:   rŒ  rr   r5   r5   r6   r…  —  r�  z2TestDifferentialEvolutionSolver.test_L9.<locals>.fc                 S   s&   t  dg| f¡} | d | d d  gS r:  rŒ  rr   r5   r5   r6   r�  ›  s   z3TestDifferentialEvolutionSolver.test_L9.<locals>.c1rÈ  r¬  rh   r:   rA   r�  rž  r"   g      è?r‹  r   r    )r   r   r'   Úsqrtr   Úabsr;   r“   r£   r   rŽ   r*   r¸  r5   r5   r6   Ú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s5J ‚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soJ ‚d S )Nl   ¹bà	¸)rY   r"   rª  )rû   Úrandom_statec                 W   s>   |\}}t  |j|g| ¢R Ž ¡jdd� }t  |¡rt j}|S )Nri   ©Úaxis)r'   ÚlogÚpmfrq   Úisnanr­   )r-  rÀ   Údistr;   Úllr5   r5   r6   rn   º  s
   "
z>TestDifferentialEvolutionSolver.test_integrality.<locals>.funcTF)r    é   )r   gffffffî?)rÀ   Úintegralityr‘   rª   r   rY   gš™™™™™™?)r®  c                    s$   |\}}}ˆ t  || d g¡||ƒS )Nr   r;  )r-  rÀ   ÚnrÔ  r;   rš   r5   r6   Úfunc2Ò  s   
z?TestDifferentialEvolutionSolver.test_integrality.<locals>.func2r    )rÀ   r,   )r'   rç   rì   r   ÚnbinomÚrvsr   r;   r   r   r“   )r4   rª   rÔ  Úshapesr;   r×  r,   r‡   Úres2rÙ  ÚLBFGSBr5   rš   r6   Útest_integrality²  s.   þþÿz0TestDifferentialEvolutionSolver.test_integralityc                 C   s¦  dd„ }g d¢}g d¢}t ||ddd�}t|jd g d¢ƒ t|jd	 g d
¢ƒ t ||d|d�}t|jd g d¢ƒ t|jd	 g d¢ƒ t|jg d¢ƒ |jdu sSJ ‚g d¢}t ||d|d�}t|jd g d¢ƒ t|jd	 g d¢ƒ tt |jd ¡g d¢ƒ tt |jd	 ¡g d¢ƒ g d¢}t ||d|d�}t|jd g d¢ƒ t|jd	 g d¢ƒ g d¢}tj	t
dd�� t ||d|d� W d   ƒ d S 1 sÌw   Y  d S )Nc                 S   s   | S r˜   r5   rr   r5   r5   r6   r…  à  r·   zBTestDifferentialEvolutionSolver.test_integrality_limits.<locals>.f)TFT))r  r‰   ©r‹   çš™™™™™@)çffffff
@çš™™™™™@F)r,   r‘   r×  r   )r  r‹   râ  r    )r‰   rá  rã  )r"   r‹   g      @)g      ø?rá  ç      @))rv  gÍÌÌÌÌÌì¿rà  )gš™™™™™$Àgffffff@)g      ø¿r‹   ç      %À)r¤  rá  rä  )ç      ð¿rƒ   g      $À)ræ  r   g      @))çffffff$Àg333333 Àrà  ©gÍÌÌÌÌÌ%ÀgrŠŽäòÿ#À)rå  r‹   rå  )g      !Àrá  g      #À))rç  g333333$Àrà  rè  zOne of the integralityrs   )r   r   r+   r   r×  r‘   r'   ÚroundrJ  r   rk   )r4   r…  r×  r,   rR   r5   r5   r6   Útest_integrality_limitsß  sF   ÿÿÿÿÿ"ÿz7TestDifferentialEvolutionSolver.test_integrality_limitsc                    s<  dd„ }dd„ }t jtdd�� t|| jddd	� W d   ƒ n1 s#w   Y  ttd
d�� t|| jdd� W d   ƒ n1 sAw   Y  ttdd�� t|| jdtdd� W d   ƒ n1 saw   Y  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”J ‚|j|jksœJ ‚d S )Nc                 S   s   t  | d ¡S rp   r¨  rr   r5   r5   r6   r-     ó   zBTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadraticc                 S   s   t j| d dd�S )Nr:   r   rÏ  r¨  rr   r5   r5   r6   Úquadratic_vec  r8  zFTestDifferentialEvolutionSolver.test_vectorized.<locals>.quadratic_veczThe vectorized functionrs   TrÚ   )rI  rÛ   z#differential_evolution: the 'vector)rI  z$differential_evolution: the 'workers)rI  r(  rÛ   r   c                    s   ˆ d  d7  < t | ƒS r6  )r
   rr   ©Úncallsr5   r6   Ú	rosen_vec'  s   zBTestDifferentialEvolutionSolver.test_vectorized.<locals>.rosen_vecr¶  r    )rÛ   rª   )rI  rÛ   rª   )rJ  r   rw   r   r,   r   r+  r$  r
   r   r;   rÜ   r›   )r4   r-   rì  rï  r,   Úres1rÝ  r5   rí  r6   Útest_vectorized  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   rV  r6  r;  rr   r5   r5   r6   r7  7  rW  zMTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_fc                 S   r9  r:  r;  rr   r5   r5   r6   r<  :  r=  zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.constr_f2r>  )r‹   r"   r‚   c                 S   sF   d| dd … | d d… d  d  }|d| d d…  d 7 }t  |¡S )Nr   r    ri   r   )r'   Úsqueeze)r;   r†   r5   r5   r6   rï  @  s   $
zNTestDifferentialEvolutionSolver.test_vectorized_constraints.<locals>.rosen_vecr¶  rÚ   r    F)rÛ   rª   r@  r‘   T)rI  rÛ   rª   r@  r‘   )r   r'   r­   r   r
   r   r;   )	r4   r7  r<  Únlc1rM  rï  r,   rð  rÝ  r5   r5   r6   Útest_vectorized_constraints6  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
u s,J ‚d|jv s3J ‚d S )Nc                 S   s   t  | d ¡t  | d ¡ S r6  )r'   Úcosr´  rr   r5   r5   r6   rn   T  s   zUTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.funcc                 S   s   | d | d d d  S ©Nr    r   r:   r5   rr   r5   r5   r6   Ú<lambda>X  s    zYTestDifferentialEvolutionSolver.test_constraint_violation_error_message.<locals>.<lambda>r   c                 S   s   | d | d d  S rö  r5   rr   r5   r5   r6   r÷  Y  s    )ri   r:   rh   r—   Fiœ›‚3)r,   r@  r�   r‘   rª   z
MAXCV = 0.)r   r'   r­   r   r£   r¢   )r4   rn   Úc0r�  r]   r5   r5   r6   Ú'test_constraint_violation_error_messageR  s   ûzGTestDifferentialEvolutionSolver.test_constraint_violation_error_messagec                    sä   d‰d}dgˆ }ˆ| ‰d‰d‰dg‰ d‡ ‡‡‡‡fdd„	}t t||ˆˆd	|dd
d�	}|j|u s3J ‚| ¡  ˆ d dks?J ‚tt||dd�}|jsLJ ‚ddd„}tjtdd�� tt||d� W d   ƒ d S 1 skw   Y  d S )NrX   r—   )r   g      $@r&   gffffffæ?r   c                    s¶   ˆ d  d7  < t  ||  ¡}| ˆ¡}t  ˆ¡}| |¡ |d d… }||| k d d… }|d d… \}}|d ˆ|| ||    }	|jˆd�}
|
ˆk }
d|
|< t  |
|	|¡}|S )Nr   r    rW   r:   )rû   T)r'   ÚcopyÚchoicer1   Úshuffler  Úwhere)rÎ   r3   rª   r^   Ú
fill_pointr1  ÚidxsÚr0rÏ   ÚbprimeÚ
crossovers©Úcallsr$   rx  ÚrecombinationÚtotal_popsizer5   r6   Úcustom_strategy_fnu  s    


ÿzLTestDifferentialEvolutionSolver.test_strategy_fn.<locals>.custom_strategy_fnr:   F)r#   r  r$   r�   r>   rª   r‘   rÚ   )r>   rÛ   c                 S   s   t  ddg¡S )Nrƒ   r   r;  )rÎ   r3   rª   r5   r5   r6   r  Ÿ  rë  z	strategy*rs   r=   r˜   )	r   r
   r>   r’   r   r£   rJ  r   rw   )r4   r#   r,   r  rR   r‡   r5   r  r6   Útest_strategy_fni  sD   
÷ÿ

ý"ÿz0TestDifferentialEvolutionSolver.test_strategy_fnN)LrP   Ú
__module__Ú__qualname__r7   r9   r-   rS   r_   r`   ra   rb   rg   ro   rx   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%  rJ  ÚmarkÚthread_unsafer/  Ú	fail_slowr2  r4  rQ  rU  rX  r^  ra  rt  ry  r‚  r˜  r   r§  r³  r¹  r»  rÄ  ÚxslowÚxfailr¯  ÚmachinerÊ  rÍ  rß  rê  rñ  rô  rù  r  r5   r5   r5   r6   r      s¬    K
		I"

	0	
	F	



9-

',


^

'

2

4


.ÿ
3


,-
(
r   )$Ú__doc__r)  Úmultiprocessing.dummyr   r0  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   rJ  r   rj   r   r   r5   r5   r5   r6   Ú<module>   s     