o
    4Bi<                     @   sd   d dl Z d dlZd dlmZmZmZ d dlm  m	Z
 d dlmZ d dlmZmZ G dd dZdS )    N)assert_array_lessassert_allcloseassert_equal)stats)_differentiate_EERRORINCREASEc                	   @   sL  e Zd Zdd Zejddedddgdd	 Z	ejd
e
jjdd Zejdddgejde dddgdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zejd&d'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/d0 Zejjejd
d1d2 dfd3d2 dffd4d5 Zd6S )7TestDifferentiatec                 C   s   t  |S N)r   normcdf)selfx r   g/var/www/html/Trade-python/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_differentiate.pyf   s   zTestDifferentiate.fr   333333?皙?
   c                 C   sV   t | j|}t |}tj|j| t	t
|j| |j |jj|jks)J d S r	   )differentiater   r   r
   pdfnptestingr   dfr   abserrorr   shape)r   r   resrefr   r   r   
test_basic   s
   zTestDifferentiate.test_basiccasec                 C   sL   |\}}t t|| }| d }t|j|}||}t|j|dd d S )Ng?绽|=atol)getattrr   medianr   r   r   r   r   )r   r    distnameparamsdistr   r   r   r   r   r   test_accuracy   s   
zTestDifferentiate.test_accuracyorder      r   )   )      )r.      r0   c                    s6  |rt ddd|nd}t |t jfdd} fdd d	 _d
 _t |d}|| }dd |D }t	|j
 | t|j
j| dd |D }t	|j | t|jj| dd |D }	t	|j |	dd t|jj| 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 t|jj|j
j t |jjt jsJ d S )Nr   r   r-   r   c                    s   t j|  dS )Nr*   )r   r   r   )r*   r   r   r   _differentiate_single,   s   zCTestDifferentiate.test_vectorization.<locals>._differentiate_singlec                    sR     j d7  _   j| jks| jdkrdn| jd 7  _j| g|R i |S )Nr+   )nitfevalsizendimr   r   )r   argskwargs)r   nr   r   r   r   0   s   ,z/TestDifferentiate.test_vectorization.<locals>.fr4   r   r1   c                 S      g | ]}|j qS r   r2   .0r   r   r   r   
<listcomp>:       z8TestDifferentiate.test_vectorization.<locals>.<listcomp>c                 S   r<   r   )r   r=   r   r   r   r?   >   r@   c                 S   r<   r   )r   r=   r   r   r   r?   B   r@   +<r"   c                 S   r<   r   )successr=   r   r   r   r?   F   r@   c                 S   r<   r   )statusr=   r   r   r   r?   K   r@   c                 S   r<   r   )nfevr=   r   r   r   r?   P   r@   c                 S   r<   r   )r5   r=   r   r   r   r?   V   r@   )r   linspacereshaper7   	vectorizer5   r6   r   ravelr   r   r   r   r   r   rB   
issubdtypedtypebool_rC   integerrD   max)r   r*   r   r   r3   r   refsref_xref_df	ref_errorref_successref_flagref_nfevref_nitr   )r   r;   r*   r   r   test_vectorization$   sH   
z$TestDifferentiate.test_vectorizationc                    sr   t jd fdd d _t jdt jdf}t dgd dd	|d
}t tj	t
tjtjg}t|j| d S )N   ;O c                    sN    j d7  _ dd fdddd dd g  fddt| | D }|S )	Nr+   c                 S   s   | d S )N      @r   r2   r   r   r   <lambda>b       z9TestDifferentiate.test_flags.<locals>.f.<locals>.<lambda>c                    s   t |    S r	   )r   exprandomr2   rngr   r   rY   c   r@   c                 S   s
   t | S r	   )r   r[   r2   r   r   r   rY   d   s   
 c                 S   s   t | t jd S )Nr   )r   	full_likenanr2   r   r   r   rY   e   r@   c                    s   g | ]
