
    tKg                     @   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)y)    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                    t         j                  j                  d       g d}t        t	        dt        |      dz               }|j                  |t        |      dz   z  d       t        j                  j                  d|z    j                  |      }t        j                  |      }	| t        u rBt        j                  j                  d|z    j                  |      }
  | |||
fd|i||	      }n  | ||fd|i||	      }|xs d|j                  d | z   |z   |j                  |d  dd  z   }t        |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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                  h/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/interpolate/tests/test_polyint.pycheck_shaperA      sL   IINN4AU1c'l1n%&AHHTS\!^$a(
		)33A6A	'	B--yy~~w0::1=BaDBtBzB2F<a<<<R@ &B!''%4.8 !qr 23L<( 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   r7   r9   r   s      r@   
spl_interpztest_shapes.<locals>.spl_interp?   s    !!QT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 !"9;M);
DB!3r7(CG4D[(#BBd;"8B%.OE'BD$F #9	 5  DrB   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)r7   r9   r   rO   s      r@   interpolator_derivsz/test_derivs_shapes.<locals>.interpolator_derivsP   s    aD>---rB   r   rC   )r
   r   rN   r&   r'   rA   )rY   rP   rQ   r   rO   s       @r@   test_derivs_shapesrZ   N   sZ     "9:	. B!3r7(CG4D 3RT4H 5  	 ;rB   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 rW   )r
   
derivativerI   s      r@   krogh_derivz&test_deriv_shapes.<locals>.krogh_derivZ   s     At,777rB   c                 0    t        | ||      j                  S rW   )r   r]   rI   s      r@   
bary_derivz%test_deriv_shapes.<locals>.bary_deriv]   s    &q!T2===rB   c                 8    t        | ||      j                         S rW   r   r]   rI   s      r@   pchip_derivz&test_deriv_shapes.<locals>.pchip_deriv`   s    Q4 ++--rB   c                 :    t        | ||      j                  d      S Nr   rb   rI   s      r@   pchip_deriv2z'test_deriv_shapes.<locals>.pchip_deriv2c   s    Q4 ++A..rB   c                 8    t        | ||      j                         S rW   r   antiderivativerI   s      r@   pchip_antiderivz*test_deriv_shapes.<locals>.pchip_antiderivf   s    Q4 //11rB   c                 :    t        | ||      j                  d      S re   rh   rI   s      r@   pchip_antideriv2z+test_deriv_shapes.<locals>.pchip_antideriv2i   s    Q4 //22rB   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__)selfr7   s     r@   rq   zBtest_deriv_shapes.<locals>.pchip_deriv_inplace.<locals>.P.__call__n   s    (11$1==rB   N)__name__
__module____qualname__rq   r    rB   r@   Pro   m   s
    >rB   rv   )r   )r7   r9   r   rv   s       r@   pchip_deriv_inplacez.test_deriv_shapes.<locals>.pchip_deriv_inplacel   s    	! 	 At}rB   c                 8    t        | ||      j                         S rW   )r   r]   rI   s      r@   akima_derivz&test_deriv_shapes.<locals>.akima_derivs   s    "1a.99;;rB   c                 8    t        | ||      j                         S rW   )r   ri   rI   s      r@   akima_antiderivz*test_deriv_shapes.<locals>.akima_antiderivv   s    "1a.==??rB   c                 8    t        | ||      j                         S rW   )r   r]   rI   s      r@   cspline_derivz(test_deriv_shapes.<locals>.cspline_derivy   s    1a&1133rB   c                 8    t        | ||      j                         S rW   )r   ri   rI   s      r@   cspline_antiderivz,test_deriv_shapes.<locals>.cspline_antideriv|   s    1a&5577rB   c                 :    t        | ||      j                         S rG   )r   r]   rI   s      r@   
bspl_derivz%test_deriv_shapes.<locals>.bspl_deriv   s    !!QT2==??rB   c                 :    t        | ||      j                         S rG   )r   ri   rI   s      r@   bspl_antiderivz)test_deriv_shapes.<locals>.bspl_antideriv   s    !!QT2AACCrB   r    rC   )rN   r&   r'   rA   )r^   r`   rc   rf   rj   rl   rw   ry   r{   r}   r   r   r   rO   rP   rQ   r   s                    r@   test_deriv_shapesr   Y   s    8>./23<@48@D J\CV 0+/^M B!3r7(CG4DBB5 5  MrB   c                      g d} g d}t         t        t        fD ]  } || |      }t        | ||               g d}t	        | ||      }t        | ||              t        | || d             y )Nr   r   r   r   )r   r                 ?r   )r   y             r   y              @r   )r
   r   r   r   r   )r7   r9   rO   pr;   s        r@   test_complexr      sk    AA "9;Gq!H1Q4  H D1a&AAqt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 Zd Zy)	TestKroghc                     t         j                  j                  g d      | _        t        j                  ddd      | _        t        j                  ddd      | _        | j                  | j                        | _        y N)rD   r   r   r   r   d   rD   r"   
