
    e!hm                        d dl Z d dlZd dlZd dlmZ d dlmc mZ	 d dl
mZmZmZ d dlmZmZmZ d dlmZmZmZ d dlmZmZmZ d dlmZ eej8                  j;                  d      gZd	Zd
Z ej8                  jC                  de      ej8                  jC                  de        G d d                    Z" G d d      Z#ej8                  jC                  de      ej8                  jC                  de        G d de#                    Z$ej8                  jC                  de      ej8                  jC                  de        G d de#                    Z%y)    N)array_api_compatible)xp_assert_closexp_assert_equalxp_assert_less)is_numpyis_torcharray_namespace)statsoptimizespecial)
derivativejacobianhessian)_EERRORINCREASEskip_xp_backendsz5Array API does not support fancy indexing assignment.z*JAX arrays do not support item assignment.array_api_strict)reasonz	jax.numpyc            	          e Zd Zd Zej
                  j                  dd ej                  ddd      g      d        Z	ej
                  j                  d	      ej
                  j                  d
ej                  j                        d               Zej
                  j                  dddg      ej
                  j                  d e       dddg      d               Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej
                  j                  dd      ej
                  j                  dddd gf      ej
                  j                  d!d"      d#                      Zd$ Zd% Zej
                  j                  d	      ej
                  j:                  ej
                  j                  d
d& dfd' dff      d(                      Zy))*TestDerivativec                 ,    t        j                  |      S Nr   ndtr)selfxs     t/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/differentiate/tests/test_differentiate.pyfzTestDerivative.f   s    ||A    r   333333?皙?
   c                    |j                  d      j                  }t        | j                  |j                  ||            }|j                  t	        j
                         j                  |      |      }t        |j                  |       t        |      s3t        |j                  |j                  |z
        |j                         y y )N      ?dtype)asarrayr&   r   r   r
   normpdfr   dfr   r   abserror)r   r   xpdefault_dtyperesrefs         r   
test_basiczTestDerivative.test_basic   s     

2,,A]!CDjj))!,MjB$ |266#&&3,/; r   T)np_onlycasec                     |\  }} t        t        |      | }|j                         dz   }t        |j                  |      }|j                  |      }t        |j                  |d       y )N皙?绽|=atol)getattrr
   medianr   cdfr)   r   r*   )r   r3   distnameparamsdistr   r/   r0   s           r   test_accuracyzTestDerivative.test_accuracy)   s^      &'wuh'0KKMC1%hhqk%0r   order      shape)         )rF      rH   c                 ,    |r&t        j                  ddd      j                  |      nd}t        j                  |      i t         j                   fd       } fd}dd<   d	d
<   t        ||j                  ||j                              } ||      j                         }|D 	cg c]  }	|	j                   }
}	t        |j                  |j                  d      |j                  |
             |D 	cg c]  }	|	j                   }}	t        |j                  |j                  d      |j                  |             |D 	cg c]  }	|	j                   }}	t        |j                  |j                  d      |j                  |      d       |D 	cg c]  }	t        |	j                         }}	t        |j                  |j                  d      |j                  |             |D 	cg c]!  }	t        j                   |	j"                        # }}	t        |j                  |j"                  d      |j                  |             |D 	cg c]!  }	t        j                   |	j$                        # }}	t        |j                  |j$                  d      |j                  |             t'        |      r#|j)                  |j$                        d
   k(  sJ |D 	cg c]!  }	t        j                   |	j*                        # }}	t        |j                  |j*                  d      |j                  |             t'        |      r$|j)                  |j*                        d   k(  sJ y y c c}	w c c}	w c c}	w c c}	w c c}	w c c}	w c c}	w )Nr    r!   rD   r   c                 4    t        j                  |       S )Nr@   )r   r   )r   r@   r   s    r   _derivative_singlez=TestDerivative.test_vectorization.<locals>._derivative_single<   s    dffau55r   c                     dxx   dz  cc<   dxx   | j                   k(  s| j                  dk  rdn| j                  d   z  cc<    j                  | g|i |S )NnitrA   feval)sizendimrC   r   )r   argskwargsnr   states      r   r   z,TestDerivative.test_vectorization.<locals>.f@   sX    %LAL'NAFFaK166A:aAGGBKON466!-d-f--r   rP   rN   r   rO   r%   rK   rP   g-q=r7   )nplinspacereshaperQ   	vectorizer   r'   float64ravelr   r   r*   r,   boolsuccessr   int32statusnfevr   maxrN   )r   r@   rC   r-   r   rL   r   r/   refsr0   ref_xref_df	ref_errorref_successref_flagref_nfevref_nitrU   rV   s   ``               @@r   test_vectorizationz!TestDerivative.test_vectorization3   s   
 <ABKKtR(007cGGAJ		6 
	6	.
 egBJJq

J;5I!!$**,"&'3''

355%0"**U2CD$()S#&&))

366512::f3EF*./3SYY/	/

399e4bjj6K"	$ 599StCKK(99

3;;6

;8OP489SBHHSZZ(99

3::u5rzz(7KL2673BHHSXX&77

388U3RZZ5IJB<66#((#uW~555045288CGG$55

377E2BJJw4GHB<66#''?eEl222 / ( * 0 : : 8
 6s*   3M3M8M=N6&N&N&&Nc                    t         j                  j                  d      fdd_        j	                  dj
                        f}t        j                  dj                        t        d      d|	      }j                  t        j                  t        t        j                  t        j                  gj                         }t#        |j$                  |       y )
