Ë
    çÿæiK  ã                   óz  — 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jD                  jG                  d¬«       G d„ d«      «       Z$y)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      ú|/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/scipy/optimize/tests/test__basinhopping.pyÚfunc1dr      sX   € ÜˆD�1‰H�s‰NÓ˜q 3™w¨!™mÑ+€AÜ	�‰�%œ#˜d Q™h¨™nÓ-Ñ-°°Q±Ñ6¸Ñ<Ó	=€BØˆbˆ5€Ló    c                 ój   — 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!      sJ   € Üˆ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                 ó0   •— d| _         t        ‰| �	  «        y )NF)Úbeen_calledÚsuperÚ__init__)ÚselfÚ	__class__s    €r   r-   zMyTakeStep1.__init__1   s   ø€ Ø ˆÔÜ‰ÑÕr   c                 ó0   •— d| _         t        ‰| �	  |«      S )NT)r+   r,   Ú__call__)r.   r   r/   s     €r   r1   zMyTakeStep1.__call__5   s   ø€ ØˆÔÜ‰wÑ Ó"Ð"r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r1   Ú__classcell__)r/   s   @r   r)   r)   .   s   ø„ ñ+ô÷#ð #r   r)   c                 óz   — d}| t         j                  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=   :   s5   € ð 	€AØŒ�‰×	Ñ	˜A˜2˜q¤"§(¡(¨1£+Ó	.Ñ.€AØ€Hr   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú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	| _        y )NFr   zforce acceptTr    )r+   Úncallsr   Úbool_Útestres©r.   s    r   r-   zMyAcceptTest.__init__I   s>   € Ø ˆÔØˆŒØ˜~¨t´R·X±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 y)NTr    )r+   rA   ÚlenrC   )r.   Úkwargss     r   r1   zMyAcceptTest.__call__O   sK   € ØˆÔØ�Š�qÑ�Ø�;‰;˜‰?œS §¡Ó.Ò.Ø—<‘< §¡¨a¡Ñ0Ð0àr   N©r2   r3   r4   r5   r-   r1   © r   r   r?   r?   C   s   „ ñò
7ór   r?   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú
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| _        y )NFr   ©r+   rA   rD   s    r   r-   zMyCallBack.__init___   s   € Ø ˆÔØˆ�r   c                 ó\   — d| _         | xj                  dz  c_        | j                  dk(  ryy )NTr    é
   rM   )r.   r   r   Úaccepteds       r   r1   zMyCallBack.__call__c   s,   € ØˆÔØ�Š�qÑ�Ø�;‰;˜"ÒØð r   NrH   rI   r   r   rK   rK   X   s   „ ñòór   rK   c                   ó8  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ej                  j                  d	«      d
