o
    gu                    @   s  d dl mZmZmZmZmZmZmZ d dlm	Z
 d dlZd dlmZmZmZmZmZmZ d dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z"m#Z# d dlm$Z$ d dl%m&Z&m'Z' d d	l(m)Z) d d
l!m*Z* G dd dZ+G dd dZ,G dd dZ-G dd dZ.G dd dZ/G dd dZ0G dd dZ1G dd dZ2G dd dZ3G dd dZ4G dd  d Z5G d!d" d"Z6d#d$ Z7ej8fd%d&Z9d'd( Z:d/d)d*Z;d/d+d,Z<d/d-d.Z=dS )0    )assert_assert_equalassert_almost_equalassert_array_almost_equalassert_array_equalassert_allclosesuppress_warnings)raisesN)mgridpisinogridpoly1dlinspace)interp1dinterp2dlagrangePPolyBPolysplrepsplev
splantidersplintsprootAkima1DInterpolatorNdPPolyBSpline)pochgamma)_ppoly)assert_deallocatedIS_PYPY)nquad)binomc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestInterp2Dc                 C   s   t ddddtdf \}}t|d|  }t B}|t t|||}t|ddtddd tddd	dtd
f \}}t||	 |	 t|d|  dd W d    d S 1 s^w   Y  d S )Nr                    4@              5@      ?      ?       @decimaly              8@y              9@)
r
   r   r   r   filterDeprecationWarningr   r   r   ravel)selfyxzsupIIvu r8   f/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/interpolate/tests/test_interpolate.pytest_interp2d   s   
"zTestInterp2D.test_interp2dc                 C   s   t ddd}t dtd}t|d d d f |d d d f d  }t  }|t t|||}t|ddtddd W d    d S 1 sFw   Y  d S )Nr   r%         r*   r)   r+   )r   r   r   r   r-   r.   r   r   )r0   r2   r1   r3   r4   r5   r8   r8   r9   test_interp2d_meshgrid_input&   s   (
"z)TestInterp2D.test_interp2d_meshgrid_inputc                 C   sz  t jd tddd}tdtd}t|d d d f |d d d f d  }t }|t t	|
 |
 |dd}t j| t|d d d f |d d d f d  }t	|
 |
 |dd}t j| t j| t|d d d f |d d d f d  }t	|||dd}tddd	}tdtd
}t|||||| t|||||| W d    d S 1 sw   Y  d S )N  r   r%   r;   r<   r*   cubickind      )nprandomseedr   r   r   r   r-   r.   r   copyshuffler   )r0   r2   r1   r3   r4   ip1ip2ip3r8   r8   r9   %test_interp2d_meshgrid_input_unsorted0   s&   (
(("z2TestInterp2D.test_interp2d_meshgrid_input_unsortedc              	   C   s   t ddddtdf \}}t|d|  }t A}|t t|||}tg d}tddg}t	||||||d d d	  t
t|||d d d	 ddd
 W d    d S 1 s]w   Y  d S )Nr   r%   r&   r'   r(   )         g333333@gffffff@T)r
   r   r   r   r-   r.   r   rD   arrayr   assert_raises
ValueError)r0   r1   r2   r3   r4   funcxeyer8   r8   r9   test_interp2d_eval_unsortedI   s   
  "z(TestInterp2D.test_interp2d_eval_unsortedc                 C   s   t ddg}d|d< t d }}t 1}|t t|||d}t|ddt dgdd	 t|dd
t dgdd	 W d    d S 1 sIw   Y  d S )NrO   r)   )r%   r%   linearr*         ?r(   r%   r+         @)	rD   zerosaranger   r-   r.   r   r   rQ   )r0   ar2   r1   r4   br8   r8   r9   test_interp2d_linearV   s   
"z!TestInterp2D.test_interp2d_linearc                 C   sV  t ddd}t ddd}|d d d f d |d d d f  }t ddd}t ddd	}t p}|t t|||d
d}tt||| t|||t jd}|||}|dk |dkB }	|dk |dkB }
t	t 
||
d d f   t	t 
|d d |	f   t	t ||
 d d f d d |	 f   W d    d S 1 sw   Y  d S )Nr      rO   r%      rP   rM   rB   !   Tbounds_error
fill_value)rD   r   r   r-   r.   r   rR   rS   nanr   isnanallisfinite)r0   r2   r1   r3   ixiyr4   r^   izmxmyr8   r8   r9   test_interp2d_boundsa   s"   $

0"z!TestInterp2D.test_interp2d_boundsN)	__name__
__module____qualname__r:   r=   rL   rW   r_   rp   r8   r8   r8   r9   r$      s    
r$   c                   @   sB  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdId d!ZdId"d#Zd$d% Zd&d' Zd(d) Zd*d+ ZdId,d-ZdId.d/Zd0d1 Zejdfd2d3Zd4d5 Zej j!e"d6d7d8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBdC Z(ej )dDdEdFdG Z*dHS )JTestInterp1Dc                 C   sH  t d| _t d| _t d| _| jd| _t d| _t d| _t 	dg| _
t 	dg| _t dd| _t dd| _t dd	| _t dd| _t d
d| _t d
d| _t dd| _d| jd d df< d| jd d df< t dd| _d| jdd d f< d| jdd d f< d| _d S )N      @      $@)r%   rO   r*           g      4@r%   
   )ry   r%   )r%   r%   rO   g      >@)r%   rM   rO   )rM   r%   rO   rC   r   rP   g      Y)rD   r\   x5x10y10reshapex25x2y2rQ   x1y1y210y102y225y25y235y325y210_edge_updatedy102_edge_updatedrf   r0   r8   r8   r9   setup_methodz   s*   
zTestInterp1D.setup_methodc              
   C   s  dD ]}t | j| j|d t | j| j|dd qt | j| jddd t | j| jdtdgd t | j| jddd t | j| jddd t | j| jdd	d t | j| jd
d t | j| jdd t | j| jdd t | j| jdd t | j| jddd	d t | j| jdd
tdd t | j| jdd
tdtdfd t | j| jdd
tddfd tt	t | j
| j tt	t | jtd
 tt	t | j| j tt	t | j| j tt	t | j| j t | j| j t | j| jd
d tt	t | j| j tt	t | j| j tt	t | j| jddd tt	t | j| jdg dd tt	t | j| jdtdd tt	t | j| jddggd tt	t | j| jdddgd tt	t | j| jdtg d tt	t | j| jddd tt	t | j| jdd
ddgd tt	t | j| jdd
dddgfd d S )N)	nearest
nearest-upzerorX   slinear	quadraticr?   previousnextr@   extrapolaterA   rf   rX   )rP   r`   rP   )rP   )rP   rP   r   r`   r%   rM   rA   axisrf   ry   r   )rP   rP   rP   r8   rw   )r   r|   r}   rD   rQ   r   r   onesrR   rS   r   r   r   r   r   r0   rA   r8   r8   r9   test_validation   s   