N   ;O c           	          xj                   dz  c_         d fdfdfdg}t        | j                  |d            D cg c]  \  }} |t        |         |       }}}j	                  |      S c c}}w )NrA   c                     | dz
  S Ng      @ r   s    r   <lambda>z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>k   s
    q3w r   c                 H    j                  |       j                         z  S r   )exprandom)r   rngr-   s    r   rt   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>l   s    rvvay5 r   c                 &    j                  |       S r   rv   r   r-   s    r   rt   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>m   s    rvvay r   c                 <    j                  | j                        S r   )	full_likenanr{   s    r   rt   z6TestDerivative.test_flags.<locals>.f.<locals>.<lambda>n   s    r||Arvv6 r   rW   )rN   ziprZ   intstack)	xsjsfuncsr   jr/   r   rx   r-   s	         r   r   z$TestDerivative.test_flags.<locals>.fi   sq    EEQJE&5(68E 14B

2u8M0NO1=5Q=#OCO88C=  Ps   A9r   rG   r%   +=rtolrH   )
tolerancesr@   rS   )rX   rw   default_rngrN   arangeint64r   onesr\   dictr'   eim_ECONVERGEDr   	_ECONVERR
_EVALUEERRr`   r   ra   )r   r-   rS   r/   	ref_flagsr   rx   s    `   @@r   
test_flagszTestDerivative.test_flagse   s     ii##$45	! 		!288	,.BGGARZZG8$(e$4 t- JJ / # # 0 8:xx  A	 	

I.r   c                    t         j                  j                  d      fd}t        |j	                  dj
                        t        d      dd	      }j	                  t        j                  t        t        j                  t        j                  gj                        }t        |j                  |       y )
Nrn   c                     | dz
  j                  |       j                         z  j                  |       j                  | j                        g}j	                  |      S rq   )rv   rw   r}   r~   r   )r   outrx   r-   s     r   r   z3TestDerivative.test_flags_preserve_shape.<locals>.f   sT    s766!9SZZ\)66!9<<266*,C 88C= r   rA   r%   r   r   rH   T)r   r@   preserve_shape)rX   rw   r   r   r'   r\   r   r   r   r   r   r   r`   r   ra   )r   r-   r   r/   r   rx   s    `   @r   test_flags_preserve_shapez(TestDerivative.test_flags_preserve_shape~   s    ii##$45	! BJJq

J;$(e$4 7 JJ / # # 0 8:xx  A	 	

I.r   c                    fd}j                  d      }j                  j                  d      dj                  d|z        z  ddj                  d|z        z  z   dj                  d|z        z  |dz
  dz  z  dj                  d|z        z  |dz
  z  z   g      }t        ||d	      }t	        |j
                  |       y )
Nc                     | j                  d| z        | j                  d| z        z   j                  d| z        | dz
  dz  z  g}j                  |      S )NrF   r"      rA   rH   )sinr   )r   r   r-   s     r   r   z-TestDerivative.test_preserve_shape.<locals>.f   sT    bffQqSk1RVVBqD\>266"Q$<1q3HIC88C= r           rA   rF   r"   r   rH   Tr   )r'   cosr   r   r   r*   )r   r-   r   r   r0   r/   s    `    r   test_preserve_shapez"TestDerivative.test_preserve_shape   s    	! JJrNjj"**Q-266!A#;"RVVBqD\/8IRVVBqD\/1Q3(2Qrvvbd|^QqS5IIK LAd3$r   c                 h   |j                  d|j                        }t        j                  }t	        t
        j                  j                  d            }t        dd      }|j                         }d|d<   t        |||d      }t        |j                  |z
        dk  sJ d	|d<   t        |||d      }t        |j                  |z
        d	k  sJ t        |j                  |z
        t        |j                  |z
        k  sJ |j                         }d|d
<   t        |||d      }t        |j                  |z
        d|z  k  sJ d	|d
