o
    4Bisw                     @   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}n)t t |	| t | }|	|||   |	|||d    }}t||	|d}|r|d	  |d
  |d
< |d	< | | }}d|v r|d |d< |r|r|	 |d< n|	|d< d _t fi |}|s|j	d|j
d    krd jd    krd|d  ksJ  J n%|j	|j
d d   kr	 jd d   kr	|d d ksJ  J t |j|jg}t|||f t |j|jg}t| | |j|jks5J t |}|d |d  ksFJ |jdksNJ |jsTJ d S )N   size)     j@
         c                         j d7  _ | S Nr   countxf a/var/www/html/Trade-python/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_bracket.pyr         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_bracketsignsr   r   r   test_nfev_expected   sH   
$2&FJ
z"TestBracketRoot.test_nfev_expectedc                 C   s   t j|| S N)r   normcdf)r8   qpr   r   r   r   Y      zTestBracketRoot.frH   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'   r5   r3   r4   )r8   rH   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| }}	|rY|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sJ |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 t|jj|jg|R   t|jj|jg|R   d S )N皙?rT   rJ   r   c              
      s   t j| |||||f dS )Nr$   r%   r#   rP   maxiter)r   r   )r!   r"   r$   r%   r#   rH   r[   r8   r   r   bracket_root_singlen   s   z?TestBracketRoot.test_vectorization.<locals>.bracket_root_singlec                     s     j d7  _ j| i |S r   )f_evalsr   )rP   r>   )r   r8   r   r   r   t      z-TestBracketRoot.test_vectorization.<locals>.fr   # r        @@      ?      ?rZ   )r1   r2   r3   r4   r7   r.   r/   c                       g | ]}t | qS r   getattr.0refattrr   r   
<listcomp>       z6TestBracketRoot.test_vectorization.<locals>.<listcomp>r   r&   )r'   linspacereshape	vectorizer^   r(   r)   infr   ravelrf   r   r   rR   
issubdtyper7   dtypebool_allr6   integerr.   r/   maxr   r1   r2   r3   r   r4   )r8   rR   rH   rP   r]   r9   r!   r"   r$   r%   ir#   r?   refsattrsref_attrres_attrr   )rk   r   r[   r8   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                    4   dd dd dd dd g  fddt | |D S )Nc                 S      | d S )Nrc   r   r   r   r   r   <lambda>       z7TestBracketRoot.test_flags.<locals>.f.<locals>.<lambda>c                 S   r   Ni  r   r   r   r   r   r      r   c                 S   r   r   r   r   r   r   r   r      r   c                 S      t jS rD   r'   nanr   r   r   r   r          c                       g | ]
\}} | |qS r   r   rh   r   jfuncsr   r   rl          z9TestBracketRoot.test_flags.<locals>.f.<locals>.<listcomp>zipxsjsr   r   r   r      s   z%TestBracketRoot.test_flags.<locals>.frV   ru   )rn   rn   rn   rn   )r   r   r   r   rn   r   r   )r!   r"   r$   r%   rP   r[   )r'   arangeint64r   rr   arrayeim_ECONVERGEDr   	_ECONVERR
_EVALUEERRr   r6   )r8   r   rP   r?   	ref_flagsr   r   r   
test_flags   s   zTestBracketRoot.test_flagsroot灕Cl?V-?ru   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s=J |jj|jj  krL ksOJ  J |jj|j	j  kr^ ksaJ  J d S )Nc                       | | d   S )Nr   astype)r   r   r   r   r   r         z%TestBracketRoot.test_dtype.<locals>.frN   rO   r   )r$   r%   rP   )
r'   r0   r   rw   r7   r1   ru   r2   r3   r4   )r8   r   r$   r%   ru   r   r@   r?   r   r   r   
test_dtype   s   $(zTestBracketRoot.test_dtypec                 C   sx  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  t jt|d td	d dd
 W d    n1 sZw   Y  t jt|d tdd ddtd W d    n1 s{w   Y  t jt|d tdd ddt d W d    n1 sw   Y  t jt|d tdd ddtd W d    n1 sw   Y  d}t jt|d tdd dddd W d    n1 sw   Y  d}t jt|d tdd dd W d    n	1 sw   Y  t jt|d tdd ddtjd W d    n	1 s&w   Y  t jt|d tdd dddd W d    n	1 sHw   Y  d}t jt|d tdd ddgg d W d    n	1 snw   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d#d! W d    d S 1 sw   Y  d S )$N`func` must be callable.matchrV   ...must be numeric and real.c                 S      | S rD   r   r   r   r   r   r          z7TestBracketRoot.test_input_validation.<locals>.<lambda>y            ?c                 S   r   rD   r   r   r   r   r   r      r   helloc                 S   r   rD   r   r   r   r   r   r      r   r$   c                 S   r   rD   r   r   r   r   r   r      r   r%   c                 S   r   rD   r   r   r   r   r   r      r   r#   0All elements of `factor` must be greater than 1.c                 S   r   rD   r   r   r   r   r   r      r   rb   z(`xmin <= xl0 < xr0 <= xmax` must be Truec                 S   r   rD   r   r   r   r   r   r      r   c                 S   r   rD   r   r   r   r   r   r      r   c                 S   r   rD   r   r   r   r   r   r      r   r   +shape mismatch: objects cannot be broadcastc                 S   r   rD   r   r   r   r   r   r      r   )r   rV   r   )`maxiter` must be a non-negative integer.c                 S   r   rD   r   r   r   r   r   r      r   rc   )r[   c                 S   r   rD   r   r   r   r   r   r      r   rn   )pytestraises