zTestInterp1D.test_validationc                 C   s<  t t| j| jj t t| j| jddj  t t| j| jj t t| j| jddj  t tt| j| jj t	t| j| jddjd t	t| j| jddjd t	t| j| jj
d t	t| j| jj
d t	t| j| jdd	j
d tt| j| jj| j tt| j| jj| j tt| j| jj| j d S )
NF)rG   rc         @re   )r)   r*   r   r`   r   )r   r   r|   r}   rG   rd   rD   rh   rf   r   r   r   r   r   r2   r1   r   r8   r8   r9   	test_init   s"   zTestInterp1D.test_initc                 C   s0  t | j| j}t | jd d d | jd d d }t|| j| j t|dtdg t|g d|g d t | jd d d | jd d d dd}t|| j| j t | jd d d | jd d d dd}tt|| j t | j| j}t | jd d d | jd d d d df }t|| j|| j d S )NrP   333333?g333333@gffffff@      @F)assume_sortedT)	r   r|   r}   r   rD   rQ   rR   rS   r   )r0   interp10interp10_unsortedinterp10_assume_kwinterp10_assume_kw2interp10_y_2dinterp10_y_2d_unsortedr8   r8   r9   test_assume_sorted   s(   "
*
zTestInterp1D.test_assume_sortedc                 C      dD ]}|  | qd S )N)rX   r   )_check_linearr   r8   r8   r9   test_linear  s   zTestInterp1D.test_linearc                 C   s   t | j| j|d}t|| j| j t|dtdg t|g dtg d t | j| j|dd}t|g dg ddd	 t|dd
d}tt	t | j| jfi | d S )Nr@   r   r   r   r         r   	      )rP   r   r   r   +=rtolTrA   rf   rd   
r   r|   r}   r   rD   rQ   r   dictrR   rS   )r0   rA   r   extrapolatoroptsr8   r8   r9   r     s"   zTestInterp1D._check_linearc                 C   s   t jd D ]!}t jd|d}|}t||dd|}t|j| t||dd qg d}t jd	d
g}t|||}t||dd d S )Nfloat   dtyperX   r@   V瞯<atolr   r`   r%   r   r`   )rD   sctypesr\   r   r   r   r   rg   )r0   dtypr2   r1   ypr8   r8   r9   test_linear_dtypes+  s   zTestInterp1D.test_linear_dtypesc                 C   s   t jt jt jg}|t jt jg }g d}|D ]@}t jdd|d}|D ]3}t | d |}|D ]#}||}	|D ]}
t	|||
dd}t
||	|dd	|||f d
 q:q1q"qd S )N)r   r   r   r?   r   ry   r   r   FrA   rd   Hz>z	%s, %s %sr   err_msg)rD   float16float32float64	complex64
complex128r\   expastyper   r   )r0   dt_rdt_rcspline_kindsdtxr2   dtyr1   dtnxnewrA   fr8   r8   r9   test_slinear_dtypes=  s$   
z TestInterp1D.test_slinear_dtypesc                 C   sp   t | j| jdd}t|| j| j t|dtdg t|dtdg t|g dtg d d S )Nr?   r@   r   rY   r   r   r|   r}   r   rD   rQ   r0   r   r8   r8   r9   
test_cubicN  s   zTestInterp1D.test_cubicc                 C   s   t | j| jdd}t|| j| j t|dtd t|dtd t|g dtg d t | j| jddd	}t|g d
g ddd tdddd}tt	t | j| jfi | d S )Nr   r@   r   r)   rY   r   r*   r   r   r   r   r   r   r   r   r   r   r   Tr   r   r0   r   r   r   r8   r8   r9   test_nearestW  $   zTestInterp1D.test_nearestc                 C   s   t | j| jdd}t|| j| j t|dtd t|dtd t|g dtg d t | j| jdd	d
}t|g dg ddd tdd	dd}tt	t | j| jfi | d S )Nr   r@   r   r)   rY   r*   r   r   r   r   r   r   r   r   Tr   r   r   r8   r8   r9   test_nearest_upl  r   zTestInterp1D.test_nearest_upc              	   C   s  t | j| jdd}t|| j| j t|dtd t|dtd t|g dtg d t | j| jddd	}t|g d
tjdddgdd t | j| jddd	}t|g dtjtjddddg t | j| jddd	}t|g dtjtjddddgtjtjddddgg t | j| j	dddd}t|g dtjtjgddgddgg t
dddd}ttt | j| jfi | t g dg ddddd}t|g dtjtjddd d d g t g d!g d"ddd#d}t|g dtjtjddd d d g t | j| jddd	}t|g dtjtjddd$d$gtjtjddd$d$gg t | j| jdddd}t|g dtjtjgddgd$d$gg d S )%Nr   r@   r   r)   rY   r   r*   ru   r   r   r   r   r   r   r   r   rP   rO   r         rO   r            r   r   rO   r   ry   r   Tr   r   r   r`   rP   rA   rf   r   r   rP   r   r`   r%   rM   rO   r`   rP   r%   r   r`   rP   r   r`   Frz   r   r|   r}   r   rD   rQ   r   rg   r   r   r   rR   rS   r   r   r0   r   r   interpolator1Dinterpolator2Dinterpolator2DAxis0r   r8   r8   r9   test_previous  s   



zTestInterp1D.test_previousc              	   C   s  t | j| jdd}t|| j| j t|dtd t|dtd t|g dtg d t | j| jddd	}t|g d
dddtjgdd t | j| jddd	}t|g dddddtjtjg t | j| jddd	}t|g dddddtjtjgddddtjtjgg t | j| j	dddd}t|g dddgddgtjtjgg t
dddd}ttt | j| jfi | t g dg ddddd}t|g ddddddtjtjg t g d g d!ddd"d}t|g ddddddtjtjg t | j| jddd	}t|g dd#d#ddtjtjgd#d#ddtjtjgg t | j| jdddd}t|g dd#d#gddgtjtjgg d S )$Nr   r@   r   r*   rY   r   )r   r   r   r   r   r   r   r   r   r   r   rO   r   ry   r   r   r   r   r`   r   Tr   r   r   r   r   rP   r   r   FrC   r   r   r8   r8   r9   	test_next  s   



zTestInterp1D.test_nextc                 C   sl   t | j| jdd}t|| j| j t|dtd t|dtd t|g dtg d d S )Nr   r@   r   r)   rY   r   r   r   r   r8   r8   r9   	test_zero  s   zTestInterp1D.test_zeroc              
   C   sX   t t|| z|| W d S  ty+ } zd|t|v s J W Y d }~d S d }~ww )Nz{})rR   rS   formatstr)r0   interpolant
test_array
fail_valueerrr8   r8   r9   bounds_check_helper  s   $z TestInterp1D.bounds_check_helperrX   c                 C   s   t | j| j| jd|d}t|dt| j t|dt| j t|dgdgdgdgggt| j t|tg dtg dg d	g t | j| jd
|d}| |dd | |dd | |g dd | |g dd |g d d S )NF)rf   rd   rA   gffffff&@g333333g333333)@gL3@)r   rw   ru         "@      &@)TFFFF)FFFFTT)rd   rA   r   r   )rw   r   rw   )rw   r)         5@r  )rw   ru   r   )	r   r|   r}   rf   r   rD   rQ   _check_boundsr   )r0   rA   extrap10raises_bounds_errorr8   r8   r9   _bounds_check  s.   

zTestInterp1D._bounds_checkc                 C   sx   t dt j}t dt j}t|||t jdd}||d }tt |d  t|t j	t j|d d f  d S )Nry   Fr   r`   r   rP   )
rD   r\   r   int_r   rg   r   rh   r   r_)r0   rA   r2   r1   cyir8   r8   r9   _bounds_check_int_nan_fill5  s   "z'TestInterp1D._bounds_check_int_nan_fillc                 C   "   dD ]}|  | | | qd S )N)rX   r?   r   r   r   r   r   r   )r  r
  r   r8   r8   r9   test_bounds=     
zTestInterp1D.test_boundsc                 C   s  t | j| j|ddd}t|dd t|dd t|ddgddg | j| j| j| jfD ]f}t | j||dddd	}t|dd t|dd t|ddgd t | j||dddd	}t|dd t|dd |j	d
krddgg|j
d  g|j
d  }n
ddgg|j
d  }t|ddg| q.g d}| j| jfD ]}ttt | j||d|dd	 qt | j| j|d|dd	}t|dg dgd  t|dg dgd  t|ddgddgddgddgggd  ddg}ttt | j| j|d|dd	 | j| j| jfD ]M}t | j||d|dd	}ddg}|j	d
kr!|g|j
d  }t|d| t|d| ddgddgg}|j	d
krE|g|j
d  }t|ddg| qtg ddf}| j| jfD ]}ttt | j||d|dd	 q_t | j| j|d|dd	}t|dd t|dg dgd  t|ddgddgddgddgggd  tddgdf}ttt | j| j|d|dd	 | j| j| jfD ]M}t | j||d|dd	}t|dd ddg}|j	d
kr|g|j
d  }t|d| ddgddgg}|j	d
kr|g|j
d  }t|ddg| qg dg df}| j| jfD ]}ttt | j||d|dd	 qtdD ]J}|dkrDtdd |D }t | j| j|d|dd	}t|dg dgd  t|dg dgd  t|ddgddgddgddgggd  q4ddgddgf}ttt | j| j|d|dd	 | j| j| jfD ]_}t | j||d|dd	}ddg}|j	d
kr|g|j
d  }t|d| ddg}|j	d
kr|g|j
d  }t|d| ddgddgg}|j	d
kr|g|j
d  }t|ddg| qddgddgg}| j| j| jfD ]}ttt | j||d|dd	 qtdD ]J}|dkr.t|}t | j| j|d|dd	}t|dddgddgg t|dddgddgg t|ddgddgddggddgddggg q"ddgddggddgddggf}| j| j| jfD ]}ttt | j||d|dd	 qtdD ]S}|dkrt|d t|d f}t | j| j|d|dd	}t|dddgddgg t|dddgddgg t|ddgddgddggddgddggg qd S )N)d   Fr   ry   r  r  rP   )rA   r   rf   rd   rM   r`   r   )r     ,  r%   r  r  )r  8r  r  c                 s   s    | ]}t |V  qd S N)rD   rQ   ).0r   r8   r8   r9   	<genexpr>  s    z1TestInterp1D._check_fill_value.<locals>.<genexpr>i  i  ii0)r   r|   r}   r   r   r   r   r   r{   ndimshaperR   rS   rD   rQ   rangetuple)r0   rA   interpr1   resultrf   iir8   r8   r9   _check_fill_valueC  sX  
"