<   t        |||d      }t        |j                  |z
        d	|z  k  sJ t        |j                  |z
        t        |j                  |z
        k  sJ y )Nr$   r%   r   )r8   r   gMbP?r8   rG   )r   r@   gư>r   )r'   r\   r   r   floatr
   r(   r)   r   copyr   r+   r*   )	r   r-   r   r   r0   tolerances0r   res1res2s	            r   test_convergencezTestDerivative.test_convergence   s   JJrJ,LLEJJNN2&'* %%'
!
6!Q:Q?477S=!D(((!
6!Q:Q?477S=!D(((477S=!C#$6666 %%'
!
6!Q:Q?477S=!D3J...!
6!Q:Q?477S=!D3J...477S=!C#$6666r   c                    |j                  d|j                        }t        j                  }t	        t
        j                  j                  d            }t        ||dd      }t        ||dd      }t        |j                  |z
        t        |j                  |z
        k  sJ t        ||dd      }t        ||d	d      }t        |j                  |z
        t        |j                  |z
        k  sJ t        d
dd      }t        ||fddd|}t        ||fddd|}t        |j                  |j                  d       t        ddd      }t        ||fddd|}t        ||fdt        j                  d      z  dd|}t        |j                  |j                  d       d|d<   t        ||fddd|}t        ||fdt        j                  d      z  dd|}t        |j                  |j                  d       y )Nr$   r%         ?rA   )initial_stepmaxiterg?rH   )step_factorr   r   rG   r   )r@   r   step_direction)r   r   g+<r   rP   r   )r'   r\   r   r   r   r
   r(   r)   r   r+   r*   r   r   rX   sqrt)	r   r-   r   r   r0   r   r   rT   r/   s	            r   test_step_parametersz#TestDerivative.test_step_parameters   s   JJrJ,LLEJJNN2&'!QS!<!QT1=477S=!C#$6666!QAq9!QB:477S=!C#$6666 Aq;AKCSKFKAGA1GGU3 Aq;AGA1GGATAbggajLcTVTU3#% AGA1GGATAbggajLcTVTU3r   c                    fd}j                  ddd      }j                  |      }d\  ||dk  <   ||dkD  <   t        |||      }t        |j                  j                  |             j                  |j                        sJ y )	Nc                 Z    j                  |       }j                  || dk  | dkD  z   <   |S )Nr   rH   )rv   r~   r   yr-   s     r   r   z-TestDerivative.test_step_direction.<locals>.f   s0    q	A#%66Aq1uQ Hr   r   rH   r"   )rA   rP   r   gffffff?r   )rY   
zeros_liker   r   r*   rv   allr_   )r   r-   r   r   r   r/   s    `    r   test_step_directionz"TestDerivative.test_step_direction   s    	
 KK1b!q);@8q3wC!8An=q	*vvckk"""r   c                    d }d }|j                  |j                  g d      d      }|j                  |j                  g d      d      }|j                  |j                  ddg      d	      }t        ||||f
      }|j                   |||      |j                  j
                        }|j                  ||j                  d      j                        }t        |j                  |       y )Nc                     | |z  S r   rr   r   ps     r   r   z=TestDerivative.test_vectorized_step_direction_args.<locals>.f   s    6Mr   c                     || |dz
  z  z  S NrA   rr   r   s     r   r*   z>TestDerivative.test_vectorized_step_direction_args.<locals>.df   s    qQU|##r   )rA   rH   rF   rG   )rP   rA   rA   rP   r   rA   )rA   rP   rA   rH   rF   )rA   rA   rP   )r   rS   r$   r%   )rZ   r'   r   broadcast_tor*   rC   r&   r   )	r   r-   r   r*   r   hdirr   r/   r0   s	            r   #test_vectorized_step_direction_argsz2TestDerivative.test_vectorized_step_direction_args   s    		$ JJrzz,/<zz"**Z0*=JJrzz1a&):6Ad!>oobAh5jjBJJrN$8$8j9$r   c           	          fd}j                  dj                        }j                  g d      }j                  j                  ddd      d      }t	        |||d	d
|      }j                  |j                   ||      z
        }j                  |d ddf   |d
d df   k        sJ t        |j                  d         D ]A  }t	        ||||df   d	d
|      }	t        |j                  |d d f   |	j                  d       C y )Nc                 &    j                  |       S r   rz   r{   s    r   r   z+TestDerivative.test_initial_step.<locals>.f   s    66!9r   r   r%   r   r   r"   )rP   rA   rH   rA   )r   r@   r   r   rP   .r   r   )r'   r\   rZ   logspacer   r+   r*   r   rangerC   r   )
r   r-   r   r   r   h0r/   errir0   s
    `        r   test_initial_stepz TestDerivative.test_initial_step   s   	 JJrJ,J/ZZB2.8ABa(68ffSVVad]# vvc#2#s(mc!"c'l2333 rxx{# 	>AQ1a41,:<CCFF1a4L#&&u=	>r   c                   	 |j                  d|j                        }d	d }d}t        ||	t        d            }|j	                  |j
                        rJ |j                  |j                  |d	z   	d	z
  d
