
     hTv                     f   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	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 i f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$ G d d          Z%d Z&d Z'd Z( G d d          Z)dS )    N)assert_almost_equalassert_array_equalassert_array_almost_equalassert_allcloseassert_equalassert_)raises)KroghInterpolatorkrogh_interpolateBarycentricInterpolatorbarycentric_interpolateapproximate_taylor_polynomialCubicHermiteSplinepchipPchipInterpolatorpchip_interpolateAkima1DInterpolatorCubicSplinemake_interp_splinec                 H   t           j                            d           g d}t          t	          dt          |          dz                       }|                    |t          |          dz   z  d           t          j        j        d|z                        |          }t          j	        |          }	| t          u r@t          j        j        d|z                        |          }
  | |||
fd|i||	          }n  | ||fd|i||	          }|pd|j        d |         z   |z   |j        |d          dd          z   }t          |j        |           |r|j        dk    r| t          u rK  | t          |          t          |          t          |
          fd|i|t          |	                     n<  | t          |          t          |          fd|i|t          |	                     |	j        dk    r||j        d |         dt          |          z  z   |j        |d          dd          z   }|t          d           f||j        z  z  dz            }|                    |          }t          j        ||          \  }}t%          ||           d S d S d S )	N  )r               r   r      axis r   )nprandomseedlistrangeleninsertrand	transposezerosr   shaper   sizeslicendimreshapebroadcast_arraysr   )interpolator_clsx_shapey_shapederiv_shaper   