zTestInterp1D._check_fill_valuec                 C   r   N)rX   r   r?   r   r   r   r   r   )r  r   r8   r8   r9   test_fill_value  s   zTestInterp1D.test_fill_valuec                 C   s4   t | j| jdd}t|jd d|_t|jd d S )Ng     ^@re   g     t@)r   r|   r}   r   rf   )r0   r  r8   r8   r9   test_fill_value_writeable  s   z&TestInterp1D.test_fill_value_writeablec                 C   s  t | j| j|d}t|tddgddggtddgddgg tt|dtj t	|dj
d t | j| j|d}t|dtdd	g t|tddgtddgd	d
gg t | j| jd|d}t|dtddg t|tddgtddgddgg tddgddgg}t||tddgddggddgd
dggg t||tddgdd	ggddgddggg d S )Nr@   r   ru   r*         @r   r8   r)   r         (@r   r   rA   r   g      *@g      .@g      1@rv         @g      ,@)r   r|   r}   r   rD   rQ   r   
isinstancendarrayr   r  r   r   )r0   rA   r   	interp210	interp102x_newr8   r8   r9   _nd_check_interp  s6   zTestInterp1D._nd_check_interpc           
      C   s   g d}t t |j| }t|D ]<\}}t |}t||||d}t||||d t ddd }t|}	g d|	||d < t||j|	|d qd S )N)rN   rO      ra   r%  r   r-  )r%   rM   r`   r$  r`   )	rD   r\   prodr~   	enumerater   r   listr  )
r0   rA   r]   r1   nsr2   r3   r   r^   r8   r8   r9   _nd_check_shape  s   
zTestInterp1D._nd_check_shapec                 C   r  )N)rX   r?   r   r   r   r   r   r   )r,  r4  r   r8   r8   r9   test_nd  r  zTestInterp1D.test_ndc           	      C   s   t g d}||d  }||}t|||d}t|d d ||d d  t ddd}t||j|d}t||j|d}t||j|| t||j|| d S )N)
r`   rZ   rM   g@rN   g@g@g       @g      #@ry         ?       @r@   rP   r`   ry   rB   )rD   rQ   r   r   r   r   realimag)	r0   r   rA   r2   r1   r  xicrcir8   r8   r9   _check_complex%  s   
zTestInterp1D._check_complexc                 C   s*   dD ]}|  tj| |  tj| qd S r   )r<  rD   r   r   r   r8   r8   r9   test_complex5  s   zTestInterp1D.test_complexzTest not meaningful on PyPy)reasonc                 C   sX   t dd}t dd}tt||}|ddg ~W d    d S 1 s%w   Y  d S )Nr   r`   皙?皙?)rD   r   r    r   )r0   r2   r1   r  r8   r8   r9   test_circular_refs;  s   "zTestInterp1D.test_circular_refsc                 C   s>   dD ]}t jg dt jd}t|||d}t||| qd S )N)r   r   r   )r   2      r   r@   )rD   rQ   int8r   r   )r0   rA   r2   r  r8   r8   r9   test_overflow_nearestE  s
   z"TestInterp1D.test_overflow_nearestc                 C   s\   t dt}| }t j|d< dD ]}t|||d}|ddg}tt |	  qd S )Nry   r-  )r   r   r@   g@r#  )
rD   r\   r   r   rG   rg   r   r   rj   ri   )r0   r2   r1   rA   irvalsr8   r8   r9   test_local_nansL  s   
zTestInterp1D.test_local_nansc           
      C   s   t dt}| }| }t j|d< dD ]>}t|||d}t|||d}dddgddgddggfD ] }t |}||||}}	tt 	|	
  t|j|	j q4qd S )Nr   rM   )r   r?   r@   r-  r`   rO   )rD   r\   r   r   rG   rg   r   asarrayr   rh   ri   r   r  )
r0   r2   r1   ynrA   rF  irnr   outoutnr8   r8   r9   test_spline_nansW  s   

zTestInterp1D.test_spline_nansc                 C   sV   t dt j }t d}tt t||dd W d    d S 1 s$w   Y  d S )Nry   r?   r@   )rD   r   rg   r\   rR   rS   r   )r0   r2   r1   r8   r8   r9   test_all_nansi  s
   

"zTestInterp1D.test_all_nansc                 C   sz   t dd}t | d }t ddd}dD ]#}||j_d|j_dD ]}t|||d	}||}tt |  q#qd S )
Nr   ry   r   r   r?  TFF)rX   r   r   r   r   r?   r@   )	rD   r\   r   flags	writeabler   r   rj   ri   )r0   r2   r1   r   xnew_writeablerA   r   rG  r8   r8   r9   test_read_onlyp  s   zTestInterp1D.test_read_onlyrA   )rX   r   r   r   r   c                 C   sz   t dgdg|ddd}t|g dg d t dgdg|dd	}ttd
d |d W d    d S 1 s6w   Y  d S )NrY   r-  Frx   )rA   rd   rf   )r`   rY   r%   )r%   r-  ry   Tr   zx_new is abovematchr*   )r   r   rR   rS   )r0   rA   r   r8   r8   r9   test_single_value~  s   
"zTestInterp1D.test_single_valueN)rX   )+rq   rr   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r!  r"  r,  r4  r5  rD   complex_r<  r=  pytestmarkskipifr!   rA  rE  rH  rN  rO  rT  parametrizerW  r8   r8   r8   r9   rt   x   sN    )D	EE	
	
 "

 
	rt   c                   @   s   e Zd Zdd ZdS )TestLagrangec                 C   s@   t g d}tt|j}||}t||}t|j|j d S )N)rO   r%   r`   rN   rM   )r   rD   r\   lencoeffsr   r   )r0   pxsysplr8   r8   r9   test_lagrange  s
   
zTestLagrange.test_lagrangeN)rq   rr   rs   rd  r8   r8   r8   r9   r]    s    r]  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestAkima1DInterpolatorc                 C   sR   t dd}t g d}t||}t g d}t g d}t||| d S )Nrw   r   rw   r*   r)   r   r*   r         @rg  g@ffffff@r   rw   r(   r)   rY   rZ         @g      @rh  g      @g@g333333!@g#@rv   rw   g      ?r*   rY   g     @?g     @g.袋@g^@gn @gGNB@grcߖ@g	I@r   )rD   r\   rQ   r   r   r0   r2   r1   akr9  r	  r8   r8   r9   	test_eval  s   
z!TestAkima1DInterpolator.test_evalc                 C   sv   t dd}t g d}t |d| f}t||}t g d}t g d}t |d| f}t||| d S )Nrw   r   rf  r*   ri  rk  )rD   r\   rQ   column_stackr   r   rl  r8   r8   r9   test_eval_2d  s   
z$TestAkima1DInterpolator.test_eval_2dc                 C   s  t dd}t g d}t d}||d d ddf< d| |d d ddf< d| |d d ddf< d	| |d d ddf< t||}t g d
}t d}t g d}||d d ddf< d| |d d ddf< d| |d d ddf< d	| |d d ddf< t||| d S )Nrw   r   rf  )r   r%   r%   r   r*   r`   r   r&  ri  )   r%   r%   rk  )rD   r\   rQ   emptyr   r   )r0   r2   y_r1   rm  r9  r	  yi_r8   r8   r9   test_eval_3d  s    


z$TestAkima1DInterpolator.test_eval_3dc                 C   s`   t g d}t ||d fj}t||}t ddg}||}t|t ||d fj d S )Nr   r%   r(   rY   )rD   rQ   vstackTr   r   )r0   r2   r1   rm  x_evaly_evalr8   r8   r9   %test_degenerate_case_multidimensional  s   
z=TestAkima1DInterpolator.test_degenerate_case_multidimensionalc                 C   sh   t dd}t g d}t||}d}tjt|d |d d  W d    d S 1 s-w   Y  d S )Nrw   r   rf  z9Extending a 1-D Akima interpolator is not yet implementedrU  )rD   r\   rQ   r   rY  r	   NotImplementedErrorextend)r0   r2   r1   rm  rV  r8   r8   r9   test_extend  s   
"z#TestAkima1DInterpolator.test_extendN)rq   rr   rs   rn  rp  ru  rz  r}  r8   r8   r8   r9   re    s    	re  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestPPolyCommonc                 C   sJ   t ddgddgddgg}t g d}ttt|| ttt|| d S )Nr`   rN   r%   rO   rM   r-  )r   r`   r(   )rD   rQ   rR   rS   r   r   )r0   r  r2   r8   r8   r9   test_sort_check  s   zTestPPolyCommon.test_sort_checkc                 C   s@   t t tddgddg W d    d S 1 sw   Y  d S )Nr`   r%   r   )rR   rS   r   r   r8   r8   r9   test_ctor_c  s   
"zTestPPolyCommon.test_ctor_cc                 C   s8  t jd d}t t jddt jd df }dt j|d t|d dd d }ttfD ]i}||d d d df |d d }|	|d d dd f |dd   ||d d dd f |dd  }|	|d d d df |d d  |||}t
|j|j t
|j|j t
|j|j t
|j|j q0d S )	Nr>   rM   r   ry   rC   r%   r`   r   )rD   rE   rF   uniquer  randr^  r   r   r|  r   r  r2   )r0   orderr2   r  clspppp2pp3r8   r8   r9   r}    s   "&"$"$
zTestPPolyCommon.test_extendc                 C   s   t jd t ddd}t jdd}t ddd}t jdd}ttfD ]=}|||}|||}|||}|||dd   t jdddd	d
}	t ddd}
t||	||	 t||
||
 q&d S )Nr>   r   r`   r-  r%   rO   rN   r  F)endpoint)	rD   rE   rF   r   r  r   r   r|  r   )r0   r2   r  r   c2r  pp1r  pp_combxi1xi2r8   r8   r9   test_extend_diff_orders  s   