z  z   k(        sJ |j                  |j                  	k(        sJ 	fdd_	        d _
        t               _        t        ||t        d            }|j                         D ][  }|dk(  r1||   t        j                  k(  sJ ||   t        j                   k(  r7J ||   j                  |   cxk(  r
||   k(  rXJ  J  y )Ng~,?r%   rF   c                 0    t        j                  |       }|S r   r   )r   r/   s     r   r   z/TestDerivative.test_maxiter_callback.<locals>.f  s    ,,q/CJr      V瞯<r   )r   r   rA   rH   c                 d   xj                   dz  c_         | _        t        | d      sJ t        | j                        j
                  vsJ j
                  j                  t        | j                               | j                  t        j                  k(  sJ j                   k(  rt        y )NrA   r   )iterr/   hasattrr   r*   dfsaddra   r   _EINPROGRESSStopIteration)r/   callbackr   s    r   r   z6TestDerivative.test_maxiter_callback.<locals>.callback  s    MMQMHL3$$$=444LLU366]+::!1!1111}}'## (r   rP   )r   r   ra   )r'   r\   r   r   anyr_   r   rb   rN   r   r/   setr   keysr   r   
_ECALLBACK)
r   r-   r   r   default_orderr/   r   keyr   r   s
           @@r   test_maxiter_callbackz$TestDerivative.test_maxiter_callback
  sF   JJxrzzJ2	 Aw4U;KL66#++&&&vvchh-!"3w{Ao"EEFFFvvcgg()))	$ u!Qd>NO 88: 	BCh3x3==000CyCNN222CyHLL$5ASAAAAA	Br   r   r   g?gffffff?r&   )float16float32r\   c                 0   dk(  r t              st        j                  d       t              j	                  |      }fd}fd}t        ||d||      }|j                  j                  k(  sJ |j                  j                  k(  sJ |j                  j                  k(  sJ j                        j                  }t              r|dz  d	z  n|dz  }	t        |j                  j                  |j                        |	
       y )Nr   z+float16 not tested for alternative backendsr%   c                 H    | j                   k(  sJ j                  |       S r   )r&   rv   )r   r&   r-   s    r   r   z$TestDerivative.test_dtype.<locals>.f;  s#    77e###66!9r   c                     | j                   j                  k(  sJ | j                  j                  k(  sJ | j                  j                  k(  sJ y r   )r   r&   r*   r,   )r/   r&   s    r   r   z+TestDerivative.test_dtype.<locals>.callback?  sE    55;;%'''66<<5(((99??e+++r   rG   )r@   r   r   r   2   r   )r   pytestskipr9   r'   r   r   r&   r*   r,   finfoepsr   r   rv   )
r   r   r   r&   r-   r   r   r/   r   r   s
      ``     r   
