
    bij                        d dl Z d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dl
Z
d dlmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ e
j8                  j:                  Ze
j8                  j<                  Z	 	 ddZg dZ d Z!d	 Z"d
 Z#d Z$ G d d      Z% G d d      Z& G d d      Z' G d d      Z( e	e       G d d             Z) e	e      d        Z*d Z+d Z, G d d      Z-y)    N)xp_assert_equalxp_assert_closeassert_array_almost_equalassert_almost_equalmake_xp_test_case)raises)KroghInterpolatorkrogh_interpolateBarycentricInterpolatorbarycentric_interpolateapproximate_taylor_polynomialCubicHermiteSplinepchipPchipInterpolatorpchip_interpolateAkima1DInterpolatorCubicSplinemake_interp_spline)_run_concurrent_barrierc                    |i }t         j                  j                  d      }g d}t        t	        dt        |      dz               }|j                  |t        |      dz   z  d        |j                  d|z    j                  |      }	t        j                  |      }
| t        u r5 |j                  d|z    j                  |      }  | ||	|fd|i||
      }n  | ||	fd|i||
      }|xs d|	j                  d | z   |z   |	j                  |d  dd  z   }|j                  |k(  sJ |r||	j                  dkD  rm| t        u r8  | t        |      t        |	      t              fd|i|t        |
             n-  | t        |      t        |	      fd|i|t        |
             |
j                  dkD  r||	j                  d | dt        |      z  z   |	j                  |d  dd  z   }|	t        d       f||	j                  z  z  dz      }|j                  |      }t        j                   ||      \  }}	t#        ||	       y y y )	N  )r               r   r      axis r   )nprandomRandomStatelistrangeleninsertrand	transposezerosr   shapesizeslicendimreshapebroadcast_arraysr   )interpolator_clsx_shapey_shapederiv_shaper   
extra_argsrngxsyxidydxyitarget_shapebs_shapeyvs                   _/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/scipy/interpolate/tests/test_polyint.pycheck_shaperB      s[   

))


%CAU1c'l1n%&AHHTS\!^$a(4'>#--a0A	'	B--sxx$.*44Q7BaDBtBzB2F<a<<<R@ &B!''%4.8 !qr 23L88|### 166A:11+T!Wd1gtDz + +)++/85+T!Wd1g +D +)++/85 
ww{{*775D>DW$55qr8JJt/478ZZ!##B+AA +{    )r    r   r!   )r   r      c                  2   d } t         t        t        t        t        t
        | fD ]p  }t        D ]e  }t        D ]Z  }t        t        |       t        |            D ]6  }|t
        k7  rt        |||d |       dD ]  }d|i}t        |||d ||        8 \ g r y )Nc                     t        | ||      S Nr   )r   r8   r:   r   s      rA   
spl_interpztest_shapes.<locals>.spl_interpF   s    !!QT22rC   )naturalclampedbc_type)
r	   r   r   r   r   r   SHAPESr&   r'   rB   )rK   ips1s2r   bcextras          rA   test_shapesrU   D   s    3 !"9;M);
D 
G 	GB G!3r7(CG4 GD[(#BBd;"8 GB%.OE'BD$FG	GG	G
GrC   c                      t         t        fD ]Q  dfd	} t        D ]@  }t        D ]5  }t        t	        |       t	        |            D ]  }t        | ||d|        7 B S y )Nc                 ,     | ||      j                   S N)derivatives)r8   r:   r   rP   s      rA   interpolator_derivsz/test_derivs_shapes.<locals>.interpolator_derivsW   s    aD>---rC   r   rD   )r	   r   rO   r&   r'   rB   )rZ   rQ   rR   r   rP   s       @rA   test_derivs_shapesr[   U   sv     "9: I	.  	IB I!3r7(CG4 ID 3RT4HII	I	IrC   c                  &   dd} dd}dd}dd}dd}dd}dd}dd}dd	}dd
}	dd}
dd}dd}| |||||||||	|
||fD ]K  }t         D ]@  }t         D ]5  }t        t        |       t        |            D ]  }t        |||d|        7 B M y )Nc                 0    t        | ||      j                  S rX   )r	   
derivativerJ   s      rA   krogh_derivz&test_deriv_shapes.<locals>.krogh_deriva   s     At,777rC   c                 0    t        | ||      j                  S rX   )r   r^   rJ   s      rA   
bary_derivz%test_deriv_shapes.<locals>.bary_derivd   s    &q!T2===rC   c                 8    t        | ||      j                         S rX   r   r^   rJ   s      rA   pchip_derivz&test_deriv_shapes.<locals>.pchip_derivg   s    Q4 ++--rC   c                 :    t        | ||      j                  d      S Nr   rc   rJ   s      rA   pchip_deriv2z'test_deriv_shapes.<locals>.pchip_deriv2j   s    Q4 ++A..rC   c                 8    t        | ||      j                         S rX   r   antiderivativerJ   s      rA   pchip_antiderivz*test_deriv_shapes.<locals>.pchip_antiderivm   s    Q4 //11rC   c                 :    t        | ||      j                  d      S rf   ri   rJ   s      rA   pchip_antideriv2z+test_deriv_shapes.<locals>.pchip_antideriv2p   s    Q4 //22rC   c                 4     G d dt               } || ||      S )Nc                       e Zd Zd Zy)9test_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.Pc                 0    t        j                  | |d      S )Nr   )r   __call__)selfr8   s     rA   rr   zBtest_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.P.__call__u   s    (11$1==rC   N)__name__
__module____qualname__rr   r    rC   rA   Prp   t   s
    >rC   rw   )r   )r8   r:   r   rw   s       rA   pchip_deriv_inplacez.test_deriv_shapes.<locals>.pchip_deriv_inplaces   s    	! 	 At}rC   c                 8    t        | ||      j                         S rX   )r   r^   rJ   s      rA   akima_derivz&test_deriv_shapes.<locals>.akima_derivz   s    "1a.99;;rC   c                 8    t        | ||      j                         S rX   )r   rj   rJ   s      rA   akima_antiderivz*test_deriv_shapes.<locals>.akima_antideriv}   s    "1a.==??rC   c                 8    t        | ||      j                         S rX   )r   r^   rJ   s      rA   cspline_derivz(test_deriv_shapes.<locals>.cspline_deriv   s    1a&1133rC   c                 8    t        | ||      j                         S rX   )r   rj   rJ   s      rA   cspline_antiderivz,test_deriv_shapes.<locals>.cspline_antideriv   s    1a&5577rC   c                 :    t        | ||      j                         S rH   )r   r^   rJ   s      rA   
