
    sg                        d dl mZ d dlmZmZmZmZmZmZ d dl	Z	d dl	m
Z d dlZd dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZm Z  d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5e	jl                  jo                  d       d!        Z8d" Z9e	jl                  jt                  e	jl                  jw                  d#g d$      d%               Z<d& Z=d' Z>e	jl                  jw                  d(d)d*g      d+        Z?d, Z@d- ZAd. ZBd/ ZCd0 ZDd1 ZEd2 ZFd3 ZGd4 ZHd5 ZId6 ZJd7 ZKd8 ZLd9 ZMd: ZNd; ZOd< ZPe	jl                  jw                  d#g d=      d>        ZQd? ZRe	jl                  jw                  d@ej                  ej                  g      dA        ZUe	jl                  jw                  d#g dB      dC        ZVe	jl                  jw                  d#g dB      dD        ZWe	jl                  jw                  d#g dB      dE        ZXe	jl                  jw                  d#g dB      dF        ZYdG ZZy)H    )product)assert_assert_allcloseassert_array_lessassert_equalassert_no_warningssuppress_warningsN)raises)group_columns)	solve_ivpRK23RK45DOP853RadauBDFLSODA)OdeSolution)num_jacselect_initial_step)ConstantDenseOutput)
coo_matrix
csc_matrixc                 ,    t        j                  |      S N)np
zeros_liketys     V/var/www/html/venv/lib/python3.12/site-packages/scipy/integrate/_ivp/tests/test_ivp.pyfun_zeror!      s    ==    c                 \    t        j                  |d    d|d   z  z
  |d   |d   z   g      S )Nr         r   arrayr   s     r    
fun_linearr(      s5    88adUQ1X%qtad{344r"   c                  8    t        j                  ddgddgg      S )Nr%   r&    r"   r    
jac_linearr-      s    88b"X1v&''r"   c                     t        j                  dt        j                  d| z        z  dt        j                  d| z        z  t        j                  d| z        z   f      S )Nr+      )r   vstacksincosr   s    r    
sol_linearr4      sP    99b266!a%=("&&Q-'"&&Q-79 : :r"   c                 ~    t        j                  |d   | z  |d   |d   d|d   z  z   dz
  z  | |d   dz
  z  z  g      S Nr%   r   r/   r&   r   s     r    fun_rationalr7       sW    88QqTAXqTQqTA!H_q01Q!A$(^DF G Gr"   c                 ~    t        j                  |d   | z  |d   |d   d|d   z  z   dz
  z  | |d   dz
  z  z  f      S r6   r   r0   r   s     r    fun_rational_vectorizedr:   %   sW    99adQhdadQ1Xo12a1Q4!8nEG H Hr"   c                     t        j                  dd| z  gd|d   dz  z  | |d   dz
  dz  z  z  |d   d|d   z  z   dz
  | |d   dz
  z  z  gg      S Nr   r%   r/      r&   r   s     r    jac_rationalr?   *   sv    88	
AE
	adai1!qQ.	/
A$QqT/A
!qtax.	1	3  r"   c                     t        dd| z  gd|d   dz  z  | |d   dz
  dz  z  z  |d   d|d   z  z   dz
  | |d   dz
  z  z  gg      S r<   )r   r   s     r    jac_rational_sparserA   2   sr    	
AE
	adai1!qQ.	/
A$QqT/A
!qtax.	1	3  r"   c                 T    t        j                  | | dz   z  d| z  | dz   dz  z  f      S )N
   r/   )r   asarrayr3   s    r    sol_rationalrE   :   s/    ::qAF|R!Vq2v!m%;<==r"   c                 "   |j                   d   dz  }d}d}| dk  rdnd}t        j                  |d||d   f      }d|z  }t        j                  |      dz   }d||z  dz
  dz  z  |dz  z  }||z  dz
  dz  |dz  z  }	d|z  dz   }
d|z  dz
  }d|z  }d|z  dz   }t        j                  d|z        }|||
   ||   z
  z  d|z  z  |	||   d||   z  z
  ||
   z   z  |dz  z  z   |||   z  ||   z  z
  |d d d<   | ||   z  ||   z  |dd d<   |S )	Nr   r/   d   r>   r$   r=   r%      )shaper   hstackarangeempty)r   r   nkcphidjalphabetaj_2_p1j_2_m3j_2_m1j_2fs                  r    fun_medazkorZ   >   sw   	
aAA	AAv!1C
		31ae$%A	AA
		!qAQq  16)EEAI!a1f$DUQYFUQYFUF
a%!)C
QAqy1V9,-Q7ai!ai-/!F);<qAvEF!F)maf$%AccF b1S6kAfI%AaddGHr"   c                    g }g }t        j                  |       dz  }|j                  |dd         |j                  |dd  dz
         |j                  |       |j                  |       |j                  |       |j                  |dz          |j                  |d d        |j                  |d d dz          t        j                  |       dz  dz   }|j                  |       |j                  |       |j                  |       |j                  |dz
         t        j                  |      }t        j                  |      }t	        t        j
                  |      ||ff      S )Nr/   r%   r*   )r   rK   appendrJ   r   	ones_like)rM   colsrowsis       r    medazko_sparsityra   Y   s   DD
		!qAKK!"KK!"	KKNKKNKKNKKAKK#2KK#2

		!q1AKKNKKNKKNKKA99T?D99T?Dr||D)D$<899r"   c                     | S r   r,   r   s     r    fun_complexrc   y   s	    2Ir"   c                 H    t        j                  |j                  d          S Nr   )r   eyerI   r   s     r    jac_complexrg   }   s    FF1771:r"   c                 ,    t        t        | |            S r   )r   rg   r   s     r    jac_complex_sparseri      s    k!Q'((r"   c                 V    dt        j                  |        z  }|j                  d      S )N      ?      ?)r%   r*   )r   expreshaper   s     r    sol_complexrn      s%    	RVVQBZA99Wr"   c                     || dz
  z  S Nr/   r,   r   s     r    fun_event_dense_output_LSODArq      s    A;r"   c                     | dz
  S rp   r,   r   s     r    jac_event_dense_output_LSODArs      s    q5Lr"   c                 v    t        j                  | dz  dz  d| z  z
  t        j                  d      z   dz
        S )Nr/   皙?   )r   rl   logr3   s    r    sol_event_dense_output_LSODArx      s4    66!q&1*q1u$rvvd|3a788r"   c                     | |z
  ||t        j                  |      z  z   z  }t         j                  j                  |d      t        j                  |j
                  d         z  S )Nr   )axis)r   abslinalgnormsqrtrI   )r   y_truertolatoles        r    compute_errorr      sO    	