test_dtypezTestDerivative.test_dtype0  s     IhrlKKEF E"JJqJ&		,
 AQthOuu{{e###vv||u$$$yy%'''hhuo!! (sCx"}#s(suuD9r   c                    |j                  d      }d}t        j                  t        |      5  t	        d |       d d d        d}t        j                  t        |      5  t	        d |j                  d             d d d        d}t        j                  t        |      5  t	        d |j                  d	d
g             d d d        d}t        j                  t        |      5  t	        d |t        d             d d d        t        j                  t        |      5  t	        d |t        d             d d d        t        j                  t        |      5  t	        d |t                      d d d        d}t        j                  t        |      5  t	        d |d       d d d        t        j                  t        |      5  t	        d |d       d d d        d}t        j                  t        |      5  t	        d |d       d d d        t        j                  t        |      5  t	        d |d       d d d        d}t        j                  t        |      5  t	        d  |d!"       d d d        d#}t        j                  t        |      5  t	        d$ |d%&       d d d        y # 1 sw Y   xY w# 1 sw Y   MxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   8xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)'NrA   z`f` must be callable.matchz3Abscissae and function output must be real numbers.c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>W       r   y            ?z6When `preserve_shape=False`, the shape of the array...c                 
    g dS )N)rA   rH   rF   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>[  s     r   r   z6Tolerances and step parameters must be non-negative...c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>_  r   r   rP   r7   r   c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>a  r   r   ekkir   c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>c  r   r   r   %`maxiter` must be a positive integer.c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>g  r   r         ?r   c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>i  r   r   r   z"`order` must be a positive integerc                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>m  r   r   rK   c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>o  r   r   z'`preserve_shape` must be True or False.c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>s  r   r   herringr   z`callback` must be callable.c                     | S r   rr   rs   s    r   rt   z6TestDerivative.test_input_validation.<locals>.<lambda>w  r   r   	shrubbery)r   )r'   r   raises
ValueErrorr   r   object)r   r-   onemessages       r   test_input_validationz$TestDerivative.test_input_validationM  s   jjm)]]:W5 	"tS!	" H]]:W5 	7{BJJu$56	7 K]]:W5 	B*BJJBx,@A	B K]]:W5 	C{CDbMB	C]]:W5 	G{CDf4EF	G]]:W5 	?{CVX>	? :]]:W5 	6{C5	6]]:W5 	4{C3	4 7]]:W5 	4{Cs3	4]]:W5 	2{Cq1	2 <]]:W5 	C{C	B	C 1]]:W5 	?{C+>	? 	?I	" 	"	7 	7	B 	B	C 	C	G 	G	? 	?	6 	6	4 	4	4 	4	2 	2	C 	C	? 	?s   J<!K	#K'K#$K0!K=L
LL$9L1.L=#M	<K	KK #K-0K:=L
LL!$L.1L:=M	Mc           
         d }t        |      sZt        ||j                  d      t        d            }|j                  sJ t        |j                  |j                  d             t        |j                  |j                  d      |j                        }t        |j                  |j                  |j                               t        |j                  |j                  d	|j                  
             t        |j                  |j                  d      d      }t        |j                  |j                  |j                               t        |j                  |j                  d	|j                  
             t        d      D ]  |j                  d|j                  
      }fd}dz  |dz
  z  z  }t        ||dt        d            }t        |j                  |d       t        |j                  |j                  |j                  |j                  
             t        ||t        d            }|j                  sJ |j                   dk(  sJ t        |j                  |d        d }t        ||j                  d      |j                  d            }t        |j                  |j                  d             y )Nc                 d    t        |       }|j                  | j                  d      sJ | dz  dz
  S )Nzreal floatingc   rA   )r	   isdtyper&   )r   xp_tests     r   r   z,TestDerivative.test_special_cases.<locals>.f~  s2    %a(G??177O<<<7Q;r      r6   r   r   gl)~IQrA   r   r   r%   r   r   rB   r   c                     d| z  z  S NrH   rr   )r   rU   s    r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Avr   rH   )r   r@   r   rK   c                     || z  dz
  S r   rr   )r   cs     r   r   z,TestDerivative.test_special_cases.<locals>.f  s    Q37Nr   rF   )rS   g      @)r   r   r'   r   r_   r   r*   rv   r~   r   ra   r`   r   r\   rc   r,   rN   )r   r-   r   r/   r   r0   rU   s         @r   test_special_casesz!TestDerivative.test_special_casesy  s   
	
 |Q

1$E:JKC;;;CFFBJJy$9: ArvvF

266 23

BJJrJ$BCAQ?

266 23

BJJrJ$BC q 	5A

3bjj
1A A#a!A#h,CQ1C1I>CCFFCe4CIIrzz"&&

z'KLQQ3C;;;77a<<CFFCe4	5"	 BJJqM

1>

2/r   c                     | dz
  dz  S )NrA   rF   rr   rs   s    r   rt   zTestDerivative.<lambda>  s    AEa< r   c                 N    t        j                  | dkD  | dz
  dz  | dz
  dz        S )NrA      rF   )rX   wherers   s    r   rt   zTestDerivative.<lambda>  s'    288AEAEa<!a%A> r   c                     d}t        |g d|d}t        j                  |j                        sJ t	        |j
                  d|       y )NgؗҜ<r   )r   r8   r   r7   )r   rX   r   r_   r   r*   )r   r3   r8   r/   s       r   test_saddle_gh18811z"TestDerivative.test_saddle_gh18811  s=     $zEvvckk"""-r   N)__name__
__module____qualname__r   r   markparametrizerX   rY   r1   r   r
   _distr_paramsdistcontr?   tuplerl   r   r   r   r   r   r   r   r   r   r   r  r  xfailr  rr   r   r   r   r      s    [[S3E4(D"EF	< G	< [[!!$!/[[VU%8%8%A%AB1 C 01 [[Wq!f-[[Wuwvy&IJ.3 K ..3`/2/(
%724>#% >,$BL [[VZ0[[S4$"56[[W&GH: I 7 1:4*?X40n [[!!$!/[[[[V	#	>B& .	  0.r   r   c                       e Zd Zd Zy)JacobianHessianTestc                    | j                   j                  }d}t        j                  t        |      5   ||j
                  dt        d             d d d        |j                  d      }t        j                  }d}t        j                  t        |      5   |||t        d             d d d        t        j                  t        |      5   |||t        d	             d d d        t        j                  t        |      5   |||d
       d d d        d}t        j                  t        |      5   |||d       d d d        d}t        j                  t        |      5   |||d       d d d        y # 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   lxY w# 1 sw Y   y xY w)Nz"Argument `x` must be at least 1-D.r   rA   rP   r7   r   rF   z<Tolerances and step parameters must be non-negative scalars.r   r   z#`order` must be a positive integer.rK   r   r   )
