o
    EbH                    @   s  d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z d dl	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!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/m0Z0 d d
l(m1Z1 d dl2m3Z3 G dd dZ4G dd dZ5G dd dZ6G dd dZ7G dd dZ8G dd dZ9G 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#Z?d$d% Z@ejAfd&d'ZBd(d) ZCd6d*d+ZDd6d,d-ZEd6d.d/ZFG d0d1 d1ZGG d2d3 d3ZHG d4d5 d5ZIdS )7    N)assert_assert_equalassert_almost_equalassert_array_almost_equalassert_array_equalassert_allcloseassert_warns)raises)mgridpisinogridpoly1dlinspace)interp1dinterp2dlagrangePPolyBPolysplrepsplev
splantidersplintsprootAkima1DInterpolatorRegularGridInterpolatorLinearNDInterpolatorNearestNDInterpolatorRectBivariateSplineinterpnNdPPolyBSplineCloughTocher2DInterpolator)pochgamma)_ppoly)assert_deallocatedIS_PYPY)nquad)binom)matrixc                   @   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|||}t|ddtddd tddd	dtd
f \}}t|| | t|d|  dd d S )Nr                    4@              5@      ?      ?       @Zdecimaly              8@y              9@)r
   r   r   r   r   r   ravel)selfyxzIvu r;   J/usr/lib/python3/dist-packages/scipy/interpolate/tests/test_interpolate.pytest_interp2d    s   ,zTestInterp2D.test_interp2dc                 C   sh   t ddd}t dtd}t|d d d f |d d d f d  }t|||}t|ddtddd d S )Nr   r,         r1   r0   r2   )r   r   r   r   r   )r4   r6   r5   r7   r8   r;   r;   r<   test_interp2d_meshgrid_input)   s
   (z)TestInterp2D.test_interp2d_meshgrid_inputc                 C   sH  t jd tddd}tdtd}t|d d d f |d d d f d  }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	|||||| d S )N  r   r,   r>   r?   r1   cubickind      )
nprandomseedr   r   r   r   copyZshuffler   )r4   r6   r5   r7   Zip1Zip2Zip3r;   r;   r<   %test_interp2d_meshgrid_input_unsorted1   s    (((z2TestInterp2D.test_interp2d_meshgrid_input_unsortedc                 C   s   t ddddtdf \}}t|d|  }t|||}tg d}tddg}t||||||d d d	  tt|||d d d	 ddd
 d S )Nr   r,   r-   r.   r/   )         333333@gffffff@T)	r
   r   r   r   rG   arrayr   assert_raises
ValueError)r4   r5   r6   r7   funcZxeZyer;   r;   r<   test_interp2d_eval_unsortedH   s    "z(TestInterp2D.test_interp2d_eval_unsortedc                 C   sn   t ddg}d|d< t d }}t|||d}t|ddt dgdd	 t|dd
t dgdd	 d S )NrN   r0   )r,   r,   linearr1         ?r/   r,   r2         @)rG   zerosaranger   r   rQ   )r4   ar6   r5   br;   r;   r<   test_interp2d_linearS   s    z!TestInterp2D.test_interp2d_linearc           
      C   s$  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|||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   d S )Nr      rN   r,      rP   rL   rE   !   Tbounds_error
fill_value)
rG   r   r   rR   rS   nanr   isnanallisfinite)
r4   r6   r5   r7   ZixZiyr\   Zizmxmyr;   r;   r<   test_interp2d_bounds\   s   $
2z!TestInterp2D.test_interp2d_boundsN)	__name__
__module____qualname__r=   r@   rK   rU   r]   rk   r;   r;   r;   r<   r+      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dCddZdCd d!Zd"d# Zd$d% Zd&d' Zd(d) ZdCd*d+ZdCd,d-Zd.d/ Zejdfd0d1Zd2d3 Zejj e!d4d5d6d7 Z"d8d9 Z#d:d; Z$d<d= Z%d>d? Z&d@dA Z'dBS )DTestInterp1Dc                 C   s   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| _d| _d S )N      @      $@)r,   rN   r1           g      4@)r,   
   rs   r,   )r,   r,   rN   g      >@)r,   rL   rN   )rL   r,   rN   g      Y)rG   rZ   x5x10y10reshapex25x2y2rQ   x1y1y210y102y225y25y235y325rd   r4   r;   r;   r<   setup_methodr   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 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zerorV   slinear	quadraticrB   previousnextrC   extrapolaterD   rd   rV   )rP   r^   rP   )rP   )rP   rP   r   r^   r,   rL   )rD   axisrd   rs   r   )rP   rP   rP   r;   rr   )r   rv   rw   rG   rQ   r~   rz   onesrR   rS   ry   r{   r   r|   r}   r4   rD   r;   r;   r<   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)rJ   ra         @rc   )r0   r1   r   r^   r   )r   r   rv   rw   rJ   rb   rG   rf   rd   r   r   r~   r   r   r6   r5   r   r;   r;   r<   	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)Zassume_sortedT)	r   rv   rw   r   rG   rQ   rR   rS   r~   )r4   interp10Zinterp10_unsortedZinterp10_assume_kwZinterp10_assume_kw2Zinterp10_y_2dZinterp10_y_2d_unsortedr;   r;   r<   test_assume_sorted   s(   "
*
zTestInterp1D.test_assume_sortedc                 C      dD ]}|  | qd S )N)rV   r   )_check_linearr   r;   r;   r<   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 )NrC   r   r   r   r         r   	      )rP   r   r   r   +=rtolTrD   rd   rb   
r   rv   rw   r   rG   rQ   r   dictrR   rS   )r4   rD   r   extrapolatoroptsr;   r;   r<   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   dtyperV   rC   V瞯<atolr   r^   r,   r   r^   )rG   ZsctypesrZ   r   r   r   r   re   )r4   Zdtypr6   r5   Zypr;   r;   r<   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   rB   r   rs   r   r   F)rD   rb   Hz>z	%s, %s %sr   err_msg)rG   Zfloat16Zfloat32Zfloat64	complex64
complex128rZ   expastyper   r   )r4   Zdt_rZdt_rcZspline_kindsZdtxr6   Zdtyr5   ZdtnxnewrD   fr;   r;   r<   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 )NrB   rC   r   rW   r   r   rv   rw   r   rG   rQ   r4   r   r;   r;   r<   
test_cubic1  s   zTestInterp1D.test_cubicc                 C      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   rC   r   r0   rW   r   r1   r   r   r   r   r   r   r   r   r   r   r   Tr   r   r4   r   r   r   r;   r;   r<   test_nearest:  $   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   rC   r   r0   rW   r1   r   r   r   r   r   r   r   r   Tr   r   r   r;   r;   r<   test_nearest_upO  r   zTestInterp1D.test_nearest_upc                 C   r   )Nr   rC   r   r0   rW   r   r1   rp   r   r   r   r   r   r   r   Tr   r   r   r;   r;   r<   test_previousd  $   zTestInterp1D.test_previousc                 C   r   )Nr   rC   r   r1   rW   r   )r   r   r   r   r   r   r   r   r   Tr   r   r   r;   r;   r<   	test_nextx  r   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   rC   r   r0   rW   r   r   r   r   r;   r;   r<   	test_zero  s   zTestInterp1D.test_zerorV   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}tt	|d tt	|d |g d d S )NF)rd   rb   rD   gffffff&@g333333g333333)@gL3@)r   rr   rp         "@      &@)TFFFF)FFFFTT)rb   rD   r   r   )rr   rp   r   )
r   rv   rw   rd   r   rG   rQ   Z_check_boundsrR   rS   )r4   rD   Zextrap10Zraises_bounds_errorr;   r;   r<   _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 )Nrs   Fr   r^   r   rP   )
rG   rZ   r   Zint_r   re   r   rf   r   r_)r4   rD   r6   r5   cyir;   r;   r<   _bounds_check_int_nan_fill  s   "z'TestInterp1D._bounds_check_int_nan_fillc                 C   "   dD ]}|  | | | qd S )N)rV   rB   r   r   r   r   r   r   )r   r   r   r;   r;   r<   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   rs   r   r   rP   )rD   r   rd   rb   rL   r^   r   )r      ,  r,   r   r   )r   8r   r   c                 s   s    | ]}t |V  qd S N)rG   rQ   ).0r   r;   r;   r<   	<genexpr>  s    z1TestInterp1D._check_fill_value.<locals>.<genexpr>  i  ii0)r   rv   rw   r   r   r   r   r   ru   ndimshaperR   rS   rG   rQ   rangetuple)r4   rD   interpr5   resultrd   iir;   r;   r<   _check_fill_value  sX  
"