ValueErrorr   r'   objectsumr   r8   messager   r   r   test_input_validation   sZ   $z%TestBracketRoot.test_input_validationc                    s  dd  t  dd}|jsJ dd  d}t  g|R ddi}|js*J |j|k|jdks1J |jd	ks8J |jd
ks?J dd  t  dddd}|jsPJ 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 sw   Y  |j|jf}t|d ddd tjdd t  dddd}W d    n1 sw   Y  |j|jf}t|d ddd tjdd t  dddd}W d    n	1 sw   Y  |jrJ d S )Nc                 S       t | jt js
J | d d S )Nc   r   r'   rt   ru   floatingr   r   r   r   r         z-TestBracketRoot.test_special_cases.<locals>.fr   c                 S   r   )Nr   r   r   r   r   r   r      s   )r   r   r[   r   r&   r   c                 S   s   ||  d S r   r   r   cr   r   r   r        rn   r   r   rP   c                    r   r   r   r   r   r   r   r     r    i   r   r   rV   )r   r   gV瞯<)atolignore)overr   rL   r   )r   r7   r1   r2   r/   r.   r6   r   r3   r   r   r'   errstate)r8   r?   r@   r   r   r   test_special_cases   sJ   

z"TestBracketRoot.test_special_cases)__name__
__module____qualname__r   markparametrizerC   r   r'   ro   rQ   tupler   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  r_   z$TestBracketMinimum.init_f.<locals>.fr   r   )r8   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 rD   )r'   rw   r1   xmr2   r3   fmr4   )r8   resultr   r   r   assert_valid_bracket7  s   z'TestBracketMinimum.assert_valid_bracketNr   )r!   r"   r#   r$   r%   rP   c             	   C   s$   d}dd t |||||||fD S )Nr!   r"   r$   r%   r#   rP   c                 S   s4   i | ]\}}t |tjst|s|d vr||qS ))Nr   )
isinstancer'   ndarrayisscalar)rh   namevalr   r   r   
<dictcomp>D  s    
z1TestBracketMinimum.get_kwargs.<locals>.<dictcomp>r   )r8   r!   r"   r#   r$   r%   rP   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rh||| |	|d     n|
}|d |d kr|d7 }||| |	|    ||}}}nUd }tt t || t |	 }|||	|   }|dkr|||	|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s'J |j	|jks0J |j
|ks8J t |j|j|jg}t||||f t |j|j|jg}t|||g|R   | | |jd
ksnJ |jstJ d S )Nr   r   rV   r   )r   r   r   r   r   r   r&   r   r   r   )r'   r(   r)   intr*   r+   r   r   r   r.   r/   r   r0   r1   r   r2   r   r3   r   r4   r   r6   r7   )r8   r
   r   r   r9   rP   r!   d1d2r#   xm0r"   r$   r;   lowermiddleupperr   r%   r>   r   r@   rA   r   r   r   rC   J  s\   (&