bspl_derivz%test_deriv_shapes.<locals>.bspl_deriv   s    !!QT2==??rC   c                 :    t        | ||      j                         S rH   )r   rj   rJ   s      rA   bspl_antiderivz)test_deriv_shapes.<locals>.bspl_antideriv   s    !!QT2AACCrC   r    rD   )rO   r&   r'   rB   )r_   ra   rd   rg   rk   rm   rx   rz   r|   r~   r   r   r   rP   rQ   rR   r   s                    rA   test_deriv_shapesr   `   s    8>./23<@48@D J\CV 0+/^M 6  	6B 6!3r7(CG4 6DBB566	66rC   c                  T   g d} g d}t         t        t        fD ]0  } || |      }t         ||       t	        j
                  |             2 g d}t        | ||      }t         ||       t	        j
                  |             t         || d      t	        j
                  |             y )Nr   r   r   r   )r   r                 ?r   )r   y             r   y              @r   )r	   r   r   r   r"   asarrayr   )r8   r:   rP   pr<   s        rA   test_complexr      s    AA "9;G -q!H!bjjm,- D1a&AAaD"**Q-(AaGRZZ-.rC   c                       e 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 Zd Zd Zd Zd Zd Zd Zd Zy)	TestKroghc                     t         j                  j                  g d      | _        t        j                  ddd      | _        t        j                  ddd      | _        | j                  | j                        | _        y N)rE   r   r   r   r   d   rE   r"   
polynomial
Polynomial	true_polylinspacetest_xsxsysrs   s    rA   setup_methodzTestKrogh.setup_method   sU    112CD{{2a,++b1%..)rC   c                     t        | j                  | j                        }t        | j	                  | j
                         || j
                               y rX   r	   r   r   r   r   r   rs   rw   s     rA   test_lagrangezTestKrogh.test_lagrange   5    dggdgg.DNN4<<84<<IrC   c                    t        | j                  | j                        }t        | j	                  d       |d      d       t        | j	                  t        j                  d             |t        j                  d            d       y )N   Fcheck_0d)r	   r   r   r   r   r"   arrayr   s     rA   test_scalarzTestKrogh.test_scalar   sY    dggdgg.DNN1-qteDDNN288A;7288A;RWXrC   c                 $   t        | j                  | j                        }|j                  | j                        }t        |j                  d         D ]:  }t         | j                  j                  |      | j                        ||          < y Nr   )
r	   r   r   rY   r   r&   r,   r   r   derivrs   rw   Dis       rA   test_derivativeszTestKrogh.test_derivatives   sp    dggdgg.MM$,,'qwwqz" 	&A 7 4 4Q 7 E !!&	&rC   c                 R   t        | j                  | j                        }|j                  | j                  t        | j                        dz         }t        |j                  d         D ]:  }t         | j                  j                  |      | j                        ||          < y )Nr   r   )r	   r   r   rY   r   r'   r&   r,   r   r   r   r   s       rA   test_low_derivativeszTestKrogh.test_low_derivatives   s~    dggdgg.MM$,,s477|A~6qwwqz" 	&A 7 4 4Q 7 E !!&	&rC   c                     t        | j                  | j                        }d}|j                  | j                  |      }t        |      D ]+  }t        |j                  | j                  |      ||          - y N
   )r	   r   r   rY   r   r&   r   r^   rs   rw   mrr   s        rA   test_derivativezTestKrogh.test_derivative   sa    dggdgg.MM$,,q)q 	CAT\\! <QqTB	CrC   c           	      P   t        | j                  | j                        }t        t	        | j                        dt	        | j                        z        D ]N  }t        |j                  | j                  |      t        j                  t	        | j                                     P y rf   )
r	   r   r   r&   r'   r   r^   r   r"   r+   rs   rw   r   s      rA   test_high_derivativezTestKrogh.test_high_derivative   sn    dggdgg.s477|Qs477|^4 	=AT\\! < "T\\): ;=	=rC   c                    | j                   }t        j                  j                  g d      }t        j                  j                  g d      }t        j                   || j
                         || j
                         || j
                        fd      }t        | j
                  |d      }|j                  | j                        }t        |j                  d         D ]  }t        ||   t        j                   |j                  |      | j                         |j                  |      | j                         |j                  |      | j                        fd              y Nr   rE   r   r      r   r   r   rI   r   )r   r"   r   r   stackr   r	   rY   r   r&   r,   r   r   rs   poly1poly2poly3r   rw   r   r   s           rA   test_ndim_derivativeszTestKrogh.test_ndim_derivatives   s	   ((8(();<XXuTWW~uTWW~uTWW~FRPdggr2MM$,,'qwwqz" 	/AAaDHHnekk!nT\\&B&4ekk!nT\\&B&4ekk!nT\\&B&D +-./	/rC   c                    | j                   }t        j                  j                  g d      }t        j                  j                  g d      }t        j                   || j
                         || j
                         || j
                        fd      }t        | j
                  |d      }t        |j                        D ]  }t        |j                  | j                  |      t        j                   |j                  |      | j                         |j                  |      | j                         |j                  |      | j                        fd              y r   )r   r"   r   r   r   r   r	   r&   nr   r^   r   r   rs   r   r   r   r   rw   r   s          rA   test_ndim_derivativezTestKrogh.test_ndim_derivative   s    ((8(();<XXuTWW~uTWW~uTWW~FRPdggr2qss 	/AALLq9HHnekk!nT\\&B&4ekk!nT\\&B&4ekk!nT\\&B&D +-./	/rC   c                     t        | j                  | j                        }t        | j	                  | j
                         || j
                               y rX   r   r   s     rA   test_hermitezTestKrogh.test_hermite   r   rC   c                 \   g d}t        j                  ddgddgddgg      }t        ||      }t        |j                  d         D cg c]  }t        ||d d |f          }}t        j
                  ddd      }t         ||      t        j                  |D cg c]
  } ||       c}      j                         t        |j                  |      t        j                  t        j                  |D cg c]  }|j                  |       c}      d             y c c}w c c}w c c}w )	Nr   r   r   r   r   r   r   r   r   )r   r   r   )r"   r   r	   r&   r,   r   r   r   TrY   r*   )rs   r   r   rw   r   Pir   r   s           rA   test_vectorzTestKrogh.test_vector   s    XX!uaUAa5)*b$5:288A;5GH2ac7+HH++b3'AgJJJB'?q'