z'TestPPolyCommon.test_extend_diff_ordersc                 C   s&  t jd d}t t jddd}t j|d |jd d dd}ttfD ]i}|||}||d d d df |d d }|	|d d dd f |dd   ||d d dd f |dd  }|	|d d d df |d d  t
|j|j t
|j|j t
|j|j t
|j|j q'd S )Nr   rM   ry      r`   r%   r   )rD   rE   rF   sortuniformr  r  r   r   r|  r   r  r2   )r0   r  r2   r  r  r`  p1p2r8   r8   r9   test_extend_descending  s    
"$"$z&TestPPolyCommon.test_extend_descendingc                 C   s   t jd t jddddd}t t jd}t jdd	}ttfD ]}|||}t||jd
 q$ttfD ]0}||d |}tt |dd tt |t 	dd t
t|t j	ddgdggtd q8d S )Nr>   r   r   rO   r-  ra   rq  rM   rN   )rM   rN   rO   r-  ra   ).r   r   r   r(   r8   r?  r@  皙?r   )rD   rE   rF   r  r  r   r   r   r  rQ   rR   rS   object)r0   r  r2   xpr  r`  r8   r8   r9   
test_shape1  s   
"zTestPPolyCommon.test_shapec                 C   s   t jd t t jd}t jdd }|j|j}}t jd}ttfD ]0}|||||||||}}}	dD ]}
t|||
j|||
 t|||
j|	||
 q=q(d S )N90  rq  )r   r   y      ?333333?rO   r   )	rD   rE   rF   r  r7  r8  r   r   r   )r0   r2   r  c_rec_imr  r  r`  p_rep_imnur8   r8   r9   test_complex_coefC  s   "z!TestPPolyCommon.test_complex_coefc              
   C   s~  t jd t jdddddd}|j}t jd}d	D ]}|j|d
  }t t j|d
 }ttfD ]m}||||d}t|j	j|||d  |d |  ||d d    ||}	|d | |j |d| d   }
t|	j|
 ||||d
 ||||d
d||||d ||||ddfD ]	}t|j|j qq4qdD ]}ttfD ]}tt|fi t|||d qqd S )Nr  rM   rN   rO   r-  ra   r   )r`   r%   r   r`   r%   rM   r`   r   r%   )rP   rN   rO   r-  )r  r2   r   )rD   rE   rF   r  r  r  r   r   r   r  
derivativeantiderivativer   rR   rS   r   )r0   r  c_sr  r   mr2   r  r`  res
targ_shaper  r8   r8   r9   	test_axisO  s8   *"zTestPPolyCommon.test_axisN)rq   rr   rs   r  r  r}  r  r  r  r  r  r8   r8   r8   r9   r~    s    r~  c                   @   sT   e Zd ZG dd deZG dd deZdd Zdd Zd	d
 Z	dd Z
dd ZdS )TestPolySubclassingc                   @      e Zd ZdS )zTestPolySubclassing.PNrq   rr   rs   r8   r8   r8   r9   Pn      r  c                   @   r  )zTestPolySubclassing.BNr  r8   r8   r8   r9   Bq  r  r  c                 C   sB   t jd t t jd}t jd}| ||| ||fS )Nr>   rM   )rN   r%   )rD   rE   rF   r  r  r  )r0   r2   r  r8   r8   r9   _make_polynomialst  s   z%TestPolySubclassing._make_polynomialsc                 C   sJ   |   \}}||fD ]}| }t|j|j q
| }t|j|j d S r  )r  r  r   	__class__r  )r0   r  bpr`  pdppar8   r8   r9   test_derivativez  s   z#TestPolySubclassing.test_derivativec                 C   sf   t jd t t jdt jddf }t jt|}t||dd}| j	|}t
|j| j d S )Nr>   r   r   r`   r3  )rD   rE   rF   r  r  r  r^  r   r  from_spliner   r  )r0   r2   r1   splr  r8   r8   r9   test_from_spline  s   z$TestPolySubclassing.test_from_splinec                 C   sD   |   \}}| j|}t|j| j | j|}t|j| j d S r  )r  r  from_bernstein_basisr   r  r  from_power_basis)r0   r  r  r  bp1r8   r8   r9   test_conversions  s
   z$TestPolySubclassing.test_conversionsc                 C   s8   g d}dgdgdgg}| j ||}t|j| j  d S )Nr   r`   r%   rM   )r  from_derivativesr   r  )r0   r2   r1   r  r8   r8   r9   test_from_derivatives  s   z)TestPolySubclassing.test_from_derivativesN)rq   rr   rs   r   r  r   r  r  r  r  r  r  r8   r8   r8   r9   r  m  s    			r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9S ):	TestPPolyc                 C   sT   t ddgddgddgg}t g d}t||}t|dd	 t|d
d d S )Nr`   rN   r%   rO   rM   r-  r   r(   r`   333333?Q@ffffff?p=
ף@rD   rQ   r   r   r0   r  r2   r`  r8   r8   r9   test_simple  s
   
zTestPPoly.test_simplec                 C   sx   t ddgddgddgg}t g d}t||dd	}t|d
d t|dd t|d
dd t|ddd d S )Nr`   rN   r%   rO   rM   r-  r  periodicr   g?r  333333ӿr  g@gffffff@r  r  r8   r8   r9   test_periodic  s   zTestPPoly.test_periodicc                 C   s   t ddgddgddgg}t g d}t g d}t||d	d
 dD ]}||j_t||}||}tt |  q%d S )Nr`   rN   r%   rO   rM   r-  r  )r   r?  r@  r  r  rP  )rD   rQ   r   rQ  rR  r   rj   ri   )r0   r  r2   r   rR  r   rG  r8   r8   r9   rT    s   
zTestPPoly.test_read_onlyc              	   C   s  dd }t jd d}dD ]}t t jdd|d }t jjdd	|d |fd
}t |}|d d d f t |d d d dd f  }||}|| }	t |j|	}
|
| }t	||dd}t	|d d d d df |d d d dd}t jddd}t
||||dd t
||d||ddd | }| }t
||||dd | }| }t jdddD ]*\}}|||}|||}t
||dd t
|||| |||| dd q| }| }t
|t |dd qd S )Nc                 S   sF   t | d dd}t | d }t||}|d d dd d df S )Nr`   rP   )rD   r\   r~   r#   )powerr2  kr  r8   r8   r9   binom_matrix  s   
z/TestPPoly.test_descending.<locals>.binom_matrixr   rM   ry   r  rC   ry   r`   r   r%   sizerP   Tr  r  r  r  vIh%<=r   rO   r%   -q=)rD   rE   rF   r  r  diffr\   dotrw  r   r   r  r  	integrateroots)r0   r  r  r  r2   cahh_powersr  capcdpcdpar  x_testpa_dpd_dpa_ipd_ir]   r^   int_aint_droots_droots_ar8   r8   r9   test_descending  sB   
,*zTestPPoly.test_descendingc                 C   s   t jddddd}t g d}t||}t|jj|j t|jj|j t|dj|jdd   t|t jddjd|jdd    |	 }t|jjd	 |
 }t|jjd
 d S )Nr-  r%   r`   rM   r  r  rO   rO   r-  rO   r%   r`   r%   rM   )ra   r%   r`   r%   rM   )rD   rE   r  rQ   r   r   r2   r  r  r  r  )r0   r  r2   r`  dpipr8   r8   r9   test_multi_shape  s   