polynomial
Polynomial	true_polylinspacetest_xsxsysrr   s    r@   setup_methodzTestKrogh.setup_method   sU    112CD{{2a,++b1%..)rB   c                     t        | j                  | j                        }t        | j	                  | j
                         || j
                               y rW   r
   r   r   r   r   r   rr   rv   s     r@   test_lagrangezTestKrogh.test_lagrange   5    dggdgg.DNN4<<84<<IrB   c                    t        | j                  | j                        }t        | j	                  d       |d             t        | j	                  t        j                  d             |t        j                  d                   y N   )r
   r   r   r   r   r"   arrayr   s     r@   test_scalarzTestKrogh.test_scalar   sT    dggdgg.DNN1-ad3DNN288A;7288A;HrB   c                 $   t        | j                  | j                        }|j                  | j                        }t        |j                  d         D ]:  }t         | j                  j                  |      | j                        ||          < y Nr   )
r
   r   r   rX   r   r&   r,   r   r   derivrr   rv   Dis       r@   test_derivativeszTestKrogh.test_derivatives   sk    dggdgg.MM$,,'qwwqz"A 7 4 4Q 7 E !!& #rB   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   rX   r   r'   r&   r,   r   r   r   r   s       r@   test_low_derivativeszTestKrogh.test_low_derivatives   sy    dggdgg.MM$,,s477|A~6qwwqz"A 7 4 4Q 7 E !!& #rB   c                     t        | j                  | j                        }d}|j                  | j                  |      }t        |      D ]+  }t        |j                  | j                  |      ||          - y N
   )r
   r   r   rX   r   r&   r   r]   rr   rv   mrr   s        r@   test_derivativezTestKrogh.test_derivative   sZ    dggdgg.MM$,,q)qAT\\! <QqTB rB   c           	      P   t        | j                  | j                        }t        t	        | j                        dt	        | j                        z        D ]N  }t        |j                  | j                  |      t        j                  t	        | j                                     P y re   )
r
   r   r   r&   r'   r   r]   r   r"   r+   rr   rv   r   s      r@   test_high_derivativezTestKrogh.test_high_derivative   si    dggdgg.s477|Qs477|^4AT\\! < "T\\): ;= 5rB   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   rD   r   r      r   r   r   rH   r   )r   r"   r   r   stackr   r
   rX   r   r&   r,   r   r   rr   poly1poly2poly3r   rv   r   r   s           r@   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 +-./ #rB   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   rr   r   r   r   r   rv   r   s          r@   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 +-./ rB   c                     t        | j                  | j                        }t        | j	                  | j
                         || j
                               y 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        ||      }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   asarrayTrX   r*   )rr   r   r   rv   r   Pir   r   s           r@   test_vectorzTestKrogh.test_vector   s   XX!uaUAa5)*b$5:288A;5GH5G2ac7+5GH++b3'AgJJJB'?Bq'
B'?@BB	DAMM'2RZZ(LAw)?(LM		 I (@(Ls   	DD$6D)c                 h    t        | j                  | j                        }t         |g       g        y rW   )r
   r   r   r   r   s     r@   
