§
    ¢éUgœJ  ã                   ón  — d Z ddlZddlmZmZmZm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mZ d„ Zd	„ Zd
„ Zd„ Z G d„ de¦  «        Zd„ Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z  G d„ d¦  «        Z! G d„ d¦  «        Z"dS )zA
Unit tests for the basin hopping global minimization algorithm.
é    N)Úassert_almost_equalÚassert_equalÚassert_Úassert_allclose)Úraises)ÚcosÚsin)ÚbasinhoppingÚOptimizeResult)ÚStorageÚRandomDisplacementÚ
MetropolisÚAdaptiveStepsizec                 ó¬   — t          d| z  dz
  ¦  «        | dz   | z  z   }t          j        dt          d| z  dz
  ¦  «        z  d| z  z   dz   ¦  «        }||fS )Nç      -@ç333333Ó?çš™™™™™É?ç      -Àç       @)r   ÚnpÚarrayr	   ©ÚxÚfÚdfs      úf/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/optimize/tests/test__basinhopping.pyÚfunc1dr      s_   € ÝˆD�1‰H�s‰NÑÔ˜q 3™w¨!™mÑ+€AÝ	Œ�%�#˜d Q™h¨™nÑ-Ô-Ñ-°°Q±Ñ6¸Ñ<Ñ	=Ô	=€BØˆbˆ5€Ló    c                 ó�   — t          d| d         z  dz
  ¦  «        | d         dz   | d         z  z   | d         dz   | d         z  z   }|S )Nr   r   r   é   r   )r   )r   r   s     r   Úfunc2d_nogradr!      sM   € ÝˆD�1�Q”4‰K˜#ÑÑÔ ! A¤$¨¡*°°!´Ñ!4Ñ4¸¸!¼¸s¹
ÀaÈÄdÑ7JÑJ€AØ€Hr   c                 ó>  — t          d| d         z  dz
  ¦  «        | d         dz   | d         z  z   | d         dz   | d         z  z   }t          j        d¦  «        }dt          d| d         z  dz
  ¦  «        z  d| d         z  z   dz   |d<   d| d         z  dz   |d<   ||fS )	Nr   r   r   r    r   é   r   r   )r   r   Úzerosr	   r   s      r   Úfunc2dr%      s¨   € ÝˆD�1�Q”4‰K˜#ÑÑÔ ! A¤$¨¡*°°!´Ñ!4Ñ4¸¸!¼¸s¹
ÀaÈÄdÑ7JÑJ€AÝ	Œ�!‰Œ€BØ•C˜˜q œt™ cÑ)Ñ*Ô*Ñ*¨R°!°A´$©YÑ6¸Ñ<€B€q�EØ��1”‰I˜‰O€B€q�EØˆbˆ5€Lr   c                 ó  — d| d         dz  z  d| d         z  | d         z  z   d| d         dz  z  z   d| d         z  z
  }t          j        d¦  «        }d| d         z  d| d         z  z   dz
  |d<   d| d         z  d| d         z  z   |d<   ||fS )Nr   r   r#   r    g      @g      @)r   r$   r   s      r   Úfunc2d_easyderivr'   %   s�   € ØˆAˆaŒD�!‰G‰�c˜!˜Aœ$‘h˜q œt‘mÑ# c¨!¨A¬$°©'¡kÑ1°C¸¸!¼±HÑ<€AÝ	Œ�!‰Œ€BØ��!”‰H�s˜1˜Qœ4‘xÑ #Ñ%€B€q�EØ��!”‰H�s˜1˜Qœ4‘xÑ€B€q�Eàˆbˆ5€Lr   c                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )ÚMyTakeStep1zfuse a copy of displace, but have it set a special parameter to
    make sure it's actually being used.c                 óV   •— d| _         t          ¦   «                              ¦   «          d S )NF)Úbeen_calledÚsuperÚ__init__)ÚselfÚ	__class__s    €r   r-   zMyTakeStep1.__init__1   s'   ø€ Ø ˆÔÝ‰Œ×ÒÑÔÐÐÐr   c                 óT   •— d| _         t          ¦   «                              |¦  «        S )NT)r+   r,   Ú__call__)r.   r   r/   s     €r   r1   zMyTakeStep1.__call__5   s#   ø€ ØˆÔÝ‰wŒw×Ò Ñ"Ô"Ð"r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r1   Ú__classcell__)r/   s   @r   r)   r)   .   s[   ø€ € € € € ð+ð +ðð ð ð ð ð#ð #ð #ð #ð #ð #ð #ð #ð #r   r)   c                 óx   — d}| t           j                             | |t          j        | ¦  «        ¦  «        z  } | S )zwredo RandomDisplacement in function form without the attribute stepsize
    to make sure everything still works ok
    ç      à?)r   ÚrandomÚuniformÚshape)r   Úss     r   ÚmyTakeStep2r=   :   s6   € ð 	€AØ�Œ×	Ò	˜A˜2˜q¥"¤(¨1¡+¤+Ñ	.Ô	.Ñ.€AØ€Hr   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚMyAcceptTestzŽpass a custom accept test

    This does nothing but make sure it's being used and ensure all the
    possible return values are accepted
    c           	      óŠ   — d| _         d| _        dddt          j        d¦  «        t          j        d¦  «        g i ddg	| _        d S )NFr   zforce acceptTr    )r+   Úncallsr   Úbool_Útestres©r.   s    r   r-   zMyAcceptTest.__init__I   sB   € Ø ˆÔØˆŒØ˜~¨tµR´X¸d±^´^Ýœ ™œ¨¨R°°Að7ˆŒˆˆr   c                 óž   — d| _         | xj        dz  c_        | j        dz
  t          | j        ¦  «        k     r| j        | j        dz
           S dS )NTr    )r+   rA   ÚlenrC   )r.   Úkwargss     r   r1   zMyAcceptTest.__call__O   sM   € ØˆÔØˆŒ�qÑˆŒØŒ;˜‰?�S ¤Ñ.Ô.Ò.Ð.Ø”< ¤¨a¡Ô0Ð0à�4r   N©r2   r3   r4   r5   r-   r1   © r   r   r?   r?   C   s<   € € € € € ðð ð
