a
    ‡ù»jz  ã                   @   sv   d dl Z d dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlm  mZ d dlmZ G dd„ dƒZG dd„ dƒZdS )	é    N)Úassert_array_lessÚassert_allcloseÚassert_equal)Ú_bracket_rootÚ_bracket_minimumÚ_ELIMITS)Ústatsc                	   @   sB  e Zd Zej dd¡ej dd¡ej dd¡ej dd¡dd„ ƒƒƒƒZd	d
„ Zej dde 	ddd¡g¡ej dddg¡ej dddg¡ej dddg¡dd„ ƒƒƒƒZ
ej deƒ dddg¡dd„ ƒZd d!„ Zej d"d#d#d$gf¡ej dddg¡ej dddg¡ej d%ejejejf¡d&d'„ ƒƒƒƒZd(d)„ Zd*d+„ ZdS ),ÚTestBracketRootÚseed)i½&²$l   Šv ih¿0Úuse_xmin©FTÚ
other_sideÚfix_one_sidec                    s¸  t j |¡}|jdd�g d¢ \}}}d| }|| }	‡ fdd„‰ |r¸| ¡  }
t  t  ||
  |
 ¡t  |¡ ¡}|
||
 ||    |
||
 ||d      }}t||	||
d�}nRt  t  |	| ¡t  |¡ ¡}|	|||   |	|||d     }}t||	|d�}|�rV|d	  |d
   |d
< |d	< | |  }}d|v �rV| d¡ |d< |�rv|�rn|	 |d< n|	|d< dˆ _tˆ fi |¤Ž}|�sÜ|j	d|j
d    k�rÔdˆ jd    k�rÔd|d  k�s$n J ‚nH|j	|j
d d   k�rˆ jd d   k�r|d d k�s$n J ‚t  |j|jg¡}t|||fƒ t  |j|jg¡}t|ˆ |ƒƒ |j|jk�svJ ‚t  |¡}|d |d  k�s˜J ‚|jdk�s¨J ‚|j�s´J ‚d S )Né   ©Úsize)ç     jø@é
   é   é   c                    s   ˆ  j d7  _ | S ©Nr   ©Úcount©Úx©Úf© úGE:\soccer\ml_env\Lib\site-packages\scipy/optimize/tests/test_bracket.pyr      s    z-TestBracketRoot.test_nfev_expected.<locals>.f)Úxl0Úxr0ÚfactorÚxmin)r   r    r!   r    r   r"   Úxmaxr   é   )ÚnpÚrandomÚdefault_rngÚceilÚlogÚdictÚpopr   r   ÚnfevÚnitÚasarrayÚxlÚxrr   ÚflÚfrÚsignÚstatusÚsuccess)Úselfr
   r   r   r   Úrngr   Údr!   r    r"   ÚnÚlÚuÚkwargsÚresÚbracketÚ	f_bracketZsignsr   r   r   Útest_nfev_expected   sH    
$2&
JH
z"TestBracketRoot.test_nfev_expectedc                 C   s   t j |¡| S ©N)r   ZnormZcdf)r6   ÚqÚpr   r   r   r   Y   s    zTestBracketRoot.frC   ç333333ã?çš™™™™™©?gffffffî?r   r"   éûÿÿÿNr#   r   r!   ç333333ó?r$   c              	   C   s:   t | jdd||||fd�}tt |j¡ t |j¡ƒ d S )Nç{®Gáz„¿ç{®Gáz„?)r"   r#   r!   Úargs)r   r   r   r%   r3   r1   r2   )r6   rC   r"   r#   r!   r=   r   r   r   Ú
test_basic\   s    ÿzTestBracketRoot.test_basicÚshape©é   ©r   é   ©r   r$   r$   c              
      s  |rt  ddd¡ |¡nd}|f}d‰t j‡‡fdd„ƒ}‡‡fdd	„‰d