\}} | |qS r   r   )r>   r   jfuncsr   r   r?   f   s    z;TestDifferentiate.test_flags.<locals>.f.<locals>.<listcomp>)r5   ziprH   )xsjsr   r   r^   rb   r   r   `   s   
z'TestDifferentiate.test_flags.<locals>.fr   r/   rJ   r+   +=r0   )rtolr*   r9   )r   r\   default_rngr5   arangeint64r   arrayeim_ECONVERGEDr   	_ECONVERR
_EVALUEERRr   rC   )r   r9   r   	ref_flagsr   rg   r   
test_flags\   s   zTestDifferentiate.test_flagsc                    sR   t jd  fdd}t|ddddd}t tjttjtj	g}t
|j| d S )	NrW   c                    s2   | d t |    t | t | t jd gS )NrX   r   )r   r[   r\   r_   r`   r2   r]   r   r   r   v   s
   z6TestDifferentiate.test_flags_preserve_shape.<locals>.fr+   ri   r0   T)rj   r*   preserve_shape)r   r\   rk   r   rn   ro   rp   r   rq   rr   r   rC   )r   r   r   rs   r   r]   r   test_flags_preserve_shapes   s   z+TestDifferentiate.test_flags_preserve_shapec              	   C   s   dd }d}ddt d|  ddt d|   dt d|  |d d  dt d|  |d   g}t||d	d
}t|j| d S )Nc                 S   s:   | t d|  | t d|   t d|  | d d  gS )Nr.   r      r+   r0   )r   sinr2   r   r   r   r      s   :z0TestDifferentiate.test_preserve_shape.<locals>.fr   r+   r.   r   rw   r0   Tru   )r   cosrx   r   r   r   )r   r   r   r   r   r   r   r   test_preserve_shape   s   &6z%TestDifferentiate.test_preserve_shapec           	      C   sF  t  }d}|j}||}tdddd}| }d|d< t||fi |}tt|j	| d d|d< t||fi |}tt|j	| d tt|j	| t|j	|  | }d|d< t||fi |}tt|j	| dt
|  d|d< t||fi |}tt|j	| dt
|  tt|j	| t|j	|  d S )	Nr+   r   r/   )r#   rj   r*   gMbP?r#   gư>rj   )r   r
   r   r   dictcopyr   r   r   r   r   )	r   r(   r   r   r   kwargs0r:   res1res2r   r   r   test_convergence   s*   
"z"TestDifferentiate.test_convergencec           	      C   s  t  }d}|j}||}t||ddd}t||ddd}t|j| t|j| k s.J t||ddd}t||ddd}t|j| t|j| k sNJ tddd	d
}t||fddd|}t||fddd|}t|j|jdd tdddd
}t||fddd|}t||fdt	
d dd|}t|j|jdd d|d< t||fddd|}t||fdt	
d dd|}t|j|jdd d S )Nr+   g      ?)initial_stepmaxiterg?r0   )step_factorr   rw   r/   r   )r*   r   step_direction)r   r   rA   rj   r4   r   )r   r
   r   r   r   r   r   r|   r   r   sqrt)	r   r(   r   r   r   r   r   r:   r   r   r   r   test_step_parameters   s4   
  z&TestDifferentiate.test_step_parametersc                 C   sl   dd }t ddd}t |}d\||dk < ||dk< t|||d	}t|jt | t |js4J d S )