7ð 7ð 7ðð ð ð ð r   r?   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú
MyCallBackz—pass a custom callback function

    This makes sure it's being used. It also returns True after 10
    steps to ensure that it's stopping early.

    c                 ó"   — d| _         d| _        d S )NFr   ©r+   rA   rD   s    r   r-   zMyCallBack.__init___   s   € Ø ˆÔØˆŒˆˆr   c                 óN   — d| _         | xj        dz  c_        | j        dk    rdS d S )NTr    é
   rM   )r.   r   r   Úaccepteds       r   r1   zMyCallBack.__call__c   s4   € ØˆÔØˆŒ�qÑˆŒØŒ;˜"ÒÐØ�4ð Ðr   NrH   rI   r   r   rK   rK   X   s<   € € € € € ðð ðð ð ðð ð ð ð r   rK   c                   ó   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ej                             d	¦  «        d
„ ¦   «         Zej                             d¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestBasinHoppingc                 óä   — dddgf| _         dt          j        ddg¦  «        f| _        d| _        d| _        d| _        t          j                             d¦  «         dd	d
œ| _	        ddi| _
        dS )z] Tests setup.

        Run tests based on the 1-D and 2-D functions described above.
        ç      ð?gö(\�ÂõÈ¿gš™™™™™¹¿é   éd   FiÒ  úL-BFGS-BT©ÚmethodÚjacrY   N)Úx0r   r   ÚsolÚtolÚniterÚdispr9   ÚseedrG   Úkwargs_nogradrD   s    r   Úsetup_methodzTestBasinHopping.setup_methodl   s{   € ð
 ˜˜c˜
Ð#ˆŒØ�BœH f¨d ^Ñ4Ô4Ð5ˆŒàˆŒàˆŒ
ØˆŒ	õ 	Œ	�Š�tÑÔÐà!+°DÐ9Ð9ˆŒØ&¨
Ð3ˆÔÐÐr   c                 óÂ   — d}t          t          t          t          | j        |         d¬¦  «         t          t          t          t          | j        |         d¬¦  «         d S )Nr    )Ú	take_step)Úaccept_test)Úassert_raisesÚ	TypeErrorr
   r%   r[   ©r.   Úis     r   Útest_TypeErrorzTestBasinHopping.test_TypeError   sc   € àˆå•i¥­v°t´w¸q´zØ !ð	#ñ 	#ô 	#ð 	#õ 	•i¥­v°t´w¸q´zØ"#ð	%ñ 	%ô 	%ð 	%ð 	%ð 	%r   c                 ó�  — d}t          t          |¬¦  «        5  t          t          | j        d         d¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          |¬¦  «        5  t          t          | j        d         d¬¦  «         d d d ¦  «         n# 1 swxY w Y   d}t          t          |¬¦  «        5  t          t          | j        d         d¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          |¬¦  «        5  t          t          | j        d         d¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nz.target_accept_rate has to be in range \(0, 1\))Úmatchr   ç        )Útarget_accept_raterT   z+stepwise_factor has to be in range \(0, 1\))Ústepwise_factor)rf   Ú
ValueErrorr
   r   r[   )r.   Úmsgs     r   Útest_input_validationz&TestBasinHopping.test_input_validation‰   sp  € Ø@ˆÝ�:¨SÐ1Ñ1Ô1ð 	Dð 	DÝ� ¤¨¤ÀÐCÑCÔCÐCð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Då�:¨SÐ1Ñ1Ô1ð 	Dð 	DÝ� ¤¨¤ÀÐCÑCÔCÐCð	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð >ˆÝ�:¨SÐ1Ñ1Ô1ð 	Að 	AÝ� ¤¨¤¸RÐ@Ñ@Ô@Ð@ð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aå�:¨SÐ1Ñ1Ô1ð 	Að 	AÝ� ¤¨¤¸RÐ@Ñ@Ô@Ð@ð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Að 	Að 	AsG   ™#AÁAÁAÁ)#BÂBÂBÂ;#C*Ã*C.Ã1C.Ä#D;Ä;D?ÅD?c                 ó¼   — d}t          t          | j        |         | j        | j        | j        ¬¦  «        }t          |j        | j        |         | j	        ¦  «         d S ©Nr   ©Úminimizer_kwargsr^   r_   ©
r
   r   r[   rG   r^   r_   r   r   r\   r]   ©r.   ri   Úress      r   Útest_1d_gradzTestBasinHopping.test_1d_grad–   sT   € àˆÝ�6 4¤7¨1¤:ÀÄØ!%¤°$´)ð=ñ =ô =ˆå˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ð9Ð9r   c                 óì   — d}t          t          | j        |         | j        | j        | j        ¬¦  «        }t          |j        | j        |         | j	        ¦  «         t          |j        dk    ¦  «         d S )Nr    ru   r   )r
   r%   r[   rG   r^   r_   r   r   r\   r]   r   Únfevrx   s      r   Útest_2dzTestBasinHopping.test_2d�   sh   € àˆÝ�6 4¤7¨1¤:ÀÄØ!%¤°$´)ð=ñ =ô =ˆå˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ý�”˜1’ÑÔÐÐÐr   c                 ó  — d}| j                              ¦   «         }d|d<   t          t          | j        |         || j        | j        ¬¦  «        }t          |j        dk    ¦  «         t          |j        |j
        ¦  «         d S )Nr    ÚBFGSrY   ru   r   )rG   Úcopyr
   r%   r[   r^   r_   r   r|   r   Únjev)r.   ri   rv   ry   s       r   Ú	test_njevzTestBasinHopping.test_njev¥   s€   € àˆØœ;×+Ò+Ñ-Ô-Ðà%+Ð˜Ñ"Ý�6 4¤7¨1¤:Ø,<ÀDÄJØ $¤	ð+ñ +ô +ˆõ 	�”˜1’ÑÔÐÝ�S”X˜sœxÑ(Ô(Ð(Ð(Ð(r   c                 ó>  — | j                              ¦   «         }d|d<   t          t          ddg|| j        | j        ¬¦  «        }t          t          |j        d¦  «        ¦  «         t          |j	        ¦  «        \  }}t          |j        j        || j        ¦  «         d S )Nr   rY   rm   ru   rZ   )rG   r€   r
   r'   r^   r_   r   ÚhasattrÚlowest_optimization_resultr   r   rZ   r]   )r.   rv   ry   Ú_Újacobians        r   Útest_jaczTestBasinHopping.test_jac±   s§   € àœ;×+Ò+Ñ-Ô-Ðà%+Ð˜Ñ"åÕ+¨c°3¨ZØ,<ÀDÄJØ $¤	ð+ñ +ô +ˆõ 	•˜Ô6¸Ñ>Ô>Ñ?Ô?Ð?õ ' s¤uÑ-Ô-‰ˆˆ8Ý˜CÔ:Ô>ÀØ œHñ	&ô 	&ð 	&ð 	&ð 	&r   c                 ó¼   — d}t          t          | j        |         | j        | j        | j        ¬¦  «        }t          |j        | j        |         | j	        ¦  «         d S )Nr    ru   )