(zTestPPoly.test_multi_shapec                 C   sf   t jd t jddgddgddggtd}t g d	}t||}t|d
d t|dd d S )Nr>   r`   rN   r%   rO   rM   r-  r   r  r  r  r  r  )rD   rE   rF   rQ   r   r   construct_fastr   r  r8   r8   r9   test_construct_fast  s    zTestPPoly.test_construct_fastc                 C   s   t jd t jddd}t t jdt jddf }t||}t jd }t|||}t||| t	|d d d d df ||}t||d d df | d S )	Nr>   rM   r      r   r   r`   )r  r(   gQ?333333?)
rD   rE   rF   r  r  r  r   _ppoly_eval_1r   _ppoly_eval_2)r0   r  r2   r`  r  expectedr8   r8   r9   #test_vs_alternative_implementations  s   

z-TestPPoly.test_vs_alternative_implementationsc                 C   s   t jd t t jdt jddf }t jt|}t||dd}t	|}t 
ddd}t||t|| t| }t	|}t|||| |\}}	}
dD ]}t||	|
|d}t	|}t|j|j qSd S )	Nr>   r   r   r`   r  r  )NTFr  )rD   rE   rF   r  r  r  r^  r   r   r  r   r   r   r   r   r   )r0   r2   r1   r  r  r9  r^   ppptr  r  extrapr`  r8   r8   r9   r    s    



zTestPPoly.test_from_splinec                 C   s   t jd t g dgj}t g dgj}t ddggj}t ddg}t||}t||}t||}t| j|j t|dj|j d S )	Nr>   )rN   rM   r%   r`   )r   r-  r%      r-  r   r`   r%   )	rD   rE   rF   rQ   rw  r   r   r  r  )r0   r  dcddcr2   r  dppddppr8   r8   r9   test_derivative_simple(  s   


z TestPPoly.test_derivative_simplec                 C   s   t jd t t jdt jddf }t jt|}t||dd}t	|}t 
ddd}tddD ]}t|||t||| q5d S )Nr>   r   r   r`   r  r  rM   )rD   rE   rF   r  r  r  r^  r   r   r  r   r  r   r   r0   r2   r1   r  r  r9  dxr8   r8   r9   test_derivative_eval6  s   
zTestPPoly.test_derivative_evalc                 C   s   t jd t t jdt jddf }t jt|}t||ddd}t	|}t 
ddd}tddD ]}t||||||d	|f d
 q6d S )Nr>   r   r   r`   rO   r3  r  r  ry   zdx=%dr.  )rD   rE   rF   r  r  r  r^  r   r   r  r   r  r   r  r  r8   r8   r9   r  B  s   
zTestPPoly.test_derivativec                 C   s^   t dggddg}t| jt dgdggddgj t| jt dgdggddgj d S )Nr)   r   r`   )r   r   r  r  r2   )r0   r`  r8   r8   r9   test_antiderivative_of_constantO  s   $(z)TestPPoly.test_antiderivative_of_constantc                 C   sp   t ddggg d}| }t|jddgddgg t|jg d t|ddd t|d|d d d S )Nr)   r(   r   r`   r   r%   rY   )r   r  r   r  r2   r   r  )r0   r`  qr8   r8   r9   #test_antiderivative_regression_4355U  s   z-TestPPoly.test_antiderivative_regression_4355c           	      C   s   t jd t g dg dgj}t g dg dgj}t g dg dgj}t g d}t||}| }|d	}| }t|j| t|j	j|j t|j	j|j t|j	j|j d S )
Nr>   )rM   r%   r`   )r   r         ?)r`   r`   r`   r   )r   r   r        ?)      ?gUUUUUU?r(   r   r   )r   r   g      ?r  g*?)r   r  r`   r%   )
rD   rE   rF   rQ   rw  r   r  r   r2   r  )	r0   r  iciicr2   r  ippiippiipp2r8   r8   r9   test_antiderivative_simple^  s"   


z$TestPPoly.test_antiderivative_simplec              	   C   s   t jd t dddd }t jt|}t||ddd}t|}t	ddD ]J}|
|}||}t|j|j t	|D ]2}||}d	}	|	|jd d
  d|	 |jdd    }
t||jdd  ||
dd||f d q@q)d S )Nr>   r   r`   rC   r%   rO   r  ry   r  rP   r   z
dx=%d k=%d)r   r   )rD   rE   rF   r   r  r^  r   r   r  r  r  r  r   r  r2   )r0   r2   r1   r  r  r   r  r  r  rr  r8   r8   r9   !test_antiderivative_vs_derivativev  s$   



(z+TestPPoly.test_antiderivative_vs_derivativec           	      C   s   t jd t t jdt jddf }t jt|}t||ddd}t	|}t
ddD ]}||}t||}t ddd}t||t||d	d
 q/d S )Nr>   r   r   r`   rO   r  ry   r  r   r   )rD   rE   rF   r  r  r  r^  r   r   r  r  r  r   r   r   r   )	r0   r2   r1   r  r  r   r  spl2r9  r8   r8   r9   test_antiderivative_vs_spline  s   


z'TestPPoly.test_antiderivative_vs_splinec                 C   sh   t g dg dgj}t g d}t||}| }t|d|ddd | }t|j|j d S )N)r%   r`   r%   r%   )r%   r`   rM   rM   r  gA?g_p   ?g:0yE>r   )rD   rQ   rw  r   r  r   r  r  )r0   r  r2   r`  r  r  r8   r8   r9   test_antiderivative_continuity  s   
z(TestPPoly.test_antiderivative_continuityc           	      C   s   t jd t t jdt jddf }t jt|}t||ddd}t	|}d\}}|
||}| }t|||||  t|t||| d\}}|j
||d	d
}t|||||  tt |j
||dd
  d S )Nr>   r   r   r`   rO   r  )r  ?)r  r  Tr  F)rD   rE   rF   r  r  r  r^  r   r   r  r  r  r   r   r   rh   ri   )	r0   r2   r1   r  r  r]   r^   igr  r8   r8   r9   test_integrate  s   
"zTestPPoly.test_integratec                 C   sn   t g d}t ddgddgddgddgg}dD ]}||j_t||}|dd	}tt |  qd S )
Nr`   r%   rN   rw   r   r*          r)   rP  r`   rN   )	rD   rQ   rQ  rR  r   r  r   rj   ri   )r0   r2   r  rR  r  rG  r8   r8   r9   test_integrate_readonly  s   "
z!TestPPoly.test_integrate_readonlyc                 C   s  t g d}t ddgddgddgddgg}t||dd}| }|d	|d
 }t|d
d	| t|dd| t|ddd|  t|dd|d|d  t|dd|d|d
 |d	 |d  t|dd|d|d
 |d	 |d  t|dd|d|d
 |d	 |d d	|   t|dd|d|d  t|dd|d|d  t|dd|d|d d|   d S Nr  rw   r   r*   r  r)   r  r  rN   r`   r  ir%   rY   rZ   rj  rO   g      /@   r   rP   rM   i)rD   rQ   r   r  r   r  r0   r2   r  r  I
period_intr8   r8   r9   test_integrate_periodic  s&   ".&*z!TestPPoly.test_integrate_periodicc                 C   sl   t dddd }t d| }t||ddd}t|}| }||dk|d	k@  }t|t|d
d d S )Nr   r`   rB   r%   rC   rM   r  gV瞯Ҽg     ?r   r   )	rD   r   r   r   r   r  r  r   r   )r0   r2   r1   r  r  r  r8   r8   r9   
test_roots  s   
zTestPPoly.test_rootsc                 C   s   t ddgddgddggj}t g d}t||}t| ddt jdg d}| }|dd d f  |7  < t||}t||ddt jdg d S )	NrP   r  r   )r   r  r  r)   r  g333333?r*   r`   )	rD   rQ   rw  r   r   r  rg   rG   solve)r0   r  r2   r  constc1r  r8   r8   r9   test_roots_idzero  s   


zTestPPoly.test_roots_idzeroc                 C   s   dgdgg}ddg}t ||}t| dtjg t|ddtjg t|dg  ddgddgg}g d}t ||}t| dtjdtjg t|ddtjdtjg t|dg  d S )Nr   r`   r   )r   r   r  rD   rg   r"  r  r8   r8   r9   test_roots_all_zero  s   

zTestPPoly.test_roots_all_zeroc                 C   sZ   t g dg dgj}t g d}t||}t| ddg t|jdddg d S )N)r`   r   rP   )rP   r   r   r   r   r   Fr  )rD   rQ   rw  r   r   r  r0   r  r2   r  r8   r8   r9   test_roots_repeated  s
   
zTestPPoly.test_roots_repeatedc                 C   s   t dgdggj}t g d}t||}t| dg t|jddg  t|ddg t|jdddg  t|dg  t|jdddg  d S )Nr`   rP   r  r(   F)discontinuityrY   )rD   rQ   rw  r   r   r  r"  r'  r8   r8   r9   test_roots_discont  s   
zTestPPoly.test_roots_discontc                 C   sP  t jd d}dD ]}tddD ]}t t jddt jd df }dt j|d t|d dd	 d }t||}dt j fD ]W}|j	|d
|d}tdD ]H}	td	D ]A}
||	|
f }|j
dkr||j
7 }|||dd d |	|
f }||d|dd d |	|
f }d|t|f }t|| | dd|d qWqQqCqq
t|dkt| d S )Nr>   r   rP  r  ry   rC   r%   r`   rM   F)r)  r   r  )r  r   z(%r) r = %sr   r   r  )rD   rE   rF   r  r  r  r  r^  r   r"  r  reprr   r   )r0   numr   r  r2   r  r  r1   r  ijrrvalcmpvalmsgr8   r8   r9   test_roots_random.  s<   "&


zTestPPoly.test_roots_randomc              
   C   sJ  t jd tddD ]}t j|dd}|dkr"d|d d ddf< dt j fD ]x}t j|jtd}t	|| |dkrGt