'?@BB	DAMM'2RZZ(LAw)?(LM		 I (@(Ls   	DD$6D)c                     t        | j                  | j                        }t         |g       t	        j
                  g              y rX   )r	   r   r   r   r"   r   r   s     rA   
test_emptyzTestKrogh.test_empty   s,    dggdgg."rzz"~.rC   c                 p   t        | j                  | j                        }t        j                   |d            dk(  sJ t        j                   |t        j
                  d                  dk(  sJ t        j                   |dg            dk(  sJ t        j                   |ddg            dk(  sJ y Nr   r    r!   r   )r   )r	   r   r   r"   r,   r   r   s     rA   test_shapes_scalarvaluez!TestKrogh.test_shapes_scalarvalue   s    dggdgg.xx!~###xx"((1+'2---xx1#4'''xx1Q%!T)))rC   c                    t        | j                  | j                        }|j                  }t	        j
                  |j                  d            |fk(  sJ t	        j
                  |j                  t	        j                  d                  |fk(  sJ t	        j
                  |j                  dg            |dfk(  sJ t	        j
                  |j                  ddg            |dfk(  sJ y Nr   r   r   )r	   r   r   r   r"   r,   rY   r   rs   rw   r   s      rA   "test_shapes_scalarvalue_derivativez,TestKrogh.test_shapes_scalarvalue_derivative  s    dggdgg.CCxxa()aT111xxbhhqk23t;;;xxqc*+1v555xxq!f-.1a&888rC   c           	      X   t        | j                  t        j                  | j                  t        j
                  d                  }t        j                   |d            dk(  sJ t        j                   |dg            dk(  sJ t        j                   |ddg            dk(  sJ y Nr   r   )r   )r   r   r   )r   r   )r	   r   r"   outerr   aranger,   r   s     rA   test_shapes_vectorvaluez!TestKrogh.test_shapes_vectorvalue  s    dggbhhtwwryy|&DExx!~%%%xx1#6)))xx1a&	"f,,,rC   c                 4   t        | j                  t        j                  | j                  dg            }t        j
                   |d            dk(  sJ t        j
                   |dg            dk(  sJ t        j
                   |ddg            dk(  sJ y Nr   r   r!   )r   r   )r   r   )r	   r   r"   r   r   r,   r   s     rA   test_shapes_1d_vectorvaluez$TestKrogh.test_shapes_1d_vectorvalue  sy    dggbhhtwws&;<xx!~%%%xx1#6)))xx1Q%!V+++rC   c           	         t        | j                  t        j                  | j                  t        j
                  d                  }|j                  }t        j                  |j                  d            |dfk(  sJ t        j                  |j                  dg            |ddfk(  sJ t        j                  |j                  ddg            |ddfk(  sJ y Nr   r   r   r   )	r	   r   r"   r   r   r   r   r,   rY   r   s      rA   "test_shapes_vectorvalue_derivativez,TestKrogh.test_shapes_vectorvalue_derivative  s    dggbhhtwwryy|&DECCxxa()aV333xxqc*+1ay888xxqe,-!Q:::rC   c           
         t        | j                  | j                        }t        }t	         || j
                         || j                  | j                  | j
                               t	        |j                  | j
                  d       || j                  | j                  | j
                  d             t	        |j                  | j
                  d       || j                  | j                  | j
                  ddg             y )Nr   derr   r   )r	   r   r   r
   r   r   r^   rY   )rs   rw   kis      rA   test_wrapperzTestKrogh.test_wrapper!  s    dggtww/AdllOR$,,-OPALLq9tww1E	GAMM$,,:twwAq6J	LrC   c           	          g d}t        j                  g d      }t        ||      }t        t	         ||      |z
  |j                  |d      z        t        j                  |      d       y )N)r      i  i  i  i  i|  i$	  i  i  i   i03  i`  )gffffffg닥ąg䑉g!p$ЀgV0޿gx*ZֿgDпg2]g H.g9Cg6D.gG/g?r   g|=atol)r"   r   r	   r   absr^   
zeros_like)rs   r8   
offset_cdffs       rA   test_int_inputszTestKrogh.test_int_inputs*  sa    XX ? @
 a,QqTJ.!,,q!2DDEj1	?rC   c                 R   t        j                  g d      t        j                  g d      }}t        ||      }|j                  d      }t        ||j                        j                  d      dt        ||j
                        j                  d      z  z   }t        ||d       y )N)r   r   r   r   r   )r   r   r   r   r   r   r   V瞯<r   )r"   r   r	   rY   realimagr   )rs   r8   r:   funccmplxcmplx2s         rA   test_derivatives_complexz"TestKrogh.test_derivatives_complex7  s    xx)*BHH5K,L1 A&  ##Aqvv.::1=&q!&&1==a@@AvE2rC   c                     t        j                  t        d      5  t        t	        j
                  d      t	        j                  d             d d d        y # 1 sw Y   y xY w)Nz40 degrees provided,match(   )pytestwarnsUserWarningr	   r"   r   onesr   s    rA   test_high_degree_warningz"TestKrogh.test_high_degree_warningA  s@    \\+-CD 	:biimRWWR[9	: 	: 	:s   3AA!c                 j     t         j                   j                        } fd}t        d||       y )Nc                 *     |j                          y rX   r   _interprs   s     rA   	worker_fnz-TestKrogh.test_concurrency.<locals>.worker_fnH      477OrC   r   )r	   r   r   r   rs   rw   r  s   `  rA   test_concurrencyzTestKrogh.test_concurrencyE  s*    dggtww/	 	 Iq1rC   N)rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r    rC   rA   r   r      su    *JY