test_emptyzTestKrogh.test_empty   s$    dggdgg.1R5"%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       y Nr   r    r!   r   )r   )r
   r   r   r   r"   r,   r   r   s     r@   test_shapes_scalarvaluez!TestKrogh.test_shapes_scalarvalue   s    dggdgg.288AaD>2.288AbhhqkN3R8288AqcF+T2288AqeH-t4rB   c           	         t        | j                  | j                        }|j                  }t	        t        j                  |j                  d            |f       t	        t        j                  |j                  t        j                  d                  |f       t	        t        j                  |j                  dg            |df       t	        t        j                  |j                  ddg            |df       y Nr   r   r   )	r
   r   r   r   r   r"   r,   rX   r   rr   rv   r   s      r@   "test_shapes_scalarvalue_derivativez,TestKrogh.test_shapes_scalarvalue_derivative   s    dggdgg.CC288AMM!$45t<288AMM"((1+$>?!F288AMM1#$67!A?288AMM1Q%$89Aa5ArB   c           	      v   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       y Nr   r   )r   )r   r   r   )r   r   )r
   r   r"   outerr   aranger   r,   r   s     r@   test_shapes_vectorvaluez!TestKrogh.test_shapes_vectorvalue  ss    dggbhhtwwryy|&DE288AaD>40288AqcF+U3288AqeH-u5rB   c                 R   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       y 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  sm    dggbhhtwws&;<288AaD>40288AqcF+U3288AqeH-u5rB   c           	         t        | j                  t        j                  | j                  t        j
                  d                  }|j                  }t        t        j                  |j                  d            |df       t        t        j                  |j                  dg            |ddf       t        t        j                  |j                  ddg            |ddf       y 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    dggbhhtwwryy|&DECC288AMM!$45!u=288AMM1#$67!AaA288AMM1Q%$89Aa7CrB   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]   rX   )rr   rv   kis      r@   test_wrapperzTestKrogh.test_wrapper  s    dggtww/AdllOR$,,-OPALLq9tww1E	GAMM$,,:twwAq6J	LrB   c           	          g d}t        j                  g d      }t        ||      }t        t	         ||      |z
  |j                  |d      z        d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   r   g|=atol)r"   r   r
   r   absr]   )rr   r7   
offset_cdffs       r@   test_int_inputszTestKrogh.test_int_inputs#  sX    XX ? @
 a,QqTJ.!,,q!2DDE	'rB   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
   rX   realimagr   )rr   r7   r9   funccmplxcmplx2s         r@   test_derivatives_complexz"TestKrogh.test_derivatives_complex0  s    xx)*BHH5K,L1 A&  ##Aqvv.::1=&q!&&1==a@@AvE2rB   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    r@   test_high_degree_warningz"TestKrogh.test_high_degree_warning:  s8    \\+-CDbiimRWWR[9 EDDs   3AA!N)rs   rt   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r    rB   r@   r   r      sr    *JI