r
   r!   r[   ra   r^   r_   r   r   r\   r]   rx   s      r   Útest_2d_nogradzTestBasinHopping.test_2d_nogradÂ   sX   € àˆÝ�=¨$¬'°!¬*Ø,0Ô,>Ø!%¤°$´)ð=ñ =ô =ˆõ 	˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ð9Ð9r   é   c                 ó   — d}g d¢}t          j         | j        ¦  «        }|D ][}||d<   t          t          | j        |         || j        | j        ¬¦  «        }t          |j        | j	        |         | j
        ¦  «         Œ\d S )Nr    )ÚCGr   z	Newton-CGrW   ÚTNCÚSLSQPrY   ru   )r€   rG   r
   r%   r[   r^   r_   r   r   r\   r]   )r.   ri   Úmethodsrv   rY   ry   s         r   Útest_all_minimizersz$TestBasinHopping.test_all_minimizersÊ   s˜   € ð ˆØIÐIÐIˆÝœ9 T¤[Ñ1Ô1ÐØð 	>ð 	>ˆFØ)/Ð˜XÑ&Ý�v t¤w¨q¤zØ0@Ø%)¤Z°d´iðAñ Aô AˆCõ   ¤ t¤x°¤{°D´HÑ=Ô=Ð=Ð=ð	>ð 	>r   rO   c                 ó*  — d}g d¢}t          j         | j        ¦  «        }|D ]p}|dk    rdn| j        }||d<   t          t          | j        |         ||| j        ¬¦  «        }| j        }|dk    rd}t          |j	        | j
        |         |¬	¦  «         Œqd S )