jh_func__func__r   r  r  r   r   r   r   rosen)r   r-   r&  r  r   funcs         r   test_ivzJacobianHessianTest.test_iv  sr   ,,'' 7]]:W5 	9BFFA$B-8	9
 GGAJ~~P]]:W5 	7D!"6	7]]:W5 	7D!"6	7]]:W5 	-D!,	- 8]]:W5 	'D!2&	' :]]:W5 	)D!R(	) 	))	9 	9	7 	7	7 	7	- 	-	' 	'	) 	)sG    FFFF(=F4.G FFF%(F14F= G	N)r  r  r  r*  rr   r   r   r$  r$    s    )r   r$  c                      e Zd ZeZd Zd Zde_        ee_        d Z	d Z
de	_        e
e	_        d Zd Zde_        ee_        d	 Zd
 Zde_        ee_        d Zd Zde_        ee_        d Zde_        ej&                  e_        ej*                  j-                  dd      ej*                  j-                  dg d      ej*                  j-                  dee	eeeeg      d                      Zd Zd Zy)TestJacobianc                 h    | \  }}|j                  |dz  |z  d|z  |j                  |      z   g      S NrH   r  r   r   )zr-   r   r   s       r   f1zTestJacobian.f1  s8    1xxa!QURVVAY%6788r   c                 |    | \  }}d|z  |z  |dz  gt        j                  |d      t        j                  |      ggS r.  )rX   r}   r   )r0  r   r   s      r   df1zTestJacobian.df1  s?    1QAF#bll1a&8"&&)%DEEr   )rH   rH   c                 z    | \  }}|j                  ||j                  |      z  ||j                  |      z  g      S r   r   r   r   )r0  r-   rphis       r   f2zTestJacobian.f2  s7    3xxRVVC[!bffSk/:;;r   c                     | \  }}t        j                  |      | t        j                  |      z  gt        j                  |      |t        j                  |      z  ggS r   )rX   r   r   )r0  r6  r7  s      r   df2zTestJacobian.df2  sP    3qb266#;./a"&&+o.0 	0r   c                     | \  }}}|j                  ||j                  |      z  |j                  |      z  ||j                  |      z  |j                  |      z  ||j                  |      z  g      S r   )r   r   r   )r0  r-   r6  r7  ths        r   f3zTestJacobian.f3  si    
3xxRVVC[266":5q266#;PR7SRVVC[* + 	+r   c                    | \  }}}t        j                  |      t        j                  |      z  |t        j                  |      z  t        j                  |      z  | t        j                  |      z  t        j                  |      z  gt        j                  |      t        j                  |      z  |t        j                  |      z  t        j                  |      z  |t        j                  |      z  t        j                  |      z  gt        j                  |      | t        j                  |      z  t        j                  |      ggS r   )rX   r   r   r   )r0  r6  r7  r<  s       r   df3zTestJacobian.df3  s    
3rvvbz)1rvvc{?RVVBZ+GbffSk!BFF2J.0rvvbz)1rvvc{?RVVBZ+GRVVC[266":-/qb266#;.a0@A	C 	Cr   )rF   rF   c           	      z    | \  }}}|j                  |d|z  d|dz  z  d|z  z
  ||j                  |      z  g      S Nr  rG   rH   r/  r   r-   x1x2x3s        r   f4zTestJacobian.f4  sF    
BxxQVQq[1r6%92r
?KLLr   c                     | \  }}}t        j                  |      }|d|z  d|z  gd|z  d|z  d|z  gd|z  d|z  d|z  g|t        j                  |      z  d|z  t        j                  |      ggS Nr   r  r   r   )rX   	ones_liker   r   r   rC  rD  rE  r  s        r   df4zTestJacobian.df4  s    
Bll2a#gq3w'S!c'1s7+S!b&"s(+bffRj!c'266":68 	8r   rE   c           	      ~    | \  }}}|j                  d|z  d|dz  z  d|j                  ||z        z  z
  ||z  g      S rA  r/  rB  s        r   f5zTestJacobian.f5  sI    