„ «       Zej                  j                  d«      ej                  j                  dg d¢«      d„ «       «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestBasinHoppingc                 ó¦   — dddgf| _         dt        j                  ddg«      f| _        d| _        d| _        d| _        ddd	œ| _        d
di| _        y)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   s[   € ð
 ˜˜c˜
Ð#ˆŒØœBŸH™H f¨d ^Ó4Ð5ˆŒàˆŒàˆŒ
ØˆŒ	à!+°DÑ9ˆŒØ&¨
Ð3ˆÕr   c                 ó¬   — d}t        t        t        t        | j                  |   d¬«       t        t        t        t        | j                  |   d¬«       y )Nr    )Ú	take_step)Úaccept_test)Úassert_raisesÚ	TypeErrorr
   r%   r[   ©r.   Úis     r   Útest_TypeErrorzTestBasinHopping.test_TypeError|   s?   € àˆä”i¤¬v°t·w±w¸q±zØ !õ	#ô 	”i¤¬v°t·w±w¸q±zØ"#ö	%r   c                 ó4  — d}t        t        |¬«      5  t        t        | j                  d   d¬«       d d d «       t        t        |¬«      5  t        t        | j                  d   d¬«       d d d «       d}t        t        |¬«      5  t        t        | j                  d   d¬«       d d d «       t        t        |¬«      5  t        t        | j                  d   d¬«       d d d «       y # 1 sw Y   Œ·xY w# 1 sw Y   ŒŠxY w# 1 sw Y   Œ[xY w# 1 sw Y   y xY w)	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†   s½   € Ø@ˆÜœ:¨SÖ1Üœ §¡¨¡ÀÕC÷ 2äœ:¨SÖ1Üœ §¡¨¡ÀÕC÷ 2ð >ˆÜœ:¨SÖ1Üœ §¡¨¡¸RÕ@÷ 2äœ:¨SÖ1Üœ §¡¨¡¸RÕ@÷ 2Ð1÷ 2Ð1úç1Ð1ú÷ 2Ð1úç1Ð1ús/   ” C*Á C6Â DÃ DÃ*C3Ã6C?ÄDÄDc                 óâ   — d}t        t        | j                  |   | j                  | j                  | j
                  ¬«      }t        |j                  | j                  |   | j                  «       y ©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“   sL   € àˆÜœ6 4§7¡7¨1¡:ÀÇÁØ!%§¡°$·)±)ô=ˆä˜CŸE™E 4§8¡8¨A¡;°·±Õ9r   c                 ó  — d}t        t        | j                  |   | j                  | j                  | j
                  ¬«      }t        |j                  | j                  |   | j                  «       t        |j                  dkD  «       y )Nr    rt   r   )r
   r%   r[   rG   r^   r_   r   r   r\   r]   r   Únfevrw   s      r   Útest_2dzTestBasinHopping.test_2dš   s\   € àˆÜœ6 4§7¡7¨1¡:ÀÇÁØ!%§¡°$·)±)ô=ˆä˜CŸE™E 4§8¡8¨A¡;°·±Ô9Ü�—‘˜1‘Õr   c                 ó   — d}| j                   j                  «       }d|d<   t        t        | j                  |   || j
                  | j                  ¬«      }t        |j                  dkD  «       t        |j                  |j                  «       y )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¢   so   € àˆØŸ;™;×+Ñ+Ó-Ðà%+Ð˜Ñ"Üœ6 4§7¡7¨1¡:Ø,<ÀDÇJÁJØ $§	¡	ô+ˆô 	�—‘˜1‘ÔÜ�S—X‘X˜sŸx™xÕ(r   c                 óZ  — | j                   j                  «       }d|d<   t        t        ddg|| j                  | j
                  ¬«      }t        t        |j                  d«      «       t        |j                  «      \  }}t        |j                  j                  || j                  «       y )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ÁJØ $§	¡	ô+ˆô 	”˜×6Ñ6¸Ó>Ô?ô ' s§u¡uÓ-‰ˆˆ8Ü˜C×:Ñ:×>Ñ>ÀØ ŸH™Hõ	&r   c                 óâ   — d}t        t        | j                  |   | j                  | j                  | j
                  ¬«      }t        |j                  | j                  |   | j                  «       y )Nr    rt   )