"  

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                    r   )Nc                 S   s   | d d S )Nrc   r&   r   r   r   r   r   r     s    z:TestBracketMinimum.test_flags.<locals>.f.<locals>.<lambda>c                 S   r   rD   r   r   r   r   r   r     r   c                 S   r   rD   r   r   r   r   r   r     r   c                 S   r   rD   r   r   r   r   r   r     r   c                    r   r   r   r   r   r   r   rl     r   z<TestBracketMinimum.test_flags.<locals>.f.<locals>.<listcomp>r   r   r   r   r   r     s   z(TestBracketMinimum.test_flags.<locals>.frV   r                       ?r   )r!   r"   r$   rP   r[   )r'   r   r   fullr   rr   r   r   r   r   r   r   r   r6   )r8   r   rP   r!   r   r"   r   reference_flagsr   r   r   r     s   (

zTestBracketMinimum.test_flagsminimumr   r   ru   r$   rL   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rT|	jj  krT ksWJ  J |	j	j|	j
j  krm|	jj  krm kspJ  J d S )Nc                    r   Nr&   r   )r   r   r   r   r   r     r   z)TestBracketMinimum.test_dtypes.<locals>.f)rN   r   rO   r   )r!   r"   r$   r%   rP   )r'   r   r   rw   r7   r1   ru   r   r2   r3   r   r4   )
r8   r   r$   r%   ru   r   r!   r   r"   r   r   r   r   test_dtypes  s   26zTestBracketMinimum.test_dtypesc                 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	 W d    n1 s;w   Y  t jt|d td
d ddd W d    n1 s[w   Y  t jt|d tdd dtd W d    n1 s{w   Y  t jt|d tdd dt d W d    n1 sw   Y  t jt|d tdd dtd W d    n1 sw   Y  d}t jt|d tdd ddd W d    n1 sw   Y  d}t jt|d tdd ddd W d    n	1 sw   Y  t jt|d tdd ddd W d    n	1 s"w   Y  t jt|d tdd dddd W d    n	1 sDw   Y  t jt|d tdd ddd d W d    n	1 sfw   Y  t jt|d td!d dtj d W d    n	1 sw   Y  t jt|d td"d dtjd W d    n	1 sw   Y  d#}t jt|d td$d ddgg d%d 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d+d) W d    d S 1 sw   Y  d S ),Nr   r   r   rV   )r!   r   c                 S      | d S r   r   r   r   r   r   r     r   z:TestBracketMinimum.test_input_validation.<locals>.<lambda>y      @      ?c                 S   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   c                 S   r   r   r   r   r   r   r   r     r   r   r   c                 S   r   rD   r   r   r   r   r   r     r   rb   z.`xmin <= xl0 < xm0 < xr0 <= xmax` must be Truec                 S   r   r   r   r   r   r   r   r     r      c                 S   r   r   r   r   r   r   r   r     r   ir"   c                 S   r   r   r   r   r   r   r   r     r   r   r   )r!   r"   c                 S   r   r   r   r   r   r   r   r     r   rL   c                 S   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   rL   r   c                 S   r   r   r   r   r   r   r   r     r   rc   )r"   r[   c                 S   r   r   r   r   r   r   r   r     r   rn   )r   r   r   r   r'   r   r   r   r   r   r   r   r     sl   $z(TestBracketMinimum.test_input_validationr!   r   r   )rK   皙?g333333?r"   )皙?皙?rJ   NrP   ))rM   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s!J |js&J |j|jks.J d S )Nr!   r"   rP   r   r   r   r   r   r6   r7   r.   r   )r8   r!   r   r"   rP   r   r>   r   r   r   r   test_scalar_no_limits  s   

z(TestBracketMinimum.test_scalar_no_limitszxl0,xm0,xr0,xmin))rb         ?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   b   |   }| j||||d}t||fi |}| | |jdks"J |js'J |j|jks/J d S )N)r!   r"   r$   rP   r   r   )	r8   r!   r   r"   r$   rP   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   )rK   333333?r   r   )皙ɿ皙r   r   )3333335333331gffffff,r   )r   r	  Nr   )rK   r
  Nr   )r  r  Nr   )r  r  Nr   ))g?r   )g?r   )gffffff?r   )rb   r   c           	      C   r  )N)r!   r"   r%   rP   r   r   )	r8   r!   r   r"   r%   rP   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   )rV         @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 s)J |	j|jks1J d S )N)r"   r$   r%   rP   rn   r   )r   r   r   r6   r1   r2   r.   r   )
r8   r!   r   r"   r$   r%   rP   r   r>   r   r   r   r   test_minimum_at_boundary_pointN  s   ]z1TestBracketMinimum.test_minimum_at_boundary_pointrR   rS   rU   rW   c                    s2  |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| qt |jjt jsJ |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 )NrX   rY   rT   rJ   r   r   c                    s"   t  | ||||| |dfd	S )Nr   )r!   r"   r$   r%   r#   r[   rP   )r   r   )r   r!   r"   r$   r%   r#   r   r\   r   r   bracket_minimum_single  s   zETestBracketMinimum.test_vectorization.<locals>.bracket_minimum_singler`   r   ra   rb   rc   )r!   r"   r$   r%   r#   rP   r[   )	r1   r   r2   r3   r   r4   r7   r.   r/   c                    rd   r   re   rg   rj   r   r   rl     rm   z9TestBracketMinimum.test_vectorization.<locals>.<listcomp>r   rn   r   ) r'   ro   rp   rq   r   r(   r)   rr   r   rs   rf   r   r   rR   rt   r7   ru   rv   rw   r6   rx   r.   r/   ry   r   r   r3   r1   r   r   r4   r2   )r8   rR   r   rP   r  r   r9   r!   r"   r   r$   r%   rz   r#   r?   r{   r|   r}   r~   r   )rk   r[   r8   r   r     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sgJ t|j|j|jg|||g t|j|j
|jg||g|R  ||g|R  ||g|R  g d S )Nc                 S   r   )Nb   r   r   r   r   r   r   r     r   z0TestBracketMinimum.test_special_cases.<locals>.fr   r   r   c                 S   s   | d d S )Nr&   r   r   r   r   r   r   r     r   )r   rn   r&   r   )r!   r"   r[   c                 S   s   || d  d S )Nr&   r   r   r   r   r   r   r     rI   rn   r   r   )r   r  r   r   r   )r   r7   r   r1   r   r2   r   r3   r   r   r   r4   )r8   r   r   r!   r   r"   rP   r   r   r   r     s0   


,z%TestBracketMinimum.test_special_cases)r   r   r   r   r   r   r   r   r   rC   r   r'   r   r   r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   /  sf    

E0				
\
/r   )r   numpyr'   numpy.testingr   r   r   scipy.optimize._bracketr   r   r   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipyr   r	   r   r   r   r   r   <module>   s      '