zTestInterp1D._check_fill_valuec                 C   r   N)rV   r   rB   r   r   r   r   r   )r   r   r;   r;   r<   test_fill_valueX  s   zTestInterp1D.test_fill_valuec                 C   s4   t | j| jdd}t|jd d|_t|jd d S )Ng     ^@rc   g     t@)r   rv   rw   r   rd   )r4   r   r;   r;   r<   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 )NrC   r   rp   r1         @r   r;   r0   r         (@r   r   rD   r   g      *@g      .@g      1@rq         @g      ,@)r   rv   rw   r   rG   rQ   r   
isinstanceZndarrayr   r   r~   r   )r4   rD   r   Z	interp210Z	interp102Zx_newr;   r;   r<   _nd_check_interpe  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)rM   rN      r_   r   r   r   )r,   rL   r^   r   r^   )	rG   rZ   prodrx   	enumerater   r   listr   )
r4   rD   r[   r5   nsr6   r7   rz   r\   r;   r;   r<   _nd_check_shape  s   
zTestInterp1D._nd_check_shapec                 C   r   )N)rV   rB   r   r   r   r   r   r   )r   r   r   r;   r;   r<   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^   rX   rL   g@rM   g@g@g       @g      #@rs         ?       @rC   rP   r^   rs   rE   )rG   rQ   r   r   r   r   realimag)	r4   r   rD   r6   r5   r   xiZcrZcir;   r;   r<   _check_complex  s   
zTestInterp1D._check_complexc                 C   s*   dD ]}|  tj| |  tj| qd S r   )r   rG   r   r   r   r;   r;   r<   test_complex  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^   皙?皙?)rG   r   r&   r   )r4   r6   r5   r   r;   r;   r<   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   rC   )rG   rQ   Zint8r   r   )r4   rD   r6   r   r;   r;   r<   test_overflow_nearest  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 )Nrs   r   )r   r   rC   g@r   )
rG   rZ   r   r   rJ   re   r   r   rh   rg   )r4   r6   r5   rD   irvalsr;   r;   r<   test_local_nans  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   rL   )r   rB   rC   r   r^   rN   )rG   rZ   r   r   rJ   re   r   asarrayr   rf   rg   r   r   )
r4   r6   r5   ZynrD   r  Zirnr   outZoutnr;   r;   r<   test_spline_nans  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 )Nrs   rB   rC   )rG   r   re   rZ   rR   rS   r   )r4   r6   r5   r;   r;   r<   test_all_nans  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   rs   r   r   r  TFF)rV   r   r   r   r   rB   rC   )	rG   rZ   r   flags	writeabler   r   rh   rg   )r4   r6   r5   r   Zxnew_writeablerD   r   r	  r;   r;   r<   test_read_only  s   zTestInterp1D.test_read_onlyN)rV   )(rl   rm   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   Zcomplex_r   r   pytestZmarkZskipifr'   r  r  r
  r  r  r  r;   r;   r;   r<   ro   p   sD    E	
	
 "

 
	ro   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)rN   r,   r^   rM   rL   )r   rG   rZ   lencoeffsr   r   )r4   pxsZysplr;   r;   r<   test_lagrange  s
   