ˆ_t j d¡}|j|d� }|j|d�}d| d|  }}	|r²|j|d�dk}
t j t j ||
< |	|
< |j|d�d }tˆ||||	||ˆd�}|||||	||ƒ 	¡ }g d¢}|D ]<‰ ‡ fdd„|D ƒ}t
|ˆ ƒ}t| 	¡ |ƒ t|j|ƒ � qüt  |jjt j¡�sRJ ‚|�rrt  |jdd… ¡�srJ ‚t  |jjt j¡�sŠJ ‚t  |jjt j¡�s¢J ‚t  |jjt j¡�sºJ ‚tt  |j¡ˆjd ƒ t|j|jƒ t|jˆj|jg|¢R Ž ƒ t|jˆj|jg|¢R Ž ƒ d S )Nçš™™™™™©¿çÍÌÌÌÌÌð?rN   rD   r   c              
      s   t ˆj| |||||fˆ d�S )N©r"   r#   r!   rJ   Úmaxiter)r   r   )r   r    r"   r#   r!   rC   ©rU   r6   r   r   Úbracket_root_singlen   s    þz?TestBracketRoot.test_vectorization.<locals>.bracket_root_singlec                     s   ˆ  j d7  _ ˆj| i |¤ŽS r   )Úf_evalsr   )rJ   r<   )r   r6   r   r   r   t   s    z-TestBracketRoot.test_vectorization.<locals>.fr   éÊÔ# r   ç     @�@ç      à?ç      ø?rT   )r/   r0   r1   r2   r5   r,   r-   c                    s   g | ]}t |ˆ ƒ‘qS r   ©Úgetattr©Ú.0Úref©Úattrr   r   Ú