t |  q)d}d}t|D ]$}|||d f ||d |   7 }|t||d f ||d |   7 }qOt jd	d
 || }W d    n1 sw   Y  | }|t |  }t|ddd q)qd S )Nr>   r`   r      rM   )r`   r%   r`   r   r   ignore)invalidg|=r   )rD   rE   rF   r  r  rr  r  complexr   _croots_poly1r   rh   ri   abserrstater/   r   )r0   r  r  r1   wr  cresr-  r8   r8   r9   test_roots_crootsM  s0    &
zTestPPoly.test_roots_crootsc                 C   s  t g dgj}t ddg}dD ]u}t|||d}| }| }|du rWtt |ddg  tt |ddg  tt |ddg  t	|
 dg qt|ddgd	d
g tt |ddg   tt |ddg   t|
 ddg qd S )Nr   r   r`   TFNr  F皙皙?gGz?gzGʿrP   )rD   rQ   rw  r   r  r  r   rh   ri   r   r  r   any)r0   r  r2   r   r  pp_dpp_ir8   r8   r9   test_extrapolate_attrk  s    zTestPPoly.test_extrapolate_attrN)rq   rr   rs   r  r  rT  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r%  r&  r(  r*  r3  r=  rD  r8   r8   r8   r9   r    s:    1	r  c                   @   d   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )	TestBPolyc                 C   s,   ddg}dgg}t ||}t|dd d S )Nr   r`   rM   r?  r   r   r   r0   r2   r  r  r8   r8   r9   r    s   
zTestBPoly.test_simplec                 C   s0   ddg}dgdgg}t ||}t|dd d S )Nr   r`   rM   r?  ggfffff@rG  rH  r8   r8   r9   test_simple2  s   
zTestBPoly.test_simple2c                 C   s4   ddg}dgdgdgg}t ||}t|dd d S )Nr   r`   rM   rN   r@  g433333@rG  rH  r8   r8   r9   test_simple3  s   
zTestBPoly.test_simple3c                 C   s8   ddg}dgdgdgdgg}t ||}t|dd d S )Nr   r`   r%   r  g:On?rG  rH  r8   r8   r9   test_simple4  s   
zTestBPoly.test_simple4c                 C   s<   ddg}dgdgdgdgdgg}t ||}t|dd d S )Nr   r`   r   r%   r  g	h"l@rG  rH  r8   r8   r9   test_simple5  s   
zTestBPoly.test_simple5c                 C   sl   g d}ddgddgddgg}t ||dd}t|dd t|d	d
 t|ddd t|d	dd d S )Nr   r`   rM   rM   r   r%   r  r  g333333@gHzG?g[(\?r`   r  rG  rH  r8   r8   r9   r    s   zTestBPoly.test_periodicc              	   C   sx  t jd d}dD ]}t t jdd|d }t jjdd|d |fd}|d d d	  }t||d
d}t|d d d d d	f |d d d	 d
d}t jddd}t||||dd t||d||ddd | }	| }
t|	||
|dd |	 }|	 }t jdddD ]*\}}|
||}|
||}t||dd t|||| |||| dd qq
d S )Nr   rM   r  ry   r`   r?  r?  r  rP   Tr  r  r  r  r  r   r  r  )rD   rE   rF   r  r  rG   r   r   r  r  r  )r0   r  r  r2   r  r  r  r  r  r  r  r  r  r]   r^   r  r  r8   r8   r9   r    s2   *zTestBPoly.test_descendingc                 C   s   t jddddd}t g d}t||}t|jj|j t|jj|j t|dj|jdd   t|t jddjd|jdd    |	 }t|jjd	 d S )
Nr-  r%   r`   rM   r  r  rO   r  r  )
rD   rE   r  rQ   r   r   r2   r  r  r  )r0   r  r2   r`  r  r8   r8   r9   r    s   
zTestBPoly.test_multi_shapec                 C   sl   ddg}dgdgdgg}t ||}d}|d }t||dd|  d|  d| d|   d| |   d S )Nr   r%   rM   r`   rN   r?  rG  )r0   r2   r  r  xvalr3  r8   r8   r9   test_interval_length  s   
>zTestBPoly.test_interval_lengthc                 C   sH   g d}ddgddgddgg}t ||}t|dd t|dd d S )	NrM  rM   r   r%   r  gGzG?333333?rN  rG  rH  r8   r8   r9   test_two_intervals  s
   
zTestBPoly.test_two_intervalsc                 C   s   ddg}dgdgdgg}t ||}dD ]H}t |||d}| }|du r?tt|d	d
g  tt|d	d
g  qtt|d	d
g   tt|d	d
g   qd S )Nr   r%   rM   r`   rN   r>  r  Fr?  g @)r   r  r   rD   rh   ri   rA  )r0   r2   r  r  r   bp_dr8   r8   r9   rD    s   
zTestBPoly.test_extrapolate_attrN)rq   rr   rs   r  rI  rJ  rK  rL  r  r  r  rQ  rS  rD  r8   r8   r8   r9   rF    s    	
"rF  c                   @   rE  )TestBPolyCalculusc                 C   s   g d}ddgddgddgg}t ||}| }t|dd t|dd t|dd	d
|ddd
|ddd
gg d t|dd	d
|ddd
|ddd
gg d d S )NrM  rM   r   r%   r  rO  rR  r  r`   r  )rO  r   rw   )r  r)   r   )r   r  r   )r0   r2   r  r  bp_derr8   r8   r9   r    s   
""z!TestBPolyCalculus.test_derivativec           	      C   s   t jd d\}}t t j|}t j||d f}t||}t|}t|D ]}| }| }t 	|d |d d}t
|||| q+d S Nr>   rO   r   r`   r   rP   r<   )rD   rE   rF   r  r   r   r  r  r  r   r   )	r0   r  r  r2   r  r  r  dr  r8   r8   r9   test_derivative_ppoly  s   

z'TestBPolyCalculus.test_derivative_ppolyc           	      C   s   t jd d\}}t t j|}t j||d f}| |d fD ]&}t||}t |d |d d}t|D ]}t||||	|| q;q%d S )Nr>   rY  r`   r6  r   rP   r<   )
rD   rE   rF   r  rG   r   r   r  r   r  )	r0   r  r  r2   r  ccr  r  r-  r8   r8   r9   test_deriv_inplace!  s   
z$TestBPolyCalculus.test_deriv_inplacec              	   C   sz   g d}ddgddgg}t ||}| }tddd}t||t|dk |d d d| |d d  d	 d
d
d d S )NrM  r   r`   rM   r   r%   r*   r(   g      ?r  r   r   )r   r  rD   r   r   where)r0   r2   r  r  bixxr8   r8   r9   r  .  s   

z,TestBPolyCalculus.test_antiderivative_simplec                 C   sn   t jd t t jd}t jd}t||}t |d |d d}t|  |||ddd d S )	Nr>   r   rN   ry   r%   rM   r   rP   r  r  r^  )	rD   rE   rF   r  r   r   r   r  r  r0   r2   r  r  ra  r8   r8   r9   test_der_antiderB  s   


z"TestBPolyCalculus.test_der_antiderc                 C   s|   t jd t t jd}t jd}t||}t|}t |d |d d}t|	d||	d|ddd	 d S )
Nr>   r   rb  r   rP   ry   r%   r  r^  )
rD   rE   rF   r  r   r   r  r   r   r  )r0   r2   r  r  r  ra  r8   r8   r9   test_antider_ppolyL  s   


z$TestBPolyCalculus.test_antider_ppolyc                 C   sj   t jd t t jd}t jd}t|| }|jdd }t||d ||d ddd d S )	Nr>   r   rN   ry   r`   rP   r   r  r^  )rD   rE   rF   r  r   r  r2   r   rc  r8   r8   r9   test_antider_continuousX  s   
z)TestBPolyCalculus.test_antider_continuousc                 C   sb   t jd t t jd}t jd}t||}t|}t|dd|ddddd d S )Nr>   r   rf  r   r`   r  r^  )	rD   rE   rF   r  r   r   r  r   r  )r0   r2   r  r  r  r8   r8   r9   r  b  s   


z TestBPolyCalculus.test_integratec                 C   sr   dgg}ddg}t ||}t|ddddd t ||dd}tt|dd t|jddd	dddd d S )
Nr`   r   r%   r*   r   r   Fr  T)r   r   r  r   rD   rh   )r0   r  r2   r^   b1r8   r8   r9   test_integrate_extrapk  s   
z'TestBPolyCalculus.test_integrate_extrapc                 C   s  t g d}t ddgddgddgddgg}tjt||dd}| }|d	|d
 }t|d
d	| t|dd| t|ddd|  t|dd|d|d  t|dd|d|d
 |d	 |d  t|dd|d|d
 |d	 |d  t|dd|d|d
 |d	 |d d	|   t|dd|d|d  t|dd|d|d  t|dd|d|d d|   d S r  )rD   rQ   r   r  r   r  r   r  r  r8   r8   r9   r   x  s&   ".&*z)TestBPolyCalculus.test_integrate_periodicc                 C   sr   dgg}ddg}t ||}tddd}t|d|| |ddd t|d||d|ddd d S )Nr`   r   r<   rP   r  r^  )r   rD   r   r   r  r  )r0   r  r2   r^   ra  r8   r8   r9   test_antider_neg  s   