zTestLagrange.test_lagrangeN)rl   rm   rn   r  r;   r;   r;   r<   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 )Nrr   r   rr   r1   r0   r   r1   r         @r  g@ffffff@r   rr   r/   r0   rW   rX         @g      @r  g      @g@g333333!@g#@rq   rr   g      ?r1   rW   g     @?g     @g.袋@g^@gn @gGNB@grcߖ@g	I@r   )rG   rZ   rQ   r   r   r4   r6   r5   akr   r   r;   r;   r<   	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 )Nrr   r   r  r1   r  r!  )rG   rZ   rQ   Zcolumn_stackr   r   r"  r;   r;   r<   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 )Nrr   r   r  )r   r,   r,   r   r1   r^   r   r   r  )   r,   r,   r!  )rG   rZ   rQ   emptyr   r   )r4   r6   Zy_r5   r#  r   r   Zyi_r;   r;   r<   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/   rW   )rG   rQ   vstackTr   r   )r4   r6   r5   r#  Zx_evalZy_evalr;   r;   r<   %test_degenerate_case_multidimensional5  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 )Nrr   r   r  z9Extending a 1-D Akima interpolator is not yet implemented)match)rG   rZ   rQ   r   r  r	   NotImplementedErrorextend)r4   r6   r5   r#  r,  r;   r;   r<   test_extend>  s   
"z#TestAkima1DInterpolator.test_extendN)rl   rm   rn   r$  r%  r(  r+  r/  r;   r;   r;   r<   r    s    	r  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^   rM   r,   rN   rL   r   )r   r^   r/   )rG   rQ   rR   rS   r   r   )r4   r   r6   r;   r;   r<   test_sort_checkI  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   r;   r;   r<   test_ctor_cO  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 )	NrA   rL   r   rs   rF   r,   r^   r   )rG   rH   rI   uniquer   randr  r   r   r.  r   r   r6   )r4   orderr6   r   clspppp2Zpp3r;   r;   r<   r/  T  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 )NrA   r   r^   r   r,   rN   rM   r   F)endpoint)	rG   rH   rI   r   r4  r   r   r.  r   )r4   r6   r   rz   c2r6  pp1r8  Zpp_combZxi1Zxi2r;   r;   r<   test_extend_diff_ordersj  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   rL   rs      r^   r,   r   )rG   rH   rI   sortuniformr4  r   r   r   r.  r   r   r6   )r4   r5  r6   r   r6  r  p1p2r;   r;   r<   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 )NrA   r      rN   r   r_   r&  rL   rM   )rL   rM   rN   r   r_   ).r   r   r   r/   r;   r  r  皙?r   )rG   rH   rI   r4  r>  r   r   r   r   rQ   rR   rS   object)r4   r   r6   xpr6  r  r;   r;   r<   
test_shape  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  r&  )r   rC  y      ?333333?rN   r   )	rG   rH   rI   r>  r   r   r   r   r   )r4   r6   r   Zc_reZc_imrF  r6  r  Zp_reZp_imnur;   r;   r<   test_complex_coef  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 )NrH  rL   rM   rN   r   r_   r   )r^   r,   r   r^   r,   rL   r^   r   r,   )rP   rM   rN   r   )r   r6   r   )rG   rH   rI   r4  r   r>  r   r   r   r   
derivativeantiderivativer   rR   rS   r   )r4   r   Zc_srF  r   mr6   r6  r  resZ
targ_shaper@  r;   r;   r<   	test_axis  s8   *"zTestPPolyCommon.test_axisN)rl   rm   rn   r1  r2  r/  r<  rB  rG  rJ  rP  r;   r;   r;   r<   r0  G  s    r0  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rl   rm   rn   r;   r;   r;   r<   P      rT  c                   @   rR  )zTestPolySubclassing.BNrS  r;   r;   r;   r<   B  rU  rV  c                 C   sB   t jd t t jd}t jd}| ||| ||fS )NrA   rL   )rM   r,   )rG   rH   rI   r>  rT  rV  )r4   r6   r   r;   r;   r<   _make_polynomials  s   z%TestPolySubclassing._make_polynomialsc                 C   sJ   |   \}}||fD ]}| }t|j|j q
| }t|j|j d S r   )rW  rL  r   	__class__rM  )r4   r7  bpr  pdZppar;   r;   r<   test_derivative  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 )NrA   r   r   r^   r   )rG   rH   rI   r>  r   r4  r  r   rT  from_spliner   rX  )r4   r6   r5   splr7  r;   r;   r<   test_from_spline  s   z$TestPolySubclassing.test_from_splinec                 C   sD   |   \}}| j|}t|j| j | j|}t|j| j d S r   )rW  rT  from_bernstein_basisr   rX  rV  from_power_basis)r4   r7  rY  r;  bp1r;   r;   r<   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,   rL   )rV  from_derivativesr   rX  )r4   r6   r5   rY  r;   r;   r<   test_from_derivatives  s   z)TestPolySubclassing.test_from_derivativesN)rl   rm   rn   r   rT  r   rV  rW  r[  r_  rc  re  r;   r;   r;   r<   rQ    s    			rQ  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^   rM   r,   rN   rL   r   r   r/   r^   333333?Q@ffffff?p=
ף@rG   rQ   r   r   r4   r   r6   r  r;   r;   r<   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^   rM   r,   rN   rL   r   rg  periodicr   g?ri  333333ӿrk  g@gffffff@rl  rm  r;   r;   r<   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^   rM   r,   rN   rL   r   rg  )r   r  r  ro  rp  r  )rG   rQ   r   r  r  r   rh   rg   )r4   r   r6   r   r  r   r	  r;   r;   r<   r    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   )rG   rZ   rx   r)   )powerr   krV  r;   r;   r<   binom_matrix#  s   
z/TestPPoly.test_descending.<locals>.binom_matrixr   rL   rs   r=  rF   rs   r^   r,   sizerP   Trp  r   r=  r   vIh%<=r   rN   r,   -q=)rG   rH   rI   r>  r?  diffrZ   dotr*  r   r   rL  rM  	integrateroots)r4   ru  rs  rN  r6   cahZh_powersrV  ZcapZcdpcdparZ  x_testpa_dpd_dpa_ipd_ir[   r\   int_aint_dZroots_dZroots_ar;   r;   r<   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^   rL   rg  rh  rN   rN   r   rN   r,   r^   r,   rL   )r_   r,   r^   r,   rL   )rG   rH   r4  rQ   r   r   r6   r   r   rL  rM  )r4   r   r6   r  dpipr;   r;   r<   test_multi_shapeS  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 )NrA   r^   rM   r,   rN   rL   r   r   rg  rh  ri  rj  rk  )rG   rH   rI   rQ   r   r   Zconstruct_fastr   rm  r;   r;   r<   test_construct_fastb  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 )	NrA   rL   rC     r   r   r^   )rh  r/   gQ?333333?)
rG   rH   rI   r4  r>  r   r   _ppoly_eval_1r   _ppoly_eval_2)r4   r   r6   r  rF  expectedr;   r;   r<   #test_vs_alternative_implementationsj  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 )	NrA   r   r   r^   r\  r   )NTFrp  )rG   rH   rI   r>  r   r4  r  r   r   r]  r   r   r   r!   r   r   )r4   r6   r5   r^  r7  r   r\   Zppptr   rt  Zextrapr  r;   r;   r<   r_  x  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 )	NrA   )rM   rL   r,   r^   )rC  r   r,      r   r   r^   r,   )	rG   rH   rI   rQ   r*  r   r   rL  r   )r4   r   ZdcZddcr6   r7  ZdppZddppr;   r;   r<   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 )NrA   r   r   r^   r\  r   rL   )rG   rH   rI   r>  r   r4  r  r   r   r]  r   r   r   r   r4   r6   r5   r^  r7  r   dxr;   r;   r<   test_derivative_eval  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 )NrA   r   r   r^   rN   r   rt  r   rs   zdx=%dr   )rG   rH   rI   r>  r   r4  r  r   r   r]  r   r   r   rL  r  r;   r;   r<   r[    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 )Nr0   r   r^   )r   r   rM  r   r6   )r4   r  r;   r;   r<   test_antiderivative_of_constant  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 )Nr0   r/   r   r^   r   r,   rW   )r   rM  r   r   r6   r   r  )r4   r  qr;   r;   r<   #test_antiderivative_regression_4355  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 )
NrA   )rL   r,   r^   )r   r         ?)r^   r^   r^   r   )r   r   r        ?)      ?gUUUUUU?r/   r   r   )r   r   g      ?r  g*?)r   r  r^   r,   )
rG   rH   rI   rQ   r*  r   rM  r   r6   r   )	r4   r   ZicZiicr6   r7  ippZiippZiipp2r;   r;   r<   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 )NrA   r   r^   rF   r,   rN   r  rs   rz  rP   r   z
dx=%d k=%d)r   r   )rG   rH   rI   r   r4  r  r   r   r]  r   rM  rL  r   r   r6   )r4   r6   r5   r^  r7  r  r  r8  rt  rr9  r;   r;   r<   !test_antiderivative_vs_derivative  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 )NrA   r   r   r^   rN   r  rs   r   r   r   )rG   rH   rI   r>  r   r4  r  r   r   r]  r   rM  r   r   r   r   )	r4   r6   r5   r^  r7  r  r8  Zspl2r   r;   r;   r<   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^   rL   rL   rg  gA?g_p   ?g:0yE>r   )rG   rQ   r*  r   rM  r   rL  r   )r4   r   r6   r  r  rA  r;   r;   r<   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 )NrA   r   r   r^   rN   r  )rh  ?)rq  r  Trp  F)rG   rH   rI   r>  r   r4  r  r   r   r]  r  rM  r   r   r   rf   rg   )	r4   r6   r5   r^  r7  r[   r\   igr  r;   r;   r<   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,   rM   rr   r   r1          r0   r  r^   rM   )	rG   rQ   r  r  r   r  r   rh   rg   )r4   r6   r   r  rT  r	  r;   r;   r<   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  rr   r   r1   r  r0   ro  rp  rM   r^   r   ir,   rW   rX   r   rN   g      /@   r   rP   rL   i)rG   rQ   r   rM  r   r  r4   r6   r   rT  r8   Z
period_intr;   r;   r<   test_integrate_periodic4  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^   rE   r,   rF   rL   r  gV瞯Ҽg     ?r   r   )	rG   r   r   r   r   r]  r  r   r   )r4   r6   r5   r^  r7  r  r;   r;   r<   
test_rootsL  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   rD  r  r0   rD  g333333?r1   r^   )	rG   rQ   r*  r   r   r  re   rJ   solve)r4   r   r6   r7  constc1r;  r;   r;   r<   test_roots_idzeroW  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  rG   re   r  rm  r;   r;   r<   test_roots_all_zeroj  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   rP   r   r^   rw  r   Frp  )rG   rQ   r*  r   r   r  r4   r   r6   r7  r;   r;   r<   test_roots_repeatedz  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   rg  r/   F)discontinuityrW   )rG   rQ   r*  r   r   r  r  r  r;   r;   r<   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 )NrA   r   r  r=  rs   rF   r,   r^   rL   F)r  r   rp  )rI  r   z(%r) r = %sr   r   r   )rG   rH   rI   r   r3  r   r4  r  r   r  ry  reprr   r   )r4   Znumr   r5  r6   r   r7  r5   r  ijZrrvalZcmpvalmsgr;   r;   r<   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 )NrA   r^         rL   )r^   r,   r^   r   r   ignore)Zinvalidg|=r   )rG   rH   rI   r   r4  r'  r   complexr%   Z_croots_poly1r   rf   rg   absZerrstater3   r   )r4   rt  r   r5   wrO  Zcresr  r;   r;   r<   test_roots_croots  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^   TFNrp  F皙皙?gGz?gzGʿrP   )rG   rQ   r*  r   rL  rM  r   rf   rg   r   r  r   any)r4   r   r6   r   r7  Zpp_dZpp_ir;   r;   r<   test_extrapolate_attr  s    zTestPPoly.test_extrapolate_attrN)rl   rm   rn   rn  rr  r  r  r  r  r  r_  r  r  r[  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r;   r;   r;   r<   rf    s:    1	rf  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^   rL   r  r   r   r   r4   r6   r   rY  r;   r;   r<   rn    s   
zTestBPoly.test_simplec                 C   s0   ddg}dgdgg}t ||}t|dd d S )Nr   r^   rL   r  ggfffff@r  r  r;   r;   r<   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^   rL   rM   r  g433333@r  r  r;   r;   r<   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,   rh  g:On?r  r  r;   r;   r<   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,   rh  g	h"l@r  r  r;   r;   r<   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^   rL   rL   r   r,   ro  rp  g333333@gHzG?g[(\?r^   rj  r  r  r;   r;   r<   rr    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   rL   rv  rs   r^   r  r  rx  rP   Trp  r   r=  r   rz  r   r{  r|  )rG   rH   rI   r>  r?  rJ   r   r   rL  rM  r  )r4   rs  rN  r6   r  r  r  rZ  r  r  r  r  r  r[   r\   r  r  r;   r;   r<   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^   rL   rg  rh  rN   r  r  )
rG   rH   r4  rQ   r   r   r6   r   r   rL  )r4   r   r6   r  r  r;   r;   r<   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,   rL   r^   rM   r  r  )r4   r6   r   rY  Zxvalr   r;   r;   r<   test_interval_lengthJ  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 )	Nr  rL   r   r,   rD  gGzG?333333?r  r  r  r;   r;   r<   test_two_intervalsR  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,   rL   r^   rM   r  rp  Fr   @)r   rL  r   rG   rf   rg   r  )r4   r6   r   rY  r   Zbp_dr;   r;   r<   r  Z  s   
zTestBPoly.test_extrapolate_attrN)rl   rm   rn   rn  r  r  r  r  rr  r  r  r  r  r  r;   r;   r;   r<   r    s    	
"r  c                   @   r  )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 )Nr  rL   r   r,   rD  r  r  rj  r^   rI  )r  r   rr   )rj  r0   r   )r   rL  r   )r4   r6   r   rY  Zbp_derr;   r;   r<   r[  k  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 NrA   rN   r   r^   r   rP   r?   )rG   rH   rI   r>  r   r   r`  r   rL  r   r   )	r4   rN  rt  r6   r   rY  r7  drF  r;   r;   r<   test_derivative_ppolyy  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 )NrA   r  r^   r   r   rP   r?   )
rG   rH   rI   r>  rJ   r   r   r   r   rL  )	r4   rN  rt  r6   r   ZccrY  rF  r  r;   r;   r<   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 )Nr  r   r^   rL   r   r,   r1   r/         ?r|  r   r   )r   rM  rG   r   r   where)r4   r6   r   rY  Zbixxr;   r;   r<   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 )	NrA   r   rM   rs   r,   rL   r   rP   r   r|  r  )	rG   rH   rI   r>  r   r   r   rM  rL  r4   r6   r   rY  r  r;   r;   r<   test_der_antider  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 )
NrA   r   r  r   rP   rs   r,   r|  r  )
rG   rH   rI   r>  r   r   r`  r   r   rM  )r4   r6   r   rY  r7  r  r;   r;   r<   test_antider_ppoly  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 )	NrA   r   rM   rs   r^   rP   r   r|  r  )rG   rH   rI   r>  r   rM  r6   r   r  r;   r;   r<   test_antider_continuous  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 )NrA   r   r  r   r^   r|  r  )	rG   rH   rI   r>  r   r   r`  r   r  )r4   r6   r   rY  r7  r;   r;   r<   r    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,   r1   r   r   Frp  T)r   r   r  r   rG   rf   )r4   r   r6   r\   Zb1r;   r;   r<   test_integrate_extrap  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  )rG   rQ   r   ra  r   rM  r   r  r  r;   r;   r<   r    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   rG   r   r   rL  rM  )r4   r   r6   r\   r  r;   r;   r<   test_antider_neg  s   