VtbffVn445A99>>!!>$rwwqwwqz':::r"   c                     d} d}ddg}t        ddgg ddd	gdd
ggd t        t        g      D ]  \  }}}}|rt        }nt        }t               5 }|j                  t        d       t        |||| ||d||	      }	d d d        t        	j                  d   |d          t        |	j                  d u        t        |	j                  d u        t        |	j                         t        |	j                  d       |dk(  rt        |	j                   dk         nt        |	j                   dk         |dv r-t        |	j"                  d       t        |	j$                  d       nFt        d|	j"                  cxk  xr dk  nc        t        d|	j$                  cxk  xr dk  nc        t'        |	j                        }
t)        |	j*                  |
| |      }t        t-        j.                  |dk               t-        j0                  | }t'        |      }|	j3                  |      }t)        ||| |      }t        t-        j.                  |dk               |d   |d   z   dz  }t'        |      }|	j3                  |      }t)        ||| |      }t        t-        j.                  |dk               t5        |	j3                  |	j                        |	j*                  dd        y # 1 sw Y   fxY w)NMbP?ư>UUUUUU?qq?FTr   r   r   r   r   r   r$   	   r%   AThe following arguments have no effect for a chosen solver: `jac`)r   r   methoddense_outputjac
vectorizedr   r   2   (   )r   r   r   r   rH   rC   r*   r/   V瞯<r   r   )r   r?   rA   r:   r7   r	   filterUserWarningr   r   r   r   t_eventsy_eventssuccessstatusnfevnjevnlurE   r   r   r   alllinspacesolr   )r   r   y0r   r   t_spanr   funsupresr   r   tcyc_trueycs                  r    test_integrationr      sw   DD
sB+2DM?VaV<!45	,7 8G'
FFC )CC  	<CJJ{'( C$!%f4 #
<C		< 	SUU1Xvay)$%$%SZZ#X CHHrM"CHHrM"881%!$A$1$%A$"$%cee$#%%t4q1u[[&!r"WWR["gtT2q1uQi&*$)r"WWR["gtT2q1uEFq8G	< 	<s   +KK'	c                     d} d}dg}ddg}t        j                  |d   |d         }t        g dd t        t        g      D ]  \  }}t               5 }|j                  t        d       t        t        |||d| ||	      }d d d        t        j                  d   |d          t        |j                  d u        t        |j                  d u        t        |j                         t        |j                   d       |d
k(  r|j"                  dk  sJ |j"                  dk  sJ |dk(  r't        |j$                  d       |j&                  dk  s$J |j$                  dk(  sJ |j&                  dk(  sJ t)        |j                        }	t+        |j,                  |	| |      }
t        j.                  |
dk        sJ t)        |      }|j1                  |      }t+        ||| |      }
t        j.                  |
dk        rJ  y # 1 sw Y   xY w)Nr   r   rk   r   r%   )r   r   r   r   r   T)r   r   r   r   r   r   #      r   rv   r$   )r   r   r   rg   ri   r	   r   r   r   rc   r   r   r   r   r   r   r   r   r   r   rn   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   s                r    test_integration_complexr      s   DD
BVF	VAYq		*B@ $k3EFH #  	NCJJ{'( KF)-DtNC		N 	SUU1Xvay)$%$%SZZ#X88b= =88b= =U?1%77Q;;88q= =77a<<SUU##%%t4vva!e}}b/WWR["gtT2vva!e}}G#	N 	Ns   .HH	r/   c                  :   d} ddg}t        j                  d| z        }d|dd d<   t        |       }dD ]d  }t        t        ||||      }t        |j                  d   |d          t        |j                  d u        t        |j                  d u        t        |j                         t        |j                  d       t        |j                  d   d	d
       t        |j                  d   dd       t        |j                  d   dd
       t        |j                  d   dd       t        |j                  d   dd
       t        |j                  d   dd       t        |j                  d   dd       t        |j                  d   dd
       g y )N   r      r/   r%   )r   r   )r   jac_sparsity)N   r*   gݨ'.?g{Gz?r   )O   r*   r   r   )   r*   ghen7?)   r*   )   r*   gՊ.?)   r*   ggJ	T>)   r*   )   r*   g`P^?)r   zerosra   r   rZ   r   r   r   r   r   r   r   r   r   )rM   r   r   sparsityr   r   s         r    "test_integration_sparse_differencer     sR   AWF	!a%BBqt!tH"H" >VR%-/ 	SUU1Xvay)$%$%SZZ#f{>fqt4g$?g5gTBg4@g5g	=#>r"   c                     d} d}ddg}ddg}t               }t        |      }t        ddg||g      D ]  \  }}t        t        ||| ||d|      }t        |j                  d   |d          t        |j                  d u        t        |j                  d u        t        |j                         t        |j                  d       t        |j                  d	k         t        |j                  d       t        d|j                  cxk  xr d
