a
    hsw                     @   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 ih0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rd jd    krd|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sJ |jdksJ |jsJ d S )N   size)     j@
         c                    s     j d7  _ | S Nr   countxf ]/var/www/html/assistant/venv/lib/python3.9/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{Gz{Gz?)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|  qt |jjt jsRJ |rrt |jdd srJ t |jjt jsJ t |jjt jsJ t |jjt jsJ 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灕Cl?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sn J |jj|j	j  kr ksn 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 s0    Y  t jt|d$ tdd ddtd W d    n1 s0    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 s0    Y  d}t jt|d$ tdd dddd W d    n1 s0    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 s0    Y  d}t jt|d( tdd ddgg d W d    n1 s0    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.matchrP   ...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sJ 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 s0    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 )Nc   r   r%   rl   rm   Zfloatingr   r   r   r   r      s    z-TestBracketRoot.test_special_cases.<locals>.fr   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	   }SES].HMa l	   FDuB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 }||| |	|    ||  }}}nd }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sJ |jsJ 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sn J |	j	j|	j
j  kr|	jj  krֈ ksn 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 s0    Y  t jt|d" tdd dtd W d    n1 s0    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 s0    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 s0    Y  t jt|d$ tdd ddd d W d    n1 s0    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 s0    Y  d&}t jt|d$ td'd ddd(d) W d    n1 s0    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   )gfffffFbr   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   )3333335333331gffffff,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 |rt |jdd sJ t |jjt jsJ t |jjt jsJ t |jjt jsJ 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sJ t|j||jd |  }g d\}}}d}t |||||d}|j	dksJ 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 )Nb   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     '