z"TestBPolyCalculus.test_antider_negN)rl   rm   rn   r[  r  r  r  r  r  r  r  r  r  r  r;   r;   r;   r<   r  j  s    

	r  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 )	Nr  rL   r,   r^   r   rM   r  ffffff?)r   r   ra  r`  r   )r4   r6   r   r7  rY  r;  rF  r;   r;   r<   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 r  )
rG   rH   rI   r>  r   r   ra  r`  r   r   )	r4   rN  rt  r6   r   r7  rY  r;  rF  r;   r;   r<   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 )Nr  rL   r^   rM   r,   r  r  )r   r   r`  ra  r   )r4   r6   r   rY  r7  rb  rF  r;   r;   r<   test_pp_from_bp  r  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 )Nr  rL   r^   rM   r,   )r   rR   	TypeErrorr`  r   ra  )r4   r6   r   r7  rY  r;   r;   r<   test_broken_conversions)  s   



"z+TestPolyConversions.test_broken_conversionsN)rl   rm   rn   r  r  r  r  r;   r;   r;   r<   r    s
    r  c                   @      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,   rL   r1   r   r   _construct_from_derivativesr   )r4   r  r;   r;   r<   test_make_poly_17  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^   r0   r0   r0   r,   rL   )r1   r   r0   )r1   g      r0   r   r4   r  r:  Zc3r;   r;   r<   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,   rL   rM   )r0   竪?g@r   )rM   r,   rL   )r0   gUUUUUU	@g