k  nc        t        |j                        }	t!        |j"                  |	| |      }
t        t%        j&                  |
dk               t%        j(                  | }t        |      }|j+                  |      }t!        ||| |      }
t        t%        j&                  |
d
k               t-        |j+                  |j                        |j"                  dd        y )Nr   r   r   r/   r   r   T)r   r   r   r   r   rG      rC   +=r   )r-   r   r   r   r(   r   r   r   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   )r   r   r   r   JJ_sparser   r   r   r   r   r   r   r   s                 r    test_integration_const_jacr   #  s   DD
QBVFA!}H/!X? G
FBT%DcCSUU1Xvay)$%$%SZZ#3SXXq!CGG b !CEE"#%%t4q2v[[&!R.WWR["gtT2q2vEF1Gr"   r   )r   r   r   c                     d}d}g d}ddg}d }t        ||||||       }|j                  dk  sJ |j                  dk  sJ y )	Nr   )     @r   r   r   g    חAc                 f    |\  }}}d|z  d|z  |z  z   d|z  d|z  |z  z
  d|z  |z  z
  d|z  |z  gS )N{Gzr   {Gz?    8|Ar,   )r   statexr   zs        r    fun_robertsonz-test_integration_stiff.<locals>.fun_robertsonN  sW    1aAIa!#1HsQw{"S1Wq[0!GaK
 	
r"   )r   r   r   i  r   )r   r   r   )r   r   r   r   tspanr   r   s          r    test_integration_stiffr   F  s\     DD	BHE
 M5"4f.C 88d??88c>>r"   c            
         d } d }d }d|_         dD ]q  }t        t        ddgdd	g|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgdd	g|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgdd	g|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   ||j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgdd	g|| ||fd      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ t        t        ddgdd	g|| d      }t        |j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                  |j                  d   |j                  d         }t        |      }|j!                  |      }t#        ||dd      }t        t        j$                  |dk               t        j&                  t        |j
                  d   d         |j                  d   d   dd      rrJ  d| _        d|_        dD ]  }t        t        ddgddg|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgddg|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   | |j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgddg|| |f
      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   ||j
                  d   d   |j                  d   d         d      sJ d| _        d|_        t        t        ddgddg|| ||fd      }t        |j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        |j
                  d   j                  d       t        d|j
                  d   d   cxk  xr dk  nc        t        d|j
                  d   d   cxk  xr dk  nc        t        |j                  d   j                  d       t        |j                  d   j                  d       t        |j                  d   j                  d       t        j                   ||j
                  d   d   |j                  d   d         d      sJ t        j                   ||j
                  d   d   |j                  d   d         d      sJ t        j                  |j                  d   |j                  d         }t        |      }|j!                  |      }t#        ||dd      }t        t        j$                  |dk               t        j&                  t        |j
                  d   d         |j                  d   d   dd      sJ t        j&                  t        |j
                  d   d         |j                  d   d   dd      rJ  y )Nc                     |d   |d   dz  z
  S )Nr   r%   gffffff?r,   r   s     r    event_rational_1z%test_events.<locals>.event_rational_1_  s    tadck!!r"   c                     |d   dz  |d   z
  S )Nr%   g333333?r   r,   r   s     r    event_rational_2z%test_events.<locals>.event_rational_2b  s    ts{QqT!!r"   c                     | dz
  S )Ng@r,   r   s     r    event_rational_3z%test_events.<locals>.event_rational_3e  s    3wr"   Tr   r$      r   r   )r   eventsr   r%   g333333@g@g333333@g@)r%   r/   r   r*   )r   r   r   r/         @r   r   r   gqq?gX<ݚ?)terminalr   r7   r   r   r   sizer   r   rI   r   isclose	directionr   r   rE   r   r   r   allclose)	r   r   r   r   r   r   r   r   r   s	            r    test_eventsr   ^  sm   "" !%E Q1q!fsCj 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**F3S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I &'"%&"q!fuenV 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**F3S\\!_**D1zzS\\!_Q/a1CDaI 	I I &("%'"q!fuenV 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI 	I I &'"%&"q!fuenV 02B 0 2@DF 	SZZ#S\\!_))1-S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**F3S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I q!fuenV/dDSZZ#S\\!_))1-cll1oa(.3./S\\!_**F3zzS\\!_Q/a1CDaI 	I I [[q3559-r"WWR["gtT2q1u {{<Q(:;S\\!_Q=O $41 	1 1aQ1h "#!"E K1q!fsEl6 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**F3S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I &("%'"q!fsEl6 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**F3S\\!_**D1zzS\\!_Q/a1CDaI 	I I &'"%&"q!fsEl6 02BCESZZ#S\\!_))1-S\\!_))1-cll1oa(.3./S\\!_**D1S\\!_**F3zzS\\!_Q/a1CDaI 	I I &'"%&"q!fsEl6 02B 0 2@DF 	SZZ#S\\!_))1-S\\!_))1-S\\!_))1-cll1oa(.3./cll1oa(.3./S\\!_**D1S\\!_**F3S\\!_**F3zzS\\!_Q/a1CDaI 	I IzzS\\!_Q/a1CDaI 	I I [[rCEE!H-r"WWR["gtT2q1u{{<Q(:;S\\!_Q=O $41 	1 1{{<Q(:;S\\!_Q=O $41 	1 1UK1r"   c                      d } d }| |fS )Nc                     |d   |d    gS )Nr%   r   r,   r   s     r    rY   z#_get_harmonic_oscillator.<locals>.f  s    !qte}r"   c                     |d   S re   r,   r   s     r    eventz'_get_harmonic_oscillator.<locals>.event  s    tr"   r,   )rY   r   s     r    _get_harmonic_oscillatorr     s     e8Or"   n_eventsrH   r>   c                    t               \  }}| |_        t        |dddg|      }t        |j                  d         | k(  sJ t        |j
                  d         | k(  sJ t        |j
                  d   d d df   dd       y )Nr   rG   r%   r   )r   r   r   )r   r   r   lenr   r   r   )r   rY   r   r   s       r    test_event_terminal_integerr     s|    ')HAuEN