z"TestBPolyCalculus.test_antider_negN)rq   rr   rs   r  r[  r]  r  rd  re  rg  r  ri  r   rj  r8   r8   r8   r9   rU    s    

	rU  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestPolyConversionsc                 C   sl   g d}ddgddgddgg}t ||}t|}t |}ddg}t|||| t|||| d S )	NrM  rM   r%   r`   r   rN   r?  ffffff?)r   r   r  r  r   )r0   r2   r  r  r  r  r  r8   r8   r9   test_bp_from_pp     


z#TestPolyConversions.test_bp_from_ppc           	      C   s   t jd d\}}t t j|}t j||d f}t||}t|}t|}t |d |d d}t	|||| t	|||| d S rX  )
rD   rE   rF   r  r   r   r  r  r   r   )	r0   r  r  r2   r  r  r  r  r  r8   r8   r9   test_bp_from_pp_random  s   


z*TestPolyConversions.test_bp_from_pp_randomc                 C   sl   g d}ddgddgddgg}t ||}t|}t |}ddg}t|||| t|||| d S )NrM  rM   r`   rN   r%   r?  rl  )r   r   r  r  r   )r0   r2   r  r  r  r  r  r8   r8   r9   test_pp_from_bp  rn  z#TestPolyConversions.test_pp_from_bpc                 C   s   g d}ddgddgddgg}t ||}tt t | W d    n1 s(w   Y  t||}tt t| W d    d S 1 sGw   Y  d S )NrM  rM   r`   rN   r%   )r   rR   	TypeErrorr  r   r  )r0   r2   r  r  r  r8   r8   r9   test_broken_conversions  s   



"z+TestPolyConversions.test_broken_conversionsN)rq   rr   rs   rm  ro  rp  rr  r8   r8   r8   r9   rk    s
    rk  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestBPolyFromDerivativesc                 C   s&   t dddgdg}t|ddg d S )Nr   r`   r%   rM   r*   r   r   _construct_from_derivativesr   )r0   r$  r8   r8   r9   test_make_poly_1  s   z)TestBPolyFromDerivatives.test_make_poly_1c                 C   sp   t ddddgdg}t|g d t ddddgdg}t|g d t dddgddg}t|g d d S )Nr   r`   )r)   r)   r)   r%   rM   )r*   rj  r)   )r*   g      r)   rt  r0   r$  r  c3r8   r8   r9   test_make_poly_2  s   z)TestBPolyFromDerivatives.test_make_poly_2c                 C   sr   t ddg ddg}t|g d t dddgg d}t|g d t ddddgdd	g}t|g d
 d S )Nr   r`   )r`   r%   rM   rN   )r)   竪?g@r&  )rN   r%   rM   )r)   gUUUUUU	@g
@r&  r%   rM   )r)   rz  r   r&  rt  rw  r8   r8   r9   test_make_poly_3  s   z)TestBPolyFromDerivatives.test_make_poly_3c                 C   s   t jd t jdt jdf }t jdt jdf }tdd||}t|d d d f ddg}tdD ]}t|d|dg|| || g | }q5d S )Nr  r   rO   r`   r-  rw   r)   )	rD   rE   rF   r  r   ru  r  r   r  )r0   yaybr  r  r.  r8   r8   r9   test_make_poly_12  s   "
z*TestBPolyFromDerivatives.test_make_poly_12c           	      C   sv   t jd ddg}d\}}t j|ddddf}t||}t||}t||}t ddd}t|||| d S )	Nr  r   r`   )r   rO   r%   rM   rN   r   )rD   rE   rF   r   _raise_degreer   r   )	r0   r2   r  rZ  r  r  r$  r  r  r8   r8   r9   test_raise_degree  s   

z*TestBPolyFromDerivatives.test_raise_degreec                 C   s   t ttjddgdg d S )Nr   r`   rR   rS   r   r  r   r8   r8   r9   
test_xi_yi  s   z#TestBPolyFromDerivatives.test_xi_yic                 C   s,   g d}dgdgdgg}t ttj|| d S )Nr   r   r`   r   r  )r0   r9  r	  r8   r8   r9   test_coords_order  s   z*TestBPolyFromDerivatives.test_coords_orderc                 C   sn   g d}ddgdgddgddgg}t ||}t|jjdk | }dD ]}t||||gddg q%d S )Nr  r   )rN   rM   )rw   r?  r)   r@  gffffff?r*   rZ   rw   )r   r  r   r  r  r  r   )r0   r9  r	  r  ppdr  r8   r8   r9   
test_zeros  s   z#TestBPolyFromDerivatives.test_zerosc                    sJ   t jd t dd t|d D } fddt|d D }||fS )Nr>   c                 S   s   g | ]}d |d  qS )r)   r%   r8   r  r.  r8   r8   r9   
<listcomp>      z<TestBPolyFromDerivatives._make_random_mk.<locals>.<listcomp>r`   c                    s   g | ]}t j qS r8   )rD   rE   r  r  r8   r9   r    r  )rD   rE   rF   rI  r  r0   r  r  r9  r	  r8   r  r9   _make_random_mk  s   z(TestBPolyFromDerivatives._make_random_mkc                    s^   d\}}|  ||\}}t||}t|d D ] t|| fdd|D  | }qd S )NrO   r   r%   c                    s   g | ]}|  qS r8   r8   )r  yyr  r8   r9   r  $      z;TestBPolyFromDerivatives.test_random_12.<locals>.<listcomp>)r  r   r  r  r   r  r0   r  r  r9  r	  r  r8   r  r9   test_random_12  s   
z'TestBPolyFromDerivatives.test_random_12c                 C   s:   d\}}|  ||\}}tttjfi t||dd d S )Nr  r   r9  r	  orders)r  rR   rS   r   r  r   r  r8   r8   r9   test_order_zero'  s
   
z(TestBPolyFromDerivatives.test_order_zeroc                 C   sV   d\}}|  ||\}}tj||d| d d tttjfi t||d| d d S )Nr  r%   r`   r  r  )r  r   r  rR   rS   r   r  r8   r8   r9   test_orders_too_high-  s   
z-TestBPolyFromDerivatives.test_orders_too_highc                 C   s4  d\}}|  ||\}}d}tj|||d}t|d d D ]}t||dd d ||dd d  | }qtt||dd d ||dd d   d}tj|||d}t|d D ]}t||dd d ||dd d  | }qctt||dd d ||dd d   d S )	Nr  rO   r  r%   r`   rP   r  r-  )	r  r   r  r  r   r  r   rD   allclose)r0   r  r  r9  r	  r  r  r.  r8   r8   r9   test_orders_global5  s   *
2*
6z+TestBPolyFromDerivatives.test_orders_globalc           
      C   s   d\}}|  ||\}}dd t|D }t|dd D ];\}}tj|||d}t|| d d D ]}	t||d ||d  | }q3tt	||d ||d   qd S )	N)ra   r   c                 S   s   g | ]}|d  qS )r`   r8   )r  or8   r8   r9   r  Q  r  z>TestBPolyFromDerivatives.test_orders_local.<locals>.<listcomp>r`   rP   r  r%   r  )
r  r  r0  r   r  r   r  r   rD   r  )
r0   r  r  r9  r	  r  r-  r2   r  r.  r8   r8   r9   test_orders_localM  s   
$z*TestBPolyFromDerivatives.test_orders_localc                 C   sd   d\}}t t j|d }t j|d |dddf}t||}t|jjd| |dddf d S )N)ra   rO   r`   r-  ra   r   r%   )rD   r  rE   r   r  r   r  r  r  r8   r8   r9   test_yi_trailing_dimsY  s
    z.TestBPolyFromDerivatives.test_yi_trailing_dimsc                 C   s   t d}tjddgdgdgg|d}t|dd t d}tjddgdgdgg|d}t|dd d}tjddgdgdgg|d}t|dd d}d S )Nr`   r   r  )rD   int32r   r  r   int64)r0   r  r`  r8   r8   r9   test_gh_5430`  s   

z%TestBPolyFromDerivatives.test_gh_5430N)rq   rr   rs   rv  ry  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r8   r8   r8   r9   rs    s"    
	rs  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestNdPPolyc                 C   sz   t jd t jdd}t ddd}t jd}t||f}||f}t|d d d d d f || }t|| d S )Nr>   rN   rO   r   r`   r-  r  )	rD   rE   rF   r  r   r   r  r/   r   )r0   r  r2   r9  r`  v1v2r8   r8   r9   test_simple_1ds  s   
"zTestNdPPoly.test_simple_1dc           
   
   C   sF  t jd t jdddd}t ddd}t dddd	 }t jd
}t jd
}t jt|dg|jd}|t j	 t
|ddd||ft jddgt jdt j||f t jddgt jdd| | }t|||f||}t|| t|||f}dD ]!}	|t j||f |	d}t|||f|||	d}t||t|	d qd S )Nr>   rN   rO   r-  ra   r   r`   r   r%   r  r   r  *   )Nr   r   r   r`   )r`   r   )r%   rM   )r   r%   rV  r.  )rD   rE   rF   r  r   rr  r^  r   fillrg   r   evaluate_ndr~   rQ   intcc_r/   _ppoly2d_evalr   r   r+  )
r0   r  r2   r1   r9  r	  r  r  r`  r  r8   r8   r9   test_simple_2d  s2   
zTestNdPPoly.test_simple_2dc              	   C   s   t jd t jdddddd}t dd	d}t dd	dd
 }t dd	dd }t jd}t jd}t jd}t||||f}dD ]!}	||||f|	d}
t||||f||||	d}t|
|t|	d qFd S )Nr>   rN   rO   r-  ra   r   r   r   r`   r%   ry   rM   (   )Nr   r   r   r   r`   r   r`   r   r   )r%   rM   r   )r-  r   r%   rV  r.  )	rD   rE   rF   r  r   r   _ppoly3d_evalr   r+  )r0   r  r2   r1   r3   r9  r	  zir`  r  r  r  r8   r8   r9   test_simple_3d  s   zTestNdPPoly.test_simple_3dc              
   C   s   t jd t jdddddddd	}t d
dd}t d
ddd }t d
dd	d }t d
ddd }t jd}t jd}t jd}t jd}	t|||||f}
|
||||	f}t|||||f||||	}t|| d S )Nr>   rN   rO   r-  ra   r   r   ry   r   r   r`   r%   rM   r   r  )rD   rE   rF   r  r   r   _ppoly4d_evalr   )r0   r  r2   r1   r3   r7   r9  r	  r  uir`  r  r  r8   r8   r9   test_simple_4d  s   zTestNdPPoly.test_simple_4dc                 C   s   t jd t jdd}t ddd}t||f}|jdgd}t||}| }t|j	|j	 |j
dgd}t||}|
d}t|j	|j	 d S )	Nr>   rN   rO   r   r`   r-  rV  r%   )rD   rE   rF   r  r   r   r  r   r   r  r  )r0   r  r2   r`  r  r  dp1r8   r8   r9   test_deriv_1d  s   


zTestNdPPoly.test_deriv_1dc           	   
   C   s\  t jd t jdddddd}t dd	d}t dd	dd
 }t dd	dd }t||||f}t|ddd	d
dd|}|jd
gd}|d
}t	|j
|j
dd
dd	dd t|d	ddd
dd|}|jg dd}|d	}t	|j
|j
d
dddd	d t|d
ddd	dd|}|jg dd}|d}t	|j
|j
d
ddddd	 d S )Nr>   rN   rO   r-  ra   r   r   r   r`   r%   ry   rM   rV  r  )r   r   rM   )rD   rE   rF   r  r   r   r   	transposer  r   r  r  )	r0   r  r2   r1   r3   r`  r  r  r  r8   r8   r9   test_deriv_3d  s0   


zTestNdPPoly.test_deriv_3dc           
      C   s   t d}t dddd }t dddd }t dddd }t||||f}|d	}|d
}t jd}t jd}t jd}	t||||	f||d  |	d  tdtd   d S )N)r`   r`   r`   rM   rN   rO   r   r`   rN   rO   r%   r-  rM   )r`   r   rN   )r   r%   r   r  )	rD   r   r   r   r  rE   r  r   r   )
r0   r  r2   r1   r3   r`  r  r9  r	  r  r8   r8   r9   test_deriv_3d_simple  s   


"z TestNdPPoly.test_deriv_3d_simplec           	         sr  t jd t jdddd}t dddd }t dddd	 }|dd	dd
}||jd |jd d }t	
||d	 ||j}|dd	dd
}|dd
dd	}||jd |jd d }t	
||d	 ||j}|d	dd
d }t|||f ddgddgddgddgfD ]&} |}t fdd|tdddgd	 d\}}t||ddt|d qd S )Nr>   rN   rO   r;   r  r   r`   r   r%   rM   rP   r  )r   r(   )r  r  )r  r@  c                    s    | |fS r  r8   )r2   r1   r`  r8   r9   <lambda>(	  s    z/TestNdPPoly.test_integrate_2d.<locals>.<lambda>gh㈵>)epsrelepsabs)r   )r   r   r   )rD   rE   rF   r  r   r  r~   r  rG   r   fix_continuityr   r  r"   r   r   r+  )	r0   r  r2   r1   cxrangesr  ig2err2r8   r  r9   test_integrate_2d	  s8   


zTestNdPPoly.test_integrate_2dc                 C   sX  t jd t jdddddd}t dd	dd	 }t dd	dd
 }t dd	dd }t||||f}t jd}t jd}d\}}	|j||	dd}
|d}t|
||f||	||f||||f  |j||	d	d}|d}t|||f|||	|f||||f  |j||	d
d}|d}t|||f||||	f||||f  d S )Nr>   rN   rO   r-  r;   r  r   r   r`   r%   r   rM   r  )r@  r  r   r  r  r  )	rD   rE   rF   r  r   r   integrate_1dr  r   )r0   r  r2   r1   r3   r`  r7   r6   r]   r^   pxpaxpypaypzpazr8   r8   r9   test_integrate_1d-	  s$   
*
*
.zTestNdPPoly.test_integrate_1dN)rq   rr   rs   r  r  r  r  r  r  r  r  r  r8   r8   r8   r9   r  r  s    !r  c                    s   t t| jd f}t|D ]R\}}|dk s|dkr&t j||ddf< qt ||d ||  t| |  koD|d  k n   t fddt	 jd D }|||ddf< q|S )z&Evaluate piecewise polynomial manuallyr%   r   r`   Nc                 3   s2    | ]} |f  j d  | d   V  qdS )r   r`   N)r  r  r  r  rZ  r.  r8   r9   r  R	  s    *z _ppoly_eval_1.<locals>.<genexpr>)
rD   r[   r^  r  r0  rg   searchsortedr   sumr  )r  r2   xpsrL  r-  r  r  r8   r  r9   r  H	  s   (r  c                    s   |d }|d }| j d }t |}t|}t|}||k||k@ }	|||	 < ||	}
t||
d dt|| |
| }tj	||d t
 fddtt|
D }|||	< ||_ |S )z4Evaluate piecewise polynomial manually (another way)r   rP   r`   )Nc              	      s4   g | ]}t  |d d f d d | f qS r  )rD   r  r  Vindxsr  r8   r9   r  i	  s   4 z!_ppoly_eval_2.<locals>.<listcomp>)r  rD   r/   
empty_likecompressr  clipr^  takevanderrQ   r  )r_  breaksr   r  r]   r^   K	saveshaper  maskra  r  valuesr8   r  r9   r  X	  s$   