&&C=//J
/*9-,;L?3:2rC   r   c                       e Zd Zd Zy)
TestTaylorc                     d}t        t        j                  d|dd      }t        |dz         D ]$  }t	         |d      d       |j                         }& t	         |d      d       y )NrE   r   r      )r   r"   expr&   r   r   )rs   degreer   r   s       rA   test_exponentialzTestTaylor.test_exponentialO  s]    )"&&!VQCvax 	A!Q'	A	 	AaD#rC   N)rt   ru   rv   r  r    rC   rA   r  r  N  s    $rC   r  c                       e 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 Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestBarycentricc                     t         j                  j                  g d      | _        t        j                  ddd      | _        t        j                  ddd      | _        | j                  | j                        | _        y r   r   r   s    rA   r   zTestBarycentric.setup_methodY  sU    112CD{{2q#.++b!Q'..)rC   c                     t        | j                  | j                  d      }t         || j                        | j                  | j                               y )Nr   )random_state)r   r   r   r   r   r   r   s     rA   r   zTestBarycentric.test_lagrange_  s7    #DGGTWW1E$,,)EFrC   c                     t        | j                  | j                  d      }t         |d      | j	                  d      d       t         |t        j                  d            | j	                  t        j                  d            d       y )Nr   r7   r   Fr   )r   r   r   r   r   r"   r   r   s     rA   r   zTestBarycentric.test_scalard  sZ    #DGGTWW!<!dnnQ/%@"((1+rxx{(CeTrC   c                 $   t        | j                  | j                        }|j                  | j                        }t        |j                  d         D ]:  }t         | j                  j                  |      | j                        ||          < y r   )
r   r   r   rY   r   r&   r,   r   r   r   r   s       rA   r   z TestBarycentric.test_derivativesi  so    #DGGTWW5MM$,,'qwwqz" 	IA3DNN003DLLA1Q4H	IrC   c                 V   t        | j                  | j                        }|j                  | j                  t        | j                        dz         }t        |j                  d         D ]<  }t         | j                  j                  |      | j                        ||   d       > y )Nr   r   -q=r   )r   r   r   rY   r   r'   r&   r,   r   r   r   r   s       rA   r   z$TestBarycentric.test_low_derivativeso  s    #DGGTWW5MM$,,DGGQ7qwwqz" 	(A3DNN003DLLAaD!&(	(rC   c                     t        | j                  | j                        }d}|j                  | j                  |      }t        |      D ]+  }t        |j                  | j                  |      ||          - y r   )r   r   r   rY   r   r&   r   r^   r   s        rA   r   zTestBarycentric.test_derivativew  sa    #DGGTWW5MM$,,*q 	AAALLq91Q4@	ArC   c           	      P   t        | j                  | j                        }t        t	        | j                        dt	        | j                        z        D ]N  }t        |j                  | j                  |      t        j                  t	        | j                                     P y )NrE   )
r   r   r   r&   r'   r   r^   r   r"   r+   r   s      rA   r   z$TestBarycentric.test_high_derivative~  sn    #DGGTWW5s477|Qs477|^4 	9AALLq9HHS%679	9rC   c                    | j                   }t        j                  j                  g d      }t        j                  j                  g d      }t        j                   || j
                         || j
                         || j
                        fd      }t        | j
                  |d      }|j                  | j                        }t        |j                  d         D ]  }t        ||   t        j                   |j                  |      | j                         |j                  |      | j                         |j                  |      | j                        fd      d        y Nr   r   r   rI   r   r   r   )r   r"   r   r   r   r   r   rY   r   r&   r,   r   r   r   s           rA   r   z%TestBarycentric.test_ndim_derivatives  s   ((8(();<XXuTWW~uTWW~uTWW~FRP#DGGRa8MM$,,'qwwqz" 	(AAaDHHnekk!nT\\&B&4ekk!nT\\&B&4ekk!nT\\&B&D +-. "'(	(rC   c                    | j                   }t        j                  j                  g d      }t        j                  j                  g d      }t        j                   || j
                         || j
                         || j
                        fd      }t        | j
                  |d      }t        |j                        D ]  }t        |j                  | j                  |      t        j                   |j                  |      | j                         |j                  |      | j                         |j                  |      | j                        fd      d        y r$  )r   r"   r   r   r   r   r   r&   r   r   r^   r   r   r   s          rA   r   z$TestBarycentric.test_ndim_derivative  s   ((8(();<XXuTWW~uTWW~uTWW~FRP#DGGRa8qss 	(AALLq9HHnekk!nT\\&B&4ekk!nT\\&B&4ekk!nT\\&B&D +-. "'(	(rC   c                     t        | j                        }|j                  | j                         t	        | j                  | j                         || j                               y rX   )r   r   set_yir   r   r   r   r   s     rA   test_delayedzTestBarycentric.test_delayed  s?    #DGG,	DNN4<<8!DLL/JrC   c                    t        | j                  d d | j                  d d       }|j                  | j                  dd  | j                  dd         t	        | j                  | j                         || j                               y )Nr   )r   r   r   add_xir   r   r   r   s     rA   test_appendzTestBarycentric.test_append  sc    #DGGBQK!=	dggabk*DNN4<<8!DLL/JrC   c                    g d}t        j                  ddgddgddgg      }t        } |||      }t        |j                  d         D cg c]  } |||d d |f          }}t        j
                  ddd      }t         ||      t        j                  |D cg c]
  } ||       c}      j                         y c c}w c c}w )Nr   r   r   r   r   r   r   )	r"   r   r   r&   r,   r   r   r   r   )	rs   r   r   BIrw   r   r   r   r   s	            rA   r   zTestBarycentric.test_vector  s    XX1v1v1v./$r2J(-bhhqk(:;1bR1X;;++b!S)AgJJJB'?q'
'?@BB	D < (@s   C Cc                 p   t        | j                  | j                        }t        j                   |d            dk(  sJ t        j                   |t        j
                  d                  dk(  sJ t        j                   |dg            dk(  sJ t        j                   |ddg            dk(  sJ y r   )r   r   r   r"   r,   r   r   s     rA   r   z'TestBarycentric.test_shapes_scalarvalue  s    #DGGTWW5xx!~###xx"((1+'2---xx1#4'''xx1a&	"d***rC   c                    t        | j                  | j                        }|j                  }t	        j
                  |j                  d            |fk(  sJ t	        j
                  |j                  t	        j                  d                  |fk(  sJ t	        j
                  |j                  dg            |dfk(  sJ t	        j
                  |j                  ddg            |dfk(  sJ y r   )r   r   r   r   r"   r,   rY   r   r   s      rA   r   z2TestBarycentric.test_shapes_scalarvalue_derivative  s    #DGGDGG4CCxxa()aT111xxbhhqk23t;;;xxqc*+!u444xxqe,-!A666rC   c           	      X   t        | j                  t        j                  | j                  t        j
                  d                  }t        j                   |d            dk(  sJ t        j                   |dg            dk(  sJ t        j                   |ddg            dk(  sJ y r   )r   r   r"   r   r   r   r,   r   s     rA   r   z'TestBarycentric.test_shapes_vectorvalue  s    #DGGRXXdggryy|-LMxx!~%%%xx1#6)))xx1a&	"f,,,rC   c                 4   t        | j                  t        j                  | j                  dg            }t        j
                   |d            dk(  sJ t        j
                   |dg            dk(  sJ t        j
                   |ddg            dk(  sJ y r   )r   r   r"   r   r   r,   r   s     rA   r   z*TestBarycentric.test_shapes_1d_vectorvalue  sy    #DGGRXXdggs-CDxx!~%%%xx1#6)))xx1a&	"f,,,rC   c           	         t        | j                  t        j                  | j                  t        j
                  d                  }|j                  }t        j                  |j                  d            |dfk(  sJ t        j                  |j                  dg            |ddfk(  sJ t        j                  |j                  ddg            |ddfk(  sJ y r   )	r   r   r"   r   r   r   r   r,   rY   r   s      rA   r   z2TestBarycentric.test_shapes_vectorvalue_derivative  s    #DGGBHHTWWRYYq\,JKCCxxa()aV333xxqc*+1ay888xxq!f-.1a);;;rC   c           
         t        | j                  | j                  d      }t        }t	         || j
                         || j                  | j                  | j
                  d             t	        |j                  | j
                  d       || j                  | j                  | j
                  dd             t	        |j                  | j
                  d       || j                  | j                  | j
                  ddgd             y )Nr   r  r   )r   r7   r   )r   r   r   r   r   r   r^   rY   )rs   rw   bis      rA   r   zTestBarycentric.test_wrapper  s    #DGGTWW!<$$,,DGGTWWdllPQ)RST\\15477DGGT\\qaH	JdllA6477DGGT\\1v1M	OrC   c                     dt        j                  dd      z  }t        j                  dd      }t        ||d      }t        |t        j                  d             y )Ni  r      g     @g      #@)r"   r   r   r   r   )rs   r8   r:   values       rA   test_int_inputzTestBarycentric.test_int_input  sG    299Q##IIa'1j9E2::c?3rC   c                 n   d}t        j                  |dz         j                  t         j                        }t        j                  |t         j
                  z  |z        }d|z  }|dxx   dz  cc<   |dxx   dz  cc<   t        |      }|j                  d   }t        |j                  d|z  z  |       y )NiL  r   r   r         ?r   )	r"   r   astypefloat64cospir   wir   )rs   r   jr8   wrw   factors          rA   test_large_chebyshevz$TestBarycentric.test_large_chebyshev  s     IIa!e##BJJ/FF1ruu9q=! AI	!	"#A& aADDAJ/3rC   c                     t        ddgddg      }t        j                  d      5   ||j                        }d d d        t	        |j
                  j                                y # 1 sw Y   .xY w)Nr   r   r   raise)divide)r   r"   errstater;   r   r=   ravel)rs   rw   r=   s      rA   test_warningzTestBarycentric.test_warning  s\     $QFQF3[[( 	144B	
 	B

-	 	s   A''A0c                     t        j                  g d      }t        j                  g d      }t        j                  t        d      5  t        ||       d d d        y # 1 sw Y   y xY w)N)皙?r:  ?r:  r   z)Interpolation points xi must be distinct.r   )r"   r   r  r   
ValueErrorr   )rs   xisr   s      rA   test_repeated_nodez"TestBarycentric.test_repeated_node  sR     hh+,XXl#]]:!LN 	-#C,	- 	- 	-s   
A  A)c                 j     t         j                   j                        } fd}t        d||       y )Nc                 *     |j                          y rX   r  r	  s     rA   r  z3TestBarycentric.test_concurrency.<locals>.worker_fn  r  rC   r   )r   r   r   r   r  s   `  rA   r  z TestBarycentric.test_concurrency  s*    #DGGTWW5	 	 Iq1rC   N)rt   ru   rv   r   r   r   r   r   r   r   r   r   r(  r+  r   r   r   r   r   r   r   r8  rC  rI  rO  r  r    rC   rA   r  r  X  s}    *G
U
I(A9( (K
K
D+7--<O442	.-2rC   r  c                   J    e Zd ZddZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)	TestPCHIPc                     t         j                  j                  d      }t        j                  |j                  |            }|j                  |      }t	        ||      ||fS )Nr   )r"   r#   r$   sortr   )rs   nptsr7   r;   r=   s        rA   _make_randomzTestPCHIP._make_random  sN    ii##D)WWSZZ%&ZZR}b"$$rC   c                 *   | j                         \  }}}t        t        |      dz
        D ]e  }||   ||dz      }}||   ||dz      }}||kD  r||}}t        j                  ||d      }	 ||	      }
||
dz   k  |
|dz   k  z  j                         reJ  y )Nr   r   r   rW  r&   r'   r"   r   allrs   r   r;   r=   r   x1x2y1y2xpyps              rA   test_overshootzTestPCHIP.test_overshoot%  s    %%'	2rs2wqy! 	CAUBqsGBUBqsGBBwRBRR(B2B2:%"U
*:;@@BBB	CrC   c                    | j                         \  }}}t        t        |      dz
        D ]_  }||   ||dz      }}||   ||dz      }}t        j                  ||d      }	 ||	      }
||z
  |
dd  |
d d z
  z  dkD  j                         r_J  y )Nr   r   r   rY  r[  s              rA   test_monotonezTestPCHIP.test_monotone1  s    %%'	2rs2wqy! 	;AUBqsGBUBqsGBRR(B2BUr!"v2A/!388:::	;rC   c                     t        j                  g dg dg      }t        j                  d      } t        |d   |d         |      }|dz  } t        |d   |d         |      }t	        ||dd       y )	N)
r   r   r      /   <   O   W   c   r   )
rl  ir   r      &   -   5   7   r   r   r         ?+=)r   rtol)r"   r   r   r   r   )rs   dataxxcurvedata1curve1s         rA   	test_castzTestPCHIP.test_cast;  sw    xx@DF GYYs^'d1gtAw'+s
*uQxq*2.vE>rC   c                 &   d}t        j                  t        j                  |            }t	        |d d df   |d d df         }d}t        j                  t        j                  |            }t        |d d df    ||d d df         dd       y )Na  
          7.99   0.00000E+0
          8.09   0.27643E-4
          8.19   0.43750E-1
          8.70   0.16918E+0
          9.20   0.46943E+0
         10.00   0.94374E+0
         12.00   0.99864E+0
         15.00   0.99992E+0
         20.00   0.99999E+0
        r   r   a^  
           7.9900       0.0000
           9.1910       0.4640
          10.3920       0.9645
          11.5930       0.9965
          12.7940       0.9992
          13.9950       0.9998
          15.1960       0.9999
          16.3970       1.0000
          17.5980       1.0000
          18.7990       1.0000
          20.0000       1.0000
                g-C6
?rt  r   )r"   loadtxtioStringIOr   r   )rs   dataStrru  pch	resultStrresults         rA   test_nagzTestPCHIP.test_nagG  s    

 zz"++g./D1ItAaCy)	 BKK	23qsS!%5BTJrC   c                    t        j                  g d      }t        j                  g d      }t        j                  g d      }t        ||      t        ||      fD ]  }|d   |d   fD ]  } ||d      dk7  rJ  ! y )N)r|  rK  g      ?gffffff?)皙uq@g     @@     @@     @)r  r  g     p@r  r   r   r   )r"   r   r   )rs   r8   r^  r_  ppts         rA   test_endslopeszTestPCHIP.test_endslopesj  s~     HH+,XX34XX45B<q". 	%BdAbE] %!Qx1}$}%	%rC   c                 F   t        j                  d      }t        j                  |      }t        j                         5  t        j
                  d       t        ||      }d d d        t        j                  ddd      }t         |      dk(        sJ y # 1 sw Y   7xY w)Nr   errorr   	   e   r|  )	r"   r   r   warningscatch_warningsfilterwarningsr   r   rZ  )rs   r8   r:   r  rv  s        rA   test_all_zeroszTestPCHIP.test_all_zerost  s    IIbMMM! $$& 	##G,1+C	 [[As#3r7b=!!!	 	s   "BB c                     t        j                  ddd      }t        ddgddg      }t         ||      d|z  d       y )Nr   r   r6  r   r   r   )r"   r   r   r   )rs   r8   r   s      rA   test_two_pointszTestPCHIP.test_two_points  s>    
 KK1b!1a&1a&!!ac.rC   c                 `   t        t        g dg ddgd      t        j                  dg             t        t        g dg ddgd      t        j                  dg             t        t        j                  t        g dg ddgddg            t        j                  dgdgg             y )	Nr   r   r   )r   rE   r   r:  r   r   rr  r   g      @)r   r   r"   r   r   s    rA   test_pchip_interpolatez TestPCHIP.test_pchip_interpolate  s    !iSEqAJJt	 	"iSEqAJJu	 	"JJ(Iu1a&QRJJs|$	&rC   c                     t        ddgddg      }|j                         }t        |t        j                  dg             y )Nr   r   r   r:  )r   rootsr   r"   r   )rs   r   r   s      rA   
test_rootszTestPCHIP.test_roots  s6    1a&2q'"GGI2::se,-rC   N)   )rt   ru   rv   rW  rb  rd  rz  r  r  r  r  r  r  r    rC   rA   rS  rS    s7    %
C;
?!KF%
"/&.rC   rS  c                   ^    e Zd Ze	 	 dd       Zd Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zy)TestCubicSplinec           	      &   | j                   }| j                  }t        j                  |      }|j	                  |j
                  d   gdg|j                  dz
  z  z         }|dd }t        |dddf   |dddf   |dz  z  |dddf   |dz  z  z   |dddf   |z  z   |dddf   z   ||       t        |dddf   d|dddf   z  |dz  z  d|dddf   z  |z  z   |dddf   z   ||       t        |dddf   d|dddf   z  |z  |dddf   z   ||       |j                  dk(  r3|dk(  r.|dk(  r)t        |d   t        j                  |d         ||       y|d	k(  rjt         | |d   d       | |d   d      ||       t         | |d   d       | |d   d      ||       t         | |d   d       | |d   d      ||       y|dk(  rq|j                  dk(  rL | |d          | |d         z
  |d   z  }t        j                  |      }t         | |d   d      |||       nt        |d
   |d   ||       n|dk(  r7t         | |d   d      t        j                   | |d   d            ||       nm|dk(  r7t         | |d   d      t        j                   | |d   d            ||       n1|\  }	}
t         | |d   |	      t        j                  |
      ||       |dk(  rq|j                  dk(  rL | |d          | |d         z
  |d   z  }t        j                  |      }t         | |d   d      |||       yt        |d   |d   ||       y|dk(  r7t         | |d   d      t        j                   | |d   d            ||       y|dk(  r=t         | |d   d      t        j                   | |d   d            d|z  d|z         y|\  }	}
t         | |d   |	      t        j                  |
      ||       y)zVCheck that spline coefficients satisfy the continuity and boundary
        conditions.r   r   r   Nr   r   r}  
not-a-knotperiodic)r   r   )r   r   rM   rL   )r   r   )r   r   )r8   cr"   diffr0   r,   r/   r   r-   r   r   )Sbc_startbc_endtolr8   r  dxdxislopeorderr7  s              rA   check_correctnessz!TestCubicSpline.check_correctness  sJ   
 CCCCWWQZZZ!qvvz(::;"g 	!QR%!AssF)c1f"4qCRCy367I"I!SbS&	C#(*+AssF)#4:=C	I!QR%!a3B3i-#q&"8Aa"fI+#,./3B3i#8>A	M!QR%!a3B3i-#"5!SbS&	"A s	, 66Q;8|3,8NAaD"--!"5CcJ z!AadAJ!B%#CHAadAJ!B%#CHAadAJ!B%#CH |#vv{1Q41QqT7*be3

5)!A$
E#F$4sE"!A$
BMM!AaD!*5CcK"!A$
BMM!AaD!*5CcK $LE5AadENBJJu,=CcR\!vv{1Q41QqT7*be3

5)!A$
E#F%!E(3Gy AaeQKq2{)C!$30y AaeQKq2{)C!"3QsU4 "LE5AaeUORZZ->SsSrC   c           	         t        |j                        }||= t        j                  |      }|j	                  d       t        j                  |      }|j	                  d       dddd|fd|fg}|d d D ]$  }t        ||||      }	| j                  |	||       & |D ]/  }
|D ](  }t        ||||
|f      }	| j                  |	|
|d	
       * 1 y )Nr   r   r  rL   rM   r   r   r   rN   g+=r  )r%   r,   r"   emptyfillr   r  )rs   r8   r:   r   r5   first_derivsecond_derivbc_allrS   r  r  r  s               rA   check_all_bczTestCubicSpline.check_all_bc  s    177mhh{+xx,"
 !* 	.BAqtR8A""1b"-	.  	GH  G14(F9KL&&q(F&FG	GrC   c                    t        j                  g d      }t        j                  g d      }dd|j                  fD ]  }| j                  |d | |d | d       t        j                  d|df      }|d | |dd d df<   |d | dz
  |dd d df<   |d | dz   |dd d df<   |d | dz   |dd d df<   | j                  |d | |d        y )N)r   r   r:  r   r   g      @g      @r  )r   g      r   r   g      @r   r   r:  r   r   r   r   )r"   r   r-   r  r  )rs   r8   r:   r   Ys        rA   test_generalzTestCubicSpline.test_general  s    HH45HH45Q 	+AaeQrUA.!Q#A2AAaAgJ2AAaAgJ2AAaAgJ2AAaAgJaeQ*	+rC   c                    dD ]  }t        j                  ddt         j                  z  |      }t        j                  |      }t	        ||d      }| j                  |dd       t        j                  d|df      }||dd d df<   |dz   |dd d df<   |dz
  |dd d df<   |dz   |dd d df<   t	        ||dd      }| j                  |dd        y )	N)r   r   rE   r   r   r  rN   r   rE   r  )r"   r   r>  r=  r   r  r  )rs   r   r8   r:   r  r  s         rA   test_periodiczTestCubicSpline.test_periodic  s     	>AAq255y!,Aq	AAq*5A""1j*=!Q#AAaAgJQAaAgJQAaAgJQAaAgJAqq*=A""1j*=	>rC   c                 L   |j                  dd|j                  z  d|j                        }|j                  |      }t	        ||d      }t         |d       |dd|j                  z  z         d	       t	        ||      }t         ||      |j                  |      d	       y )
Nr   r   r   dtyper  r  r   r  )decimal)r   r>  r<  r=  r   r   )rs   r`  r8   r:   r  s        rA   test_periodic_evalz"TestCubicSpline.test_periodic_eval  s    KK1ruu9b

K;FF1I1j1AaD!ABEE	M"2B?1AaD"&&)R8rC   c                     t        j                  g d      }t        j                  g d      }t        ||dd      }| j                  |dd       y )N)rL  ?gffffff? @@      @g333333@g@g@g      @g      @g      @g       @gffffff"@g      %@g&@g333333'@g      (@g333333)@g      *@g*@)r  g      ?g?r  r  g@g333333@g333333@gffffff @r        @gffffff@r  g333333?gffffff?rL  gffffff?g333333?r:  g?r  r  )rN   extrapolate)r"   r   r   r  rs   r8   r:   r  s       rA   *test_second_derivative_continuity_gh_11758z:TestCubicSpline.test_second_derivative_continuity_gh_11758  sN    HH O PHH P Q1jjIq*j9rC   c                    t        j                  g d      }t        j                  g d      }t        ||d      }| j                  |dd       t	         |j                  d      |      t        j                  g d             y )N)rr  g      @r  )rr  g      .@rr  r  r  r   )      Hr  r  )r"   r   r   r  r   r^   r  s       rA   test_three_pointsz!TestCubicSpline.test_three_points&  se     HH%&HH%&1j1q*j9Q*BHH5J,KLrC   c                    t        j                  g d      }t        j                  ddgddgddgg      }t        ||d      }| j                  |dd       t        ||d d df   d      }t        ||d d df   d      }t        j                  ddd	      }t         ||      d d df    ||             t         ||      d d df    ||             y )
N)r|  rr  r  r|  rr  r  r  r   r   r   rE   )r"   r   r   r  r   r   )rs   r8   r:   r  S0S1qs          rA   #test_periodic_three_points_multidimz3TestCubicSpline.test_periodic_three_points_multidim2  s     HH_%HHsCj3*sCj9:1j1q*j9AadGZ8AadGZ8KK1a !QT
BqE*!QT
BqE*rC   c                    t        j                  g dt              }t        j                  g dt              }t        ||      }| j	                  |       t        j                  g d      }t        ||      }| j	                  |       t        ||dz  d      }| j	                  |dd	       t        j                  g d      }t        ||d
dg      }| j	                  |d
d       y )N)r   r   r   r   r  )r   r   r   r   )y            ?r|  y      ?      y      ?      r   )rL   r   y               @r  rL   r  )r   y       @      ?)r   y      ?      )r"   r   intr   r  r  s       rA   test_dtypeszTestCubicSpline.test_dtypes?  s    HH\-HH]#.1q!HH121q!16+?@q)W5HH]#1}m&DEq-?rC   c                     t         j                  j                  d      }t        j                  |j	                  d            }d|j	                  d      z   }t        ||      }| j                  |d       y )Nr   r   )r-   g     @gvIh%<=r  )r"   r#   r$   rU  uniformr   r  )rs   r7   r8   r:   r  s        rA   test_small_dxzTestCubicSpline.test_small_dxP  sc    ii##A&GGCKKSK)*#++3+''1qe,rC   c           
      *   t        j                  g d      }t        j                  g d      }t        j                  g d      }t        j                  t         j                  dddg      }t        j                  g d      }t        j                  t         j                  dddg      }g d}dg}dg}	t        t        t
        ||       t        t        t
        ||       t        t        t
        ||       t        t        t
        ||       t        t        t
        ||       t        t        t
        |d d t         j                  f   |       t        t        t
        ||	       g d	}
|
D ]  }t        t        t
        ||d
|d        t         j                  ||f   }d}ddg dff}ddd
d
ggff}t        t        t
        ||d
|d       t        t        t
        ||d
|d       t        t        t
        ||d
|d       t        t        t
        ||d
dd       y )Nr   )y      ?      ?r   r   r   r   r   r   )r   r   r   r   r  r   ))r  rM   ))r   r   )r   r   )r   r   )r|  r|  z
not-a-typor   T)rM   r  rM   )r   r   r   r  )r"   r   nanassert_raisesrM  r   newaxisc_)rs   r8   r:   xcxnxoyny3r\  r^  wrong_bcrN   r  bc1bc2bc3s                   rA   test_incorrect_inputsz%TestCubicSpline.test_incorrect_inputsW  s   HH\"HH\"XX'(XXrvvq!Q'(XXl#XXrvvq!Q'(SSj+r15j+r15j+q"5j+r15j+q"5j+qBJJ/?Cj+r26"   	KG*k1aGTJ	K EE!Q$K!1i.)11vh-(j+q!QTBj+q!QTBj+q!QTB 	j+q!Q
DIrC   N)r  r  rs  )rt   ru   rv   staticmethodr  r  r  r  r  r  r  r  r  r  r  r    rC   rA   r  r    sS    ;G#?T ?TBG.+>9:
M+@"-&JrC   r  c                     | j                  g d      }| j                  g d      }| j                  g d      }t        |||      }t         ||      |ddd       t         ||d      |ddd       y )N)r   r   r   )r   r   r   )r   r   r   Fr   )rB   check_dtypert  r   )r   r   r   )r`  r8   r:   r<   r9   s        rA   #test_CubicHermiteSpline_correctnessr    sd    


9A


:A::i D1a&AAaD!ENAaGTu%eTrC   c                      g d} g d}g d}t        t        t        | ||       ddt        j                  g}t        t        t        | ||       y )Nr  )r   r   rE   )r   r   r   r   r   r   )r  rM  r   r"   r  )r8   r:   r<   dydx_with_nans       rA   &test_CubicHermiteSpline_error_handlingr    sB    AAD*0!Q=266NM*0!QFrC   c                  *   t        j                  ddg      } t        j                  ddg      }t        j                  ddg      }t        | ||      }|j                  d      }|j                  j
                  d	   d	k(  sJ |j                  d
k(  sJ y )NgMbP?gMb`?gBܻ>gdJ>g/"g%"T)r  r   r   )r"   r   r   r  r  r,   r-   )r8   r:   dyr   r   s        rA   test_roots_extrapolate_gh_11185r    s    
% A
..12A	;	*	+B1a$A 	
D!A3399Q<166Q;;rC   c                   f   e Zd Zej                  j                  d ej                  d       ej                  d      g      ej                  j                  dg d      ej                  j                  dg d      ej                  j                  dee	g      d	                             Z
ej                  j                  d ej                  d       ej                  d      g      ej                  j                  dg d      ej                  j                  deeg      d
                      Zy)TestZeroSizeArraysr:   )r   r   rE   )r   rE   r   rN   )r  r  rL   rM   r   r   clsc                     t        j                  d      }t        j                  d      } ||||      } ||      j                  dk(  sJ  ||      j                  |j                  |j                  dd  z   k(  sJ t        j                  |d|      } |||||      }|j                  d | |j                  fz   |j                  |dz   d  z   }	 ||      j                  dk(  sJ  ||      j                  |	k(  sJ y )Nr   r   r  r   r   )rN   r   r"   r   r-   r,   moveaxis)
rs   r  r:   rN   r   r8   xvalobjytshs
             rA   test_zero_sizez!TestZeroSizeArrays.test_zero_size  s     IIbMyy|!Q(4y~~"""4y$**qwwqr{":::: [[At$!Rt4XXet_		},rxxQ/@@4y~~"""4y"$$$rC   c                    t        j                  d      }t        j                  d      } |||      } ||      j                  dk(  sJ  ||      j                  |j                  |j                  dd  z   k(  sJ t        j                  |d|      } ||||      }|j                  d | |j                  fz   |j                  |dz   d  z   } ||      j                  dk(  sJ  ||      j                  |k(  sJ y )Nr   r   r   r   rI   r  )	rs   r  r:   r   r8   r  r  r  r  s	            rA   test_zero_size_2z#TestZeroSizeArrays.test_zero_size_2  s    
 IIbMyy|!Qi4y~~"""4y$**qwwqr{":::: [[At$!Rd#XXet_		},rxxQ/@@4y~~"""4y"$$$rC   N)rt   ru   rv   r  markparametrizer"   r+   r   r   r  r   r   r   r    rC   rA   r  r    s    [[S8288J#7#+288J#7#9 :[[YMO[[VY/[[U%7$EF% G 0O:%  [[S8288J#7#+288J#7#9 :[[VY/[[U%68K$LM% N 0:%rC   r  )Nr   N).r  r  numpyr"   scipy._lib._array_apir   r   r   r   r   r  r   r  scipy.interpolater	   r
   r   r   r   r   r   r   r   r   r   r   scipy._lib._testutilsr   r  skip_xp_backendsxfail_xp_backendsrB   rO   rU   r[   r   r   r   r  r  rS  r  r  r  r  r  r    rC   rA   <module>r	     s    	   +     :;;// KK11  LM&R 
%G"I26j/h2 h2V$ $C2 C2L|. |.~ ;_J _J  _JD %&U 'UG
/% /%rC   