Ax!Q
6Cs||A8+++s||A8+++CLLOAqD)159r"   c                     t               \  } }| dddgf}d |_        t        |d|i}d|_        t        |d|i}t        |j                  |j                         d}d|_        t        j                  t        |      5  t        |d|i d d d        d|_        t        j                  t        |      5  t        |d|i d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)	Nr   r%   r   r   zThe `terminal` attribute...r*   matchg      @)r   r   r   r   r   pytestr
   
ValueError)rY   r   argsr   refmessages         r    test_event_terminal_ivr   "  s    ')HAux!Q DEN
T
(%
(CEN
T
(%
(CCLL#,,/+GEN	z	1 '4&&'EN	z	1 '4&&' '' '' 's   =C3CCCc                  >   d} d}ddg}t         t        t        t        t        t
        fD ]q  }ddgddgfD ]b  }t        t        ||| d||d	
      }t        |j                  d   |d          t        |j                  d   |d          t        t        j                  t        j                  t        j                  |j                              dk               t        |j                  d u        t        |j                          t        |j"                  d       t%        |j                        }t'        |j(                  || |      }t        t        j                  |dk               t        j*                  | }t%        |      }	|j-                  |      }
t'        |
|	| |      }t        t        j                  |dk               t/        |j-                  |j                        |j(                  dd       t1        t2        |t        |d   ||d   d       |t
        us |t        |d   ||d   | |d      }|j5                         }|j5                         }t        |j"                  d       t        d|v        t1        t6        |j4                         e t y )Nr   r   r   r   r$   r   r%         ?T)r   max_stepr   r   r   r   r*   g	     ?r   r   )r   g#B;)r   r   r   failedzstep size is less)r   r   r   r   r   r   r   r7   r   r   r   r   r   r{   diffr   r   r   rE   r   r   r   r   r   assert_raisesr   stepRuntimeError)r   r   r   r   r   r   r   r   r   r   r   solverr   s                r    test_max_stepr   5  s   DD
sBvuc59 #91v1v& "	9FL&"4%(tF)-/C q6!9-rF2J/BFF266"''#%%.1[@ABCLLD()CKK Q'!#%%(FceeVT48ABFF1q5M"f%B"2&GBb'46ABFF1q5M"CGGCEENCEEEJ*flF1Ir )b2 U"fQiVAY%)uF ++- ++-V]]H5+w67lFKK8E"	9#9r"   c                  @   d} d}ddg}d}t         t        t        t        t        t
        fD ]  }ddgddgfD ]  }t        t        ||| d	||d
|	      }t        |j                  d   |d          t        |j                  d   |d          t        |t        j                  |j                  d   dz
               t        |j                  d u        t        |j                         t        |j                   d       t#        |j                        }t%        |j&                  || |      }t        t        j(                  |dk               t        j*                  | }	t#        |	      }
|j-                  |	      }t%        ||
| |      }t        t        j(                  |dk               t        |j-                  |j                        |j&                  dd       t/        t0        |t        |d   ||d   d       t/        t0        |t        |d   ||d   d         y )Nr   r   r   r   皙?r$   r   r%   r   T)r   r   r   r   r   
first_stepr   r*   r   r   )r   )r   r   r   r   r   r   r   r7   r   r   r   r   r{   r   r   r   r   rE   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   s               r    test_first_stepr  _  s   DD
sBJvuc59 31v1v& 	3FL&"4%(tF)-*FC q6!9-rF2J/JsuuQx!|(<=CLLD()CKK Q'!#%%(FceeVT48ABFF1q5M"f%B"2&GBb'46ABFF1q5M"CGGCEENCEEEJ*flF1Ir )4*flF1Ir )37	33r"   c            
         d} d}ddg}ddgddgfD ]  }t        j                  |d   |d   d	      }t        t        ||| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       t        |j
                        }t        |j                  || |      }t        t        j                  |dk                g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       t        |j
                        }t        |j                  || |      }t        t        j                  |dk               g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       t        |j
                        }t        |j                  || |      }t        t        j                  |dk               g d}t        t        ddg|| ||
      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       ddg}t        t        t        t        ddg|| ||
       y )Nr   r   r   r   r$   r   r%   r   rC   r   r   t_eval)r$   
ףp=
@   r   Q @r   )r$   (\@rH         ?皙?)\(?r%   )r  r  r   r  )r  rH   r	  r
  r  r>   rv   )r   r   r   r7   r   r   r   r   r   r   rE   r   r   r   r   r   )r   r   r   r   r  r   r   r   s           r    test_t_evalr    s   DD
