o
    4Biu                     @   s  d dl Z d dlZd dlmZmZmZ d dlmZ d dl	m
  mZ d dlmZmZ d dlmZ d dlmZ ddlmZ d	d
 Zdd Zdd Zdd Zdd Zdd Zg eddfeddfeddfeddfeddfeddfed d!fed"d#fed$d#fed%dfed&d'fedd(fedd)fedd)fedd*fedd(fedd(fed d+fed"dfed$dfed%d,fed&dfeddfeddfeddfedd-fedd.fedd,fed dfed"d/fed$d/fed%dfed&dfed0d+fed1dfed2dfed3dfed4dfed5d+fed6d+fed7d+fed8d-fed9d-fed:d-fed0d)fed1d*fed2d(fed3d-fed4d+fed5d(fed6d*fed7d*fed8d+fed9d+fed:d(fZG d;d< d<ZG d=d> d>eZdS )?    N)assert_allcloseassert_equalassert_array_less)stats)_chandrupatla_minimize_chandrupatla)_CHANDRUPATLA_TESTS)permutations   )TestScalarRootFindersc                 C   s0   dd| d  d  d| d   dd|  d   S )Nd   r
         @          @ xr   r   f/var/www/html/Trade-python/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_chandrupatla.pyf1   s   0r   c                 C   s   d| d d  S )N   r      r   r   r   r   r   f2      r   c                 C   s   t | d|   S )Nr   )npexpr   r   r   r   f3      r   c                 C   s    | d d| d   d|   d S )Ng      @r   r   g      4@r   r   r   r   r   f4   s    r   c                 C   s$   d| d  d| d   d|   d S )N      r      r   r   r   r   r   f5   s   $r!   c                 C   s   d}d}| |}| |}|| }||kr||||| fn|||||f\}}}}}t |D ]}||9 }|| }	| |	}
|
|k rI||	||
f\}}}}q, |||	|||
fS )Ngw?r   )range)funcx1x2phimaxiterr   r   stepix3r   r   r   r   _bracket_minimum#   s    r+         i   i   i   i   i   i i i    r   r   r    	      
         皙gg333333ÿgɿg      пg333333ӿgffffffֿgٿgܿg      gc                	   @   s   e Zd Zdd Zejddedddgdd	 Z	ejd
e
 dddgdd Zdd Zdd Zdd Zejdedd Zejddddgfejdejejejfdd Zdd Zd d! Zd"d# Zd$S )%TestChandrupatlaMinimizec                 C   s   t  }|||  S N)r   normpdf)selfr   locdistr   r   r   ft   s   zTestChandrupatlaMinimize.frB   333333?g?r9   c                 C   sh   t | jddd|fd}|}tjj|j|dd tjj|jtj	d ddd |jj
t
|ks2J d S )Nr   r   argsư>rtol)atolrL   )r   rD   r   testingr   r   funr   r?   r@   shape)rA   rB   resrefr   r   r   
test_basicx   s
    z#TestChandrupatlaMinimize.test_basicrP   r8   r      r   r   r   c                    sx  |rt ddd|nd}|f}t jfdd} fdd d	 _t d
d	d|d}|| }dd |D }t|j | t	|jj
| dd |D }t|j | t	|jj
| t	|jj|jg|R   dd |D }	t	|j |	 t	|jj
| t |jjt jsJ dd |D }
t	|j |
 t	|jj
| t |jjt jsJ dd |D }t	|j | t	t |j j t	|jj
|jj
 t |jjt jsJ dd |D }t	|j | t	t |j jd  t	|jj
|jj
 t |jjt jsJ dd |D }t|j | t	|jj
| dd |D }t|j | t	|jj
| dd |D }t|j | t	|jj
| dd |D }t|j | t	|jj
| t|jj|jg|R   dd |D }t|j | t	|jj
| t|jj|jg|R   dd |D }t|j | t	|jj
| t|jj|jg|R   d S )Nr<   rF   r8   rE   c                    s   t  jddd| fdS )NrG   r   r   rH   )r   rD   )
loc_singlerA   r   r   chandrupatla_single   s   zHTestChandrupatlaMinimize.test_vectorization.<locals>.chandrupatla_singlec                          j d7  _ j| i |S Nr
   f_evalsrD   rI   kwargsrD   rA   r   r   rD         z6TestChandrupatlaMinimize.test_vectorization.<locals>.fr   rG   r   rH   c                 S      g | ]}|j qS r   r   .0rR   r   r   r   