Nr    )	r�   r   rW   rŽ   r�   zNelder-MeadÚPowellÚCOBYLAÚCOBYQAr•   rO   rY   ru   r”   r#   )Údecimal)r€   ra   r^   r
   r!   r[   r_   r]   r   r   r\   )r.   ri   r�   rv   rY   r^   ry   r]   s           r   Útest_all_nograd_minimizersz+TestBasinHopping.test_all_nograd_minimizersØ   sÎ   € ð ˆð@ð @ð @ˆåœ9 TÔ%7Ñ8Ô8ÐØð 
	Að 
	AˆFà  HÒ,Ð,�B�B°$´*ˆEØ)/Ð˜XÑ&Ý�}¨d¬g°a¬jØ0@Ø%*°´ð<ñ <ô <ˆCð ”(ˆCØ˜Ò!Ð!Ø�Ý ¤ t¤x°¤{¸CÐ@Ñ@Ô@Ð@Ð@ð
	Að 
	Ar   c                 ó@  — t          ¦   «         }|j        }d}t          t          | j        |         | j        | j        | j        |¬¦  «        }t          |j	        | j
        |         | j        ¦  «         t          |j        ¦  «         t          ||j        k    ¦  «         d S ©Nr    )rv   r^   r_   rd   )r)   Ústepsizer
   r%   r[   rG   r^   r_   r   r   r\   r]   r   r+   )r.   ÚtakestepÚinitial_step_sizeri   ry   s        r   Útest_pass_takestepz#TestBasinHopping.test_pass_takestepì   s•   € õ ‘=”=ˆØ$Ô-ÐØˆÝ�6 4¤7¨1¤:ÀÄØ!%¤°$´)Ø%-ð/ñ /ô /ˆõ 	˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ý�Ô$Ñ%Ô%Ð%åÐ! XÔ%6Ò6Ñ7Ô7Ð7Ð7Ð7r   c                 óÌ   — t           }d}t          t          | j        |         | j        | j        | j        |¬¦  «        }t          |j        | j	        |         | j
        ¦  «         d S r™   )r=   r
   r!   r[   ra   r^   r_   r   r   r\   r]   )r.   r›   ri   ry   s       r   Útest_pass_simple_takestepz*TestBasinHopping.test_pass_simple_takestepú   s`   € åˆØˆÝ�=¨$¬'°!¬*Ø,0Ô,>Ø!%¤°$´)Ø%-ð/ñ /ô /ˆõ 	˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ð9Ð9r   c                 ó¬   — t          ¦   «         }d}t          t          | j        |         | j        d| j        |¬¦  «         t          |j        ¦  «         d S )Nr    rO   )rv   r^   r_   re   )r?   r
   r%   r[   rG   r_   r   r+   )r.   re   ri   s      r   Útest_pass_accept_testz&TestBasinHopping.test_pass_accept_test  s[   € õ #‘n”nˆØˆå•V˜TœW QœZ¸$¼+Ø D¤I¸;ð	Hñ 	Hô 	Hð 	Hå�Ô'Ñ(Ô(Ð(Ð(Ð(r   c                 ó  — t          ¦   «         }d}t          t          | j        |         | j        d| j        |¬¦  «        }t          |j        ¦  «         t          d|j        d         v ¦  «         t          |j
        d¦  «         d S )Nr    é   )rv   r^   r_   Úcallbackr¤   r   é	   )rK   r
   r%   r[   rG   r_   r   r+   Úmessager   Únit)r.   r¤   ri   ry   s       r   Útest_pass_callbackz#TestBasinHopping.test_pass_callback  s„   € õ ‘<”<ˆØˆå�6 4¤7¨1¤:ÀÄØ!#¨$¬)¸hðHñ Hô Hˆå�Ô$Ñ%Ô%Ð%Ý�
˜cœk¨!œnÐ,Ñ-Ô-Ð-õ 	�S”W˜aÑ Ô Ð Ð Ð r   c                 óè   — d}t          d¬¦  «        | j        d<   d| _        t          t          | j        |         | j        | j        | j        ¬¦  «        }t          |j        dz   |j	        ¦  «         d S )Nr    r   )ÚmaxiterÚoptionsrO   ru   )
ÚdictrG   r^   r
   r%   r[   r_   r   r§   Úminimization_failuresrx   s      r   Útest_minimizer_failz$TestBasinHopping.test_minimizer_fail  sn   € àˆÝ!%¨a ¡¤ˆŒ�IÑØˆŒ
Ý�6 4¤7¨1¤:ÀÄØ!%¤°$´)ð=ñ =ô =ˆõ 	�S”W˜q‘[ #Ô";Ñ<Ô<Ð<Ð<Ð<r   c                 óf   — d}t          t          | j        |         | j        d| j        ¬¦  «         d S rt   )r
   r   r[   rG   r_   rh   s     r   Útest_niter_zeroz TestBasinHopping.test_niter_zero*  s=   € àˆÝ•V˜TœW QœZ¸$¼+Ø 4¤9ð	.ñ 	.ô 	.ð 	.ð 	.ð 	.r   c                 ó  ‡‡— dddœ}g Šˆfd„}t          t          ddg|d|d¬¦  «         g Šˆfd„}t          t          ddg|d|d¬¦  «         t          t          j        ‰¦  «        t          j        ‰¦  «        ¦  «         d S )	NrW   TrX   c                 ó2   •— ‰                      |¦  «         d S ©N©Úappend)r   r   rP   Úf_1s      €r   r¤   z<TestBasinHopping.test_seed_reproducibility.<locals>.callback6  ó   ø€ Ø�JŠJ�q‰MŒMˆMˆMˆMr   rT   rO   )rv   r^   r¤   r`   c                 ó2   •— ‰                      |¦  «         d S r³   r´   )r   r   rP   Úf_2s      €r   Ú	callback2z=TestBasinHopping.test_seed_reproducibility.<locals>.callback2>  r·   r   )r
   r%   r   r   r   )r.   rv   r¤   rº   r¶   r¹   s       @@r   Útest_seed_reproducibilityz*TestBasinHopping.test_seed_reproducibility0  sÌ   øø€ à&0¸Ð>Ð>Ðàˆð	ð 	ð 	ð 	ð 	õ 	•V˜c 3˜ZÐ:JØ¨°rð	;ñ 	;ô 	;ð 	;ð ˆð	ð 	ð 	ð 	ð 	õ 	•V˜c 3˜ZÐ:JØ¨	¸ð	<ñ 	<ô 	<ð 	<å•R”X˜c‘]”]¥B¤H¨S¡M¤MÑ2Ô2Ð2Ð2Ð2r   c                 ó,  — t           j                             d¦  «        }dddœ}t          t          ddg|d|¬¦  «        }t           j                             d¦  «        }t          t          ddg|d|¬¦  «        }t          |j        |j        ¦  «         d S )Nr    rW   TrX   rT   rO   )rv   r^   r`   )r   r9   Údefault_rngr
   r%   r   r   )r.   Úrngrv   Úres1Úres2s        r   Útest_random_genz TestBasinHopping.test_random_genE  s    € åŒi×#Ò# AÑ&Ô&ˆà&0¸Ð>Ð>Ðå�F S¨# JØ-=Ø"$¨3ð0ñ 0ô 0ˆõ Œi×#Ò# AÑ&Ô&ˆÝ�F S¨# JØ-=Ø"$¨3ð0ñ 0ô 0ˆõ 	�T”V˜TœVÑ$Ô$Ð$Ð$Ð$r   c                 ó¾   — d}t          t          | j        |         | j        | j        | j        d¬¦  «        }t          |j        | j        |         | j	        ¦  «         d S )Nr   )rv   r^   r_   ÚTrw   rx   s      r   Útest_monotonic_basin_hoppingz-TestBasinHopping.test_monotonic_basin_hoppingU  sY   € àˆÝ�6 4¤7¨1¤:ÀÄØ!%¤°$´)¸qðBñ Bô Bˆå˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ð9Ð9r   N)r2   r3   r4   rb   rj   rr   rz   r}   r‚   rˆ   rŠ   ÚpytestÚmarkÚ	fail_slowr‘   r—   r�   rŸ   r¡   r¨   r®   r°   r»   rÁ   rÄ   rI   r   r   rR   rR   j   sq  € € € € € ð4ð 4ð 4ð&%ð %ð %ðAð Að Að:ð :ð :ðð ð ð
)ð 
)ð 
)ð&ð &ð &ð":ð :ð :ð „[×Ò˜1ÑÔð>ð >ñ Ôð>ð „[×Ò˜2ÑÔðAð Añ ÔðAð&8ð 8ð 8ð:ð :ð :ð	)ð 	)ð 	)ð!ð !ð !ð 	=ð 	=ð 	=ð.ð .ð .ð3ð 3ð 3ð*%ð %ð %ð :ð :ð :ð :ð :r   rR   c                   óf   — e Zd Zd„ Zd„ Zej                             dddg¦  «        d„ ¦   «         ZdS )ÚTest_Storagec                 ó¾   — t          j        d¦  «        | _        d| _        t	          d¬¦  «        }| j        |_        | j        |_        t          |¦  «        | _        d S )Nr    r   T©Úsuccess)	r   r   r[   Úf0r   r   Úfunr   Ústorage)r.   Úminress     r   rb   zTest_Storage.setup_method^  sK   € Ý”(˜1‘+”+ˆŒØˆŒå¨Ð-Ñ-Ô-ˆØ”7ˆŒØ”WˆŒ
å˜v‘”ˆŒˆˆr   c                 óP  — t          d¬¦  «        }| j        dz   |_        | j        dz   |_        | j                             |¦  «        }| j                             ¦   «         }t          | j        |j        ¦  «         t          | j        |j        ¦  «         t          | ¦  «         d S )NTrË   r    )
r   r[   r   rÍ   rÎ   rÏ   ÚupdateÚ
get_lowestr   r   )r.   Ú
new_minresÚretrÐ   s       r   Útest_higher_f_rejectedz#Test_Storage.test_higher_f_rejectedh  s’   € Ý#¨DÐ1Ñ1Ô1ˆ
Ø”w ‘{ˆ
ŒØœ 1™ˆ
ŒàŒl×!Ò! *Ñ-Ô-ˆØ”×(Ò(Ñ*Ô*ˆÝ�T”W˜fœhÑ'Ô'Ð'Ý�T”W˜fœjÑ)Ô)Ð)Ý�C�ÑÔÐÐÐr   rÌ   TFc                 ó,  — t          |¬¦  «        }| j        dz   |_        | j        dz
  |_        | j                             |¦  «        }| j                             ¦   «         }| j        |j        k    |k    sJ ‚| j        |j        k    |k    sJ ‚||u sJ ‚d S )NrË   r    )r   r[   r   rÍ   rÎ   rÏ   rÒ   rÓ   )r.   rÌ   rÔ   rÕ   rÐ   s        r   Útest_lower_f_acceptedz"Test_Storage.test_lower_f_accepteds  s™   € å#¨GÐ4Ñ4Ô4ˆ
Ø”w ‘{ˆ
ŒØœ 1™ˆ
ŒàŒl×!Ò! *Ñ-Ô-ˆØ”×(Ò(Ñ*Ô*ˆØ”˜6œ8Ò#¨Ò/Ð/Ð/Ð/Ø”˜6œ:Ò%¨'Ò1Ð1Ð1Ð1Ø�gˆ~ˆ~ˆ~ˆ~ˆ~ˆ~r   N)	r2   r3   r4   rb   rÖ   rÅ   rÆ   ÚparametrizerØ   rI   r   r   rÉ   rÉ   ]  sd   € € € € € ð'ð 'ð 'ð	ð 	ð 	ð „[×Ò˜Y¨¨u¨Ñ6Ô6ð	ð 	ñ 7Ô6ð	ð 	ð 	r   rÉ   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTest_RandomDisplacementc                 ó”   — d| _         t          | j         ¬¦  «        | _        d| _        t	          j        | j        g¦  «        | _        d S )NrT   ©rš   ià“ )rš   r   ÚdisplaceÚNr   r$   r[   rD   s    r   rb   z$Test_RandomDisplacement.setup_method�  s=   € ØˆŒÝ*°D´MÐBÑBÔBˆŒØˆŒÝ”(˜DœF˜8Ñ$Ô$ˆŒˆˆr   c                 óæ   — |                       | j        ¦  «        }d| j        z  dz  dz  }t          t	          j        |¦  «        dd¦  «         t          t	          j        |¦  «        |d¦  «         d S )Nr   r#   é   rm   r    )rÞ   r[   rš   r   r   ÚmeanÚvar)r.   r   Úvs      r   Útest_randomz#Test_RandomDisplacement.test_random‡  sg   € ð �MŠM˜$œ'Ñ"Ô"ˆØ�$”-Ñ AÑ%¨Ñ*ˆÝ�BœG A™JœJ¨¨AÑ.Ô.Ð.Ý�BœF 1™IœI q¨!Ñ,Ô,Ð,Ð,Ð,r   N)r2   r3   r4   rb   rå   rI   r   r   rÛ   rÛ   €  s2   € € € € € ð%ð %ð %ð-ð -ð -ð -ð -r   rÛ   c                   ó>   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚTest_Metropolisc                 óž   — d| _         t          | j         ¦  «        | _        t          dd¬¦  «        | _        t          dd¬¦  «        | _        d S )Nr   Trm   ©rÌ   rÎ   rT   )rÃ   r   Úmetr   Úres_newÚres_oldrD   s    r   rb   zTest_Metropolis.setup_method’  sF   € ØˆŒÝ˜dœfÑ%Ô%ˆŒÝ%¨d¸Ð;Ñ;Ô;ˆŒÝ%¨d¸Ð;Ñ;Ô;ˆŒˆˆr   c                 óv   — |                       | j        | j        ¬¦  «        }t          |t          ¦  «        sJ ‚d S ©N©rë   rì   )rê   rë   rì   Ú
isinstanceÚbool)r.   rÕ   s     r   Útest_boolean_returnz#Test_Metropolis.test_boolean_return˜  s9   € ð �hŠh˜tœ|°T´\ˆhÑBÔBˆÝ˜#�tÑ$Ô$Ð$Ð$Ð$Ð$Ð$r   c                 ób   — t          |                      | j        | j        ¬¦  «        ¦  «         d S rî   )r   rê   rë   rì   rD   s    r   rØ   z%Test_Metropolis.test_lower_f_acceptedž  s*   € Ý�—’ ¤°t´|�ÑDÔDÑEÔEÐEÐEÐEr   c                 óú   — d}d}t          d¦  «        D ]H}|r|r nAt          dd¬¦  «        }t          dd¬¦  «        }|                      ||¬¦  «        }|rd}ŒFd}ŒIt          |¦  «         t          |¦  «         d S )NFiè  TrT   ré   r8   rï   )Úranger   rê   r   )r.   Ú
one_acceptÚ
one_rejectri   rë   rì   rÕ   s          r   Útest_acceptzTest_Metropolis.test_accept¡  s¦   € àˆ
Øˆ
Ý�t‘”ð 		"ð 		"ˆAØð ˜jð Ø�Ý$¨T°rÐ:Ñ:Ô:ˆGÝ$¨T°sÐ;Ñ;Ô;ˆGØ—(’( 7°G�(Ñ<Ô<ˆCØð "Ø!�
�
à!�
�
Ý�
ÑÔÐÝ�
ÑÔÐÐÐr   c                 óò   — t          d¦  «        }t          dd¬¦  «        }t          dd¬¦  «        }t          j        d¬¦  «        5  |                     ||¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	Nr#   Trm   ré   iÐ  Úraise)Úoverrï   )r   r   r   ÚerrstateÚaccept_reject©r.   rê   rë   rì   s       r   Útest_GH7495zTest_Metropolis.test_GH7495²  s×   € õ ˜‰mŒmˆÝ ¨°2Ð6Ñ6Ô6ˆÝ ¨°4Ð8Ñ8Ô8ˆÝŒ[˜gÐ&Ñ&Ô&ð 	@ð 	@Ø×Ò g°wÐÑ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@ð 	@ð 	@s   ÁA,Á,A0Á3A0c                 ó–   ‡‡— d„ Šd}dŠdˆˆfd„dœf}t          ‰|dd|i¬	¦  «        }|j        sJ ‚t          |j        ‰d
¬¦  «         d S )Nc                 ó*   — | dz  dz
  dz  | dz   dz  z   S )Nr#   é   rI   ©r   s    r   Úfuncz)Test_Metropolis.test_gh7799.<locals>.func¾  s!   € Ø�q‘D˜‘F˜Q‘;  !¡ a™xÑ'Ð'r   éüÿÿÿé2   Úineqc                 ó    •—  ‰| ¦  «        ‰z
  S r³   rI   )r   r  Úlimits    €€r   ú<lambda>z-Test_Metropolis.test_gh7799.<locals>.<lambda>Ã  s   ø€ °°°Q±´¸%±€ r   ©ÚtyperÎ   r£   Úconstraints)rv   g�íµ ÷Æ°>)Úrtol)r
   rÌ   r   rÎ   )r.   r[   Úconry   r  r	  s       @@r   Útest_gh7799zTest_Metropolis.test_gh7799»  s‚   øø€ ð	(ð 	(ð 	(ð ˆØˆØÐ&?Ð&?Ð&?Ð&?Ð&?Ð@Ð@ÐAˆÝ˜4  R¸=È#Ð:NÐOÑOÔOˆØŒ{ÐÐÐÝ˜œ ¨TÐ2Ñ2Ô2Ð2Ð2Ð2r   c                 óÞ   — t          d¦  «        }t          dd¬¦  «        }t          dd¬¦  «        } |||¬¦  «        sJ ‚d|_         |||¬¦  «        rJ ‚d|_         |||¬¦  «        sJ ‚d S )Nr   Trm   ré   rT   rï   F)r   r   rÌ   rþ   s       r   Útest_accept_gh7799z"Test_Metropolis.test_accept_gh7799È  sš   € õ ˜‰mŒmˆÝ ¨°2Ð6Ñ6Ô6ˆÝ ¨°2Ð6Ñ6Ô6ˆð ˆs˜7¨GÐ4Ñ4Ô4Ð4Ð4Ð4àˆŒØ�3˜w°Ð8Ñ8Ô8Ð8Ð8Ð8àˆŒØˆs˜7¨GÐ4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4r   c                 ód   — d„ }d„ }d|dœddgddœ}t          |dd	gd
|¬¦  «        }|j        rJ ‚d S )Nc                 ó   — | | z  S r³   rI   r  s    r   rÎ   z3Test_Metropolis.test_reject_all_gh7799.<locals>.funÛ  s   € Ø�Q‘3ˆJr   c                 ó   — | dz   S )Nr    rI   r  s    r   Ú
constraintz:Test_Metropolis.test_reject_all_gh7799.<locals>.constraintÞ  s   € Ø�q‘5ˆLr   Úeqr  )r   r    Úslsqp)r  ÚboundsrY   r#   rU   rO   )r[   r^   rv   )r
   rÌ   )r.   rÎ   r  rG   ry   s        r   Útest_reject_all_gh7799z&Test_Metropolis.test_reject_all_gh7799Ù  ss   € ð	ð 	ð 	ð	ð 	ð 	ð +/°zÐ!BÐ!BØ# VÐ,¸ðAð Aˆå˜3 A q 6°ÀfÐMÑMÔMˆØ”;ÐÐÐÐÐr   N)r2   r3   r4   rb   rò   rØ   rø   rÿ   r  r  r  rI   r   r   rç   rç   ‘  s’   € € € € € ð<ð <ð <ð%ð %ð %ðFð Fð Fðð ð ð"@ð @ð @ð3ð 3ð 3ð5ð 5ð 5ð"ð ð ð ð r   rç   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTest_AdaptiveStepsizec                 ó˜   — d| _         t          | j         ¬¦  «        | _        d| _        t	          | j        d| j        ¬¦  «        | _        d S )NrT   rÝ   r8   F)r›   ÚverboseÚaccept_rate)rš   r   Útsrn   r   r›   rD   s    r   rb   z"Test_AdaptiveStepsize.setup_methodè  sN   € ØˆŒÝ$¨d¬mÐ<Ñ<Ô<ˆŒØ"%ˆÔÝ(°$´'À5Ø59Ô5LðNñ Nô NˆŒˆˆr   c                 óB  — d}|                       |¦  «         | j                              d¦  «         t          | j         j        ¦  «        D ]1}|                       |¦  «         | j                              d¦  «         Œ2t	          | j        j        | j        k    ¦  «         d S )Nrm   FT©r›   Úreportrõ   Úintervalr   r   rš   ©r.   r   ri   s      r   Útest_adaptive_increasez,Test_AdaptiveStepsize.test_adaptive_increaseï  s–   € àˆØ�Š�aÑÔÐØŒ×Ò˜UÑ#Ô#Ð#Ý�t”}Ô-Ñ.Ô.ð 	'ð 	'ˆAØ�MŠM˜!ÑÔÐØŒM× Ò  Ñ&Ô&Ð&Ð&Ý�”Ô  4¤=Ò0Ñ1Ô1Ð1Ð1Ð1r   c                 óB  — d}|                       |¦  «         | j                              d¦  «         t          | j         j        ¦  «        D ]1}|                       |¦  «         | j                              d¦  «         Œ2t	          | j        j        | j        k     ¦  «         d S )Nrm   TFr"  r%  s      r   Útest_adaptive_decreasez,Test_AdaptiveStepsize.test_adaptive_decreaseù  s–   € àˆØ�Š�aÑÔÐØŒ×Ò˜TÑ"Ô"Ð"Ý�t”}Ô-Ñ.Ô.ð 	(ð 	(ˆAØ�MŠM˜!ÑÔÐØŒM× Ò  Ñ'Ô'Ð'Ð'Ý�”Ô  4¤=Ò0Ñ1Ô1Ð1Ð1Ð1r   c                 óê   — d}t          | j        j        dz   ¦  «        D ]1}|                      |¦  «         | j                             d¦  «         Œ2t	          | j        j        | j        k    ¦  «         d S )Nrm   r    T©rõ   r›   r$  r#  r   r   rš   r%  s      r   Útest_all_acceptedz'Test_AdaptiveStepsize.test_all_accepted  ss   € àˆÝ�t”}Ô-°Ñ1Ñ2Ô2ð 	'ð 	'ˆAØ�MŠM˜!ÑÔÐØŒM× Ò  Ñ&Ô&Ð&Ð&Ý�”Ô  4¤=Ò0Ñ1Ô1Ð1Ð1Ð1r   c                 óê   — d}t          | j        j        dz   ¦  «        D ]1}|                      |¦  «         | j                             d¦  «         Œ2t	          | j        j        | j        k     ¦  «         d S )Nrm   r    Fr*  r%  s      r   Útest_all_rejectedz'Test_AdaptiveStepsize.test_all_rejected  ss   € àˆÝ�t”}Ô-°Ñ1Ñ2Ô2ð 	(ð 	(ˆAØ�MŠM˜!ÑÔÐØŒM× Ò  Ñ'Ô'Ð'Ð'Ý�”Ô  4¤=Ò0Ñ1Ô1Ð1Ð1Ð1r   N)r2   r3   r4   rb   r&  r(  r+  r-  rI   r   r   r  r  ç  sb   € € € € € ðNð Nð Nð2ð 2ð 2ð2ð 2ð 2ð2ð 2ð 2ð2ð 2ð 2ð 2ð 2r   r  )#r5   r€   Únumpy.testingr   r   r   r   rÅ   r   rf   Únumpyr   r   r	   Úscipy.optimizer
   r   Úscipy.optimize._basinhoppingr   r   r   r   r   r!   r%   r'   r)   r=   r?   rK   rR   rÉ   rÛ   rç   r  rI   r   r   ú<module>r2     s”  ððð ð €€€ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,à €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ðð ð ðð ð ð
ð ð ðð ð ð	#ð 	#ð 	#ð 	#ð 	#Ð$ñ 	#ô 	#ð 	#ðð ð ðð ð ð ð ñ ô ð ð*ð ð ð ð ñ ô ð ð$p:ð p:ð p:ð p:ð p:ñ p:ô p:ð p:ðf ð  ð  ð  ð  ñ  ô  ð  ðF-ð -ð -ð -ð -ñ -ô -ð -ð"Sð Sð Sð Sð Sñ Sô Sð Sðl*2ð *2ð *2ð *2ð *2ñ *2ô *2ð *2ð *2ð *2r   