sBq6Aq6" VAYq	26fbt$%'SUUF#$%SZZ#cee$#%%t4q1u &F
L1a&"4d!#CCLLD !CKKQ#%% FceeVT40ABFF1q5M,F
L1a&"4d!#CCLLD !CKKQF
L1a&"4d!#CCLLD !CKKQ#%% FceeVT40ABFF1q5M&F
L1a&"4d!#CCLLD !CKKQVF*i1vr$v7r"   c            	         d} d}ddg}ddg}t        j                  |d   |d   d	      }t        t        ||| ||
      }t        t        ||| ||d      }t	        |j
                  |       t        |j                  d u        t        |j                         t	        |j                  d       t	        |j
                  |j
                         t	        |j                  |j                         t        |j                  d u        t        |j                         t	        |j                  d       t        |j
                        }t        |j                  || |      }t        t        j                  |dk               y )Nr   r   r   r   r$   r   r   r%   rC   r  T)r   r   r  r   )r   r   r   r7   r   r   r   r   r   r   r   rE   r   r   )	r   r   r   r   r  r   res_dr   r   s	            r    test_t_eval_dense_outputr    s(   DD
sBVF[[F1Ir2F
L&"4d!#ClFBT#$8ECLLD !CKKQ  ENNd"#EMMq! #%% FceeVT40ABFF1q5Mr"   c                  @   d } d| _         d}d}ddg}ddg}t        j                  d	dd
      }dD ]  }t               5 }|j	                  t
        d       t        t        ||||||| t        	      }d d d        j                  sJ |j                  dk(  sJ |j                  dk(  sJ |j                  s|j                  rJ t        |j                        dk(  sJ |j                  d   j                   dk(  sJ |j                  d   d   dk(  rJ  y # 1 sw Y   xY w)Nc                     | dz
  S )Nr  r,   r   s     r    early_eventz,test_t_eval_early_event.<locals>.early_event      1ur"   Tr   r   r   r   r$   r   r      r   r   )r   r   r   r  r   r   zA termination event occurred.r%   r   r  )r   r   r   r	   r   r   r   r7   r?   r   r   r   r   r   r   r   r   )	r  r   r   r   r   r  r   r   r   s	            r    test_t_eval_early_eventr    s0     KDD
sBVF[[a$FE '  	.CJJ{'( L&"4d#)& ,.C		. {{{{{====zzQ55&&3<< A%%%||A##q(((||Aq!Q&&&'	. 	.s   3DD	c                     d } d}d}dg}ddg}d}t        t        ||dd| |d	||t        
      }t        |j                  d   |d          t        |j                  d   |d          t        |t        j                  |j                  d	   |d   z
               |j                  sJ t        |j                  d       t        |j                        }t        |j                  |||      }t        |d       t        j                  | }	t        |	      }
|j                  |	      }t        ||
||      }t        |d       t        |j                  |j                        |j                  dd       y )Nc                     |d   dz
  S )Nr   gOne.>r,   r   s     r    event_lsodaz2test_event_dense_output_LSODA.<locals>.event_lsoda  s    tg~r"   r   r   ru   r=   r/   r   Tr%   )r   r   r   r   r   r   r   r   r   r*   r$   r   r   )r   rq   rs   r   r   r   r   r{   r   r   rx   r   r   r   r   r   )r  r   r   r   r   r   r   r   r   r   r   r   s               r    test_event_dense_output_LSODAr    sH    DD
B!WFJ
$
(C q6!9%rF2J'JsuuQx&)'; <=;;;Q)#%%0FceeVT40Aa	f	B*2.G	Bb'4.AaCGGCEENCEEEBr"   c                      dD ]W  } t        d ddgddg| d      }t        |j                  d      ddg       t        |j                  g d      g d	g d
g       Y y )Nr   c                     | S r   r,   r   s     r    <lambda>z%test_no_integration.<locals>.<lambda>%      aR r"   r>   r/   rH   Tr   r   )r>   r$   rv   r/   r/   r/   )rH   rH   rH   )r   r   r   )r   r   s     r    test_no_integrationr   #  s^    E A!Q!Q%D:SWWQZ!Q(SWWY')Y)?@	Ar"   c                  D   t         t        t        t        t        t
        fD ]  }  | d dddgd      }|j                          t        |j                  d       |j                         }t         |d      ddg       t         |g d      g dg dg        | d dg t        j                        }|j                          t        |j                  d       |j                         }t         |d	      g        t         |g d      t        j                  d
              y )Nc                     | S r   r,   r   s     r    r  z+test_no_integration_class.<locals>.<lambda>-  r  r"           g      $@finished)r   r%   r/   rC   rC   rC   )r   r   r   c                     | S r   r,   r   s     r    r  z+test_no_integration_class.<locals>.<lambda>4  r  r"         Y@r   rH   )r   r   r   r   r   r   r   r   r   r   r   infrL   )r   r   r   s      r    test_no_integration_classr*  +  s    vuc59 7tSk3?V]]J/!!#SXc{+S^lI%>?b"&&9V]]J/!!#SZ$S^RXXf%567r"   c            	      @   d } t        j                  d      }dD ]w  }t        t        | ddg||d      }t	        |j                  d      t        j                  d             t	        |j                  g d      t        j                  d	             y dD ]  }t        t        | dt         j                  g||d      }t	        |j                  d      t        j                  d             t	        |j                  g d      t        j                  d	              y )