r
   r!   r[   r`   r^   r_   r   r   r\   r]   rw   s      r   Útest_2d_nogradzTestBasinHopping.test_2d_nograd¿   sQ   € àˆÜœ=¨$¯'©'°!©*Ø,0×,>Ñ,>Ø!%§¡°$·)±)ô=ˆô 	˜CŸE™E 4§8¡8¨A¡;°·±Õ9r   rO   c                 ó,  — d}g d¢}t        j                   | j                  «      }|D ]j  }||d<   t        t        | j                  |   || j
                  | j                  ¬«      }t        |j                  | j                  |   | j                  «       Œl y )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ˆÜŸ9™9 T§[¡[Ó1ÐÛˆFØ)/Ð˜XÑ&Üœv t§w¡w¨q¡zØ0@Ø%)§Z¡Z°d·i±iôAˆCô   §¡ t§x¡x°¡{°D·H±HÕ=ñ r   é(   rY   )	r‹   r~   rW   rŒ   r�   zNelder-MeadÚPowellÚCOBYLAÚCOBYQAc                 ó2  — d}| j                   j                  «       }||d<   |dv rdn| j                  }t        t        | j
                  |   ||| j                  d¬«      }|dk(  rdn| j                  }t        |j                  | j                  |   |¬	«       y )
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‘¸$¿*¹*ˆäœ=¨$¯'©'°!©*Ø-=Ø"'¨d¯i©i¸dôDˆð ˜XÒ%‰a¨4¯8©8ˆÜ˜CŸE™E 4§8¡8¨A¡;¸Ö<r   c                 ój  — t        «       }|j                  }d}t        t        | j                  |   | j
                  | j                  | j                  |¬«      }t        |j                  | j                  |   | j                  «       t        |j                  «       t        ||j                  k7  «       y ©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¡7¨1¡:ÀÇÁØ!%§¡°$·)±)Ø%-ô/ˆô 	˜CŸE™E 4§8¡8¨A¡;°·±Ô9Ü�×$Ñ$Ô%äÐ! X×%6Ñ%6Ñ6Õ7r   c                 óð   — t         }d}t        t        | j                  |   | j                  | j
                  | j                  |¬«      }t        |j                  | j                  |   | j                  «       y 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÷   sY   € äˆØˆÜœ=¨$¯'©'°!©*Ø,0×,>Ñ,>Ø!%§¡°$·)±)Ø%-ô/ˆô 	˜CŸE™E 4§8¡8¨A¡;°·±Õ9r   c                 ó²   — t        «       }d}t        t        | j                  |   | j                  d| j
                  |¬«       t        |j                  «       y )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  sD   € ô #“nˆØˆä”V˜TŸW™W Q™Z¸$¿+¹+Ø D§I¡I¸;õ	Hä�×'Ñ'Õ(r   c                 ó  — t        «       }d}t        t        | j                  |   | j                  d| j
                  |¬«      }t        |j                  «       t        d|j                  d   v «       t        |j                  d«       y )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  sk   € ô “<ˆØˆäœ6 4§7¡7¨1¡:ÀÇÁØ!#¨$¯)©)¸hôHˆä�×$Ñ$Ô%Ü�
˜cŸk™k¨!™nÐ,Ô-ô 	�S—W‘W˜aÕ r   c                 óî   — d}t        d¬«      | j                  d<   d}t        t        | j                  |   | j                  || j
                  ¬«      }t        |j                  dz   |j                  «       y )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  s]   € àˆÜ!%¨a¤ˆ�‰�IÑØˆÜœ6 4§7¡7¨1¡:ÀÇÁØ!&¨T¯Y©Yô8ˆô 	�S—W‘W˜q‘[ #×";Ñ";Õ<r   c                 ór   — d}t        t        | j                  |   | j                  d| j                  ¬«       y rs   )r
   r   r[   rG   r_   rg   s     r   Útest_niter_zeroz TestBasinHopping.test_niter_zero'  s*   € àˆÜ”V˜TŸW™W Q™Z¸$¿+¹+Ø 4§9¡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                  ‰«      «       y )	NrW   TrX   c                 ó(   •— ‰j                  |«       y ©N©Úappend)r   r   rP   Úf_1s      €r   r¥   z;TestBasinHopping.test_rng_reproducibility.<locals>.callback3  ó   ø€ Ø�J‰J�q�Mr   rT   rO   )ru   r^   r¥   Úrngc                 ó(   •— ‰j                  |«       y 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-  sv   ù€ à&0¸Ñ>Ðàˆô	ô 	”V˜c 3˜ZÐ:JØ¨°bõ	:ð ˆô	ô 	”V˜c 3˜ZÐ:JØ¨	°rõ	;ä”R—X‘X˜c“]¤B§H¡H¨S£MÕ2r   c                 ó"  — t         j                  j                  d«      }dddœ}t        t        ddg|d|¬«      }t         j                  j                  d«      }t        t        ddg|d|¬«      }t        |j                  |j                  «       y )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‰i×#Ñ# AÓ&ˆà&0¸Ñ>ÐäœF S¨# JØ-=Ø"$¨#ô/ˆô �i‰i×#Ñ# AÓ&ˆÜœF S¨# JØ-=Ø"$¨#ô/ˆô 	�T—V‘V˜TŸV™VÕ$r   c                 óä   — d}t        t        | j                  |   | j                  | j                  | j
                  d¬«      }t        |j                  | j                  |   | j                  «       y )Nr   )ru   r^   r_   ÚTrv   rw   s      r   Útest_monotonic_basin_hoppingz-TestBasinHopping.test_monotonic_basin_hoppingR  sO   € àˆäœ6 4§7¡7¨1¡:ÀÇÁØ!%§¡°$·)±)¸qôBˆä˜CŸE™E 4§8¡8¨A¡;°·±Õ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ò %òAò:òò
)ò&ò":ð ‡[�[×Ñ˜2Óñ>ó ð>ð ‡[�[×Ñ˜2ÓØ‡[�[×Ñ˜Xò (5ó 6ñ=ó6ó ð=ò 8ò:ò	)ò!ò 	=ò.ò3ò*%ó :r   rR   c                   ó`   — e Zd Zd„ Zd„ Zej                  j                  dddg«      d„ «       Zy)Ú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\  sB   € Ü—(‘(˜1“+ˆŒØˆŒä¨Ô-ˆØ—7‘7ˆŒØ—W‘WˆŒ
ä�v‹Ðr   c                 óf  — | j                  «       }t        d¬«      }| j                  dz   |_        | j                  dz   |_        |j                  |«      }|j                  «       }t        | j                  |j                  «       t        | j                  |j
                  «       t        | «       y )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ˆ