<listcomp>       z?TestChandrupatlaMinimize.test_vectorization.<locals>.<listcomp>c                 S   rc   r   rO   rd   r   r   r   rf      rg   c                 S   rc   r   successrd   r   r   r   rf      rg   c                 S   rc   r   statusrd   r   r   r   rf      rg   c                 S   rc   r   nfevrd   r   r   r   rf      rg   c                 S   rc   r   nitrd   r   r   r   rf      rg   r   c                 S   rc   r   xlrd   r   r   r   rf      rg   c                 S   rc   r   )xmrd   r   r   r   rf      rg   c                 S   rc   r   xrrd   r   r   r   rf      rg   c                 S   rc   r   flrd   r   r   r   rf      rg   c                 S   rc   r   )fmrd   r   r   r   rf      rg   c                 S   rc   r   frrd   r   r   r   rf      rg   )r   linspacereshape	vectorizer^   r   ravelr   r   r   rP   rO   rD   rj   
issubdtypedtypebool_rl   integerrn   maxrp   rr   rs   ru   rw   rx   rz   )rA   rP   rB   rI   rZ   rQ   refsref_xref_funref_successref_flagref_nfevref_nitref_xlref_xmref_xrref_flref_fmref_frr   ra   r   test_vectorization   sl    z+TestChandrupatlaMinimize.test_vectorizationc                 C   sl   dd }t jdt jdf}t|dgd dgd t jgd |dd}t tjtjtj	tj
g}t|j| d S )	Nc                    4   dd dd dd dd g  fddt | |D S )Nc                 S      | d d S )N      @r   r   r   r   r   r   <lambda>       z@TestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<lambda>c                 S      | d S Nr9   r   r   r   r   r   r          c                 S   r   )Nr   rV   r   r   r   r   r   r      r   c                 S      t jS r>   r   nanr   r   r   r   r          c                       g | ]
\}} | |qS r   r   re   r   jfuncsr   r   rf          zBTestChandrupatlaMinimize.test_flags.<locals>.f.<locals>.<listcomp>zipxsjsr   r   r   rD      s   z.TestChandrupatlaMinimize.test_flags.<locals>.frV   r   r   r   r9   rI   r'   )r   arangeint64r   piarrayeim_ECONVERGED	_ESIGNERR	_ECONVERR
_EVALUEERRr   rl   rA   rD   rI   rQ   	ref_flagsr   r   r   
test_flags   s    z#TestChandrupatlaMinimize.test_flagsc                 C   s  t jd}|jdd}d}|f}t|ddddd}| }d|d< t| jg|R i |}t|j|j	 }t
|d	|d   d
|d< t| jg|R i |}	t|	j|	j	 }
t
|
d	|d   t
|
| | }d|d< t| jg|R i |}t|j|j	 }t
|d	|d  t|j  d
|d< t| jg|R i |}	t|	j|	j	 }
t
|
d	|d  t|	j  t
|
| | }d|d< t| jg|R i |}t|jd|j  |j }t
|d|d   d
|d< t| jg|R i |}	t|	jd|	j  |	j }t
|d|d   t
|| | }d|d< t| jg|R i |}t|jd|j  |j }t
|d|d  t|j  d
|d< t| jg|R i |}	t|	jd|	j  |	j }t
|d|d  t|	j  t
|| d S )N   FA92 r   sizerG   r   r   r   rI   xatolxrtolfatolfrtolMbP?r   rV   rJ   r   r   r   r   )r   randomdefault_rngdictcopyr   rD   absru   rr   r   r   rw   rx   rz   rO   )rA   rngpbracketrI   kwargs0r`   res1j1res2j2h1h2r   r   r   test_convergence   sZ   


z)TestChandrupatlaMinimize.test_convergencec                    s.  dd dt jg R fd}t|jrJ t|jd ks(J t|jks2J  fddtj_	tj_
d_d _t jg R fd	}| D ]8}|d
kr|| tjkskJ j| tjksuJ || tjks~J q\|| j|   kr|| ksJ  J q\d S )N~,?r   r   r   r   c                    s   j d7  _ | _t| dsJ j dkr#| j| j| jf ks"J n!| jjk| jjk@ }| jjk| jjk@ }t||B sDJ | j_| j_| jt	j
ksTJ t| j| j t| j| j t| j| j t| j| j j krtd S Nr
   r   r   )iterrQ   hasattrrr   rs   ru   r   allrl   r   _EINPROGRESSr   rD   rw   rx   rz   r   rO   StopIteration)rQ   
changed_xr
changed_xlr   callbackrB   r'   rA   r   r   r   %  s$   

z@TestChandrupatlaMinimize.test_maxiter_callback.<locals>.callbackr,   rI   r   rl   )r   rD   r   anyrj   r   rn   rp   r   rr   ru   r   rQ   keysr   r   r   
_ECALLBACKrA   rQ   r   keyr   r   r   test_maxiter_callback  s0   ,z.TestChandrupatlaMinimize.test_maxiter_callbackcasec              
   C   sf   |\}}}d}|| }t |||\}}}}}	}
d}d}d}d}t||||||||d}t|j| d S )Ng?g-C6?rJ   gؗҜ<)r   r   r   r   )r+   r   r   rp   )rA   r   r#   r$   rp   r(   r%   r*   r   r   r   r   r   r   r   rQ   r   r   r   test_nit_expectedM  s   
z*TestChandrupatlaMinimize.test_nit_expectedg?gffffff?r   c                    sf    |} fdd}t | d d d|fd}|jj ks"J t|j|tt jd d S )Nc                    s    | j  ksJ | | d  S )Nr   )r   astype)r   rB   r   r   r   rD   j  s   z.TestChandrupatlaMinimize.test_dtype.<locals>.fr
   r   rH   rK   )r   r   r   r   r   sqrtfinfoeps)rA   rB   r   rD   rQ   r   r   r   
test_dtypec  s   "z#TestChandrupatlaMinimize.test_dtypec                 C   s  d}t jt|d td ddd W d    n1 sw   Y  d}t jt|d tdd d	dd W d    n1 s=w   Y  d
}t jt|d tdd ddgddgg d W d    n1 sew   Y  d}t jt|d tdd ddgddgddg W d    n1 sw   Y  d}t jt|d tdd ddddd W d    n1 sw   Y  t jt|d tdd dddtjd W d    n1 sw   Y  t jt|d tdd ddddd W d    n1 sw   Y  t jt|d tdd dddtjd W d    n	1 sw   Y  d}t jt|d tdd ddddd  W d    n	1 s?w   Y  t jt|d td!d ddddd  W d    n	1 sbw   Y  d"}t jt|d td#d dddd$d% W d    d S 1 sw   Y  d S )&N`func` must be callable.matchr0   r   rV   3Abscissae and function output must be real numbers.c                 S      | S r>   r   r   r   r   r   r   |      z@TestChandrupatlaMinimize.test_input_validation.<locals>.<lambda>            ?+shape mismatch: objects cannot be broadcastc                 S   r   r>   r   r   r   r   r   r     r   r.   r   r   rV   r   z:The shape of the array returned by `func` must be the samec                 S      | d | d | d gS Nr   r
   r   r   r   r   r   r         r   (Tolerances must be non-negative scalars.c                 S   r   r>   r   r   r   r   r   r     r   r,   r   c                 S   r   r>   r   r   r   r   r   r     r   r   c                 S   r   r>   r   r   r   r   r   r     r   ekkir   c                 S   r   r>   r   r   r   r   r   r     r   r   )`maxiter` must be a non-negative integer.c                 S   r   r>   r   r   r   r   r   r     r         ?r'   c                 S   r   r>   r   r   r   r   r   r     r   `callback` must be callable.c                 S   r   r>   r   r   r   r   r   r     r   	shrubberyr   )pytestraises
ValueErrorr   r   r   rA   messager   r   r   test_input_validations  sT    $z.TestChandrupatlaMinimize.test_input_validationc                 C   s   t dddd d t jf }t ttg dj}t| jg|R d|fi}t 	t 
|j||j| ||kB s<J |jd d df }tt |jj|ddi d S )	Nr,   r
   r   r   rI   r   rL   gV瞯<)r   r{   newaxisr   listr	   Tr   rD   r   iscloser   rO   r   broadcast_arrays)rA   rB   bracketsrQ   rR   r   r   r   test_bracket_order  s   *z+TestChandrupatlaMinimize.test_bracket_orderc              
   C   s  dd }t jdd t|dddddd}W d    n1 sw   Y  |js)J t|jd	d
d t|jd dd }t|d	d	d	}|jsGJ t|jd	 dd }d}t|g|R ddi}|jshJ |j	|k|j
dksoJ |jdksvJ |jdks}J |jdksJ dd }t|ddd	dd}t|jd dd }t|dd	t jddddd}|jsJ |j|j  k r|j	k sJ  J ||j||j  kr||j	ksJ  J d S )Nc                 S   s    t | jt js
J | d d S )Nr
   r   r   r   r   floatingr   r   r   r   rD        z6TestChandrupatlaMinimize.test_special_cases.<locals>.fignoreinvalidr   r   )r   r   r
   r   rK   c                 S   r   Nr
   r   r   r   r   r   r   rD        c                 S   r   r  r   r   r   r   r   rD     r  )r   皙?r   r'   r   r.   r  c                 S   s   | | d d S Nr   r
   r   r   cr   r   r   rD     r   r,   UUUUUU?rH   c                 S   s   t |  S r>   )r   sinr   r   r   r   rD     r  )r   r   r   r   )r   errstater   rj   r   r   r   rO   rr   ru   rp   rn   rl   r   rs   rA   rD   rQ   r   r   r   r   test_special_cases  s:   


"2z+TestChandrupatlaMinimize.test_special_casesN)__name__
__module____qualname__rD   r  markparametrizer   r{   rS   tupler   r   r   r   casesr   float16float32float64r   r  r  r!  r   r   r   r   r=   r   s"    
	
L44
)	r=   c                	   @   s   e Zd Zdd Zejddedddgdd	 Z	ejd
e
 dddgdd Zdd Zdd Zdd Zejdedd Zejddddgfejdejejejfdd Zdd  Zd!d" Zd#S )$TestChandrupatlac                 C   s   t j|| S r>   )r   r?   cdf)rA   qr   r   r   r   rD     r   zTestChandrupatla.fr   rE   r<   rF   r9   c                 C   sH   t | jdd|fd}t |}tj|j| |jj	|j	ks"J d S NrG   r   rH   )
_chandrupatla_rootrD   r   r?   ppfr   rN   r   r   rP   )rA   r   rQ   rR   r   r   r   rS     s   zTestChandrupatla.test_basicrP   rT   rU   rW   c              
      s  |rt ddd|nd}|f}t jfdd} fdd d	 _t d
d|d}|| }dd |D }t|j | t	|jj
| dd |D }t|j | t	|jj
| t	|jj|jg|R   dd |D }	t	|j |	 t	|jj
| t |jjt jsJ dd |D }
t	|j |
 t	|jj
| t |jjt jsJ dd |D }t	|j | t	t |j j t	|jj
|jj
 t |jjt jsJ dd |D }t	|j | t	t |j jd  t	|jj
|jj
 t |jjt jsJ dd |D }t|j | t	|jj
| dd |D }t|j | t	|jj
| t|j|j t |j}t |j| |j| k|j| |j| kB s^J dd |D }t|j | t	|jj
| t|jj|jg|R   dd |D }t|j | t	|jj
| t|jj|jg|R   t t |j| t t |j| t |j| ksJ d S )Nr<   rF   r8   rE   c                    s   t  jdd| fdS r/  )r0  rD   )r   rY   r   r   rZ     s   z@TestChandrupatla.test_vectorization.<locals>.chandrupatla_singlec                     r[   r\   r]   r_   ra   r   r   rD     rb   z.TestChandrupatla.test_vectorization.<locals>.fr   rG   r   rH   c                 S   rc   r   r   rd   r   r   r   rf     rg   z7TestChandrupatla.test_vectorization.<locals>.<listcomp>c                 S   rc   r   rh   rd   r   r   r   rf     rg   c                 S   rc   r   ri   rd   r   r   r   rf     rg   c                 S   rc   r   rk   rd   r   r   r   rf     rg   c                 S   rc   r   rm   rd   r   r   r   rf     rg   c                 S   rc   r   ro   rd   r   r   r   rf     rg   r   c                 S   rc   r   rq   rd   r   r   r   rf     rg   c                 S   rc   r   rt   rd   r   r   r   rf      rg   c                 S   rc   r   rv   rd   r   r   r   rf   )  rg   c                 S   rc   r   ry   rd   r   r   r   rf   .  rg   )r   r{   r|   r}   r^   r0  r~   r   r   r   rP   rO   rD   rj   r   r   r   rl   r   rn   r   rp   rr   ru   r   isfiniter   rw   rz   r   minimum)rA   rP   r   rI   rZ   rQ   r   r   r   r   r   r   r   r   r   finiter   r   r   ra   r   r     sr   z#TestChandrupatla.test_vectorizationc                 C   sd   dd }t jdt jdf}t|dgd t jgd |dd}t tjtjtj	tj
g}t|j| d S )Nc                    r   )Nc                 S   r   )Nr   r   r   r   r   r   r   ;  r   z8TestChandrupatla.test_flags.<locals>.f.<locals>.<lambda>c                 S   r   r   r   r   r   r   r   r   <  r   c                 S   r   )Ng?r   r   r   r   r   r   r   =  r   c                 S   r   r>   r   r   r   r   r   r   >  r   c                    r   r   r   r   r   r   r   rf   ?  r   z:TestChandrupatla.test_flags.<locals>.f.<locals>.<listcomp>r   r   r   r   r   rD   :  s   z&TestChandrupatla.test_flags.<locals>.frV   r   r   r   r   )r   r   r   r0  r   r   r   r   r   r   r   r   rl   r   r   r   r   r   7  s    zTestChandrupatla.test_flagsc                 C   s  t jd}|jdd}d}|f}t|ddddd}| }d|d< t| jg|R i |}t|j|j	 d d	|d< t| jg|R i |}t|j|j	 d	 t|j|j	 |j|j	  | }d|d
< t| jg|R i |}t|j|j	 dt 
|j  d	|d
< t| jg|R i |}t|j|j	 d	t 
|j  t|j|j	 |j|j	  | }d|d< t| jg|R i |}tt 
|jd d	|d< t| jg|R i |}tt 
|jd	 tt 
|jt 
|j | }d|d< |\}	}
t t
| j|	g|R  t
| j|
g|R  }t| jg|R i |}tt 
|jd|  d	|d< t| jg|R i |}tt 
|jd	|  tt 
|jt 
|j d S )Nr   r   r   rG   r   r   r   r   r   rJ   r   r   r   )r   r   r   r   r   r0  rD   r   ru   rr   r   r   rO   r3  )rA   r   r   r   rI   r   r`   r   r   r$   r%   f0r   r   r   r   J  sN   0z!TestChandrupatla.test_convergencec                    s>  dd dfddd _ d _tg R fd}t|jr'J t|jd ks3J t|jks=J  fdd	d
_	d _
d _d _tg R fd}| D ]8}|dkr|| tjkssJ j
| tjks}J || tjksJ qd|| j
|   kr|| ksJ  J qdd S )Nr   r5  r   c                    s"   t  | | }|  _| _|S r>   )r   r?   r-  r   rO   )r.  r   rQ   )rD   r   r   rD   ~  s   z1TestChandrupatla.test_maxiter_callback.<locals>.fr   r   c                    s    j d7  _ | _t| dsJ j dkr!| j| jf ks J n| jjk| jjk@ | jjk| jjk@ B }t|s@J | j_| j_| jtj	ksPJ t
| j| j t
| j| j t
| j| j j krxtd S r   )r   rQ   r   rr   ru   r   r   rl   r   r   r   rD   rw   rz   r   rO   r   )rQ   changed)r   r   r'   r   rA   r   r   r     s$   