BxxRR1Wq266"r'?/B!BBGLMMr   c                     | \  }}}t        j                  |      }d|z  d|z  d|z  gd|z  d|z  t        j                  ||z        z  d|z  t        j                  ||z        z  gd|z  ||ggS rH  )rX   rI  r   rJ  s        r   df5zTestJacobian.df5   s    
Bll2S!c'1s7+Rb266"r'?2BGbffR"Wo4MNS"b!# 	#r   c                 ,    t        j                  |       S r   )r   r(  )r   _s     r   r(  zTestJacobian.rosen*  s    HNN1--r   )r  rA   r&   )r   r\   rQ   )rr   )rB   )rH   rF   r)  c                    |dk(  rdnd}t        |      }t        j                  j                  d      }j                  \  }}|j                  |f|z         }	t        fdj                  |	|            }
j                  t        j                  j                  |	            |      }t        |
j                  ||       y )	Nr\   r6   ghUM`?   6H2)rQ   c                      |       S r   rr   )r   r)  r-   s    r   rt   z,TestJacobian.test_examples.<locals>.<lambda>7  s    a" r   r%   r7   )
r9   rX   rw   r   mnr   r'   r0   r   r*   )r   r&   rQ   r)  r-   r8   rx   mrU   r   r/   r0   s      ``       r   test_exampleszTestJacobian.test_examples.  s     *uE"ii##L1ww1JJQD4KJ(-rzz!5z/IJjjDHHQK0j>$/r   c           	      "   j                  ddg      fd}fdfdt        |d      }t              rZt        t	        j
                  |j                              dk(  sJ t        t	        j
                  |j                              dk(  sJ t        fd	d
d d      }t        fddd d      }t        fdd
d d      }t        fddd d      }t        j                         }dD ]  }	j                  t        ||	      t        ||	      gt        ||	      t        ||	      gg      }
j                  |
      ||	<   ||	   j                  j                  k(  rdnd}t        ||	   ||	   |        y )Nr         ?c                     | \  }}j                  j                  d|z        j                  |      z  j                  d|z        |dz  z  g      S )Nr   rH   r5  )r0  r   r   r-   s      r   r3  z$TestJacobian.test_attrs.<locals>.df1B  sN    DAq88RVVCE]RVVAY6qsad8JKLLr   c                 P    j                  d| z        j                  |      z  S )Nr   )r   r   s     r   df1_0xyz(TestJacobian.test_attrs.<locals>.df1_0xyF  s"    66#a%=266!9,,r   c                 8    j                  d| z        |dz  z  S r  )r   r   s     r   df1_1xyz(TestJacobian.test_attrs.<locals>.df1_1xyI  s    66!A#;A%%r   r"   r  rG   c                      | d         S r   rr   )r   r\  r0  s    r   rt   z)TestJacobian.test_attrs.<locals>.<lambda>Q      71ad#3 r   r   rA   c                      d   |       S Nr   rr   )r   r\  r0  s    r   rt   z)TestJacobian.test_attrs.<locals>.<lambda>R      71Q4#3 r   rH   c                      | d         S r   rr   )r   r^  r0  s    r   rt   z)TestJacobian.test_attrs.<locals>.<lambda>S  r`  r   c                      d   |       S rb  rr   )r   r^  r0  s    r   rt   z)TestJacobian.test_attrs.<locals>.<lambda>T  rc  r   )r_   ra   r*   rN   rb   giUMu>gt=r   )r'   r   r   lenrX   uniquerN   rb   r   OptimizeResultr9   squeezer&   r   r   )r   r-   r3  r/   res00res01res10res11r0   attrref_attrr   r\  r^  r0  s    `          @@@r   
test_attrszTestJacobian.test_attrs<  sm   JJT{#	M	-	& sAB/B<ryy)*a///ryy*+q0003QqV"M3QqV"M3QqV"M3QqV"M%%'> 	=DzzGE4$8'%:N#O$+E4$8'%:N#O#Q RH

8,CI Y__

:6DCIs4yt<	=r   c                   	
 t         j                  j                  d      }|j                  d      	d
	
fd}g d}g d}ddi}t        |j	                  	j
                  	      |||
      }j	                  t        j                  	      j
                  	      }t        |j                  |d       j                  j                  |            sJ y )Nl   ]2ZVrF   gHz>c                    j                   | d| d   d   k  f<   j                   | d| d   d   dz   kD  f<   j                   | d| d   d   kD  f<   j                   | d| d   d   dz
  z
  k  f<   t        j                  |       S )Nr   rY  rA   r5   )r~   r,  rM  )r   br   r-   s    r   r   z0TestJacobian.test_step_direction_size.<locals>.fd  s     "Aa1!n')vvAa1!t##$ "Aa1!n*,&&Aa1!s