@r   r,   rL   )r0   r  r   r   r   r  r;   r;   r<   test_make_poly_3G  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 )NrH  r   rN   r^   r   rr   r0   )	rG   rH   rI   r   r   r  r   r   rL  )r4   ZyaZybr   r7  r  r;   r;   r<   test_make_poly_12T  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 )	NrH  r   r^   )r   rN   r,   rL   rM   r   )rG   rH   rI   r   Z_raise_degreer   r   )	r4   r6   rt  r  r   rY  r  rb  rF  r;   r;   r<   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   rd  r   r;   r;   r<   
test_xi_yil  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
  )r4   r   r   r;   r;   r<   test_coords_ordero  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 )NrK  r   )rM   rL   )rr   r  r0   r  gffffff?r1   rX   rr   )r   rd  r   r   r   rL  r   )r4   r   r   r7  ZppdrF  r;   r;   r<   
test_zerost  s   z#TestBPolyFromDerivatives.test_zerosc                    sJ   t jd t dd t|d D } fddt|d D }||fS )NrA   c                 S   s   g | ]}d |d  qS )r0   r,   r;   r   r  r;   r;   r<   
<listcomp>      z<TestBPolyFromDerivatives._make_random_mk.<locals>.<listcomp>r^   c                    s   g | ]}t j qS r;   )rG   rH   r  rt  r;   r<   r    r  )rG   rH   rI   r  r   r4   rN  rt  r   r   r;   r  r<   _make_random_mk~  s   z(TestBPolyFromDerivatives._make_random_mkc                    s^   d\}}|  ||\}}t||}t|d D ] t|| fdd|D  | }qd S )NrN   rC  r,   c                    s   g | ]}|  qS r;   r;   )r   yyr5  r;   r<   r        z;TestBPolyFromDerivatives.test_random_12.<locals>.<listcomp>)r  r   rd  r   r   rL  r4   rN  rt  r   r   r7  r;   r  r<   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   r   r   orders)r  rR   rS   r   rd  r   r  r;   r;   r<   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   rd  rR   rS   r   r  r;   r;   r<   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  rN   r  r,   r^   rP   r|  r   )	r  r   rd  r   r   rL  r   rG   allclose)r4   rN  rt  r   r   r5  r7  r  r;   r;   r<   test_orders_global  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)r_   rC  c                 S   s   g | ]}|d  qS )r^   r;   )r   or;   r;   r<   r    r  z>TestBPolyFromDerivatives.test_orders_local.<locals>.<listcomp>r^   rP   r  r,   r|  )
r  r   r   r   rd  r   rL  r   rG   r   )
r4   rN  rt  r   r   r  r  r6   r7  r  r;   r;   r<   test_orders_local  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)r_   rN   r^   r   r_   r   r,   )rG   r>  rH   r   rd  r   r   r   r  r;   r;   r<   test_yi_trailing_dims  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  )rG   Zint32r   rd  r   Zint64)r4   r  r  r;   r;   r<   test_gh_5430  s   

z%TestBPolyFromDerivatives.test_gh_5430N)rl   rm   rn   r  r  r  r  r	  r  r  r  r  r  r  r  r!  r#  r$  r%  r;   r;   r;   r<   r  6  s"    
	r  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 )NrA   rM   rN   r   r^   r   r   )	rG   rH   rI   r4  r   r    r  r3   r   )r4   r   r6   r   r  v1v2r;   r;   r<   test_simple_1d  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 )NrA   rM   rN   r   r_   r   r^   r   r,   r   r   r=  *   )Nr   r   r   r^   )r^   r   r,   rL   )r   r,   r  r   )rG   rH   rI   r4  r   r'  r  r   fillre   r%   Zevaluate_ndrx   rQ   Zintcc_r3   _ppoly2d_evalr   r    r  )
