§
    fŠtjK  ã                   ó°  — 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!ej"         #                    d¬¦  «         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      úe/var/www/html/CA-Chatbot/venv/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                   óF  — 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¦  «        ej                             dg 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| _        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   FúL-BFGS-BT©ÚmethodÚjacrY   N)	Úx0r   r   ÚsolÚtolÚniterÚdisprG   Úkwargs_nogradrD   s    r   Úsetup_methodzTestBasinHopping.setup_methodl   se   € ð
 ˜˜c˜
Ð#ˆŒØ�BœH f¨d ^Ñ4Ô4Ð5ˆŒàˆŒàˆŒ
ØˆŒ	à!+°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)re   Ú
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.   rh   Ú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    rt   r   )r
   r%   r[   rG   r^   r_   r   r   r\   r]   r   Únfevrw   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   rt   r   )rG   Úcopyr
   r%   r[   r^   r_   r   r{   r   Únjev)r.   rh   ru   rx   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   rl   rt   rZ   )rG   r   r
   r'   r^   r_   r   ÚhasattrÚlowest_optimization_resultr   r   rZ   r]   )r.   ru   rx   Ú_Ú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    rt   )
r
   r!   r[   r`   r^   r_   r   r   r\   r]   rw   s      r   Útest_2d_nogradzTestBasinHopping.test_2d_nograd¿   sX   € àˆÝ�=¨$¬'°!¬*Ø,0Ô,>Ø!%¤°$´)ð=ñ =ô =ˆõ 	˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ð9Ð9r   rO   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   rt   )r   rG   r
   r%   r[   r^   r_   r   r   r\   r]   )r.   rh   Úmethodsru   rY   rx   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   é(   rY   )	r‹   r~   rW   rŒ   r�   zNelder-MeadÚPowellÚCOBYLAÚCOBYQAc                 ó  — d}| j                              ¦   «         }||d<   |dv rdn| j        }t          t          | j        |         ||| j        d¬¦  «        }|dk    rdn| j        }t          |j	        | j
        |         |¬	¦  «         d S )
Nr    rY   )r’   r“   rO   éÒ  )ru   r^   r_   Úseedr’   r#   )Údecimal)r`   r   r^   r
   r!   r[   r_   r]   r   r   r\   )r.   rY   rh   ru   r^   rx   r]   s          r   Útest_all_nograd_minimizersz+TestBasinHopping.test_all_nograd_minimizersÕ   s¦   € ð ˆØÔ-×2Ò2Ñ4Ô4ÐØ%+Ð˜Ñ"àÐ 4Ð4Ð4��¸$¼*ˆå�=¨$¬'°!¬*Ø-=Ø"'¨d¬i¸dðDñ Dô Dˆð ˜XÒ%Ð%ˆaˆa¨4¬8ˆÝ˜CœE 4¤8¨A¤;¸Ð<Ñ<Ô<Ð<Ð<Ð<r   c                 ó@  — t          ¦   «         }|j        }d}t          t          | j        |         | j        | j        | j        |¬¦  «        }t          |j	        | j
        |         | j        ¦  «         t          |j        ¦  «         t          ||j        k    ¦  «         d S ©Nr    )ru   r^   r_   rc   )r)   Ústepsizer
   r%   r[   rG   r^   r_   r   r   r\   r]   r   r+   )r.   ÚtakestepÚinitial_step_sizerh   rx   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[   r`   r^   r_   r   r   r\   r]   )r.   rœ   rh   rx   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   )ru   r^   r_   rd   )r?   r
   r%   r[   rG   r_   r   r+   )r.   rd   rh   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    é   )ru   r^   r_   Úcallbackr¥   r   é	   )rK   r
   r%   r[   rG   r_   r   r+   Úmessager   Únit)r.   r¥   rh   rx   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        ¬¦  «        }t          |j        dz   |j        ¦  «         d S )Nr    r   )ÚmaxiterÚoptionsrO   rt   )	ÚdictrG   r
   r%   r[   r_   r   r¨   Úminimization_failures)r.   rh   r^   rx   s       r   Útest_minimizer_failz$TestBasinHopping.test_minimizer_fail  sj   € àˆÝ!%¨a ¡¤ˆŒ�IÑØˆÝ�6 4¤7¨1¤:ÀÄØ!&¨T¬Yð8ñ 8ô 8ˆõ 	�S”W˜q‘[ #Ô";Ñ<Ô<Ð<Ð<Ð<r   c                 óf   — d}t          t          | j        |         | j        d| j        ¬¦  «         d S rs   )r
   r   r[   rG   r_   rg   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_rng_reproducibility.<locals>.callback3  ó   ø€ Ø�JŠJ�q‰MŒMˆMˆMˆMr   rT   rO   )ru   r^   r¥   Úrngc                 ó2   •— ‰                      |¦  «         d S r´   rµ   )r   r   rP   Úf_2s      €r   Ú	callback2z<TestBasinHopping.test_rng_reproducibility.<locals>.callback2;  r¸   r   )r
   r%   r   r   r   )r.   ru   r¥   r¼   r·   r»   s       @@r   Útest_rng_reproducibilityz)TestBasinHopping.test_rng_reproducibility-  sÌ   øø€ à&0¸Ð>Ð>Ðàˆð	ð 	ð 	ð 	ð 	õ 	•V˜c 3˜ZÐ:JØ¨°bð	:ñ 	:ô 	:ð 	:ð ˆð	ð 	ð 	ð 	ð 	õ 	•V˜c 3˜ZÐ:JØ¨	°rð	;ñ 	;ô 	;ð 	;å•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   )ru   r^   r¹   )r   r9   Údefault_rngr
   r%   r   r   )r.   r¹   ru   Úres1Úres2s        r   Útest_random_genz TestBasinHopping.test_random_genB  s    € åŒi×#Ò# AÑ&Ô&ˆà&0¸Ð>Ð>Ðå�F S¨# JØ-=Ø"$¨#ð/ñ /ô /ˆõ Œi×#Ò# AÑ&Ô&ˆÝ�F S¨# JØ-=Ø"$¨#ð/ñ /ô /ˆõ 	�T”V˜TœVÑ$Ô$Ð$Ð$Ð$r   c                 ó¾   — d}t          t          | j        |         | j        | j        | j        d¬¦  «        }t          |j        | j        |         | j	        ¦  «         d S )Nr   )ru   r^   r_   ÚTrv   rw   s      r   Útest_monotonic_basin_hoppingz-TestBasinHopping.test_monotonic_basin_hoppingR  sY   € àˆå�6 4¤7¨1¤:ÀÄØ!%¤°$´)¸qðBñ Bô Bˆå˜CœE 4¤8¨A¤;°´Ñ9Ô9Ð9Ð9Ð9r   N)r2   r3   r4   ra   ri   rq   ry   r|   r�   r‡   r‰   ÚpytestÚmarkÚ	fail_slowr�   Úparametrizer˜   rž   r    r¢   r©   r¯   r±   r½   rÂ   rÅ   rI   r   r   rR   rR   j   sž  € € € € € ð4ð 4ð 4ð %ð %ð %ðAð Að Að:ð :ð :ðð ð ð
)ð 
)ð 
)ð&ð &ð &ð":ð :ð :ð „[×Ò˜2ÑÔð>ð >ñ Ôð>ð „[×Ò˜2ÑÔØ„[×Ò˜Xð (5ð (5ð (5ñ 6ô 6ð=ð =ñ6ô 6ñ Ôð=ð 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          |¦  «        S )Nr    r   T©Úsuccess)r   r   r[   Úf0r   r   Úfunr   )r.   Úminress     r   Úcreate_storagezTest_Storage.create_storage\  sF   € Ý”(˜1‘+”+ˆŒØˆŒå¨Ð-Ñ-Ô-ˆØ”7ˆŒØ”WˆŒ
å�v‰ŒÐr   c                 ód  — |                       ¦   «         }t          d¬¦  «        }| j        dz   |_        | j        dz   |_        |                     |¦  «        }|                     ¦   «         }t          | j        |j        ¦  «         t          | j        |j        ¦  «         t          | ¦  «         d S )NTrÍ   r    )
rÒ   r   r[   r   rÏ   rÐ   ÚupdateÚ
get_lowestr   r   )r.   ÚstorageÚ
new_minresÚretrÑ   s        r   Útest_higher_f_rejectedz#Test_Storage.test_higher_f_rejectedf  s�   € Ø×%Ò%Ñ'Ô'ˆÝ#¨DÐ1Ñ1Ô1ˆ
Ø”w ‘{ˆ
ŒØœ 1™ˆ
Œà�nŠn˜ZÑ(Ô(ˆØ×#Ò#Ñ%Ô%ˆÝ�T”W˜fœhÑ'Ô'Ð'Ý�T”W˜fœjÑ)Ô)Ð)Ý�C�ÑÔÐÐÐr   rÎ   TFc                 ó@  — |                       ¦   «         }t          |¬¦  «        }| j        dz   |_        | j        dz
  |_        |                     |¦  «        }|                     ¦   «         }| 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Ø   rÑ   s         r   Útest_lower_f_acceptedz"Test_Storage.test_lower_f_acceptedr  s¤   € à×%Ò%Ñ'Ô'ˆÝ#¨GÐ4Ñ4Ô4ˆ
Ø”w ‘{ˆ
ŒØœ 1™ˆ
Œà�nŠn˜ZÑ(Ô(ˆØ×#Ò#Ñ%Ô%ˆØ”˜6œ8Ò#¨Ò/Ð/Ð/Ð/Ø”˜6œ:Ò%¨'Ò1Ð1Ð1Ð1Ø�gˆ~ˆ~ˆ~ˆ~ˆ~ˆ~r   N)	r2   r3   r4   rÒ   rÙ   rÆ   rÇ   rÉ   rÛ   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| _         d| _        d S )NrT   ià“ )r›   ÚNrD   s    r   ra   z$Test_RandomDisplacement.setup_method�  s   € ØˆŒØˆŒˆˆr   c                 óf  — t           j                             d¦  «        }t          j        | j        g¦  «        }t          | j        |¬¦  «        } ||¦  «        }d| j        z  dz  dz  }t          t          j        |¦  «        dd¦  «         t          t          j	        |¦  «        |d¦  «         d S )Nr   )r›   r¹   r   r#   é   rl   r    )
r   r9   ÚRandomStater$   rß   r   r›   r   ÚmeanÚvar)r.   r¹   r[   Údisplacer   Úvs         r   Útest_randomz#Test_RandomDisplacement.test_random…  s�   € õ Œi×#Ò# AÑ&Ô&ˆÝŒX�t”v�hÑÔˆÝ%¨t¬}À#ÐFÑFÔFˆØˆH�R‰LŒLˆØ�$”-Ñ AÑ%¨Ñ*ˆÝ�BœG A™JœJ¨¨AÑ.Ô.Ð.Ý�BœF 1™IœI q¨!Ñ,Ô,Ð,Ð,Ð,r   N)r2   r3   r4   ra   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   Trl   ©rÎ   rÐ   rT   )rÄ   r   Úmetr   Úres_newÚres_oldrD   s    r   ra   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_rejectrh   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#   Trl   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t          j                             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¤   r•   Úconstraints)r–   ru   g�íµ ÷Æ°>)Úrtol)r
   r   r9   râ   rÎ   r   rÐ   )r.   r[   Úconrx   r  r  s       @@r   Útest_gh7799zTest_Metropolis.test_gh7799¼  s    øø€ ð	(ð 	(ð 	(ð ˆØˆØÐ&?Ð&?Ð&?Ð&?Ð&?Ð@Ð@ÐAˆÝØØØÝ”×&Ò& tÑ,Ô,Ø+¨SÐ1ð
ñ 
ô 
ˆð Œ{ÐÐˆ{Ý˜œ ¨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   Trl   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^   ru   )r
   rÎ   )r.   rÐ   r  rG   rx   s        r   Útest_reject_all_gh7799z&Test_Metropolis.test_reject_all_gh7799à  sr   € ð	ð 	ð 	ð	ð 	ð 	ð +/°zÐ!BÐ!BØ# VÐ,¸ðAð Aˆå˜3 A q 6°ÀfÐMÑMÔMˆØ”;ÐÐˆÐÐr   N)r2   r3   r4   ra   rô   rÛ   rú   r  r  r  r  rI   r   r   ré   ré   ’  s’   € € € € € ð<ð <ð <ð%ð %ð %ðFð Fð Fðð ð ð"@ð @ð @ð3ð 3ð 3ð&5ð 5ð 5ð"ð ð ð ð r   ré   zshared state)Úreasonc                   ó,   — 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   Útsrm   r   rœ   rD   s    r   ra   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 )Nrl   FT©rœ   Úreportr÷   Úintervalr   r#  r›   ©r.   r   rh   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 )Nrl   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 )Nrl   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 )Nrl   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   ra   r)  r+  r.  r0  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   re   Ú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Ç   Úthread_unsafer  rI   r   r   ú<module>r6     s´  ððð ð €€€ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,à €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ðð ð ðð ð ð
ð ð ðð ð ð	#ð 	#ð 	#ð 	#ð 	#Ð$ñ 	#ô 	#ð 	#ðð ð ðð ð ð ð ñ ô ð ð*ð ð ð ð ñ ô ð ð$n:ð n:ð n:ð n:ð n:ñ n:ô n:ð n:ðb"ð "ð "ð "ð "ñ "ô "ð "ðJ-ð -ð -ð -ð -ñ -ô -ð -ð$Yð Yð Yð Yð Yñ Yô Yð Yðx „×Ò .ÐÑ1Ô1ð*2ð *2ð *2ð *2ð *2ñ *2ô *2ñ 2Ô1ð*2ð *2ð *2r   