<listcomp>‡   ó    z6TestBracketRoot.test_vectorization.<locals>.<listcomp>r   éÿÿÿÿr$   )r%   ÚlinspaceÚreshapeÚ	vectorizerX   r&   r'   Úinfr   Úravelr^   r   r   rL   Ú
issubdtyper5   ÚdtypeÚbool_Úallr4   Úintegerr,   r-   Úmaxr   r/   r0   r1   r   r2   )r6   rL   rC   rJ   rW   r7   r   r    r"   r#   Úir!   r=   ÚrefsÚattrsÚref_attrÚres_attrr   )rc   r   rU   r6   r   Útest_vectorizationf   sF    ÿ
z"TestBracketRoot.test_vectorizationc              	   C   s‚   dd„ }t jdt jd�f}t|g d¢g d¢t j dt j t j gt jdt jt jg|d	d
�}t  tjttj	tj
g¡}t|j|ƒ d S )Nc                    s4   dd„ dd„ dd„ dd„ g‰ ‡ fdd„t | |ƒD ƒS )Nc                 S   s   | d S )Nr\   r   r   r   r   r   Ú<lambda>›   re   z7TestBracketRoot.test_flags.<locals>.f.<locals>.<lambda>c                 S   s   | d S ©Niè  r   r   r   r   r   rx   œ   re   c                 S   s   | d S ry   r   r   r   r   r   rx   �   re   c                 S   s   t jS rA   ©r%   Únanr   r   r   r   rx   ž   re   c                    s   g | ]\}}ˆ | |ƒ‘qS r   r   ©r`   r   Új©Úfuncsr   r   rd       re   z9TestBracketRoot.test_flags.<locals>.f.<locals>.<listcomp>©Úzip©ZxsÚjsr   r~   r   r   š   s    ýz%TestBracketRoot.test_flags.<locals>.frP   ©rm   )rf   rf   rf   rf   )r   r   r   r   rf   r   r   )r   r    r"   r#   rJ   rU   )r%   ÚarangeÚint64r   rj   ÚarrayÚeimÚ_ECONVERGEDr   Ú	_ECONVERRÚ
_EVALUEERRr   r4   )r6   r   rJ   r=   Z	ref_flagsr   r   r   Ú
test_flags—   s    ýýzTestBracketRoot.test_flagsÚrootç�•C‹lçã?çV-²�ïã?rm   c                    sÂ   |d u r|nˆ |ƒ}|d u r |nˆ |ƒ}ˆ |ƒ}‡ fdd„}t jddgˆ d�}t|g|¢R |||fdœŽ}t  |j¡szJ ‚|jj|jj  kr–ˆ ksœn J ‚|jj|j	j  kr¸ˆ ks¾n J ‚d S )Nc                    s   | | d   ˆ ¡S )Nr   ©Zastype)r   r�   r„   r   r   r   ¸   s    z%TestBracketRoot.test_dtype.<locals>.frH   rI   r„   )r"   r#   rJ   )
r%   r.   r   ro   r5   r/   rm   r0   r1   r2   )r6   r�   r"   r#   rm   r   r>   r=   r   r„   r   Ú
test_dtype®   s    "zTestBracketRoot.test_dtypec                 C   s|  d}t jt|d�� td ddƒ W d   ƒ n1 s40    Y  d}t jt|d��  tdd„ ddƒ W d   ƒ n1 sv0    Y  t jt|d��  td	d„ dd
ƒ W d   ƒ n1 s´0    Y  t jt|d��$ tdd„ ddtd� W d   ƒ n1 sö0    Y  t jt|d��& tdd„ ddtƒ d� W d   ƒ n1 �s<0    Y  t jt|d��$ tdd„ ddtd� W d   ƒ n1 �s€0    Y  d}t jt|d��$ tdd„ dddd� W d   ƒ n1 �sÈ0    Y  d}t jt|d��  tdd„ ddƒ W d   ƒ n1 �s0    Y  t jt|d��& tdd„ ddtjd� W d   ƒ n1 �sR0    Y  t jt|d��$ tdd„ dddd� W d   ƒ n1 �s–0    Y  d}t jt|d��( tdd„ ddgg d¢ƒ W d   ƒ n1 �sâ0    Y  d}t jt|d��$ tdd„ ddd d!� W d   ƒ n1 �s*0    Y  t jt|d��$ td"d„ ddd#d!� W d   ƒ n1 �sn0    Y  d S )$Nú`func` must be callable.©ÚmatchéüÿÿÿrP   ú...must be numeric and real.c                 S   s   | S rA   r   r   r   r   r   rx   Ê   re   z7TestBracketRoot.test_input_validation.<locals>.<lambda>y      À      ð?c                 S   s   | S rA   r   r   r   r   r   rx   Ì   re   Úhelloc                 S   s   | S rA   r   r   r   r   r   rx   Î   re   ©r"   c                 S   s   | S rA   r   r   r   r   r   rx   Ð   re   ©r#   c                 S   s   | S rA   r   r   r   r   r   rx   Ò   re   ©r!   ú0All elements of `factor` must be greater than 1.c                 S   s   | S rA   r   r   r   r   r   rx   Ö   re   r[   z(`xmin <= xl0 < xr0 <= xmax` must be Truec                 S   s   | S rA   r   r   r   r   r   rx   Ú   re   c                 S   s   | S rA   r   r   r   r   r   rx   Ü   re   c                 S   s   | S rA   r   r   r   r   r   rx   Þ   re   r   ú+shape mismatch: objects cannot be broadcastc                 S   s   | S rA   r   r   r   r   r   rx   ã   re   éþÿÿÿéýÿÿÿ)r   rP   r   ú)`maxiter` must be a non-negative integer.c                 S   s   | S rA   r   r   r   r   r   rx   ê   re   r\   )rU   c                 S   s   | S rA   r   r   r   r   r   rx   ì   re   rf   )ÚpytestÚraisesÚ
ValueErrorr   r%   ÚobjectÚsumr{   ©r6   Úmessager   r   r   Útest_input_validationÁ   s@    *..264406484z%TestBracketRoot.test_input_validationc                    s   dd„ ‰ t ˆ ddƒ}|jsJ ‚dd„ ‰ d}t ˆ g|¢R ddiŽ}|jsTJ |j|kƒ‚|jdksbJ ‚|jd	kspJ ‚|jd
ks~J ‚dd„ ‰ t ˆ dddd�}|js J ‚t|jˆ |jdƒƒ ‡ fdd„‰ dˆ _	t ˆ ddƒ t
ˆ j	d	ƒ dˆ _	t ˆ ddd	d�}|j|jf}t
|jdƒ t|ddd� tjdd��  t ˆ dddd�}W d   ƒ n1 �sN0    Y  |j|jf}t|d ddd� tjdd��  t ˆ dddd�}W d   ƒ n1 �sª0    Y  |j|jf}t|d ddd� tjdd��  t ˆ dddd�}W d   ƒ n1 �s0    Y  |j�rJ ‚d S )Nc                 S   s    t  | jt j¡sJ ‚| d d S )Néc   r   ©r%   rl   rm   Zfloatingr   r   r   r   r   ó   s    z-TestBracketRoot.test_special_cases.<locals>.féùÿÿÿr   c                 S   s   | d S )Nr   r   r   r   r   r   r   û   s    )rž   r   rU   r   r$   r�   c                 S   s   ||  d S r   r   ©r   Úcr   r   r   r     s    rf   r   r   ©rJ   c                    s   ˆ  j d7  _ | S r   r   r   r   r   r   r     s    iöÿÿÿé   r   rš   rP   )r   r   gVçž¯Ò<)ZatolÚignore)Zoverr˜   rF   r™   )r   r5   r/   r0   r-   r,   r4   r   r1   r   r   r%   Zerrstate)r6   r=   r>   r   r   r   Útest_special_casesî   sD    

000z"TestBracketRoot.test_special_cases)Ú__name__Ú
__module__Ú__qualname__r    ÚmarkÚparametrizer@   r   r%   rg   rK   Útuplerw   rŒ   Úfloat16Úfloat32Úfloat64r‘   r§   r°   r   r   r   r   r	   
   s*   J
0-r	   c                   @   sœ  e Zd Zdd„ Zdd„ Zdddddddœdd	„Zej d
d¡ej dd¡ej dd¡dd„ ƒƒƒZ	dd„ Z
ej ddddgf¡ej dejejejf¡ej dddg¡ej dddg¡dd„ ƒƒƒƒZdd„ Zej dd dg¡ej d!d"¡ej d#d$¡ej d%d&¡d'd(„ ƒƒƒƒZej d)d*¡ej d%d+¡d,d-„ ƒƒZej d.d/¡ej d%d0¡d1d2„ ƒƒZej d3d4¡d5d6„ ƒZej d7eƒ d8d9d:g¡d;d<„ ƒZd=d>„ ZdS )?ÚTestBracketMinimumc                    s   ‡ fdd„‰ dˆ _ ˆ S )Nc                    s   ˆ  j d7  _ | | d | S )Nr   r$   r   )r   ÚaÚbr   r   r   r   1  s    z$TestBracketMinimum.init_f.<locals>.fr   r   )r6   r   r   r   Úinit_f0  s    zTestBracketMinimum.init_fc                 C   s`   t  |j|jk |j|jk @ ¡s"J ‚t  |j|jk|j|jk@ |j|jk|j|jk@ B ¡s\J ‚d S rA   )r%   ro   r/   Úxmr0   r1   Úfmr2   )r6   Úresultr   r   r   Úassert_valid_bracket7  s    ÿÿÿz'TestBracketMinimum.assert_valid_bracketNr   )r   r    r!   r"   r#   rJ   c             	   C   s$   d}dd„ t |||||||fƒD ƒS )N©r   r    r"   r#   r!   rJ   c                 S   s4   i | ],\}}t |tjƒs*t |¡s*|d vr||“qS ))Nr   )Ú
isinstancer%   ZndarrayZisscalar)r`   ÚnameÚvalr   r   r   Ú
<dictcomp>D  s   þz1TestBracketMinimum.get_kwargs.<locals>.<dictcomp>r€   )r6   r   r    r!   r"   r#   rJ   Únamesr   r   r   Ú
get_kwargs@  s    ÿzTestBracketMinimum.get_kwargsr
   )l	   Õ^€0#,ãN0LÀ“b*&ç l	   Ÿ}¶SÉE�S].HM¼ëa l	   êFäD…u”B�P_KU r   r   r   c                 C   sø  t j |¡}d}|jdd�g d¢ \}}}}	|| }
|
| }|	d7 }	|�r| ¡  d }tt  t  ||  | ¡t  |	¡ ¡ƒ}||| |	|    }||| |	|d     }|dkrÒ||| |	|d     n|
}|d |d k�rÄ|d7 }||| |	|    ||  }}}n°d }tt  t  || ¡t  |	¡ ¡ƒ}|||	|   }|dk�rh|||	|d    n|}|dk�rŠ|||	|d    n|
}|d |d k�rÄ|d7 }|||	|   ||  }}}|  ¡ }d }|�r| |
 |   }}
}d |d u�rþ| nd  }}| | |   }}}| j|||||	|d�}t||
fi |¤Ž}|j	|j
d	 k�sZJ ‚|j	|jk�slJ ‚|j
|k�s|J ‚t  |j|j|jg¡}t||||fƒ t  |j|j|jg¡}t|||g|¢R Ž ƒ |  |¡ |jd
k�sèJ ‚|j�sôJ ‚d S )N©r   r   rP   r   )r   r   r   r   r   r   r$   rÂ   r   r   )r%   r&   r'   Úintr(   r)   r½   rÈ   r   r,   r-   r   r.   r/   r¾   r0   r   r1   r¿   r2   rÁ   r4   r5   )r6   r
   r   r   r7   rJ   r   Zd1Zd2r!   Úxm0r    r"   r9   ÚlowerÚmiddleÚupperr   r#   r<   rÀ   r>   r?   r   r   r   r@   J  sZ    (&ÿ"""ÿ
ÿ
z%TestBracketMinimum.test_nfev_expectedc              	   C   s”   dd„ }t jdt jd�f}t  dd¡t  dd¡t  dd¡  }}}t||||t j dt j t j g|dd	�}t  tjt	tj
tjg¡}t|j|ƒ d S )
Nc                    s4   dd„ dd„ dd„ dd„ g‰ ‡ fdd„t | |ƒD ƒS )Nc                 S   s   | d d S )Nr\   r$   r   r   r   r   r   rx   �  re   z:TestBracketMinimum.test_flags.<locals>.f.<locals>.<lambda>c                 S   s   | S rA   r   r   r   r   r   rx   ž  re   c                 S   s   | S rA   r   r   r   r   r   rx   Ÿ  re   c                 S   s   t jS rA   rz   r   r   r   r   rx      re   c                    s   g | ]\}}ˆ | |ƒ‘qS r   r   r|   r~   r   r   rd   ¡  re   z<TestBracketMinimum.test_flags.<locals>.f.<locals>.<listcomp>r€   r‚   r   r~   r   r   œ  s    ýz(TestBracketMinimum.test_flags.<locals>.frP   r„   ç      ð¿ç        ç      ð?r   )r   r    r"   rJ   rU   )r%   r…   r†   Úfullr   rj   r‡   rˆ   r‰   r   rŠ   r‹   r   r4   )r6   r   rJ   r   rË   r    rÀ   Zreference_flagsr   r   r   rŒ   ™  s    (
þ
ÿzTestBracketMinimum.test_flagsÚminimumrŽ   r�   rm   r"   rF   r#   r   c           
   	      sà   |d u r|nˆ |ƒ}|d u r |nˆ |ƒ}ˆ |ƒ}‡ fdd„}t jg d¢ˆ d�\}}}t|||||||fd�}	t  |	j¡s|J ‚|	jj|	jj  kr¦|	jj  kr¦ˆ ks¬n J ‚|	j	j|	j
j  krÖ|	jj  krÖˆ ksÜn J ‚d S )Nc                    s   | | d   ˆ ¡S ©Nr$   r�   )r   rÓ   r„   r   r   r   ¶  s    z)TestBracketMinimum.test_dtypes.<locals>.f)rH   rÐ   rI   r„   )r   r    r"   r#   rJ   )r%   r‡   r   ro   r5   r/   rm   r¾   r0   r1   r¿   r2   )
r6   rÓ   r"   r#   rm   r   r   rË   r    rÀ   r   r„   r   Útest_dtypes­  s    ÿ0zTestBracketMinimum.test_dtypesc                 C   sD  d}t jt|d�� td ddd� W d   ƒ n1 s60    Y  d}t jt|d�� tdd„ d	ƒ W d   ƒ n1 sv0    Y  t jt|d��" td
d„ ddd� W d   ƒ n1 s¶0    Y  t jt|d��" tdd„ dtd� W d   ƒ n1 sö0    Y  t jt|d��$ tdd„ dtƒ d� W d   ƒ n1 �s:0    Y  t jt|d��" tdd„ dtd� W d   ƒ n1 �s|0    Y  d}t jt|d��" tdd„ ddd� W d   ƒ n1 �sÂ0    Y  d}t jt|d��" tdd„ ddd� W d   ƒ n1 �s0    Y  t jt|d��" tdd„ ddd� W d   ƒ n1 �sJ0    Y  t jt|d��$ tdd„ dddd� W d   ƒ n1 �sŽ0    Y  t jt|d��$ tdd„ ddd d� W d   ƒ n1 �sÒ0    Y  t jt|d��& td!d„ dtj d� W d   ƒ n1 �s0    Y  t jt|d��$ td"d„ dtjd� W d   ƒ n1 �s\0    Y  d#}t jt|d��* td$d„ ddgg d%¢d� W d   ƒ n1 �sª0    Y  d&}t jt|d��$ td'd„ ddd(d)� W d   ƒ n1 �sò0    Y  t jt|d��$ td*d„ ddd+d)� W d   ƒ n1 �s60    Y  d S ),Nr’   r“   r•   rP   )r   r–   c                 S   s   | d S rÔ   r   r   r   r   r   rx   Ê  re   z:TestBracketMinimum.test_input_validation.<locals>.<lambda>y      @      ð?c                 S   s   | d S rÔ   r   r   r   r   r   rx   Ì  re   r—   c                 S   s   | d S rÔ   r   r   r   r   r   rx   Î  re   r˜   c                 S   s   | d S rÔ   r   r   r   r   r   rx   Ð  re   r™   c                 S   s   | d S rÔ   r   r   r   r   r   rx   Ò  re   rš   r›   c                 S   s   | S rA   r   r   r   r   r   rx   Ö  re   r[   z.`xmin <= xl0 < xm0 < xr0 <= xmax` must be Truec                 S   s   | d S rÔ   r   r   r   r   r   rx   Ú  re   é   c                 S   s   | d S rÔ   r   r   r   r   r   rx   Ü  re   iúÿÿÿ©r    c                 S   s   | d S rÔ   r   r   r   r   r   rx   Þ  re   rž   r�   )r   r    c                 S   s   | d S rÔ   r   r   r   r   r   rx   à  re   rF   c                 S   s   | d S rÔ   r   r   r   r   r   rx   â  re   c                 S   s   | d S rÔ   r   r   r   r   r   rx   ä  re   rœ   c                 S   s   | d S rÔ   r   r   r   r   r   rx   é  re   )rž   r•   rF   rŸ   c                 S   s   | d S rÔ   r   r   r   r   r   rx   í  re   r\   )r    rU   c                 S   s   | d S rÔ   r   r   r   r   r   rx   ï  re   rf   )r    r¡   r¢   r   r%   r£   r¤   r{   r¥   r   r   r   r§   Á  sL    ,,00422224464:4z(TestBracketMinimum.test_input_validationr   rÐ   rË   )rE   çš™™™™™¹?g333333Ã?r    )çš™™™™™É?çš™™™™™Ù?rD   NrJ   ))rG   r   )g      à¿r   )rØ   r   )rÙ   r   )gÍÌÌÌÌÌ@r   )gffffff5@r   )gffffff^@r   )gš™™™„¶@r   )gš™™™™™Àr   )gÍÌÌÌÌÌ)Àr   )gfffffFbÀr   c                 C   s`   |   ¡ }| j|||d�}t||fi |¤Ž}|  |¡ |jdksBJ ‚|jsLJ ‚|j|jks\J ‚d S )N©r   r    rJ   r   ©r½   rÈ   r   rÁ   r4   r5   r,   r   )r6   r   rË   r    rJ   r   r<   rÀ   r   r   r   Útest_scalar_no_limitsñ  s    