r4   r   r6   r5   r   r   r'  r(  r  rI  r;   r;   r<   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 )NrA   rM   rN   r   r_   r   r   r   r^   r,   rs   rL   (   )Nr   r   r   r   r^   r   r^   r   r   )r,   rL   r   )r   r   r,   r  r   )	rG   rH   rI   r4  r   r    _ppoly3d_evalr   r  )r4   r   r6   r5   r7   r   r   zir  rI  r'  r(  r;   r;   r<   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 )NrA   rM   rN   r   r_   r   r   rs   r   r   r^   r,   rL   rC  r=  )rG   rH   rI   r4  r   r    _ppoly4d_evalr   )r4   r   r6   r5   r7   r:   r   r   r7  Zuir  r'  r(  r;   r;   r<   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 )	NrA   rM   rN   r   r^   r   r  r,   )rG   rH   rI   r4  r   r    rL  r   r   r   rM  )r4   r   r6   r  r  r@  dp1r;   r;   r<   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 )NrA   rM   rN   r   r_   r   r   r   r^   r,   rs   rL   r  r4  )r   r   rL   )rG   rH   rI   r4  r   r    r   	transposerL  r   r   rM  )	r4   r   r6   r5   r7   r  r@  r  r;  r;   r;   r<   test_deriv_3dA  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^   rL   rM   rN   r   r^   rM   rN   r,   r   rL   )r^   r   rM   )r   r,   r   r=  )	rG   r   r   r    rM  rH   r4  r   r$   )
r4   r   r6   r5   r7   r  r  r   r   r7  r;   r;   r<   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 )NrA   rM   rN   r>   r  r   r^      r,   rL   rP   r,  )r   r/   )rh  rj  )r  r  c                    s    | |fS r   r;   )r6   r5   r  r;   r<   <lambda>  s    z/TestNdPPoly.test_integrate_2d.<locals>.<lambda>gh㈵>)ZepsrelZepsabs)r   )r   r   r   )rG   rH   rI   r4  r   r=  rx   r   rJ   r%   Zfix_continuityr    r  r(   r   r   r  )	r4   r   r6   r5   ZcxZrangesr  Zig2Zerr2r;   rA  r<   test_integrate_2ds  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 )NrA   rM   rN   r   r>   r  r@  r   r^   r,      rL   r   )r  rj  r   r5  r4  r  )	rG   rH   rI   r4  r   r    Zintegrate_1drM  r   )r4   r   r6   r5   r7   r  r:   r9   r[   r\   ZpxZpaxpyZpayZpzZpazr;   r;   r<   test_integrate_1d  s$   
*
*
.zTestNdPPoly.test_integrate_1dN)rl   rm   rn   r)  r1  r8  r:  r<  r>  r?  rC  rF  r;   r;   r;   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   rt  r   r  r  r;   r<   r     s    *z _ppoly_eval_1.<locals>.<genexpr>)
rG   rY   r  r   r   re   searchsortedr   sumr   )r   r6   Zxpsr  r  rF  r  r;   rH  r<   r    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   )rG   r~  rG  VZindxsr7  r;   r<   r    s   4 z!_ppoly_eval_2.<locals>.<listcomp>)r   rG   r3   Z
empty_likecompressrI  Zclipr  ZtakeZvanderrQ   r   )r  Zbreaksr   r.  r[   r\   KZ	saveshaperO  maskr  r}  valuesr;   rL  r<   r    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#   )r6   r5   r   r;   r;   r<   _dpow  s
   rR  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^   rG   r'  r  r   r   r   zipre   rI  r   rR  )r   r  r   ynewrI  r  nxnyjoutr6   r5   j1j2s1s2r  k1k2r;   r;   r<   r0    s6   (

 
r0  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
    Nr3  r   rL   r   rP   r^   r,   rS  )r   r  r   rU  znewrI  r  rV  rW  ZnzrX  r6   r5   r7   rY  rZ  j3r[  r\  s3r  r]  r^  k3r;   r;   r<   r6  	  sJ   (



,
r6  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   rM   r   rP   r^   r,   rL   rS  )r   r  r   rU  r_  ZunewrI  r  ri   rj   ZmzZmurX  r6   r5   r7   r:   rY  rZ  r`  Zj4r[  r\  ra  Zs4r  r]  r^  rb  Zk4r;   r;   r<   r9  .	  s^   $(





8
	r9  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)S )*TestRegularGridInterpolatorc                 C   s   dgd }t g d}|d d t jt jt jf }|t jd d t jt jf }|t jt jd d t jf }|t jt jt jd d f }||d  |d  |d  }||fS )Nrr   r/   r0   rM   rs   r   r   rG   r  newaxisr4   pointsrQ  values0values1Zvalues2Zvalues3r;   r;   r<   _get_sample_4d\	  s   
z*TestRegularGridInterpolator._get_sample_4dc                 C      dgd dgd  }t g d}|d d t jt jt jf }|t jd d t jt jf }|t jt jd d t jf }|t jt jt jd d f }||d  |d  |d  }||fS Nrd  r,   )rr   rp   rq   rs   r   r   re  rg  r;   r;   r<   _get_sample_4d_2g	  s   z,TestRegularGridInterpolator._get_sample_4d_2c                 C   st   |   \}}tg dg dg dg}dD ]!}t|| |d}|| }t|||d}||}t|| qd S )Nr  r  r0   r  r  r  g?g?r/   r/   r/   r/   rV   r   method)rk  rG   r  r   tolistr   )r4   rh  rQ  samplert  r   r'  r(  r;   r;   r<   test_list_inputr	  s"   z+TestRegularGridInterpolator.test_list_inputc           
      C   s   |   \}}|d|  }tg dg dg dg}dD ],}t|||d}t||j|d}t||j|d}||}||d||  }	t||	 qd S )N               @ro  rp  rq  rr  rs                ?)rk  rG   r  r   r   r   r   )
r4   rh  rQ  rv  rt  r   ZrinterpZiinterpr'  r(  r;   r;   r<   r   	  s&   z(TestRegularGridInterpolator.test_complexc                 C   s:   |   \}}t||}tg d}d}t||| d S )Nr  r  rq   r   H@rn  r   rG   r  r   r4   rh  rQ  r   rv  wantedr;   r;   r<   test_linear_xi1d	  s
   
z,TestRegularGridInterpolator.test_linear_xi1dc                 C   sR   |   \}}t||}tg dg dg dg}tg d}t||| d S )Nro  rp  rq  r{  gq@g     \@rk  r   rG   r  r   r}  r;   r;   r<   test_linear_xi3d	  s   
z,TestRegularGridInterpolator.test_linear_xi3dc                 C   s   |   \}}t||dd}tg d}d}t||| tg d}d}t||| tg d}d}t||| tg d}d	}t||| tg d
}d}t||| d S )Nr   rs  )r  r  r  r  g     0@)r  r  r  r  rr   rr   rr   rr   rr   r0   r0   r0   r0        \@)r  rD  r  r  g     |@r  r}  r;   r;   r<   r   	  s"   z(TestRegularGridInterpolator.test_nearestc                 C   sL   |   \}}t||}tg dg dg}tddg}t||| d S )Nr  r  rr   r  r  r}  r;   r;   r<   test_linear_edges	  s
   
z-TestRegularGridInterpolator.test_linear_edgesc                 C   s   ddg}t g d}|d d t jf }|t jd d f }||d  }ttt|| ddg}ttt|| ddg}ttt|| g d}ttt|| ddg}ttt||dd d S )	Nrd  )rr   r0   r/   rs   )rd  )rr   r/   r  r0   )rd  rd  rd  undefmethodrs  )rG   r  rf  rR   rS   r   )r4   rh  rQ  ri  rj  r;   r;   r<   test_valid_create	  s    

z-TestRegularGridInterpolator.test_valid_createc                 C   s   |   \}}t||}tg dg dg}tt||d tg dg dg}tt|| tg dg dg}tt|| d S )Nr  r  r  )rr   rr   rr   r  )r0   r0   r0   r  )rk  r   rG   r  rR   rS   )r4   rh  rQ  r   rv  r;   r;   r<   test_valid_call	  s   
z+TestRegularGridInterpolator.test_valid_callc                 C      |   \}}t||dd d}tg dg dg dg dg}tg d}t||dd	| tg d
}t||dd	| d S )NFrb   rd   r  r  r  r  r  r  r  r  r?   r  皙ir  r  r  r  )rr   r  r   r   r   rs  )gfffff[gfffff@g     grV   r  r}  r;   r;   r<   test_out_of_bounds_extrap	     z5TestRegularGridInterpolator.test_out_of_bounds_extrapc                 C   r  )NFr  r  r  r  r  )rr   r   r   r   r   rs  )g333333(g33333`@g     gyXrV   r|  r}  r;   r;   r<   test_out_of_bounds_extrap2	  r  z6TestRegularGridInterpolator.test_out_of_bounds_extrap2c                 C   s   |   \}}t||dtjd}tg dg dg dg}ttjtjtjg}t||dd| t||dd| tg d	g d
g dg}tg d}t||| d S )NFr  r  r  r  r   rs  rV   ro  rp  rq  r  )rk  r   rG   re   r  r   r}  r;   r;   r<   test_out_of_bounds_fill	  s   z3TestRegularGridInterpolator.test_out_of_bounds_fillc                 C   s   |   \}}t||dd}tj| }dd |D }t|}|d}t||}tg dg dg dg}t|||| d S )	Nr   rs  c                 S      g | ]}|qS r;   r;   r   r  r;   r;   r<   r  
      zJTestRegularGridInterpolator.test_nearest_compare_qhull.<locals>.<listcomp>rP   ro  rp  rq  )	rk  r   	itertoolsproductrG   r  rx   r   r   r4   rh  rQ  r   Zpoints_qhullZvalues_qhullZinterp_qhullrv  r;   r;   r<   test_nearest_compare_qhull	  s   