&&C=//J
&5B66DL'3:rB   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 )NrD   r   r      )r   r"   expr&   r   r   )rr   degreer   r   s       r@   test_exponentialzTestTaylor.test_exponential@  sX    )"&&!VQCvaxA!Q'	A ! 	AaD#rB   N)rs   rt   ru   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 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    r@   r   zTestBarycentric.setup_methodJ  sU    112CD{{2q#.++b!Q'..)rB   c                     t        | j                  | j                        }t         || j                        | j                  | j                               y rW   )r   r   r   r   r   r   r   s     r@   r   zTestBarycentric.test_lagrangeP  s5    #DGGTWW5$,,)EFrB   c                    t        | j                  | j                        }t         |d      | j	                  d             t         |t        j                  d            | j	                  t        j                  d                   y r   )r   r   r   r   r   r"   r   r   s     r@   r   zTestBarycentric.test_scalarT  sT    #DGGTWW5!dnnQ/0"((1+rxx{(CDrB   c                 $   t        | j                  | j                        }|j                  | j                        }t        |j                  d         D ]:  }t         | j                  j                  |      | j                        ||          < y r   )
r   r   r   rX   r   r&   r,   r   r   r   r   s       r@   r   z TestBarycentric.test_derivativesY  sh    #DGGTWW5MM$,,'qwwqz"A3DNN003DLLA1Q4H #rB   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   rX   r   r'   r&   r,   r   r   r   r   s       r@   r   z$TestBarycentric.test_low_derivatives_  s|    #DGGTWW5MM$,,DGGQ7qwwqz"A3DNN003DLLAaD!&( #rB   c                     t        | j                  | j                        }d}|j                  | j                  |      }t        |      D ]+  }t        |j                  | j                  |      ||          - y r   )r   r   r   rX   r   r&   r   r]   r   s        r@   r   zTestBarycentric.test_derivativeg  sZ    #DGGTWW5MM$,,*qAALLq91Q4@ rB   c           	      P   t        | j                  | j                        }t        t	        | j                        dt	        | j                        z        D ]N  }t        |j                  | j                  |      t        j                  t	        | j                                     P y )NrD   )
r   r   r   r&   r'   r   r]   r   r"   r+   r   s      r@   r   z$TestBarycentric.test_high_derivativen  si    #DGGTWW5s477|Qs477|^4AALLq9HHS%679 5rB   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   rH   r   r  r   )r   r"   r   r   r   r   r   rX   r   r&   r,   r   r   r   s           r@   r   z%TestBarycentric.test_ndim_derivativest  s	   ((8(();<XXuTWW~uTWW~uTWW~FRP#DGGRa8MM$,,'qwwqz"AAaDHHnekk!nT\\&B&4ekk!nT\\&B&4ekk!nT\\&B&D +-. "'( #rB   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          r@   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 +-. "'( rB   c                     t        | j                        }|j                  | j                         t	        | j                  | j                         || j                               y rW   )r   r   set_yir   r   r   r   r   s     r@   test_delayedzTestBarycentric.test_delayed  s?    #DGG,	DNN4<<8!DLL/JrB   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     r@   test_appendzTestBarycentric.test_append  sc    #DGGBQK!=	dggabk*DNN4<<8!DLL/JrB   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   )	rr   r   r   BIrv   r   r   r   r   s	            r@   r   zTestBarycentric.test_vector  s    XX1v1v1v./$r2J(-bhhqk(:;(:1bR1X(:;++b!S)AgJJJB'?Bq'
B'?@BB	D < (@s   C C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       y r   )r   r   r   r   r"   r,   r   r   s     r@   r   z'TestBarycentric.test_shapes_scalarvalue  s    #DGGTWW5288AaD>2.288AbhhqkN3R8288AqcF+T2288Aq!fI.5rB   c           	         t        | j                  | j                        }|j                  }t	        t        j                  |j                  d            |f       t	        t        j                  |j                  t        j                  d                  |f       t	        t        j                  |j                  dg            |df       t	        t        j                  |j                  ddg            |df       y r   )	r   r   r   r   r   r"   r,   rX   r   r   s      r@   r   z2TestBarycentric.test_shapes_scalarvalue_derivative  s    #DGGDGG4CC288AMM!$45t<288AMM"((1+$>?!F288AMM1#$67!A?288AMM1Q%$89Aa5ArB   c           	      v   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       y r   )r   r   r"   r   r   r   r   r,   r   s     r@   r   z'TestBarycentric.test_shapes_vectorvalue  ss    #DGGRXXdggryy|-LM288AaD>40288AqcF+V4288Aq!fI.7rB   c                 R   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       y r   )r   r   r"   r   r   r   r,   r   s     r@   r   z*TestBarycentric.test_shapes_1d_vectorvalue  sm    #DGGRXXdggs-CD288AaD>40288AqcF+V4288AqeH-v6rB   c           	         t        | j                  t        j                  | j                  t        j
                  d                  }|j                  }t        t        j                  |j                  d            |df       t        t        j                  |j                  dg            |ddf       t        t        j                  |j                  ddg            |ddf       y r   )