z(TestBracketMinimum.test_scalar_no_limitszxl0,xm0,xr0,xmin))r[   ç      è?rÑ   rÐ   )rÑ   ç      @ç      @rÐ   )g       @rà   ç      @rÐ   )g      (@ç      0@ç      4@rÐ   )NrÞ   rÑ   rÐ   )Nrß   rà   rÐ   )Nrà   rá   rÐ   )Nrâ   rã   rÐ   ))rÐ   rÐ   )gYóøÂn¥rÐ   )g#B’¡œÇ;rÐ   )rØ   rÐ   )rÙ   rÐ   )rÚ   rÐ   c           	      C   sb   |   ¡ }| j||||d�}t||fi |¤Ž}|  |¡ |jdksDJ ‚|jsNJ ‚|j|jks^J ‚d S )N)r   r    r"   rJ   r   rÜ   )	r6   r   rË   r    r"   rJ   r   r<   rÀ   r   r   r   Útest_scalar_with_limit_left  s    

z.TestBracketMinimum.test_scalar_with_limit_leftzxl0,xm0,xr0,xmax))rÙ   ç333333Ó?rÚ   rÑ   )rE   ç333333³?rØ   rÑ   )çš™™™™™É¿çš™™™™™¹¿rÐ   rÑ   )ç3333335Àç33333³1Àgffffff,ÀrÑ   )rÙ   rå   NrÑ   )rE   ræ   NrÑ   )rç   rè   NrÑ   )ré   rê   NrÑ   ))gÿÿÿÿÿÿï?rÐ   )gÍÌÌÌÌÌì?rÐ   )gffffffæ?rÐ   )r[   rÐ   c           	      C   sb   |   ¡ }| j||||d�}t||fi |¤Ž}|  |¡ |jdksDJ ‚|jsNJ ‚|j|jks^J ‚d S )N)r   r    r#   rJ   r   rÜ   )	r6   r   rË   r    r#   rJ   r   r<   rÀ   r   r   r   Útest_scalar_with_limit_right,  s    