Nc                 ,    t        j                  d      S )Nr   )r   r   r   s     r    r   ztest_empty.<locals>.fun=  s    xx~r"   r   r   r   rC   Tr  )r%   r/   rH   r(  )r   r   r   r   r   r   r)  )r   r   r   r   s       r    
test_emptyr-  <  s     
$BE ; C!R"(.TCSWWR["((4.1SWWY'&)9:	; F ; C!RVVb(.TCSWWR["((4.1SWWY'&)9:	;r"   c                  |   t        ddt        j                  ddg            } t         | d      ddg       t         | g d      g dg dg       t        ddt        j                  g             } t         | d      t        j                  d             t         | g d      t        j                  d             y )	Nr   r%   r/   r	  )r%   r	  r/   )r%   r%   r%   r  r(  )r   r   r'   r   rL   )r   s    r    test_ConstantDenseOutputr/  O  s    
aBHHaV$4
5CCHq!f%C$y)&<=
aBHHRL
1CCHbhhqk*C$bhhv&67r"   c            	         ddg} t         t        t        t        t        t
        fD ]  } |t        d| t        j                        }t        |j                  d       t        |j                  d       t        |j                  t        j                         t        |j                  d       t        |j                  d       t        |j                  |        t!        |j"                  d u        |t
        urGt!        |j$                  dkD         t!        |j&                  dk\         t        |j(                  d       nBt        |j$                  d       t        |j&                  d       t        |j(                  d       t+        t,        |j.                         |j1                         }t        |j                  d       t        |d        t        |j                  d       t        |j                  t        j                         t        |j                  d       t!        |j                  dkD         t!        t        j2                  t        j4                  |j                  |                     t!        |j"                  dkD         t!        |j$                  dkD         t!        |j&                  dk\         t!        |j(                  dk\         |j/                         }t7         |d      | dd	        y )
Nr   r   r$   r/   runningr%   r   r   r   )r   r   r   r   r   r   r7   r   r)  r   rM   r   t_boundr   r   r   r   	step_sizer   r   r   r   r   r   r   r   equalr   )r   clsr   r   r   s        r    test_classesr6  Y  s   
BdFE36 !8\1b"&&1VXXq!V]]I.V^^RVV,V%%q)VXXq!VXXr"  D()eFKK!O$FKK1$%Q'a(a(Q'lF$7$78++-V]]I.Wd#VXXq!V^^RVV,V%%q)1BFF288FHHb1223  1$%a q !

a !!#AQ7C!8r"   c                     t        j                  g dt              } t        | d   | d   t        j                  dg            }t        | d   | d   t        j                  dg            }t	        | ||g      }t         |d      dg       t         |d      dg       t         |d      dg       t         |d      dg       t         |d      dg       t         |d	      dg       t         |g d
      t        j                  g dg             t        j                  g d      } t        | d   | d   t        j                  dg            }t        | d   | d   t        j                  dg            }t	        | ||g      }t         |d      dg       t         |d      dg       t         |d      dg       t         |d      dg       t         |d      dg       t         |d      dg       t         |d      dg       t         |g d      t        j                  g dg             t        j                  ddg      } t        ddt        j                  dg            }t	        | |g      }t         |d      dg       t         |d      dg       t         |d      dg       t         |g d      t        j                  g dg             y )N)r   r/   r$   dtyper   r%   r*   r/   rH   r$   rv   )	r   rv   r=   r	  g      @g      @r$   g      @r/   )	r*   r%   r*   r*   r%   r%   r%   r%   r*   )rC   r>      rC   r>   r:  )   r+   rC   r:  rv   r%   r>   )r*   r%   r*   r%   r*   r%   r*   )r/   r%   r   r%  )r   r'   floatr   r   r   )tss1s2r   ss        r    test_OdeSolutionrC    sU   	)5	)B	RUBqE288RD>	:B	RUBqE288QC=	9B
b2r(
#CR2$Q"Q"Q!Q!Q!9::;<> 
+	B	RUBqE288RD>	:B	RUBqE288QC=	9B
b2r(
#CR2$R2$Q"Q"Q!R1#R1#./4568 
1a&	BAq"((B4.1A
b1#
CQ"Q"Q"Y<.!9:r"   c                     d } d }d}t        j                  g d      } |||      }d} | ||      j                         }t        | ||||d       \  }}t	        ||dd       t        | |||||      \  }}t	        ||dd       y )Nc                     t        j                  d|d   z  d|d   z  |d   z  z   d|d   z  d|d   z  |d   z  z
  d|d   dz  z  z
  d|d   dz  z  g      S )Nr   r   r   r%   r/   r   r   r9   r   s     r    r   ztest_num_jac.<locals>.fun  sz    yyAaDL31:!,,1Q4K#!*qt++cAaDAIo=!A$!)O
  	r"   c                     t        j                  dd|d   z  d|d   z  gdd|d   z  d|d   z  z
  d|d   z  gdd|d   z  dgg      S )	Nr   r   r/   r%   r   g     g    8Ar   r&   r   s     r    r   ztest_num_jac.<locals>.jac  sk    xxC!A$Jad
+4!A$;qt+TAaD[9ad
A
  	r"   r%   )r%   r   r   h㈵>r   )r   r'   ravelr   r   )	r   r   r   r   J_true	thresholdrY   J_numfactors	            r    test_num_jacrM    s     	
A
AAYFIAq	ACAq)T:ME6E648CAq)V<ME6E648r"   c            
         d } d }t         j                  j                  d       d}t         j                  j                  |      } ||      }t	        |      } | d|d d d f         j                         }t        | d|j                         |dd ||f      \  }}t        | d|j                         |dd       \  }	}
t        |	|j                         dd	       t        |
|dd	       t         j                  j                  dd|
      }t        | d|j                         |d|||f      \  }}t        | d|j                         |d|      \  }	}