z6TestRegularGridInterpolator.test_nearest_compare_qhullc                 C   s~   |   \}}t||}tj| }dd |D }t|}|d}t||}tg dg dg dg}t|||| d S )Nc                 S   r  r;   r;   r  r;   r;   r<   r  
  r  zITestRegularGridInterpolator.test_linear_compare_qhull.<locals>.<listcomp>rP   ro  rp  rq  )	rk  r   r  r  rG   r  rx   r   r   r  r;   r;   r<   test_linear_compare_qhull

  s   




z5TestRegularGridInterpolator.test_linear_compare_qhullc                 C   sz   t ddd}t ddd}td}dD ]&}t||f||d}|d	d
g}t||f|j|d}|d	d
g}t|| qd S )Nr   r,   rN   r^   r_   rN   r_   r   rV   rs  rD  rj  )rG   r   MyValuer   _vr   )r4   r6   r5   rQ  rt  r   r'  r(  r;   r;   r<   test_duck_typed_values
  s   
z2TestRegularGridInterpolator.test_duck_typed_valuesc                 C   sb   t jd t ddd}t ddd}t jdd}t||f|dd ttt||f|dd d S )	NrA   r   r,   rN   r^   r_   rc   r   )rG   rH   rI   r   r4  r   rR   rS   )r4   r6   r5   rQ  r;   r;   r<   test_invalid_fill_value&
  s   

z3TestRegularGridInterpolator.test_invalid_fill_valuec                 C   s:   t jddd}dd |jD }t|| t||dd d S )Nrv  z>f4r   c                 S   s   g | ]}t |qS r;   )rG   rZ   )r   r   r;   r;   r<   r  6
  s    zCTestRegularGridInterpolator.test_fillvalue_type.<locals>.<listcomp>rr   rc   )rG   r   r   r   )r4   rQ  rh  r;   r;   r<   test_fillvalue_type3
  s   
z/TestRegularGridInterpolator.test_fillvalue_typec                 C   s  t jd t jd}t jd}t ||}t t|t|}t t|t|}t ||\}}t |	 |	 fj
}tttfD ]D}|tt|||}||}	|||f}
||df}|||}||d}t|	j|
j  ko|j  ko|j  ko|jkn  d qEd S )Nr   rs   rr   T)rG   rH   rI   hypotr   minmaxmeshgridr)  r3   r*  r   r   r"   r   rT  r   ry  )r4   r6   r5   r7   XYXYinterpolatorr   Zinterp_points0Zinterp_points1Zinterp_points2Zinterp_points3Zinterp_points4r;   r;   r<   test_broadcastable_input;
  s:   

z4TestRegularGridInterpolator.test_broadcastable_inputc                 C   s   t jd t jd}|d d df |d d df }}t ||}t jd}|jdd |jdd |jdd tttfD ]}|||}|| q@d S )Nr   rt   r^   )r  r,   F)write)rG   rH   rI   r  Zsetflagsr   r   r"   )r4   Zxyr6   r5   r7   r  r  r   r;   r;   r<   r  Z
  s   "

z*TestRegularGridInterpolator.test_read_onlyN)rl   rm   rn   rk  rn  rw  r   r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r;   r;   r;   r<   rc  [	  s*    
rc  c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )r  z"
    Minimal indexable object
    c                 C   s(   d| _ || _tt||| _d S )Nr,   )r   r   rG   rZ   r   rx   r  )r4   r   r;   r;   r<   __init__s
  s   zMyValue.__init__c                 C   s
   | j | S r   )r  )r4   idxr;   r;   r<   __getitem__x
  s   
zMyValue.__getitem__c                 C   s   d S r   r;   r   r;   r;   r<   __array_interface__{
  s   zMyValue.__array_interface__c                 C   s   t d)NzNo array representation)RuntimeErrorr   r;   r;   r<   	__array__~
  s   zMyValue.__array__N)rl   rm   rn   __doc__r  r  r  r  r;   r;   r;   r<   r  n
  s    r  c                   @   r  )"TestInterpNc                 C   sf   t dd}t g d}t dd}t g d}t g dg dg dg dg dg}|||fS )Nr^   r   r/   r1   r   r   r  r^   r,   r^   r,   r^   r^   r,   rL   r,   r^   r^   r,   r,   r,   r^   )rG   rZ   rQ   )r4   r6   r5   r7   r;   r;   r<   _sample_2d_data
  s   