z/TestBracketMinimum.test_scalar_with_limit_rightzxl0,xm0,xr0,xmin,xmax,args))rÙ   rå   rÚ   NrÑ   ©rÑ   rÐ   )gffffffö?ç333333ÿ?rß   rå   N©rå   rÐ   )gÍÌÌÌÌÌ@ç      
@g333333@Nçš™™™™ÙX@©rð   r   )rP   ç      @r   çÍÌÌÌÌL:ÀN©ró   r   )Nrå   NNrÑ   rì   )Nrí   Nrå   Nrî   )Nrï   NNrð   rñ   )Nrò   Nró   Nrô   c           
      C   sf   |   ¡ }| j||||d�}t||fi |¤Ž}	|	jdks:J ‚|d |	j|	jfv sRJ ‚|	j|jksbJ ‚d S )N)r    r"   r#   rJ   rf   r   )r½   rÈ   r   r4   r/   r0   r,   r   )
r6   r   rË   r    r"   r#   rJ   r   r<   rÀ   r   r   r   Útest_minimum_at_boundary_pointN  s    ]z1TestBracketMinimum.test_minimum_at_boundary_pointrL   rM   rO   rQ   c                    s@  |rt  ddd¡ |¡nd}|df}d‰t j‡‡fdd„ƒ}ˆ ¡ }t j d	¡}|j|d
� }|j|d
�}||j|d
�||   }	d| d|  }
}|rÀ|j|d
�dk}t j t j |
|< ||< |j|d
�d }t||	|||
|||ˆd�	}||	|||
|||ƒ 	¡ }g d¢}|D ]<‰ ‡ fdd„|D ƒ}t
|ˆ ƒ}t| 	¡ |ƒ t|j|ƒ �qt  |jjt j¡�sdJ ‚|�r„t  |jdd… ¡�s„J ‚t  |jjt j¡�sœJ ‚t  |jjt j¡�s´J ‚t  |jjt j¡�sÌJ ‚tt  |j¡|jd ƒ ˆ |¡ t|j||jg|¢R Ž ƒ t|j||jg|¢R Ž ƒ t|j||jg|¢R Ž ƒ d S )NrR   rS   rN   rD   rÐ   r   c                    s"   t ˆ ¡ | |||||ˆ |dfd�	S )NrÐ   )r   r    r"   r#   r!   rU   rJ   )r   r½   )rË   r   r    r"   r#   r!   r»   rV   r   r   Úbracket_minimum_singleº  s    þzETestBracketMinimum.test_vectorization.<locals>.bracket_minimum_singlerY   r   rZ   r[   r\   )r   r    r"   r#   r!   rJ   rU   )	r/   r¾   r0   r1   r¿   r2   r5   r,   r-   c                    s   g | ]}t |ˆ ƒ‘qS r   r]   r_   rb   r   r   rd   Ñ  re   z9TestBracketMinimum.test_vectorization.<locals>.<listcomp>r   rf   r   ) r%   rg   rh   ri   r½   r&   r'   rj   r   rk   r^   r   r   rL   rl   r5   rm   rn   ro   r4   rp   r,   r-   rq   r   rÁ   r1   r/   r¿   r¾   r2   r0   )r6   rL   r»   rJ   rö   r   r7   r   r    rË   r"   r#   rr   r!   r=   rs   rt   ru   rv   r   )rc   rU   r6   r   rw   ²  sH    ÿ