t        |	|j                         dd	       t        |
|dd	       y )Nc                     |dd  dz  |d d dz  z
  }t        j                  |j                  d         }t        j                  |d|z  f      t        j                  d|z  |f      z   S )Nr%   rH   r*   r/   )r   r   rI   r0   )r   r   r   r   s       r    r   z test_num_jac_sparse.<locals>.fun  sc    abE1Hq"vqy HHQWWQZ yy!QU$ryy!a%'<<<r"   c                     t        j                  | | ft              }d|d<   d|d<   t        d| dz
        D ]  }d|||dz
  |dz   f<    d|d<   d|d<   |S )Nr8  r%   )r   r   r   r%   r/   )r*   r*   )r*   r=   )r   r   intrange)rM   Ar`   s      r    	structurez&test_num_jac_sparse.<locals>.structure  sr    HHaV3'$$q!a% 	#A!"AaQAo	#&	&	r"   r   r   :0yE>)r   -q=r   r   )r   )
r   randomseedrandnr   rH  r   r   toarrayuniform)r   rU  rM   r   rT  groupsrY   J_num_sparsefactor_sparseJ_num_densefactor_denserL  s               r    test_num_jac_sparserb    sd   =
	 IINN1
A
		A!A1FAqDz  "A #*#q!'')Qd45v;#@L- 'Q	1dD IKK!5!5!7U,L-e%H YYq%a0F")#q!'')Qf45v;#@L- 'Q	1dF KKK!5!5!7U,L-e%Hr"   c                  t   d } d }d }d }d }d|_         d|_         d|_        d	}d
}d}d}t        j                  | |z        d|z
  |z  t        j                  | |z        z   z  }	dd|	g}
d	|z  }t	        | d|g|
|||gd|||fd|dd
      }|j
                  d   }|j
                  d   }|j
                  d	   }t        |dt        j                  z  dt        j                  z  g       t        |dt        j                  z  dt        j                  z  g       t        ||g       t        j                  d|d   d      }|j                  |      }t        |d   t        j                  ||z        dd       t        |d   t        j                  ||z         dd       t        |d	   dd|	z
  |	z  t        j                  | |z        z  dz   z  dd       |j                  |      }|j                  |      }|j                  |      }t        |d   t        j                  |d         d       t        |d   t        j                  |d                t        |d   t        j                  |d                t        |d   t        j                  |d         d       t        |d	   |g       y )Nc                 8    |\  }}}| |z  ||z  ||z  d|z
  z  gS )Nr%   r,   r   womegarN   zfinalr   r   r   s           r    sys3ztest_args.<locals>.sys3  s0    1aq%'1Q3A;//r"   c           
      h    |\  }}}t        j                  d| dg|ddgdd|dd|z  z
  z  gg      }|S )Nr   r%   r/   r&   )	r   rf  rg  rN   rh  r   r   r   r   s	            r    sys3_jacztest_args.<locals>.sys3_jac  sP    1aHHq5&!nam!QAaC[)+ , r"   c                     |\  }}}|S r   r,   re  s           r    sys3_x0decreasingz$test_args.<locals>.sys3_x0decreasing      1ar"   c                     |\  }}}|S r   r,   re  s           r    sys3_y0increasingz$test_args.<locals>.sys3_y0increasing	  rn  r"   c                     |\  }}}||z
  S r   r,   re  s           r    sys3_zfinalztest_args.<locals>.sys3_zfinal  s    1a6zr"   r*   r%   Tr/   r>   r$   gGz?r   r   g|=gvIh%<=)r   r   r   r   r   r   r   r   r	  g      ?g      ?   g&.>rW  r   gvIh%,=r   )r   r   r   rl   r   r   r   pir   r   r1   r2   r   r]   )ri  rk  rm  rp  rr  rg  rN   tfinalrh  z0w0tendr   
x0events_t
y0events_tzfinalevents_tr   rf  x0eventsy0eventszfinaleventss                        r    	test_argsr    s   0
 #%"#KE	AFF 
6		QZ/"&&!F2CC	DB
RB
 V8D
D1d)R-/@+N!%UAv,>"U	,C aJaJ\\!_NJRUUCI 67JbeeT"%%Z 89NVH- 	A~a(#.A
AAaD"&&q/5AAaD266%'?*EBAaD!q2vrk2661"Q$<7!;<E+ wwz"Hwwz"H77>*LHQKx{!;%HHQKhqk!:;HQKhqk!:;HQKx{!;%HLOfX.r"   c            	      (   d } t        | dddgddg      }t        j                  t        j                  j	                  |j
                  d d df   t        j                  d      z
              }t        j                  t        d	      5  t        | dddgdd
g      }t        j                  t        j                  j	                  |j
                  d d df   t        j                  d      z
              }d d d        |k  sJ y # 1 sw Y   xY w)Nc                     |d   |d   fS )Nr   r%   r,   r   s     r    rY   ztest_array_rtol.<locals>.fI  s    tQqTzr"   rQ        ?r   r   r*   r%   zAt least one element...r   gؗҜ<)
r   r   r{   r|   r}   r   rl   r   warnsr   )rY   r   err1err2s       r    test_array_rtolr  F  s     AvBxtTl
;C66"))..q"uq	!9:;D 
k)B	C @6B84-@vvbiinnSUU1b5\BFF1I%=>?@
 $;;@ @s   A-DDr   c                     t        t        ddgt        j                  d      |       }t	        |j
                         t        |j                  d       t        |j                  dd       y )Nr   rC   rH   r   r  r   r   )
r   r!   r   onesr   r   r   r   r   r   )r   results     r    test_integration_zero_rhsr  X  sH    x!R"''!*VDFFNN"FHHc.r"   c                     d } d}t        j                  t        |      5  t        | ddgd       d d d        t        | ddgd      }t	        |j
                  d	   t        j                  d
             y # 1 sw Y   FxY w)Nc                     ||z  S r   r,   )r   r   as      r    fun_with_argz,test_args_single_value.<locals>.fun_with_arga  s    s
r"   z#Supplied 'args' cannot be unpacked.r   )r   r   r%   r*   )r   )r*   r   r*   g)r   r
   	TypeErrorr   r   r   r   rl   )r  r   r   s      r    test_args_single_valuer  `  so     4G	y	0 8,1#B78 L(QCe