3&&'??1b))r   )rA   rP   r   )rY  r5   r   r8   :0yE>r%   )r   r   r   r7   )rX   rw   r   r   r'   r\   r,  rO  r   r*   r   isfinite)r   r-   rx   r   dirr   r8   r/   r0   rs  r   s    `       @@r   test_step_direction_sizez%TestJacobian.test_step_direction_size]  s     ii##N3JJqM	* ~q"**Qbjj*9&)d<jj))!,BJJj?$/vvbkk#&'''r   N)r  r  r  r   r&  r1  r3  rU  r0   r8  r:  r=  r?  rF  rK  rM  rO  r(  r   	rosen_derr   r  r  rW  rp  rw  rr   r   r   r,  r,    s    G
9F BEBF<0
 BEBF+
C BEBFM8 BEBFN# BEBF-EH""EI[[W&<=[[V%78[[Vb"b"b%%@A	0 B 9 >	0=B(r   r,  c                       e Zd ZeZej                  j                  dg d      d        Zd Z	d Z
ej                  j                  ej                  j                  dd      d	               Zy
)TestHessianrC   )rr   )rG   )rH   rG   c                 8   t         j                  j                  d      }d}|j                  |j                  |f|z         |j                        }t        t        j                  |      }|r{|j                  ||df      }|j                  |j                  D cg c]  }t        j                  |       c}      }|j                  |dd      }|j                  |||f|z         }nt        j                  |      }t        |j                  |d       y c c}w )NrS  rF   r%   rP   r   rt  r7   )rX   rw   r   r'   r\   r   r   r(  rZ   r   T
rosen_hessmoveaxisr   ddf)	r   rC   r-   rx   rV  r   r/   xir0   s	            r   test_examplezTestHessian.test_examplez  s    ii##L1JJszz1$,/rzzJBhnna(

1q"g&A((accBH//3BCC++c1b)C**S1a'E/2C%%a(C40 Cs   Dc                    t         j                  j                  d      }|j                  |j                  d      |j                        }t        t        j                  |      }t        j                  |      }|dk7  }t        |j                  |   ||          d|j                  |j                  ||               z  }t        |j                  |    ||    |       y )NrS  rF   r%   r   g{Gz?r7   )rX   rw   r   r'   r   r   r   r(  r}  r   r  r+   min)r   r-   rx   r   r/   r0   maskr8   s           r   test_float32zTestHessian.test_float32  s    ii##L1JJszz!}BJJJ7hnna(!!!$qs4y1bffRVVCI.//TE
>r   c                    j                  ddg      t              fdd_        t        d      }d_        t        fddd d      }|j                  d	   j                  cxk(  r|j                  d	   k(  sJ  J d_        t        fd
dd d      }|j                  d   j                  cxk(  r|j                  d	   k(  sJ  J y )Nr   rY  c                      j                   |  \  }}j                  |j                  dkD  r"t        j                  |j
                  dd        ndz   _        j                  |      |dz  z  S )NrH   rA   rF   )broadcast_arraysrb   rR   mathprodrC   r   )r0  r   r   r1  r-   r  s      r   r1  z!TestHessian.test_nfev.<locals>.f1  s_    +7++Q/DAqgg166A:17712;!71MBG66!9qAv%%r   r   r"   r  c                 $     | d   d   g      S )Nr   rA   rr   )r   r1  r0  s    r   rt   z'TestHessian.test_nfev.<locals>.<lambda>      "adAaD\"2 r   rA   )r   r   c                 $     d   | d   g      S rb  rr   )r   r1  r0  s    r   rt   z'TestHessian.test_nfev.<locals>.<lambda>  r  r   rH   )rA   rA   )r'   r	   rb   r   )r   r-   r/   rj  rm  r1  r  r0  s    `   @@@r   	test_nfevzTestHessian.test_nfev  s    JJT{#!!$	&  b!"-2AaFLxx~<EJJt,<<<<<<2AaFLxx~<EJJt,<<<<<<r   Tz$Python list input uses NumPy backend)r2   r   c                     d}t        j                  t        |      5  t        |j                  dgt        d             d d d        y # 1 sw Y   y xY w)Nz"The specified `rtol=1e-15`, but...r   r$   r   r   r   )r   warnsRuntimeWarningr   r   r   )r   r-   r  s      r   test_small_rtol_warningz#TestHessian.test_small_rtol_warning  sC     7\\.8 	?BFFRDTu-=>	? 	? 	?s   $AAN)r  r  r  r   r&  r   r  r  r  r  r  thread_unsafer   r  rr   r   r   rz  rz  u  sx     G[[W&891 :1&?=2 [[[[!!$)O " Q?Q ?r   rz  )&r  r   numpyrX   scipy.conftestr   (scipy._lib._elementwise_iterative_method_lib_elementwise_iterative_methodr   scipy._lib._array_api_no_0dr   r   r   scipy._lib._array_apir   r   r	   scipyr
   r   r   scipy.differentiater   r   r   "scipy.differentiate._differentiater   r  usefixtures
pytestmarkarray_api_strict_skip_reasonjax_skip_reasonr   r   r$  r,  rz  rr   r   r   <module>r     s[      / 6 6 X X E E * * = = > #FKK$;$;<N$OP
V > 09UVkAe. e. B We.P) )< 09UVkAR(& R( B WR(j 09UVkA@?% @? B W@?r   