r   r   r"   r   r   r   r   r   r,   rX   r   s      r@   r   z2TestBarycentric.test_shapes_vectorvalue_derivative  s    #DGGBHHTWWRYYq\,JKCC288AMM!$45!u=288AMM1#$67!AaA288AMM1Q%$89Aa7CrB   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 r   )r   r   r   r   r   r   r]   rX   )rr   rv   bis      r@   r   zTestBarycentric.test_wrapper  s    #DGGTWW5$$,,DGGTWWdll)KLT\\15tww1E	GdllA6twwAq6J	LrB   c                     dt        j                  dd      z  }t        j                  dd      }t        ||d      }t        |d       y )Ni  r      g     @g      #@)r"   r   r   r   )rr   r7   r9   values       r@   test_int_inputzTestBarycentric.test_int_input  s?    299Q##IIa'1j9E3'rB   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   )rr   r   jr7   wrv   factors          r@   test_large_chebyshevz$TestBarycentric.test_large_chebyshev  s     IIa!e##BJJ/FF1ruu9q=! AI	!	"#A& aADDAJ/3rB   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)rr   rv   r<   s      r@   test_warningzTestBarycentric.test_warning  sU     $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   )rr   xisr   s      r@   test_repeated_nodez"TestBarycentric.test_repeated_node  sP     hh+,XXl#]]:!LN#C,N N Ns   
A  A)N)rs   rt   ru   r   r   r   r   r   r   r   r   r   r  r  r   r   r   r   r   r   r   r*  r5  r;  rA  r    rB   r@   r  r  I  sz    *GE
I(A9( (K
K
D6B87DL(42	.-rB   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                  t         j                  j                  |            }t         j                  j                  |      }t	        ||      ||fS )Nr   )r"   r#   r$   sortr   )rr   nptsr:   r<   s       r@   _make_randomzTestPCHIP._make_random  sV    
		tWWRYY%%d+,YYd#R}b"$$rB   c                 8   | j                         \  }}}t        t        |      dz
        D ]l  }||   ||dz      }}||   ||dz      }}||kD  r||}}t        j                  ||d      }	 ||	      }
t        ||
dz   k  |
|dz   k  z  j                                n y )Nr   r   r   rG  r&   r'   r"   r   r   allrr   r   r:   r<   r   x1x2y1y2xpyps              r@   test_overshootzTestPCHIP.test_overshoot  s    %%'	2rs2wqy!AUBqsGBUBqsGBBwRBRR(B2BbBJ&2e+;<AACD "rB   c                 ,   | j                         \  }}}t        t        |      dz
        D ]f  }||   ||dz      }}||   ||dz      }}t        j                  ||d      }	 ||	      }
t        ||z
  |
dd  |
d d z
  z  dkD  j                                h y )Nr   r   r   rI  rK  s              r@   test_monotonezTestPCHIP.test_monotone  s    %%'	2rs2wqy!AUBqsGBUBqsGBRR(B2Bbe12BQ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       y )	N)
r   r   r      /   <   O   W   c   r   )
r\  ir   r      &   -   5   7   r   r   r         ?+=)r   rtol)r"   r   r   r   r   )rr   dataxxcurvedata1curve1s         r@   	test_castzTestPCHIP.test_cast#  sw    xx@DF GYYs^'d1gtAw'+s
*uQxq*2.vE>rB   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
?rd  r   )r"   loadtxtioStringIOr   r   )rr   dataStrre  pch	resultStrresults         r@   test_nagzTestPCHIP.test_nag/  s    

 zz"++g./D1ItAaCy)	 BKK	23qsS!%5BTJrB   c                    t        j                  g d      }t        j                  g d      }t        j                  g d      }t        ||      t        ||      fD ]&  }|d   |d   fD ]  }t         ||d      dk7          ( y )N)rl  r=  g      ?gffffff?)皙uq@g     @@     @@     @)rw  ry  g     p@rx  r   r   r   )r"   r   r   r   )rr   r7   rN  rO  ppts         r@   test_endslopeszTestPCHIP.test_endslopesR  st     HH+,XX34XX45B<q".BdAbE]1aA& # /rB   c                 >   t        j                  d      }t        j                  |      }t        j                         5  t        j
                  d       t        ||      }d d d        t        j                  ddd      }t         |      d       y # 1 sw Y   3xY w)Nr   errorr   	   e   rl  )	r"   r   