extra_argsxsyxidydxyitarget_shapebs_shapeyvs                  `/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/interpolate/tests/test_polyint.pycheck_shaperA      s   INN4AU1c'll1n%%&&AHHTS\\!^$a(((
	)33A66A	'		B---y~w0::1==BaDBBtBzBB2FF<a<<<<<R@@ &B!'%4%.8 !qrr 23L<(((  516A::111+T!WWd1ggtDzz + + +)+ ++/885 5 5 5+T!WWd1gg + +D +)+ ++/885 5 5 
w{{{*75D5>DW$55qrr8JJt/478ZZ!!#B++AA {**    )r    r   r!   )r   r      c                  \   d } t           t          t          t          t          t
          | fD ]}t          D ]v}t          D ]l}t          t          |           t          |                    D ]>}|t
          k    rt          |||d |           !dD ]}d|i}t          |||d ||           ?mwd S )Nc                 &    t          | ||          S Nr   )r   r7   r9   r   s      r@   
spl_interpztest_shapes.<locals>.spl_interp?   s    !!QT2222rB   )naturalclampedbc_type)
r
   r   r   r   r   r   SHAPESr&   r'   rA   )rJ   ips1s2r   bcextras          r@   test_shapesrT   =   s   3 3 3 !"9;M);
D 
G 
G 	G 	GB G G!3r77(CGG44 G GD[((#BBd;;;;"8 G GB%.OE'BD$FFFFG	GG	G
G 
GrB   c            
          dd} t           D ]M}t           D ]C}t          t          |           t          |                    D ]}t          | ||d|           DNd S )Nr   c                 .    t          | ||          j        S N)r
   derivativesrI   s      r@   krogh_derivsz(test_derivs_shapes.<locals>.krogh_derivsO   s     At,,88rB   r   rC   rN   r&   r'   rA   )rY   rP   rQ   r   s       r@   test_derivs_shapesr[   N   s    9 9 9 9  > > 	> 	>Bs2wwhB00 > >L"b$====>	>> >rB   c                  2   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 ]W}t           D ]M}t           D ]C}t          t          |           t          |                    D ]}t          |||d|           DNXd S )Nr   c                 .    t          | ||          j        S rW   )r
   
derivativerI   s      r@   krogh_derivz&test_deriv_shapes.<locals>.krogh_derivY   s     At,,77rB   c                 H    t          | ||                                          S rW   r   r^   rI   s      r@   pchip_derivz&test_deriv_shapes.<locals>.pchip_deriv\   s     Q4  ++---rB   c                 J    t          | ||                              d          S Nr   ra   rI   s      r@   pchip_deriv2z'test_deriv_shapes.<locals>.pchip_deriv2_   s"    Q4  ++A...rB   c                 H    t          | ||                                          S rW   r   antiderivativerI   s      r@   pchip_antiderivz*test_deriv_shapes.<locals>.pchip_antiderivb   s     Q4  //111rB   c                 J    t          | ||                              d          S rd   rg   rI   s      r@   pchip_antideriv2z+test_deriv_shapes.<locals>.pchip_antideriv2e   s"    Q4  //222rB   c                 B     G d dt                     } || ||          S )Nc                       e Zd Zd ZdS )9test_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.Pc                 .    t          j        | |d          S )Nr   )r   __call__)selfr7   s     r@   rp   zBtest_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.P.__call__j   s    (1$1===rB   N)__name__
__module____qualname__rp   r    rB   r@   Prn   i   s        > > >DrB   ru   )r   )r7   r9   r   ru   s       r@   pchip_deriv_inplacez.test_deriv_shapes.<locals>.pchip_deriv_inplaceh   sA    	 	 	 	 	! 	 	 	 qAt}}rB   c                 H    t          | ||                                          S rW   )r   r^   rI   s      r@   akima_derivz&test_deriv_shapes.<locals>.akima_derivo   s     "1a..99;;;rB   c                 H    t          | ||                                          S rW   )r   rh   rI   s      r@   akima_antiderivz*test_deriv_shapes.<locals>.akima_antiderivr   s     "1a..==???rB   c                 H    t          | ||                                          S rW   )r   r^   rI   s      r@   cspline_derivz(test_deriv_shapes.<locals>.cspline_derivu   s     1a&&11333rB   c                 H    t          | ||                                          S rW   )r   rh   rI   s      r@   cspline_antiderivz,test_deriv_shapes.<locals>.cspline_antiderivx   s     1a&&55777rB   c                 J    t          | ||                                          S rG   )r   r^   rI   s      r@   
bspl_derivz%test_deriv_shapes.<locals>.bspl_deriv{   s#    !!QT222==???rB   c                 J    t          | ||                                          S rG   )r   rh   rI   s      r@   bspl_antiderivz)test_deriv_shapes.<locals>.bspl_antideriv~   s#    !!QT222AACCCrB   r    rC   rZ   )r_   rb   re   ri   rk   rv   rx   rz   r|   r~   r   r   rO   rP   rQ   r   s                   r@   test_deriv_shapesr   X   s   8 8 8 8. . . ./ / / /2 2 2 23 3 3 3   < < < <@ @ @ @4 4 4 48 8 8 8@ @ @ @D D D D K7J 0+/^M 6 6  	6 	6B 6 6!3r77(CGG44 6 6DBB555566	66 6rB   c                  *   g d} g d}t           t          t          t          fD ]'} || |          }t	          | ||                      (g d}t          | ||          }t	          | ||                      t	          | || d                     d S )Nr   r   r   r   )r   r                 ?r   )r   y             r   y              @r   )r
   r   r   r   r   r   )r7   r9   rO   pr;   s        r@   test_complexr      s    AA "95+N ! !Bq!HH11Q44    ??D1a&&AAqqttD!!Aq''"""""rB   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S )	TestKroghc                     t          j        g d          | _        t          j        ddd          | _        t          j        ddd          | _        |                     | j                  | _        d S N)r   r   rD   r   r   d   rD   r"   poly1d	true_polylinspacetest_xsxsysrq   s    r@   setup_methodzTestKrogh.setup_method   sZ    ===11{2a,,+b1%%..))rB   c                     t          | j        | j                  }t          |                     | j                   || j                             d S rW   r
   r   r   r   r   r   rq   ru   s     r@   test_lagrangezTestKrogh.test_lagrange   C    dgdg..DNN4<884<IIIIIrB   c                 2   t          | j        | j                  }t          |                     d           |d                     t          |                     t          j        d                     |t          j        d                               d S N   )r
   r   r   r   r   r"   arrayr   s     r@   test_scalarzTestKrogh.test_scalar   ss    dgdg..DNN1--aadd333DNN28A;;7728A;;HHHHHrB   c                     t          | j        | j                  }|                    | j                  }t          |j        d                   D ]>}t           | j        	                    |          | j                  ||                    ?d S )Nr   )
r
   r   r   rX   r   r&   r,   r   r   derivrq   ru   Dis       r@   test_derivativeszTestKrogh.test_derivatives   s    dgdg..MM$,''qwqz"" 	& 	&A 7 4 4Q 7 7 E E !!& & & &	& 	&rB   c                 L   t          | j        | j                  }|                    | j        t          | j                  dz             }t          |j        d                   D ]>}t           | j	        
                    |          | j                  ||                    ?d S )Nr   r   )r
   r   r   rX   r   r'   r&   r,   r   r   r   r   s       r@   test_low_derivativeszTestKrogh.test_low_derivatives   s    dgdg..MM$,s47||A~66qwqz"" 	& 	&A 7 4 4Q 7 7 E E !!& & & &	& 	&rB   c                     t          | j        | j                  }d}|                    | j        |          }t          |          D ]1}t          |                    | j        |          ||                    2d S )N
   )r
   r   r   rX   r   r&   r   r^   )rq   ru   mrr   s        r@   test_derivativezTestKrogh.test_derivative   sy    dgdg..MM$,q))q 	C 	CAT\! < <QqTBBBB	C 	CrB   c           	      H   t          | j        | j                  }t          t	          | j                  dt	          | j                  z            D ]O}t          |                    | j        |          t          j	        t	          | j                                       Pd S rd   )
r
   r   r   r&   r'   r   r^   r   r"   r+   )rq   ru   r   s      r@   test_high_derivativezTestKrogh.test_high_derivative   s    dgdg..s47||Qs47||^44 	= 	=AT\! < < "T\):): ; ;= = = =	= 	=rB   c                     t          | j        | j                  }t          |                     | j                   || j                             d S rW   r   r   s     r@   test_hermitezTestKrogh.test_hermite   r   rB   c           	         g dt          j        ddgddgddgg          t                    }fdt          j        d                   D             }t          j        ddd          t           |          t          j        fd	|D                       j                   t          |	                              t          j
        t          j        fd
|D                       d                     d S )Nr   r   r   r   r   r   c                 D    g | ]}t          d d |f                   S rW   )r
   ).0r   r   r   s     r@   
<listcomp>z)TestKrogh.test_vector.<locals>.<listcomp>   s0    HHH2aaac7++HHHrB   r   r   r   c                 &    g | ]} |          S r    r    r   r   r   s     r@   r   z)TestKrogh.test_vector.<locals>.<listcomp>   !    '?'?'?q'

'?'?'?rB   c                 :    g | ]}|                               S r    )rX   r   s     r@   r   z)TestKrogh.test_vector.<locals>.<listcomp>   s%    (L(L(LAw)?)?(L(L(LrB   )r   r   r   )r"   r   r
   r&   r,   r   r   asarrayTrX   r*   )rq   ru   Pir   r   r   s      @@@r@   test_vectorzTestKrogh.test_vector   s   YYX!uaUAa5)**b$$HHHHHU28A;5G5GHHH+b3''AAgJJJ'?'?'?'?B'?'?'?@@B	D 	D 	DAMM'22RZ(L(L(L(L(L(L(LMM 	 	 	 	 	rB   c                 l    t          | j        | j                  }t           |g           g            d S rW   )r
   r   r   r   r   s     r@   
test_emptyzTestKrogh.test_empty   s3    dgdg..11R55"%%%%%rB   c           	         t          | j        | j                  }t          t	          j         |d                    d           t          t	          j         |t	          j        d                              d           t          t	          j         |dg                    d           t          t	          j         |ddg                    d           d S Nr   r    r!   r   )r   )r
   r   r   r   r"   r,   r   r   s     r@   test_shapes_scalarvaluez!TestKrogh.test_shapes_scalarvalue   s    dgdg..28AAaDD>>2...28AAbhqkkNN33R88828AAqcFF++T22228AAqeHH--t44444rB   c           	      &   t          | j        | j                  }|j        }t	          t          j        |                    d                    |f           t	          t          j        |                    t          j        d                              |f           t	          t          j        |                    dg                    |df           t	          t          j        |                    ddg                    |df           d S )Nr   r   r   )	r
   r   r   nr   r"   r,   rX   r   rq   ru   r   s      r@   "test_shapes_scalarvalue_derivativez,TestKrogh.test_shapes_scalarvalue_derivative   s    dgdg..C28AMM!$4$455t<<<28AMM"(1++$>$>??!FFF28AMM1#$6$677!A???28AMM1Q%$8$899Aa5AAAAArB   c           	         t          | j        t          j        | j        t          j        d                              }t          t          j         |d                    d           t          t          j         |dg                    d           t          t          j         |ddg                    d           d S Nr   r   )r   )r   r   r   )r   r   )r
   r   r"   outerr   aranger   r,   r   s     r@   test_shapes_vectorvaluez!TestKrogh.test_shapes_vectorvalue   s    dgbhtwry||&D&DEE28AAaDD>>400028AAqcFF++U33328AAqeHH--u55555rB   c                 j   t          | j        t          j        | j        dg                    }t          t          j         |d                    d           t          t          j         |dg                    d           t          t          j         |ddg                    d           d S Nr   r   r!   )r   r   )r   r   )r
   r   r"   r   r   r   r,   r   s     r@   test_shapes_1d_vectorvaluez$TestKrogh.test_shapes_1d_vectorvalue   s    dgbhtws&;&;<<28AAaDD>>400028AAqcFF++U33328AAqeHH--u55555rB   c           	         t          | j        t          j        | j        t          j        d                              }|j        }t          t          j        |	                    d                    |df           t          t          j        |	                    dg                    |ddf           t          t          j        |	                    ddg                    |ddf           d S )Nr   r   r   r   )
r
   r   r"   r   r   r   r   r   r,   rX   r   s      r@   "test_shapes_vectorvalue_derivativez,TestKrogh.test_shapes_vectorvalue_derivative   s    dgbhtwry||&D&DEEC28AMM!$4$455!u===28AMM1#$6$677!AaAAA28AMM1Q%$8$899Aa7CCCCCrB   c           
         t          | j        | j                  }t          }t	           || j                   || j        | j        | j                             t	          |                    | j        d           || j        | j        | j        d                     t	          |                    | j        d           || j        | j        | j        ddg                     d S )Nr   derr   r   )r
   r   r   r   r   r   r^   rX   )rq   ru   kis      r@   test_wrapperzTestKrogh.test_wrapper   s    dgtw//AAdlOORR$,-O-OPPPALLq99Btw1EEE	G 	G 	GAMM$,::BtwAq6JJJ	L 	L 	L 	L 	LrB   c           	          g d}t          j        g d          }t          ||          }t          t	           ||          |z
  |                    |d          z            dd           d S )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   r   g|=atol)r"   r   r
   r   absr^   )rq   r7   
offset_cdffs       r@   test_int_inputszTestKrogh.test_int_inputs  s      X ? ? ? @ @
 a,,QQqTTJ.!,,q!2D2DDEE	' 	' 	' 	' 	' 	'rB   c                 t   t          j        g d          t          j        g d          }}t          ||          }|                    d          }t          ||j                                      d          dt          ||j                                      d          z  z   }t          ||d           d S )N)r   r   r   r   r   )r   r   r   r   r   r   r   V瞯<r   )r"   r   r
   rX   realimagr   )rq   r7   r9   funccmplxcmplx2s         r@   test_derivatives_complexz"TestKrogh.test_derivatives_complex  s    x)))**BH5K5K5K,L,L1 A&&  ###Aqv..::1==&q!&11==a@@@AvE222222rB   c                     t          j        t          d          5  t          t	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S )Nz40 degrees provided,)match(   )pytestwarnsUserWarningr
   r"   r   onesr   s    r@   test_high_degree_warningz"TestKrogh.test_high_degree_warning  s    \+-CDDD 	: 	:bimmRWR[[999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   5AA"%A"N)rr   rs   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rB   r@   r   r      sF       * * *J J JI I I
& & && & &C C C= = =J J J
 
 
& & &5 5 5B B B6 6 66 6 6D D DL L L' ' '3 3 3: : : : :rB   r   c                       e Zd Zd ZdS )
TestTaylorc                     d}t          t          j        d|dd          }t          |dz             D ]/}t	           |d          d           |                                }0t	           |d          d           d S )NrD   r   r      )r   r"   expr&   r   r   )rq   degreer   r   s       r@   test_exponentialzTestTaylor.test_exponential  s|    )"&!VQCCvax 	 	A!Q'''		AAAAaDD#####rB   N)rr   rs   rt   r   r    rB   r@   r   r     s#        $ $ $ $ $rB   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S )TestBarycentricc                     t          j        g d          | _        t          j        ddd          | _        t          j        ddd          | _        |                     | j                  | _        d S r   r   r   s    r@   r   zTestBarycentric.setup_method)  s]    #4#4#455{2q#..+b!Q''..))rB   c                     t          | j        | j                  }t          |                     | j                   || j                             d S rW   )r   r   r   r   r   r   r   s     r@   r   zTestBarycentric.test_lagrange/  sC    #DGTW55DNN4<88!!DL//JJJJJrB   c                 2   t          | j        | j                  }t          |                     d           |d                     t          |                     t          j        d                     |t          j        d                               d S r   )r   r   r   r   r   r"   r   r   s     r@   r   zTestBarycentric.test_scalar3  ss    #DGTW55DNN1--qqtt444DNN28A;;7728A;;HHHHHrB   c                     t          | j                  }|                    | j                   t	          |                     | j                   || j                             d S rW   )r   r   set_yir   r   r   r   r   s     r@   test_delayedzTestBarycentric.test_delayed8  sS    #DG,,	DNN4<88!!DL//JJJJJrB   c                 &   t          | j        d d         | j        d d                   }|                    | j        dd          | j        dd                     t	          |                     | j                   || j                             d S )Nr   )r   r   r   add_xir   r   r   r   s     r@   test_appendzTestBarycentric.test_append=  s{    #DGBQBK!==	dgabbk***DNN4<88!!DL//JJJJJrB   c                 j   g dt          j        ddgddgddgg          t                     }fdt          j        d                   D             }t          j        ddd          t           |          t          j        fd	|D                       j                   d S )
Nr   r   r   r   c                 <    g | ]} d d |f                   S rW   r    )r   r   BIr   r   s     r@   r   z/TestBarycentric.test_vector.<locals>.<listcomp>G  s1    ;;;1bbR1X;;;rB   r   r   r   c                 &    g | ]} |          S r    r    r   s     r@   r   z/TestBarycentric.test_vector.<locals>.<listcomp>J  r   rB   )	r"   r   r   r&   r,   r   r   r   r   )rq   ru   r   r  r   r   r   s      @@@@r@   r   zTestBarycentric.test_vectorB  s    YYX1v1v1v.//$Br2JJ;;;;;;bhqk(:(:;;;+b!S))AAgJJJ'?'?'?'?B'?'?'?@@B	D 	D 	D 	D 	DrB   c           	         t          | j        | j                  }t          t	          j         |d                    d           t          t	          j         |t	          j        d                              d           t          t	          j         |dg                    d           t          t	          j         |ddg                    d           d S r   )r   r   r   r   r"   r,   r   r   s     r@   r   z'TestBarycentric.test_shapes_scalarvalueL  s    #DGTW5528AAaDD>>2...28AAbhqkkNN33R88828AAqcFF++T22228AAq!fII..55555rB   c           	         t          | j        t          j        | j        t          j        d                              }t          t          j         |d                    d           t          t          j         |dg                    d           t          t          j         |ddg                    d           d S r   )r   r   r"   r   r   r   r   r,   r   s     r@   r   z'TestBarycentric.test_shapes_vectorvalueS  s    #DGRXdgry||-L-LMM28AAaDD>>400028AAqcFF++V44428AAq!fII..77777rB   c                 j   t          | j        t          j        | j        dg                    }t          t          j         |d                    d           t          t          j         |dg                    d           t          t          j         |ddg                    d           d S r   )r   r   r"   r   r   r   r,   r   s     r@   r   z*TestBarycentric.test_shapes_1d_vectorvalueY  s    #DGRXdgs-C-CDD28AAaDD>>400028AAqcFF++V44428AAqeHH--v66666rB   c                     t          | j        | j                  }t          | j        | j        | j                  }t           || j                  |           d S rW   )r   r   r   r   r   r   )rq   ru   valuess      r@   r   zTestBarycentric.test_wrapper_  sL    #DGTW55($'4<HHAAdlOOV44444rB   c                     dt          j        dd          z  }t          j        dd          }t          ||d          }t          |d           d S )Ni  r      g     @g      #@)r"   r   r   r   )rq   r7   r9   values       r@   test_int_inputzTestBarycentric.test_int_inputd  sP    29Q###Ia'1j99E3'''''rB   c                 r   d}t          j        |dz                                 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  |           d S )Ni   r   r   r         ?r   )	r"   r   astypefloat64cospir   wir   )rq   r   jr7   wru   factors          r@   test_large_chebyshevz$TestBarycentric.test_large_chebyshevj  s     Ia!e##BJ//F1ru9q=!! AI	!	"#A&& aADAJ/33333rB   c                     t          ddgddg          }t          j        d          5   ||j                  }d d d            n# 1 swxY w Y   t	          ||j                                                   d S )Nr   r   r   raise)divide)r   r"   errstater:   r   r<   ravel)rq   ru   r<   s      r@   test_warningzTestBarycentric.test_warning  s     $QFQF33[((( 	 	14B	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	B

-----s   AAAN)rr   rs   rt   r   r   r   r   r  r   r   r   r   r   r  r  r   r    rB   r@   r   r   (  s        * * *K K KI I I
K K K
K K K
D D D6 6 68 8 87 7 75 5 5
( ( (4 4 42. . . . .rB   r   c                   L    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dS )	TestPCHIP   c                    t           j                            d           t          j        t           j                            |                    }t           j                            |          }t	          ||          ||fS )Nr   )r"   r#   r$   sortr   )rq   nptsr:   r<   s       r@   _make_randomzTestPCHIP._make_random  s_    
	tWRY%%d++,,Yd##R}}b"$$rB   c                    |                                  \  }}}t          t          |          dz
            D ]}||         ||dz            }}||         ||dz            }}||k    r||}}t          j        ||d          }	 ||	          }
t          ||
dz   k    |
|dz   k    z                                             d S )Nr   r   r   r'  r&   r'   r"   r   r   allrq   r   r:   r<   r   x1x2y1y2xpyps              r@   test_overshootzTestPCHIP.test_overshoot  s    %%''	2rs2wwqy!! 	E 	EAUBqsGBUBqsGBBwwRBRR((B2BbBJ&2e+;<AACCDDDD	E 	ErB   c                    |                                  \  }}}t          t          |          dz
            D ]}||         ||dz            }}||         ||dz            }}t          j        ||d          }	 ||	          }
t          ||z
  |
dd          |
d d         z
  z  dk                                               d S )Nr   r   r   r)  r+  s              r@   test_monotonezTestPCHIP.test_monotone  s    %%''	2rs2wwqy!! 	= 	=AUBqsGBUBqsGBRR((B2Bbe122BQB01499;;<<<<	= 	=rB   c                 &   t          j        g dg dg          }t          j        d          } t          |d         |d                   |          }|dz  } t          |d         |d                   |          }t	          ||dd           d S )	N)
r   r         /   <   O   W   c   r   )
r=  ir   r6     &   -   5   7   r   r   r         ?+=)r   rtol)r"   r   r   r   r   )rq   dataxxcurvedata1curve1s         r@   	test_castzTestPCHIP.test_cast  s    x@@@DDDF G GYs^^'d1gtAw''++s
*uQxq**2..vE>>>>>>rB   c                 N   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           d S )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
?rE  r   )r"   loadtxtioStringIOr   r   )rq   dataStrrF  pch	resultStrresults         r@   test_nagzTestPCHIP.test_nag  s    

 z"+g..//D1ItAAAaCy))	 BK	2233qqqsSS!%5%5BTJJJJJJrB   c                 0   t          j        g d          }t          j        g d          }t          j        g d          }t          ||          t          ||          fD ]2}|d         |d         fD ]}t           ||d          dk                3d S )N)rM  g?g      ?gffffff?)皙uq@g     @@     @@     @)rX  rZ  g     p@rY  r   r   r   )r"   r   r   r   )rq   r7   r.  r/  ppts         r@   test_endslopeszTestPCHIP.test_endslopes  s     H+++,,X33344X44455B<<q". 	' 	'BdAbE] ' '1aA&&&&'	' 	'rB   c                 R   t          j        d          }t          j        |          }t          j                    5  t          j        d           t          ||          }d d d            n# 1 swxY w Y   t          j        ddd          }t           ||          d           d S )Nr   errorr   	   e   rM  )	r"   r   
zeros_likewarningscatch_warningsfilterwarningsr   r   r   )rq   r7   r9   rS  rG  s        r@   test_all_zeroszTestPCHIP.test_all_zeros  s    IbMMM! $&& 	 	#G,,,1++C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 [As##SSWWb!!!!!s   %A--A14A1c                     t          j        ddd          }t          ddgddg          }t           ||          d|z  d           d S )Nr   r   r  r   r   r   )r"   r   r   r   )rq   r7   r   s      r@   test_two_pointszTestPCHIP.test_two_points  sU    
 K1b!!1a&1a&!!!ac......rB   c           	          t          t          g dg ddgd          dg           t          t          g dg ddgd          dg           t          t          g dg ddgddg          dgdgg           d S )	Nr   r   r   )r   rD   r   r  r   r   rC  r   g      @)r   r   r   s    r@   test_pchip_interpolatez TestPCHIP.test_pchip_interpolate  s    !gggwww1===D	 	 	 	"gggwww1===E	 	 	 	"gggwwwAq6BBBUQCL	 	 	 	 	rB   c                 v    t          ddgddg          }|                                }t          |d           d S )Nr   r   r   r  )r   rootsr   )rq   r   r   s      r@   
test_rootszTestPCHIP.test_roots  s<    1a&2q'""GGII3rB   N)r#  )rr   rs   rt   r'  r2  r4  rK  rV  r]  rf  rh  rk  rn  r    rB   r@   r"  r"    s        % % % %
E 
E 
E= = =
? 
? 
?!K !K !KF' ' '
" 
" 
"/ / /           rB   r"  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S )TestCubicSpline
not-a-knotrD  c           	      :   | j         }| j        }t          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    r'|dk    r!|dk    rt          |d         d||           dS |d	k    rt           | |d         d           | |d         d          ||           t           | |d         d           | |d         d          ||           t           | |d         d           | |d         d          ||           dS |dk    r{|j        dk    rP | |d                    | |d                   z
  |d         z  }t           | |d         d          |||           nt          |d
         |d         ||           n||dk    r$t           | |d         d          d||           nR|dk    r$t           | |d         d          d||           n(|\  }	}
t           | |d         |	          |
||           |dk    r}|j        dk    rQ | |d                    | |d                   z
  |d         z  }t           | |d         d          |||           dS t          |d         |d         ||           dS |dk    r%t           | |d         d          d||           dS |dk    r+t           | |d         d          dd|z  d|z             dS |\  }	}
t           | |d         |	          |
||           dS )zVCheck that spline coefficients satisfy the continuity and boundary
        conditions.r   r   r   Nr   r   rN  rq  periodic)r   r   )r   r   rL   rK   )r   r   )r   r   )	r7   cr"   diffr0   r,   r/   r   r-   )Sbc_startbc_endtolr7   rt  dxdxislopeorderr  s              r@   check_correctnessz!TestCubicSpline.check_correctness  s   
 CCWQZZZZ!qvz(::;;"g 	!QRR%!AssF)c1f"4qCRCy367I"I!SbS&	C#(*+AssF)#4:=C	I 	I 	I 	I!QRR%!a3B3i-#q&"8Aa"fI+#,./3B3i#8>A	M 	M 	M 	M!QRR%!a3B3i-#"5!SbS&	"A s	, 	, 	, 	, 6Q;;8|33,8N8NAaD!#C8888F z!!AAadAJJ!B%#CHHHHAAadAJJ!B%#CHHHHAAadAJJ!B%#CHHHHF |##v{{1Q411QqT77*be3!A$

E#FFFFF$4sEEEEE""AAadAJJ#>>>>>""AAadAJJ#>>>>>#LE5AAadENNE#FFFF\!!v{{1Q411QqT77*be3!A$

E#FFFFFF%!E(3GGGGGGy  AAaeQKK3??????y  AAaeQKK3QsUCCCCCC!LE5AAaeUOOU3GGGGGGrB   c           	         t          |j                  }||= t          j        |          }|                    d           t          j        |          }|                    d           dddd|fd|fg}|d d         D ],}t          ||||          }	|                     |	||           -|D ]5}
|D ]0}t          ||||
|f          }	|                     |	|
|d	
           16d S )Nr   r   rq  rK   rL   r   r   r   rM   g+=ry  )r%   r,   r"   emptyfillr   r~  )rq   r7   r9   r   r5   first_derivsecond_derivbc_allrR   rv  rw  rx  s               r@   check_all_bczTestCubicSpline.check_all_bcJ  s6   17mmh{++x,,"
 !* 	. 	.BAqtR888A""1b"---- 	G 	GH  G G14(F9KLLL&&q(F&FFFFG	G 	GrB   c                    t          j        g d          }t          j        g d          }dd|j        fD ]}|                     |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<   |                     |d |         |d           d S )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  )rq   r7   r9   r   Ys        r@   test_generalzTestCubicSpline.test_generala  s'   H44455H44455Q 	+ 	+AaeQrrUA...!Q##A2A2AaAgJ2A2AaAgJ2A2AaAgJ2A2AaAgJaeQ****	+ 	+rB   c                    dD ]}t          j        ddt           j        z  |          }t          j        |          }t	          ||d          }|                     |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          }|                     |dd           d S )	N)r   r   rD   r   r   rs  rM   r   rD   r  )r"   r   r  r  r   r~  r  )rq   r   r7   r9   rv  r  s         r@   test_periodiczTestCubicSpline.test_periodicn  s    	> 	>AAq25y!,,Aq		AAq*555A""1j*===!Q##AAaAgJQAaAgJQAaAgJQAaAgJAqq*===A""1j*====	> 	>rB   c                     t          j        ddt           j        z  d          }t          j        |          }t	          ||d          }t           |d           |ddt           j        z  z             d           d S )	Nr   r   r   rs  r  r   r   )decimal)r"   r   r  r  r   r   rq   r7   r9   rv  s       r@   test_periodic_evalz"TestCubicSpline.test_periodic_eval}  ss    K1ru9b))F1II1j111AAaDD!!ABE	M"2"2B??????rB   c                     t          j        g d          }t          j        g d          }t          ||dd          }|                     |dd           d S )N)??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?r  gffffff?g333333?r  g?r  rs  )rM   extrapolate)r"   r   r   r~  r  s       r@   *test_second_derivative_continuity_gh_11758z:TestCubicSpline.test_second_derivative_continuity_gh_11758  s    H O O O P PH P P P Q Q1jjIIIq*j99999rB   c                 0   t          j        g d          }t          j        g d          }t          ||d          }|                     |dd           t	           |                    d          |          t          j        g d                     d S )N)rC  g      @r  )rC  g      .@rC  rs  r  r   )      Hr  r  )r"   r   r   r~  r   r^   r  s       r@   test_three_pointsz!TestCubicSpline.test_three_points  s     H%%%&&H%%%&&1j111q*j999Q**BH5J5J5J,K,KLLLLLrB   c                    t          j        g dt                    }t          j        g dt                    }t          ||          }|                     |           t          j        g d          }t          ||          }|                     |           t          ||dz  d          }|                     |dd	           t          j        g d          }t          ||d
dg          }|                     |d
d           d S )N)r   r   r   r   )dtype)r   r   r   )y            ?rM  y      ?      y      ?      r   )rK   r   y               @r  rK   r  )r   y       @      ?)r   y      ?      )r"   r   intr   r~  r  s       r@   test_dtypeszTestCubicSpline.test_dtypes  s	   H\\\---H]]]#...1q!!!H111221q!!!16+?@@@q)W555H]]]##1}m&DEEEq-?????rB   c                    t           j                            d          }t          j        |                    d                    }d|                    d          z   }t          ||          }|                     |d           d S )Nr   r   )r-   g     @gvIh%<=r  )r"   r#   RandomStater%  uniformr   r~  )rq   rngr7   r9   rv  s        r@   test_small_dxzTestCubicSpline.test_small_dx  sz    i##A&&GCKKSK))**#++3+'''1qe,,,,,rB   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           d S )Nr   )y      ?      ?r   r   r   r   r   r   )r   r   r   r   rj  r   ))rs  rL   ))r   r   )r   r   )r   r   )rM  rM  z
not-a-typor   T)rL   r  rL   )r   r   r   rs  )r"   r   nanassert_raises
ValueErrorr   newaxisc_)rq   r7   r9   xcxnxoyny3r,  r.  wrong_bcrM   r  bc1bc2bc3s                   r@   test_incorrect_inputsz%TestCubicSpline.test_incorrect_inputs  s$   H\\\""H\\\""X'''((Xrvq!Q'((Xlll##Xrvq!Q'((YYSSj+r1555j+r1555j+q"555j+r1555j+q"555j+qBJ/?CCCj+r2666" " "   	K 	KG*k1aGTJJJJ E!Q$K!1iii.)11vh-(j+q!QTBBBj+q!QTBBBj+q!QTBBB 	j+q!Q
DIIIIIrB   N)rq  rq  rD  )rr   rs   rt   staticmethodr~  r  r  r  r  r  r  r  r  r  r    rB   r@   rp  rp    s        ;G#9H 9H 9H \9HvG G G.+ + +> > >@ @ @: : :
M 
M 
M@ @ @"- - -&J &J &J &J &JrB   rp  c                      g d} g d}g d}t          | ||          }t           ||           |d           t           || d          |d           d S )N)r   r   r   )r   r   r   )r   r   r   r   )rE  r   )r   r   )r7   r9   r;   r8   s       r@   #test_CubicHermiteSpline_correctnessr    sp    		A

A99D1a&&AAAaDD!%((((AAaGGT......rB   c                      g d} g d}g d}t          t          t          | ||           ddt          j        g}t          t          t          | ||           d S )Nrj  )r   r   rD   )r   r   r   r   r   r   )r  r  r   r"   r  )r7   r9   r;   dydx_with_nans       r@   &test_CubicHermiteSpline_error_handlingr    s^    		A		A==D*0!Q===26NM*0!QFFFFFrB   c                  B   t          j        ddg          } t          j        ddg          }t          j        ddg          }t          | ||          }|                    d          }t	          |j        j        d	         d	           t	          |j        d
           d S )NgMbP?gMb`?gBܻ>gdJ>g/"g%"T)r  r   r   )r"   r   r   rm  r   rt  r,   r-   )r7   r9   dyr   r   s        r@   test_roots_extrapolate_gh_11185r    s    