<CCEE%L"&&,/	8 8s   A77B f0_fillc           	          d}t        j                  t        |      5  t        t        ddgt        j                  d|              d d d        y # 1 sw Y   y xY w)Nz8All components of the initial state `y0` must be finite.r   r   rC   rH   )r   r
   r   r   r!   r   full)r  msgs     r    test_initial_state_finitenessr  l  sH     EC	z	- :(QGRWWQ%89: : :s   (AA)r   r   r   r   r   c                     d }t        |dt        j                  dg      |       }|j                  sJ t	        |j
                  d   d       y )Nc                     d|z  S rp   r,   r   s     r    rY   ztest_zero_interval.<locals>.fy  r  r"   )r#  r#  r  r  r  )r   r   r'   r   r   r   )r   rY   r   s      r    test_zero_intervalr  t  s?    

Az288SE?6
BC;;;CEE%L#&r"   c                 z    dfd}t        |dft        j                  dg      |       }|j                  sJ y)zRegression test for gh-17341g-C6?c                 .    | kD  rt        d      d|z  S )N'Function was evaluated outside intervalr/   )r   )r   r   SMALLs     r    rY   z/test_tbound_respected_small_interval.<locals>.f  s    u9FGG1ur"   r#  r%   r  Nr   r   r'   r   )r   rY   r   r  s      @r    $test_tbound_respected_small_intervalr    s;     E AU|RXXqc]6
BC;;;r"   c           
          d fd}t        |dt        j                  ddg      dddd	d
      }|j                  sJ y)zRegression test for gh-8848c                 *    d| z  d| z  d| dz  z   z  z   S )NrC   ru   r/   r,   )rs    r    Vz0test_tbound_respected_larger_interval.<locals>.V  s"    1urAv1---r"   c                     | dk  s| dkD  rt        d      |d   }|d   }t        j                  |       }||z  }d|z  d |      z
  |z  d|z  |z  z   z  }t        j                  ||g      S )Nr/   r  r   r%   g       gɿ)r   r   rl   r'   )r   pPQr  dPdrdQdrr  s          r    funcz3test_tbound_respected_larger_interval.<locals>.func  s    s7a!eFGGaDaDFF1I1uaxD1Q4K1,q1uqy89xxt%%r"   )r  r/   r%   r  gQ?FNrV  rG  )r   r   r   r  r   r   r  )r   r  r  r  s      @r    %test_tbound_respected_larger_intervalr    sK    .& t((As8, $"'"  "F >>>r"   c                 H    d dfd	} |ddd      }|j                   sJ y)zRegression test for gh-9198c                 T    | dkD  rt        d      t        j                  g d      }|S )N   zCalled outside interval)ges='?gRr<>r#  r#  )r   r   r'   )r   r   yprimes      r    reactions_funcz8test_tbound_respected_oscillator.<locals>.reactions_func  s/    G677 + , r"   c                     t        j                  g d      }d}d}t        ||f|j                         d||z
        S )N)gLOѧ`@gCYZa@r'  r#  r'  g      i@T)r   r   )r   r'   r   copy)t_endn_timepointsshortest_delay_line
init_statet0t1r  s         r    run_sim2z2test_tbound_respected_oscillator.<locals>.run_sim2  sF    XXDE
b#*&*"$r'	+ 	+r"   i  rG   N)rC   i )r   )r   r  r  r  s      @r     test_tbound_respected_oscillatorr    s)    + dC%F>>>r"   c                     d} d}t        j                  ddg      }dD ]  \  }}t        j                  t        j                  t
        j                  ddfD ]  }t        t        |||t         j                  t        ||      t        j                  ||z
        || |
      }|dz  }t        t        ||||t        ||      t        j                  ||z
        || |
      }t        ||         y	)
z0Verify that select_inital_step respects max_stepr   r   r   r   ))r$   r   )r$   r%   rH   r%   r/   N)r   r'   r   error_estimator_orderr   r   r   r7   r)  signr   )	r   r   r   r  r2  method_orderstep_no_maxr   step_with_maxs	            r    test_inital_maxstepr    s    DD	3*	B) 2W!77 66"88	 	2L .lBG,.FF,8B,?,.GGGbL,A,8,0$8K #1}H/b"g,4,8R,@,.GGGbL,A,8,0$8M =1'	22r"   )[	itertoolsr   numpy.testingr   r   r   r   r   r	   r   r
   r   numpyr   scipy.optimize._numdiffr   scipy.integrater   r   r   r   r   r   r   r   scipy.integrate._ivp.commonr   r   scipy.integrate._ivp.baser   scipy.sparser   r   r!   r(   r-   r4   r7   r:   r?   rA   rE   rZ   ra   rc   rg   ri   rn   rq   rs   rx   r   r   r   mark	fail_slowr   r   slowparametrizer   r   r   r   r   r   r  r  r  r  r  r   r*  r-  r/  r6  rC  rM  rb  r  r  r  r  nanr)  r  r  r  r  r  r  r,   r"   r    <module>r     s   P P  *  1 L L L ' D 9 /5(:
G
H
>6:@)
9;
=G@)X q> >6 GF #<= > ,m1` aV,: -:'&'9T"3J;7|6'8'CTA7";&8#8L(;V98*IZP/f$ #VW/ X/	0 RVVRVV$45: 6: #MN' O' #MN O #MN O4 #MN O02r"   