Nc                 S   s$   t | }t j|| dk | dk < |S )Nr   r0   )r   r[   r`   )r   yr   r   r   r      s   
z0TestDifferentiate.test_step_direction.<locals>.fr   r0   r   )r+   r4   r   gffffff?)r   )	r   rE   
zeros_liker   r   r   r[   allrB   )r   r   r   r   r   r   r   r   test_step_direction   s   
z%TestDifferentiate.test_step_directionc                 C   s   dd }dd }t g dddd}t g dddd}t d	d
gddd}t||||fd}t ||||jj}t|j| d S )Nc                 S   s   | | S r	   r   r   pr   r   r   r      s   z@TestDifferentiate.test_vectorized_step_direction_args.<locals>.fc                 S   s   || |d   S Nr+   r   r   r   r   r   r      s   zATestDifferentiate.test_vectorized_step_direction_args.<locals>.df)r+   r0   r.   r/   r4   r+   r4   r   r+   r0   r.   )r   r9   )r   rn   rF   r   broadcast_tor   r   r   )r   r   r   r   hdirr   r   r   r   r   r   #test_vectorized_step_direction_args   s   z5TestDifferentiate.test_vectorized_step_direction_argsc                    s(  d}t  dfdd}d}t||dd}t|jr J t|j|d d d	  ks2J t|jks<J  fd
d d _	d  _
t  _t|| dd}| D ]8}|dkr||| tjkshJ  j
| tjksrJ || tjks{J qY||  j
|   kr|| ksJ  J qYd S )Ng~,?r.   c                    s     | }|S r	   )r   )r   r   )r(   r   r   r      s   
z2TestDifferentiate.test_maxiter_callback.<locals>.f   V瞯<)r   rj   r+   r0   c                    sb     j d7  _ |  _t| dsJ | j jvsJ  j| j | jtjks(J  j kr/t	d S )Nr+   r   )
iterr   hasattrr   dfsaddrC   ro   _EINPROGRESSStopIterationr   )callbackr   r   r   r      s   
z9TestDifferentiate.test_maxiter_callback.<locals>.callbackr4   )r   rj   rC   )r   r
   r   r   anyrB   r   rD   r5   r   r   setr   keysro   rq   r   
_ECALLBACK)r   r   r   default_orderr   r   keyr   )r   r(   r   r   test_maxiter_callback   s*   $	,z'TestDifferentiate.test_maxiter_callbackr   r   g?gffffff?rJ   c                    s   t j| dd } fdd} fdd}t||d||d}|jj ks&J |jj ks.J |jj ks6J t  j}t	|jt 
|jt |d	 d S )
Nrh   r   c                    s   | j  ksJ t| S r	   )rJ   r   r[   r2   rh   r   r   r     s   
z'TestDifferentiate.test_dtype.<locals>.fc                    s4   | j j ksJ | jj ksJ | jj ksJ d S r	   )r   rJ   r   r   r   rh   r   r   r     s   z.TestDifferentiate.test_dtype.<locals>.callbackr/   )r*   r   r   r   )r   asarrayr   r   rJ   r   r   finfoepsr   r[   r   )r   r   r   rJ   r   r   r   r   r   rh   r   
test_dtype  s   
"zTestDifferentiate.test_dtypec                 C   sh  d}t jt|d td d W d    n1 sw   Y  d}t jt|d tdd d W d    n1 s9w   Y  d}t jt|d td	d d
dg 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  t jt|d tdd ddd W d    n1 sw   Y  t jt|d tdd dd 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 sw   Y  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d W d    n	1 sEw   Y  t jt|d td d ddd W d    n	1 sfw   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    d S 1 sw   Y  d S ))Nz`func` must be callable.)matchr+   z3Abscissae and function output must be real numbers.c                 S      | S r	   r   r2   r   r   r   rY   1      z9TestDifferentiate.test_input_validation.<locals>.<lambda>y            ?z6When `preserve_shape=False`, the shape of the array...c                 S   s   g dS )N)r+   r0   r.   r   r2   r   r   r   rY   5  rZ   z6Tolerances and step parameters must be non-negative...c                 S   r   r	   r   r2   r   r   r   rY   9  r   r4   r"   c                 S   r   r	   r   r2   r   r   r   rY   ;  r   ekkir   c                 S   r   r	   r   r2   r   r   r   rY   =  r   )r   c                 S   r   r	   r   r2   r   r   r   rY   ?  r   )r   z%`maxiter` must be a positive integer.c                 S   r   r	   r   r2   r   r   r   rY   C  r         ?)r   c                 S   r   r	   r   r2   r   r   r   rY   E  r   r   z"`order` must be a positive integerc                 S   r   r	   r   r2   r   r   r   rY   I  r   r1   c                 S   r   r	   r   r2   r   r   r   rY   K  r   z'`preserve_shape` must be True or False.c                 S   r   r	   r   r2   r   r   r   rY   O  r   herringry   z`callback` must be callable.c                 S   r   r	   r   r2   r   r   r   rY   S  r   	shrubbery)r   )pytestraises
ValueErrorr   object)r   messager   r   r   test_input_validation(  s^   $z'TestDifferentiate.test_input_validationc                    s   dd }t |ddd}|jsJ t|jd tdD ]L d} fd	d}d
  | d   }t ||dtd d}t|j|dd t|jtj	 t ||td d}|jsWJ |j
d
ks^J t|j|dd qdd }t |d
dd}t|jd d S )Nc                 S   s    t | jt js
J | d d S )Nc   r+   )r   rI   rJ   floatingr2   r   r   r   r   Z  s   z/TestDifferentiate.test_special_cases.<locals>.f   r!   r   gl)~IQr,   r   c                    s   d|    S )Nr0   r   r2   r;   r   r   r   k     r0   r+   )r   r*   r   r1   c                 S   s   ||  d S r   r   )r   cr   r   r   r   z  r   r.   )r9   )r   rB   r   r   rangerM   r   r   r   r`   r5   )r   r   r   r   r   r   r   r   test_special_casesU  s$   
	
z$TestDifferentiate.test_special_casesc                 C   s   | d d S )Nr+   r.   r   r2   r   r   r   rY     s    zTestDifferentiate.<lambda>c                 C   s"   t | dk| d d | d d S )Nr+      r.   )r   wherer2   r   r   r   rY     s   " c                 C   s<   d}t |g d|d}t|jsJ t|jd|d d S )NgؗҜ<r   )r   r#   r   r"   )r   r   r   rB   r   r   )r   r    r#   r   r   r   r   test_saddle_gh18811  s   	z%TestDifferentiate.test_saddle_gh18811N) __name__
__module____qualname__r   r   markparametrizer   rE   r   r   _distr_paramsdistcontr)   tuplerV   rt   rv   r{   r   r   r   r   r   float16float32float64r   r   r   xfailr   r   r   r   r   r      s:    


6"(-+

r   )r   numpyr   numpy.testingr   r   r   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodro   scipyr   scipy.optimize._differentiater   r   r   r   r   r   r   r   <module>   s    