$r  c                 C   s:   |dk rt d||krdS t|| d || ||   S )z
    d^n (x**y) / dx^n
    r   zinvalid derivative orderr`   )rS   r   )r2   r1   r2  r8   r8   r9   _dpowo	  s
   r  c              
   C   sn  |du rd}t jt|f| jd}| jdd \}}tt||D ]\}\}	}
|d d |	  kr9|d d krNn n|d d |
  krM|d d ksTn t j||< q!t |d |	d }t |d |
d }|	|d |  }|
|d |  }d}t	| jd D ].}t	| jd D ]$}|| || d || d ||f t
|||d  t
|||d  7 }qq|||< q!|S )z@
    Straightforward evaluation of 2-D piecewise polynomial
    Nr  r   r%   r   rP   r`   rD   rr  r^  r   r  r0  ziprg   r  r  r  )r  ra  r   ynewr  rL  nxnyjoutr2   r1   j1j2s1s2r0  k1k2r8   r8   r9   r  {	  s0   (&
 
r  c                 C   s  |du rd}t jt|f| jd}| jdd \}}}	tt|||D ]\}
\}}}|d d |  kr<|d d kren n'|d d |  krP|d d kren n|d d |  krd|d d kskn t j||
< q#t |d |d }t |d |d }t |d |d }||d |  }||d |  }||d |  }d}t	| jd D ]F}t	| jd D ]<}t	| jd D ]2}|| || d || d |	| d |||f t
|||d  t
|||d  t
|||d  7 }qqq|||
< q#|S )	z@
    Straightforward evaluation of 3-D piecewise polynomial
    Nr  r   rM   r   rP   r`   r%   r  )r  ra  r   r  znewr  rL  r  r  nzr  r2   r1   r3   r  r  j3r  r  s3r0  r  r  k3r8   r8   r9   r  	  s>   ((&
,
r  c                 C   st  |du rd}t jt|f| jd}| jdd \}}	}
}tt||||D ]\}\}}}}|d d |  kr@|d d kr}n n;|d d |  krT|d d kr}n n'|d d |  krh|d d kr}n n|d	 d |  kr||d	 d ksn t j||< q%t |d |d }t |d |d }t |d |d }t |d	 |d }||d |  }||d |  }||d |  }||d	 |  }d}t	| jd D ]^}t	| jd D ]T}t	| jd D ]J}t	| jd	 D ]@}|| || d |	| d |
| d || d ||||f t
|||d  t
|||d  t
|||d  t
|||d	  7 }qqqq|||< q%|S )
z@
    Straightforward evaluation of 4-D piecewise polynomial
    N)r   r   r   r   r   rN   r   rP   r`   r%   rM   r  )r  ra  r   r  r  unewr  rL  rn   ro   mzmur  r2   r1   r3   r7   r  r  r  j4r  r  r  s4r0  r  r  r  k4r8   r8   r9   r  	  sL   $(((&
8
	r  r  )>numpy.testingr   r   r   r   r   r   r   rY  r	   rR   numpyr
   r   r   r   r   r   rD   scipy.interpolater   r   r   r   r   r   r   r   r   r   r   r   r   scipy.specialr   r   r   scipy._lib._gcutilsr    r!   scipy.integrater"   r#   r$   rt   r]  re  r~  r  r  rF  rU  rk  rs  r  r  rg   r  r  r  r  r  r8   r8   r8   r9   <module>   sV   $  <_      
J /   h  1 $ W

$(