zeros_likewarningscatch_warningsfilterwarningsr   r   r   )rr   r7   r9   rr  rf  s        r@   test_all_zeroszTestPCHIP.test_all_zeros\  st    IIbMMM! $$&##G,1+C ' [[As#SWb! '&s   "BBc                     t        j                  ddd      }t        ddgddg      }t         ||      d|z  d       y )Nr   r   r(  r   r   r   )r"   r   r   r   )rr   r7   r   s      r@   test_two_pointszTestPCHIP.test_two_pointsh  s>    
 KK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       y )	Nr   r   r   )r   rD   r   r,  r   r   rb  r   g      @)r   r   r   s    r@   test_pchip_interpolatez TestPCHIP.test_pchip_interpolateq  sg    !gw1=D	 	"gw1=E	 	"gwAq6BUQCL	rB   c                 \    t        ddgddg      }|j                         }t        |d       y )Nr   r   r   r,  )r   rootsr   )rr   r   r   s      r@   
test_rootszTestPCHIP.test_roots~  s+    1a&2q'"GGI3rB   N)   )rs   rt   ru   rG  rR  rT  rj  ru  r|  r  r  r  r  r    rB   r@   rC  rC    s7    %
E=
?!KF'
"/ rB   rC  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           	      r   | 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(  r|dk(  r|dk(  rt        |d   d||       y|d	k(  rjt         | |d   d       | |d   d      ||       t         | |d   d       | |d   d      ||       t         | |d   d       | |d   d      ||       y|dk(  r\|j                  dk(  r7 | |d          | |d         z
  |d   z  }t         | |d   d      |||       nrt        |d
   |d   ||       n\|dk(  rt         | |d   d      d||       n=|dk(  rt         | |d   d      d||       n|\  }	}
t         | |d   |	      |
||       |dk(  r\|j                  dk(  r7 | |d          | |d         z
  |d   z  }t         | |d   d      |||       yt        |d   |d   ||       y|dk(  rt         | |d   d      d||       y|dk(  r t         | |d   d      dd|z  d|z         y|\  }	}
t         | |d   |	      |
||       y)zVCheck that spline coefficients satisfy the continuity and boundary
        conditions.r   r   r   Nr   r   rm  
not-a-knotperiodic)r   r   )r   r   rL   rK   )r   r   )r   r   )	r7   cr"   diffr0   r,   r/   r   r-   )Sbc_startbc_endtolr7   r  dxdxislopeorderr)  s              r@   check_correctnessz!TestCubicSpline.check_correctness  s   
 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!#C8 z!AadAJ!B%#CHAadAJ!B%#CHAadAJ!B%#CH |#vv{1Q41QqT7*be3!A$
E#F$4sE"AadAJ#>"AadAJ#>#LE5AadENE#F\!vv{1Q41QqT7*be3!A$
E#F%!E(3Gy AaeQK3?y AaeQK3QsUC!LE5AaeUOU3GrB   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  rK   rL   r   r   r   rM   g+=r  )r%   r,   r"   emptyfillr   r  )rr   r7   r9   r   r5   first_derivsecond_derivbc_allrR   r  r  r  s               r@   check_all_bczTestCubicSpline.check_all_bc  s    177mhh{+xx,"
 !*BAqtR8A""1b"-  H 14(F9KL&&q(F&F ! rB   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  )rr   r7   r9   r   Ys        r@   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*  rB   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   rD   r   r   r  rM   r   rD   r  )r"   r   r0  r/  r   r  r  )rr   r   r7   r9   r  r  s         r@   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*= rB   c                     t        j                  ddt         j                  z  d      }t        j                  |      }t	        ||d      }t         |d       |ddt         j                  z  z         d       y )	Nr   r   r   r  r  r   r  )decimal)r"   r   r0  r/  r   r   rr   r7   r9   r  s       r@   test_periodic_evalz"TestCubicSpline.test_periodic_eval  sX    KK1ruu9b)FF1I1j1AaD!ABEE	M"2B?rB   c                     t        j                  g d      }t        j                  g d      }t        ||dd      }| j                  |dd       y )N)r>  ?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  r  )rM   extrapolate)r"   r   r   r  r  s       r@   *test_second_derivative_continuity_gh_11758z:TestCubicSpline.test_second_derivative_continuity_gh_11758  sN    HH O PHH P Q1jjIq*j9rB   c                    t        j                  g d      }t        j                  g d      }t        ||d      }| j                  |dd       t	         |j                  d      |      t        j                  g d             y )N)rb  g      @r  )rb  g      .@rb  r  r  r   )      Hr  r  )r"   r   r   r  r   r]   r  s       r@   test_three_pointsz!TestCubicSpline.test_three_points  se     HH%&HH%&1j1q*j9Q*BHH5J,KLrB   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)rl  rb  r  rl  rb  r  r  r   r   r   rD   )r"   r   r   r  r   r   )rr   r7   r9   r  S0S1qs          r@   #test_periodic_three_points_multidimz3TestCubicSpline.test_periodic_three_points_multidim  s     HH_%HHsCj3*sCj9:1j1q*j9AadGZ8AadGZ8KK1a !QT