zTestInterpN._sample_2d_datac                 C   sp   |   \}}}t|||}tg dg dgj}tt||f||dd||d d df |d d df  d S )Nr^   ffffff@rO   r/   ffffff
@r   rL   r^   r  r   r   rp   r0   rL   	splinef2drs  r   r^   )r  r   rG   rQ   r*  r   r   ev)r4   r6   r5   r7   lutr   r;   r;   r<   test_spline_2d
  s   
"zTestInterpN.test_spline_2dc                 C   sz   |   \}}}tg dg dgj}dD ]%}t||f|||d}t| | f| | |d}t|||d qd S )Nr  r  r   rV   r  rs  r   )r  rG   rQ   r*  r   ru  r   )r4   r6   r5   r7   r   rt  r'  r(  r;   r;   r<   rw  
  s   
zTestInterpN.test_list_inputc              
   C   s   t g d}t g d}t g dg dg dg dg dg}t|||}t g dg dgj}t||f||ddd	d
}||d d df |d d df }d	|dd< t|| ttt||f||ddd d
 d S )Nr  r  r  r  )r^   r  g333333@r/   r  r   rL   )r^   r  r   g      rp   r0   rL   r  FR?@rt  rb   rd   r   r^   r,   rM   )	rG   rQ   r   r*  r   r  r   rR   rS   )r4   r6   r5   r7   r  r   actualr  r;   r;   r<   test_spline_2d_outofbounds
  s(   
$

z&TestInterpN.test_spline_2d_outofboundsc                 C   rl  rm  re  rg  r;   r;   r<   _sample_4d_data
  s   zTestInterpN._sample_4d_datac                 C   sH   |   \}}t||}tg dg}t|||dd}t||| d S )Nrz  rV   rs  r  r   rG   r  r   r   r4   rh  rQ  Z	interp_rgrv  r~  r;   r;   r<   test_linear_4d
  s
   
zTestInterpN.test_linear_4dc                 C   B   |   \}}tg dg}d}t|||dddd}t|| d S )Nr  r  g333333$@r   r  rV   Fr  r  rG   r  r   r   r4   rh  rQ  rv  r~  r  r;   r;   r<   test_4d_linear_outofbounds
     
z&TestInterpN.test_4d_linear_outofboundsc                 C   sL   |   \}}t||dd}tg dg}t|||dd}t||| d S )Nr   rs  rz  r  r  r;   r;   r<   test_nearest_4d
  s
   zTestInterpN.test_nearest_4dc                 C   r  )Nr  r  r   Fr  r  r  r;   r;   r<   test_4d_nearest_outofbounds
  r  z'TestInterpN.test_4d_nearest_outofboundsc                 C   sT   |   \}}tg d}t|||dd}t|||d d d f dd}t|| d S )Nrz  Fra   )r  rG   r  r   r   r4   rh  rQ  rv  r'  r(  r;   r;   r<   
test_xi_1d
  s
   zTestInterpN.test_xi_1dc                 C   sv   |   \}}tjd tjddd}t|||ddd}t|jd t|||d	dddd}t	|||j d S )
NrA   r,   rL   rM   r   Frt  rb   r-  rP   )
r  rG   rH   rI   r4  r   r   r   rx   r   r  r;   r;   r<   
test_xi_nd
  s   
zTestInterpN.test_xi_ndc                 C   s   |   \}}}||f}tddd}tddd}dD ]H}|d d d f |d d d f f}t||||dd}	t|	jd t||\}
}tj|
j	 |j	 f }t||||dd}t
|	||	j qd S )	Nr   r^   r,   rL   r  Fr  r-  )r  rG   r   r   r   r   r  r/  r*  r3   r   rx   )r4   r6   r5   rQ  rh  r   r   rt  rv  r'  r  r  r(  r;   r;   r<   test_xi_broadcast
  s"    
zTestInterpN.test_xi_broadcastc                    s   |   \tjd tjdddddtjddddD ]2 t dd	}t|jd
 d  fddtdD }t	|
ddd}t|| d q tttdd d S )NrA   rL   r   r_   r   rM   r  Fr  )r_   r   r   r   c              	      s&   g | ]}t d |f  ddqS ).Fr  )r   r  rt  rh  rv  rQ  r;   r<   r    s
    
z5TestInterpN.test_nonscalar_values.<locals>.<listcomp>r^   r,   r   r  rs  )r  rG   rH   rI   r4  r   r   r   r   rQ   r=  r   rR   rS   )r4   r9   Zvsr(  r;   r  r<   test_nonscalar_values  s"   

z!TestInterpN.test_nonscalar_valuesc                 C   s   |   \}}}||f}|d|  }tg dg dgj}dD ]'}t||||d}t||j||d}t||j||d}	|d|	  }
t||
 qttj	t|||dd d S )Nrx  r  r  rr  rs  ry  r  )
r  rG   rQ   r*  r   r   r   r   r   ZComplexWarning)r4   r6   r5   rQ  rh  rv  rt  r'  Zv2rZv2ir(  r;   r;   r<   r   #  s"   

zTestInterpN.test_complexc                 C   sn   t ddd}t ddd}td}dD ] }t||f|dd	g|d
}t||f|jdd	g|d
}t|| qd S )Nr   r,   rN   r^   r_   r  r  rD  rj  rs  )rG   r   r  r   r  r   )r4   r6   r5   rQ  rt  r'  r(  r;   r;   r<   r  6  s   z"TestInterpN.test_duck_typed_valuesc                 C   s   t ddd}t ddd}tt jdd}t jddd}dD ]}t||f|||d}t||ft |||d}t|| q!d S )	Nr   r,   rN   r^   r_   rL   r  rs  )rG   r   r*   rH   r4  r   r  r   )r4   r6   r5   rQ  rv  rt  r'  r(  r;   r;   r<   test_matrix_inputA  s   zTestInterpN.test_matrix_inputN)rl   rm   rn   r  r  rw  r  r  r  r  r  r  r  r  r  r  r   r  r  r;   r;   r;   r<   r  
  s"    		
		r  r   )Jr  Znumpy.testingr   r   r   r   r   r   r   r  r	   rR   Znumpyr
   r   r   r   r   r   rG   Zscipy.interpolater   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zscipy.specialr#   r$   r%   Zscipy._lib._gcutilsr&   r'   Zscipy.integrater(   r)   Zscipy.sparse._sputilsr*   r+   ro   r  r  r0  rQ  rf  r  r  r  r  r&  r  re   r  rR  r0  r6  r9  rc  r  r  r;   r;   r;   r<   <module>   sb    $ TQ     
J /   h  1 $ W

$
(-  