z8TestChandrupatla.test_maxiter_callback.<locals>.callbackr,   r   rl   )r   rO   r0  r   r   rj   r   rn   rp   r   rQ   rr   ru   r   r   r   r   r   r   r   )r   r   rD   r'   r   rA   r   r   x  s6   ,z&TestChandrupatla.test_maxiter_callbackr   c                 C   sL   |\}}}}}t |g|R ddd}t|j||ddd t|j| d S )Ng|=gh㈵>)r   r   g:0yE>gMb`?)rL   rM   )r0  r   rO   r   rn   )rA   r   rD   r   rootnfevalidrQ   r   r   r   r     s   z"TestChandrupatla.test_nit_expectedr8  gCl?gV-?r   c                    sn    |} fdd}t | d d|fdd}|jj ks J tj|j|dds3t|jdks5J d S d S )	Nc                    s   | | d   S )Nr   )r   )r   r8  r   r   r   rD     r   z&TestChandrupatla.test_dtype.<locals>.fr   r   r   )rI   r   )rM   r   )r0  r   r   r   allcloser   rO   )rA   r8  r   rD   rQ   r   r   r   r     s   .zTestChandrupatla.test_dtypec                 C   s   d}t jt|d td dd W d    n1 sw   Y  d}t jt|d tdd dd W d    n1 s;w   Y  d	}t jt|d td
d ddgg d W d    n1 s`w   Y  d}t jt|d tdd ddgddg W d    n1 sw   Y  d}t jt|d tdd dddd W d    n1 sw   Y  t jt|d tdd ddtjd W d    n1 sw   Y  t jt|d tdd dddd W d    n1 sw   Y  t jt|d tdd ddtjd W d    n	1 sw   Y  d}t jt|d tdd dddd W d    n	1 s2w   Y  t jt|d td d dddd W d    n	1 sTw   Y  d!}t jt|d td"d ddd#d$ W d    d S 1 syw   Y  d S )%Nr   r   r0   rV   r   c                 S   r   r>   r   r   r   r   r   r     r   z8TestChandrupatla.test_input_validation.<locals>.<lambda>r   r   c                 S   r   r>   r   r   r   r   r   r     r   r.   r   r   z,The shape of the array returned by `func`...c                 S   r   r   r   r   r   r   r   r     r   r   r   c                 S   r   r>   r   r   r   r   r   r     r   r,   r   c                 S   r   r>   r   r   r   r   r   r     r   r   c                 S   r   r>   r   r   r   r   r   r     r   r   r   c                 S   r   r>   r   r   r   r   r   r     r   r   r   c                 S   r   r>   r   r   r   r   r   r     r   r   r   c                 S   r   r>   r   r   r   r   r   r     r   r   c                 S   r   r>   r   r   r   r   r   r     r   r  r  )r  r  r  r0  r   r   r  r   r   r   r    sP   $z&TestChandrupatla.test_input_validationc                 C   s  dd }t |dd}|jsJ t|jd dd }t |dd}|js$J t|jd dd }tjdd	 t |tjtj}W d    n1 sGw   Y  |jsQJ t|jtj d
d }d}t |g|R ddi}|jssJ |j	|k|j
dkszJ |jdksJ |jdksJ |jdksJ t |g|R ddi}|jsJ |jdksJ |j
dksJ |jdksJ t|jd dd }t |dddd}t|jd d S )Nc                 S   s    t | jt js
J | d d S )Nc   r
   r  r   r   r   r   rD     r  z.TestChandrupatla.test_special_cases.<locals>.fr  r   r
   c                 S      | d d S r  r   r   r   r   r   rD     r  c                 S   s   d|  S r\   r   r   r   r   r   rD     s   r  r  c                 S   r=  )Nr   r
   r   r   r   r   r   rD     r  )r   r   r'   r   r   r.   r   r   c                 S   s   ||  d S r\   r   r  r   r   r   rD   )  r  r,   rH   r  )r0  rj   r   r   r   r   r  infrr   ru   rp   rn   rl   r   r   r   r   r!    s>   



z#TestChandrupatla.test_special_casesN)r"  r#  r$  rD   r  r%  r&  r   r{   rS   r'  r   r   r   r   r   r   r)  r*  r+  r   r  r!  r   r   r   r   r,    s     

L.:
(r,  ) r  numpyr   numpy.testingr   r   r   scipyr   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy.optimize._chandrupatlar   r   r0  scipy.optimize._tstutilsr   	itertoolsr	   
test_zerosr   r   r   r   r   r!   r+   r(  r=   r,  r   r   r   r   <module>   s   	
 !"#$%&'()*+,-./01234567;  m