Ë
    âQ(h
K  ã                   ó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ej>                  j@                   G d„ d«      «       Z! G d„ d«      Z" G d„ d«      Z# 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      úe/var/www/skyplay_api_hub/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                   óö   — 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«      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ñ 	DÜœ §¡¨¡ÀÕC÷	Däœ:¨SÔ1ñ 	DÜœ §¡¨¡ÀÕC÷	Dð >ˆÜœ:¨SÔ1ñ 	AÜœ §¡¨¡¸RÕ@÷	Aäœ:¨SÔ1ñ 	AÜœ §¡¨¡¸RÕ@÷	Að 	A÷	Dð 	Dú÷	Dð 	Dú÷	Að 	Aú÷	Að 	Aú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   é   c           	      óT  — d}g d¢}t        j                   | j                  «      }|D ]~  }|dk(  rdn| j                  }||d<   t        t        | j
                  |   ||| j                  d¬«      }| j                  }|dk(  rd	}t        |j                  | j                  |   |¬
«       Œ€ y )Nr    )	r‹   r~   rW   rŒ   r�   zNelder-MeadÚPowellÚCOBYLAÚCOBYQAr”   rO   rY   éÒ  )ru   r^   r_   Úseedr“   r#   )Údecimal)r   r`   r^   r
   r!   r[   r_   r]   r   r   r\   )r.   rh   rŽ   ru   rY   r^   rx   r]   s           r   Útest_all_nograd_minimizersz+TestBasinHopping.test_all_nograd_minimizersÕ   s©   € ð ˆò@ˆäŸ9™9 T×%7Ñ%7Ó8ÐØò 
	AˆFà  HÒ,‘B°$·*±*ˆEØ)/Ð˜XÑ&Üœ}¨d¯g©g°a©jØ0@Ø%*°·±ÀôGˆCð —(‘(ˆCØ˜Ò!Ø�Ü §¡ t§x¡x°¡{¸CÖ@ñ
	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                  | j                  ¬«      }t        |j                  dz   |j                  «       y )Nr    r   )ÚmaxiterÚoptionsrO   rt   )
ÚdictrG   r^   r
   r%   r[   r_   r   r¨   Úminimization_failuresrw   s      r   Útest_minimizer_failz$TestBasinHopping.test_minimizer_fail  sc   € àˆÜ!%¨a¤ˆ�‰�IÑØˆŒ
Üœ6 4§7¡7¨1¡:ÀÇÁØ!%§¡°$·)±)ô=ˆô 	�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�   r˜   rž   r    r¢   r©   r¯   r±   r½   rÂ   rÅ   rI   r   r   rR   rR   j   s    „ ò4ò %òAò:òò
)ò&ò":ð ‡[�[×Ñ˜2Óñ>ó ð>ð ‡[�[×Ñ˜2ÓñAó ðAò&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        |«      | _        y )Nr    r   T©Úsuccess)	r   r   r[   Úf0r   r   Úfunr   Ústorage)r.   Úminress     r   ra   zTest_Storage.setup_method]  sC   € Ü—(‘(˜1“+ˆŒØˆŒä¨Ô-ˆØ—7‘7ˆŒØ—W‘WˆŒ
ä˜v“ˆ�r   c                 ón  — t        d¬«      }| j                  dz   |_        | j                  dz   |_        | j
                  j                  |«      }| j
                  j                  «       }t        | j                  |j                  «       t        | j                  |j                  «       t        | «       y )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_rejectedg  s~   € Ü#¨DÔ1ˆ
Ø—w‘w ‘{ˆ
ŒØŸ™ 1™ˆ
Œà�l‰l×!Ñ! *Ó-ˆØ—‘×(Ñ(Ó*ˆÜ�T—W‘W˜fŸh™hÔ'Ü�T—W‘W˜fŸj™jÔ)Ü�C�Õr   rÍ   TFc                 óZ  — t        |¬«      }| j                  dz   |_        | j                  dz
  |_        | j
                  j                  |«      }| 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Ñ   s        r   Útest_lower_f_acceptedz"Test_Storage.test_lower_f_acceptedr  s’   € ä#¨GÔ4ˆ
Ø—w‘w ‘{ˆ
ŒØŸ™ 1™ˆ
Œà�l‰l×!Ñ! *Ó-ˆØ—‘×(Ñ(Ó*ˆØ—‘˜6Ÿ8™8Ñ#¨Ò/Ð/Ð/Ø—‘˜6Ÿ:™:Ñ%¨'Ò1Ð1Ð1Ø�g‰~Ð‰~r   N)	r2   r3   r4   ra   r×   rÆ   rÇ   ÚparametrizerÙ   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¡  sp   € àˆ
Øˆ
Ü�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²  s]   € ô ˜‹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è   c                   ó*   — 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õ  s~   € àˆØ�‰�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ÿ  s~   € àˆØ�‰�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	  se   € àˆÜ�t—}‘}×-Ñ-°Ñ1Ó2ò 	'ˆ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                  k  «       y )Nrl   r    Fr+  r&  s      r   Útest_all_rejectedz'Test_AdaptiveStepsize.test_all_rejected  se   € àˆÜ�t—}‘}×-Ñ-°Ñ1Ó2ò 	(ˆAØ�M‰M˜!ÔØ�M‰M× Ñ  Õ'ð	(ô 	�—‘× Ñ  4§=¡=Ñ0Õ1r   N)r2   r3   r4   ra   r'  r)  r,  r.  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Ç   Úthread_unsaferÊ   rÜ   rè   r  rI   r   r   ú<module>r4     s¾   ðñó ÷,ó ,ã Ý *Û ß ç 7÷?ó ?òòò
òô	#Ð$ô 	#ò÷ñ ÷*ñ ÷$n:ñ n:ðb ‡�×Ñ÷ ð  ó ð ÷F-ñ -÷$Yñ Y÷x*2ò *2r   