Ø—w‘w ‘{ˆ
ŒØŸ™ 1™ˆ
Œà�n‰n˜ZÓ(ˆØ×#Ñ#Ó%ˆÜ�T—W‘W˜fŸh™hÔ'Ü�T—W‘W˜fŸj™jÔ)Ü�C�Õr   rÎ   TFc                 óR  — | j                  «       }t        |¬«      }| j                  dz   |_        | j                  dz
  |_        |j                  |«      }|j                  «       }| j                  |j                  k7  |k(  sJ ‚| j                  |j
                  k7  |k(  sJ ‚||u sJ ‚y )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ˆ
Ø—w‘w ‘{ˆ
ŒØŸ™ 1™ˆ
Œà�n‰n˜ZÓ(ˆØ×#Ñ#Ó%ˆØ—‘˜6Ÿ8™8Ñ#¨Ò/Ð/Ð/Ø—‘˜6Ÿ:™:Ñ%¨'Ò1Ð1Ð1Ø�g‰~Ð‰~r   N)	r2   r3   r4   rÒ   rÙ   rÆ   rÇ   rÉ   rÛ   rI   r   r   rË   rË   [  s5   „ òò
ð ‡[�[×Ñ˜Y¨¨u¨Ó6ñ
ó 7ñ
r   rË   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTest_RandomDisplacementc                 ó    — d| _         d| _        y )NrT   ià“ )r›   ÚNrD   s    r   ra   z$Test_RandomDisplacement.setup_method�  s   € ØˆŒØˆ�r   c                 ój  — t         j                  j                  d«      }t        j                  | j                  g«      }t        | j                  |¬«      } ||«      }d| j                  z  dz  dz  }t        t        j                  |«      dd«       t        t        j                  |«      |d«       y )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‰i×#Ñ# AÓ&ˆÜ�X‰X�t—v‘v�hÓˆÜ%¨t¯}©}À#ÔFˆÙ�R‹LˆØ�$—-‘-Ñ AÑ%¨Ñ*ˆÜœBŸG™G A›J¨¨AÔ.ÜœBŸF™F 1›I q¨!Õ,r   N)r2   r3   r4   ra   rç   rI   r   r   rÝ   rÝ   €  s   „ òó
-r   rÝ   c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTest_Metropolisc                 óŽ   — d| _         t        | j                   «      | _        t        dd¬«      | _        t        dd¬«      | _        y )Nr   Trl   ©rÎ   rÐ   rT   )rÄ   r   Úmetr   Úres_newÚres_oldrD   s    r   ra   zTest_Metropolis.setup_method“  s5   € ØˆŒÜ˜dŸf™fÓ%ˆŒÜ%¨d¸Ô;ˆŒÜ%¨d¸Ô;ˆ�r   c                 óv   — | j                  | j                  | j                  ¬«      }t        |t        «      sJ ‚y ©N©rí   rî   )rì   rí   rî   Ú
isinstanceÚbool)r.   rØ   s     r   Útest_boolean_returnz#Test_Metropolis.test_boolean_return™  s.   € ð �h‰h˜tŸ|™|°T·\±\ˆhÓBˆÜ˜#œtÔ$Ð$Ñ$r   c                 ód   — t        | j                  | j                  | j                  ¬«      «       y rð   )r   rì   rí   rî   rD   s    r   rÛ   z%Test_Metropolis.test_lower_f_acceptedŸ  s   € Ü�—‘ §¡°t·|±|�ÓDÕEr   c                 óÌ   — d}d}t        d«      D ]<  }|r|r n6t        dd¬«      }t        dd¬«      }| j                  ||¬«      }|rd}Œ;d}Œ> t        |«       t        |«       y )NFiè  TrT   rë   r8   rñ   )Úranger   rì   r   )r.   Ú
one_acceptÚ
one_rejectrh   rí   rî   rØ   s          r   Útest_acceptzTest_Metropolis.test_accept¢  sk   € àˆ
Øˆ
Ü�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  |j	                  ||¬«       d d d «       y # 1 sw Y   y xY w)	Nr#   Trl   rë   iÐ  Úraise)Úoverrñ   )r   r   r   ÚerrstateÚaccept_reject©r.   rì   rí   rî   s       r   Útest_GH7495zTest_Metropolis.test_GH7495³  sP   € ô ˜‹mˆÜ ¨°2Ô6ˆÜ ¨°4Ô8ˆÜ�[‰[˜gÖ&Ø×Ñ g°wÐÔ?÷ '×&Ñ&ús   ¼AÁA"c                 óÔ   ‡‡— d„ Šd}dŠdˆˆfd„dœf}t        ‰|dt        j                  j                  d«      d	|i¬
«      }|j                  sJ ‚t        |j                  ‰d¬«       y )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¼  sm   ù€ ò	(ð ˆØˆØÔ&?Ñ@ÐAˆÜØØØÜ—‘×&Ñ& tÓ,Ø+¨SÐ1ô
ˆð �{Š{Ðˆ{Ü˜Ÿ™ ¨TÖ2r   c                 ó²   — t        d«      }t        dd¬«      }t        dd¬«      } |||¬«      sJ ‚d|_         |||¬«      rJ ‚d|_         |||¬«      sJ ‚y )Nr   Trl   rë   rT   rñ   F)r   r   rÎ   r   s       r   Útest_accept_gh7799z"Test_Metropolis.test_accept_gh7799Ï  se   € ô ˜‹mˆÜ ¨°2Ô6ˆÜ ¨°2Ô6ˆñ ˜7¨GÕ4Ð4Ð4àˆŒÙ˜w°Õ8Ð8Ð8àˆŒÙ˜7¨GÕ4Ð4Ñ4r   c                 ód   — d„ }d„ }d|dœddgddœ}t        |dd	gd
|¬«      }|j                  rJ ‚y )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à  sJ   € ò	ò	ð +/°zÑ!BØ# VÐ,¸ñAˆä˜3 A q 6°ÀfÔMˆØ—;’;Ðˆ�;r   N)r2   r3   r4   ra   rô   rÛ   rú   r  r  r  r  rI   r   r   ré   ré   ’  s,   „ ò<ò%òFòò"@ò3ò&5ó"r   ré   zshared state)Úreasonc                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTest_AdaptiveStepsizec                 ó¤   — d| _         t        | j                   ¬«      | _        d| _        t	        | j                  d| j                  ¬«      | _        y )NrT   )r›   r8   F)rœ   ÚverboseÚaccept_rate)r›   r   Útsrm   r   rœ   rD   s    r   ra   z"Test_AdaptiveStepsize.setup_methodð  s?   € ØˆŒÜ$¨d¯m©mÔ<ˆŒØ"%ˆÔÜ(°$·'±'À5Ø59×5LÑ5LôNˆ�r   c                 óX  — d}| j                  |«       | j                   j                  d«       t        | j                   j                  «      D ].  }| j                  |«       | j                   j                  d«       Œ0 t	        | j
                  j                  | j                  kD  «       y )Nrl   FT©rœ   Úreportr÷   Úintervalr   r#  r›   ©r.   r   rh   s      r   Útest_adaptive_increasez,Test_AdaptiveStepsize.test_adaptive_increase÷  sy   € àˆØ�‰�aÔØ�‰×Ñ˜UÔ#Ü�t—}‘}×-Ñ-Ö.ˆAØ�M‰M˜!ÔØ�M‰M× Ñ  Õ&ð /ô 	�—‘× Ñ  4§=¡=Ñ0Õ1r   c                 óX  — d}| j                  |«       | j                   j                  d«       t        | j                   j                  «      D ].  }| j                  |«       | j                   j                  d«       Œ0 t	        | j
                  j                  | j                  k  «       y )Nrl   TFr%  r(  s      r   Útest_adaptive_decreasez,Test_AdaptiveStepsize.test_adaptive_decrease  sy   € àˆØ�‰�aÔØ�‰×Ñ˜TÔ"Ü�t—}‘}×-Ñ-Ö.ˆAØ�M‰M˜!ÔØ�M‰M× Ñ  Õ'ð /ô 	�—‘× Ñ  4§=¡=Ñ0Õ1r   c                 ó  — d}t        | j                  j                  dz   «      D ].  }| j                  |«       | j                  j                  d«       Œ0 t	        | j
                  j                  | j                  kD  «       y )Nrl   r    T©r÷   rœ   r'  r&  r   r#  r›   r(  s      r   Útest_all_acceptedz'Test_AdaptiveStepsize.test_all_accepted  s`   € àˆÜ�t—}‘}×-Ñ-°Ñ1Ö2ˆAØ�M‰M˜!ÔØ�M‰M× Ñ  Õ&ð 3ô 	�—‘× Ñ  4§=¡=Ñ0Õ1r   c                 ó  — d}t        | j                  j                  dz   «      D ].  }| j                  |«       | j                  j                  d«       Œ0 t	        | j
                  j                  | j                  k  «       y )Nrl   r    Fr-  r(  s      r   Útest_all_rejectedz'Test_AdaptiveStepsize.test_all_rejected  s`   € àˆÜ�t—}‘}×-Ñ-°Ñ1Ö2ˆAØ�M‰M˜!ÔØ�M‰M× Ñ  Õ'ð 3ô 	�—‘× Ñ  4§=¡=Ñ0Õ1r   N)r2   r3   r4   ra   r)  r+  r.  r0  rI   r   r   r  r  î  s   „ òNò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÷?ó ?òòò
òô	#Ð$ô 	#ò÷ñ ÷*ñ ÷$n:ñ n:÷b"ñ "÷J-ñ -÷$Yñ Yðx ‡�×Ñ .ÐÓ1÷*2ð *2ó 2ñ*2r   