z%TestBracketMinimum.test_vectorizationc                 C   s.  dd„ }t |ddd�}|js J ‚dd„ }d\}}}t ||||dd	�}t|j|j|jg|||gƒ d
d„ }t |ddd�}|js€J ‚t|j||jdƒƒ |  ¡ }g d¢\}}}d}t |||||d�}|j	dksÎJ ‚t|j|j|jg|||gƒ t|j|j
|jg||g|¢R Ž ||g|¢R Ž ||g|¢R Ž gƒ d S )Nc                 S   s    t  | jt j¡sJ ‚| d d S )Néb   r   r©   r   r   r   r   r   ç  s    z0TestBracketMinimum.test_special_cases.<locals>.frª   r   r×   c                 S   s   | d d S )Nr$   r   r   r   r   r   r   r   ï  s    )rž   rf   r$   r   )r   r    rU   c                 S   s   || d  d S )Nr$   r   r   r«   r   r   r   r   ÷  s    rf   r   r­   )rÏ   rç   rÑ   rÉ   rÛ   )r   r5   r   r/   r¾   r0   r   r1   r½   r   r¿   r2   )r6   r   rÀ   r   rË   r    rJ   r   r   r   r°   â  s0    


þ,þz%TestBracketMinimum.test_special_cases)r±   r²   r³   r½   rÁ   rÈ   r    r´   rµ   r@   rŒ   r%   r·   r¸   r¹   rÕ   r§   rÝ   rä   rë   rõ   r¶   rw   r°   r   r   r   r   rº   /  sd   
ÿ
þE0þ	ýÿ	ýÿ		þ\

/rº   )r    Únumpyr%   Znumpy.testingr   r   r   Zscipy.optimize._bracketr   r   r   Z(scipy._lib._elementwise_iterative_methodZ_libZ_elementwise_iterative_methodrˆ   Zscipyr   r	   rº   r   r   r   r   Ú<module>   s     '