%  A
..122A	;	*	+	+B1a$$A 	
D!!A1q!!!rB   c                   t   e Zd Zej                            d ej        d           ej        d          g          ej                            dg d          ej                            dg d          ej                            dee	g          d	                                                 Z
ej                            d ej        d           ej        d          g          ej                            dg d          ej                            deeg          d
                                     ZdS )TestZeroSizeArraysr9   )r   r   rD   )r   rD   r   rM   )rq  rs  rK   rL   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 d S )Nr   r   r  r   r   )rM   r   r"   r   r-   r,   moveaxis)
rq   r  r9   rM   r   r7   xvalobjytshs
             r@   test_zero_sizez!TestZeroSizeArrays.test_zero_size   s    IbMMy||c!Q(((s4yy~""""s4yy$*qwqrr{"::::: [At$$c!Rt444Xete_	},rxQ/@@s4yy~""""s4yy"$$$$$$rB   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 d S )Nr   r   r   r   rH   r  )	rq   r  r9   r   r7   r  r  r  r  s	            r@   test_zero_size_2z#TestZeroSizeArrays.test_zero_size_2  s   
 IbMMy||c!Qiis4yy~""""s4yy$*qwqrr{"::::: [At$$c!Rd###Xete_	},rxQ/@@s4yy~""""s4yy"$$$$$$rB   N)rr   rs   rt   r   markparametrizer"   r+   r   r   r  r   r   r  r    rB   r@   r  r    su        [S828J#7#7#+28J#7#7#9 : :[YMMMO O[VYYY//[U%7$EFF% % GF 0/O O: :%  [S828J#7#7#+28J#7#7#9 : :[VYYY//[U%68K$LMM% % NM 0/: :% % %rB   r  )*rc  rP  numpyr"   numpy.testingr   r   r   r   r   r   r   r	   r  scipy.interpolater
   r   r   r   r   r   r   r   r   r   r   r   rA   rN   rT   r[   r   r   r   r   r   r"  rp  r  r  r  r  r    rB   r@   <module>r     s    				    , , , , , , , , , , , , , , , , + * * * * *                             AE1$ $ $ $N 
%	$	$G G G"> > >/6 /6 /6d# # #C: C: C: C: C: C: C: C:L$ $ $ $ $ $ $ $c. c. c. c. c. c. c. c.L|  |  |  |  |  |  |  | ~IJ IJ IJ IJ IJ IJ IJ IJX/ / /G G G
 
 
/% /% /% /% /% /% /% /% /% /%rB   