BqE*!QT
BqE*rB   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   )dtype)r   r   r   r   )y            ?rl  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    HH\-HH]#.1q!HH121q!16+?@q)W5HH]#1}m&DEq-?rB   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#   RandomStaterE  uniformr   r  )rr   rngr7   r9   r  s        r@   test_small_dxzTestCubicSpline.test_small_dx.  sc    ii##A&GGCKKSK)*#++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       y )Nr   )y      ?      ?r   r   r   r   r   r   )r   r   r   r   r  r   ))r  rL   ))r   r   )r   r   )r   r   )rl  rl  z
not-a-typor   T)rL   r  rL   )r   r   r   r  )r"   r   nanassert_raisesr?  r   newaxisc_)rr   r7   r9   xcxnxoyny3rL  rN  wrong_bcrM   r  bc1bc2bc3s                   r@   test_incorrect_inputsz%TestCubicSpline.test_incorrect_inputs5  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"  G*k1aGTJ   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IrB   N)r  r  rc  )rs   rt   ru   staticmethodr  r  r  r  r  r  r  r  r  r  r  r    rB   r@   r  r    sT    ;G#9H 9HvG.+>@:
M+@"-&JrB   r  c                      g d} g d}g d}t        | ||      }t         ||       |d       t         || d      |d       y )N)r   r   r   )r   r   r   )r   r   r   r   )rd  r   )r   r   )r7   r9   r;   r8   s       r@   #test_CubicHermiteSpline_correctnessr  ^  sA    AAD1a&AAaD!%(AaGT.rB   c                      g d} g d}g d}t        t        t        | ||       ddt        j                  g}t        t        t        | ||       y )Nr  )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  g  sB    AAD*0!Q=266NM*0!QFrB   c                  >   t        j                  ddg      } t        j                  ddg      }t        j                  ddg      }t        | ||      }|j                  d      }t	        |j
                  j                  d	   d	       t	        |j                  d
       y )NgMbP?gMb`?gBܻ>gdJ>g/"g%"T)r  r   r   )r"   r   r   r  r   r  r,   r-   )r7   r9   dyr   r   s        r@   test_roots_extrapolate_gh_11185r  q  s~    
% A
..12A	;	*	+B1a$A 	
D!A1q!rB   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)TestZeroSizeArraysr9   )r   r   rD   )r   rD   r   rM   )r  r  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 y )Nr   r   r  r   r   )rM   r   r"   r   r-   r,   moveaxis)
rr   r  r9   rM   r   r7   xvalobjytshs
             r@   test_zero_sizez!TestZeroSizeArrays.test_zero_size  s     IIbMyy|!Q(4y~~"""4y$**qwwqr{":::: [[At$!Rt4XXet_		},rxxQ/@@4y~~"""4y"$$$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 y )Nr   r   r   r   rH   r  )	rr   r  r9   r   r7   r  r  r  r  s	            r@   test_zero_size_2z#TestZeroSizeArrays.test_zero_size_2  s    
 IIbMyy|!Qi4y~~"""4y$**qwwqr{":::: [[At$!Rd#XXet_		},rxxQ/@@4y~~"""4y"$$$rB   N)rs   rt   ru   r   markparametrizer"   r+   r   r   r  r   r   r  r    rB   r@   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:%rB   r  )*r  ro  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   rZ   r   r   r   r  r  rC  r  r  r  r  r  r    rB   r@   <module>r     s     	 , , +     AE1$N 
%G"I26j#`: `:F$ $z- z-z|  | ~VJ VJr/G
/% /%rB   