U
    »mœdöu ã                   @   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;d0d+d,„Z<d1d-d.„Z=dS )2é    )Ú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ƒ �x}| t¡ t|||ƒ}t|ddƒtdƒdd� tddd	…dtd
…f \}}t|| 	¡ | 	¡ ƒt|d|  ƒdd� W 5 Q R X 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   úa/home/sam/Atlas/atlas_env/lib/python3.8/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ƒ �4}| t¡ t|||ƒ}t|ddƒtdƒdd� W 5 Q R X 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   sf  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 5 Q R X 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   Zip1Zip2Z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ƒ �x}| t¡ t|||ƒ}t dddg¡}t d	d
g¡}t	|||ƒ|||d d d… ƒƒ t
t|||d d d… dddƒ W 5 Q R X 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   ÚfuncZxeZ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ƒ �V}| t¡ t|||dƒ}t|ddƒt  dg¡dd	� t|dd
ƒt  dg¡dd	� W 5 Q R X d S )NrL   r)   )r%   r%   Úlinearr*   ç      ø?r(   r%   r+   ç      @)	rD   ÚzerosÚaranger   r-   r.   r   r   rN   )r0   Úar2   r1   r4   Úbr8   r8   r9   Útest_interp2d_linearV   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ƒ �Ô}| 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 5 Q R X d S )Nr   é   rL   r%   é   rM   rJ   rB   é!   T©Úbounds_error©Ú
fill_value)rD   r   r   r-   r.   r   rO   rP   Únanr   ÚisnanÚallÚisfinite)r0   r2   r1   r3   ZixZiyr4   rY   ZizÚmxÚmyr8   r8   r9   Útest_interp2d_boundsa   s     $

z!TestInterp2D.test_interp2d_boundsN)	Ú__name__Ú
__module__Ú__qualname__r:   r=   rI   rR   rZ   rh   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dJd"d#„Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ ZdKd,d-„ZdLd.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 )MÚ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%   rL   r*   ç        g      4@©r%   é
   )rq   r%   )r%   r%   rL   g      >@)r%   rJ   rL   )rJ   r%   rL   rC   r   éâÿÿÿrM   g      YÀ)rD   rW   Úx5Úx10Úy10ÚreshapeÚx25Úx2Úy2rN   Úx1Úy1Úy210Úy102Úy225Úy25Úy235Úy325Úy210_edge_updatedÚy102_edge_updatedra   ©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dddg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ÚzerorS   ÚslinearÚ	quadraticr?   ÚpreviousÚnextr@   Úextrapolate©rA   ra   rS   )rM   r[   rM   )rM   )rM   rM   r   r[   r%   rJ   ©rA   Úaxisra   rq   ©r�   )rM   rM   rM   r8   ro   )r   rt   ru   rD   rN   r|   rx   ÚonesrO   rP   rw   ry   r}   rz   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   r^   ç      @r`   )r)   r*   r   r[   r‘   )r   r   rt   ru   rG   r_   rD   rc   ra   r   r�   r|   r}   r   r2   r1   r„   r8   r8   r9   Ú	test_initç   s"    ÿÿzTestInterp1D.test_initc                 C   s4  t | j| jƒ}t | jd d d… | jd d d… ƒ}t|| jƒ| jƒ t|dƒt dg¡ƒ t|dddgƒ|dddgƒƒ 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 )	NrM   ç333333ó?ç333333@çffffff@ç      @F)Úassume_sortedT)	r   rt   ru   r   rD   rN   rO   rP   r|   )r0   Úinterp10Zinterp10_unsortedZinterp10_assume_kwZinterp10_assume_kw2Zinterp10_y_2dZinterp10_y_2d_unsortedr8   r8   r9   Útest_assume_sortedú   s(    "ÿÿÿ*
ÿzTestInterp1D.test_assume_sortedc                 C   s   dD ]}|   |¡ qd S )N)rS   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|dddgƒt dddg¡ƒ t | j| j|dd�}t|dd	d
dgƒdd	d
dgdd� t|ddd�}tt	t | j| jf|Ž d S )Nr@   r—   r˜   r™   rš   r�   rŽ   ç      ð¿r   é	   é   rM   ç›+¡†›„=©ÚrtolT©rA   ra   r_   ©
r   rt   ru   r   rD   rN   r   ÚdictrO   rP   )r0   rA   rœ   ÚextrapolatorÚoptsr8   r8   r9   rž     s$    ÿÿ
 ÿþzTestInterp1D._check_linearc                 C   s„   t jd D ]B}t jd|d�}|}t||dd�|ƒ}t|j|ƒ t||dd� q
dd	d
g}t jdd	g}t||ƒ|ƒ}t||dd� d S )NÚfloaté   ©ÚdtyperS   r@   çVçž¯Ò<©Úatolr   r[   r%   )rD   ZsctypesrW   r   r   r®   r   rb   )r0   Zdtypr2   r1   Z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 }ddddg}|D ]€}t jdd|d�}|D ]f}t  | d ¡ |¡}|D ]F}| |¡}	|D ]2}
t	|||
d	d
�}t
||	ƒ|dd|||f d� qxqfqHq0d S )Nr‰   rˆ   rŠ   r?   r   rq   r­   r•   F©rA   r_   çH¯¼šò×z>z	%s, %s %s©r±   Úerr_msg)rD   Zfloat16Zfloat32Zfloat64Ú	complex64Ú
complex128rW   ÚexpÚastyper   r   )r0   Zdt_rZdt_rcZspline_kindsZdtxr2   Zdtyr1   ZdtnÚxnewrA   Úfr8   r8   r9   Útest_slinear_dtypes=  s    
ÿz TestInterp1D.test_slinear_dtypesc                 C   st   t | j| jdd�}t|| jƒ| jƒ t|dƒt dg¡ƒ t|dƒt dg¡ƒ t|dddgƒt dddg¡ƒ d S )Nr?   r@   r—   rT   r˜   r™   rš   ©r   rt   ru   r   rD   rN   ©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|dddgƒt d	ddg¡ƒ t | j| jdd
d�}t|ddddgƒddddgdd� tdd
dd�}tt	t | j| jf|Ž d S )Nr†   r@   r—   r)   rT   r˜   r™   rš   r*   r�   rŽ   r    r   r¡   r¢   r£   r¤   Tr¦   r§   ©r0   rœ   r©   rª   r8   r8   r9   Útest_nearestW  s&    ÿÿ
 ÿþzTestInterp1D.test_nearestc                 C   sÊ   t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|ddd	gƒt dd	d	g¡ƒ t | j| jdd
d�}t|ddddgƒddddgdd� tdd
dd�}tt	t | j| jf|Ž d S )Nr‡   r@   r—   r)   rT   r*   r˜   r™   rš   r�   rŽ   r    r   r¡   r¢   r£   r¤   Tr¦   r§   rÁ   r8   r8   r9   Útest_nearest_upl  s&    ÿÿ
 ÿþzTestInterp1D.test_nearest_upc              	   C   sÆ  t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|dddgƒt d	d
dg¡ƒ t | j| jddd�}t|ddddgƒtjdddgdd� t | j| jddd�}t|ddddddgƒtjtjddddgƒ t | j| jddd�}t|ddddddgƒ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|dddgƒtjtjgddgddggƒ t
dddd�}ttt | j| jf|Ž t dd d!gdd dgdddd"�}t|dddd d!d#dgƒtjtjdd dddgƒ t d!dd gddd gddd$d"�}t|dddd d!d#dgƒtjtjdd dddgƒ t | j| jddd�}t|ddddddgƒ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|dddgƒtjtjgddgd%d%ggƒ d S )&Nr‹   r@   r—   r)   rT   r˜   r™   rš   r*   rm   r�   rŽ   r    r   r¡   r¢   r£   r¤   rM   éþÿÿÿrL   r¬   é   é   é   é   é   r�   rq   Tr¦   r[   r%   ©rA   ra   r›   rJ   Frr   ©r   rt   ru   r   rD   rN   r   rb   r|   r}   r¨   rO   rP   r‚   rƒ   ©r0   rœ   r©   Zinterpolator1DZinterpolator2DZ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|dddgƒt d	ddg¡ƒ t | j| jdd
d�}t|ddddgƒdddtjgdd� t | j| jdd
d�}t|ddddddgƒddddtjtjgƒ t | j| jdd
d�}t|ddddddgƒ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|dddgƒddgddgtjtjggƒ t
dd
dd�}ttt | j| jf|Ž t dddgdddgdd
dd �}t|dddddd!dgƒdddddtjtjgƒ t dddgdddgdd
d"d �}t|dddddd!dgƒdddddtjtjgƒ t | j| jdd
d�}t|ddddddgƒ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|dddgƒd#d#gddgtjtjggƒ d S )$NrŒ   r@   r—   r*   rT   r˜   r™   rš   r•   r�   rŽ   r    r   r¡   r¢   r£   r¤   rM   rÄ   rL   r¬   rÅ   rÆ   rq   rÇ   rÈ   r�   r[   Tr¦   r%   rÊ   rJ   FrC   rË   rÌ   r8   r8   r9   Ú	test_nextÆ  s¢    ÿÿ ÿÿÿÿÿÿ ÿ
þÿþ
 ýÿ
 ýÿ
þÿÿ
 þ
þÿzTestInterp1D.test_nextc                 C   sp   t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|dddgƒt d	d
dg¡ƒ d S )Nrˆ   r@   r—   r)   rT   r˜   r™   rš   r*   rm   r¾   r¿   r8   r8   r9   Ú	test_zero  s    ÿzTestInterp1D.test_zeroc              
   C   sV   t t||ƒ z||ƒ W n8 tk
rP } zd |¡t|ƒks@t‚W 5 d }~X Y nX d S )Nz{})rO   rP   ÚformatÚstrÚAssertionError)r0   ZinterpolantZ
test_arrayZ
fail_valueÚerrr8   r8   r9   Úbounds_check_helper  s
    z TestInterp1D.bounds_check_helperrS   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 ddd	d
dg¡¡t dddddgdddddgg¡ƒ t | j| jd|d�}|  |dd¡ |  |dd¡ |  |dddgd¡ |  |dddgd¡ |dd	d
gƒ d S )NF)ra   r_   rA   gffffff&@g333333Àg333333)@gÍÌÌÌÌL3@r    ro   rm   g      "@ç      &@T)r_   rA   r)   g      5@)	r   rt   ru   ra   r   rD   rN   Z_check_boundsrÔ   )r0   rA   Zextrap10Zraises_bounds_errorr8   r8   r9   Ú_bounds_check  s0     ÿ
ÿÿÿþÿ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 )Nrq   Fr¦   r[   r   rM   )
rD   rW   rº   Úint_r   rb   r   rc   r   Úr_)r0   rA   r2   r1   ÚcÚyir8   r8   r9   Ú_bounds_check_int_nan_fill5  s    z'TestInterp1D._bounds_check_int_nan_fillc                 C   s"   dD ]}|   |¡ |  |¡ qd S )N)rS   r?   r†   r‹   rŒ   r‰   rˆ   rŠ   )rÖ   rÛ   r“   r8   r8   r9   Útest_bounds=  s    
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 ]Î}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�rddgg|j
d  g|j
d  }nddgg|j
d  }t|ddgƒ|ƒ q\dddg}| j| jfD ] }ttt | j||d|dd	� �qBt | j| j|d|dd	�}t|dƒdddggd ƒ t|dƒdddg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 ]š}t | j||d|dd	�}ddg}|j	d
k�rL|g|j
d  }t|dƒ|ƒ t|dƒ|ƒ ddgddgg}|j	d
k�r”|g|j
d  }t|ddgƒ|ƒ �qt dddg¡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ƒdddg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 ]š}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ƒ|ƒ �q”dddgdddgf}| j| jfD ] }ttt | j||d|dd	� �qPtdƒD ]˜}|dk�rštdd„ |D ƒƒ}t | j| j|d|dd	�}t|dƒdddggd ƒ t|dƒdddggd ƒ t|ddgƒddgddgddgggd ƒ �qzd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ƒ|ƒ �qPddgddgg}| j| j| jfD ] }ttt | j||d|dd	� �q0tdƒD ]”}|dk�rrt |¡}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ƒ �qZd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	� �q tdƒD ]¦}|dk�rtt |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ƒ �qJd S )N)éœÿÿÿéd   Fr¦   rq   rÞ   éöÿÿÿrÝ   rM   )rA   r�   ra   r_   rJ   r[   r   éÈ   é,  r%   i8ÿÿÿiÔþÿÿc                 s   s   | ]}t  |¡V  qd S ©N)rD   rN   )Ú.0r¼   r8   r8   r9   Ú	<genexpr>¤  s     z1TestInterp1D._check_fill_value.<locals>.<genexpr>iè  iÐ  iüÿÿi0øÿÿ)r   rt   ru   r   r€   r�   r~   r   rs   ÚndimÚshaperO   rP   rD   rN   ÚrangeÚtuple)r0   rA   Úinterpr1   Úresultra   Úiir8   r8   r9   Ú_check_fill_valueC  sŒ    ÿ ÿ ÿ"
  ÿ
 ÿþþ  ÿ ÿ  ÿ
 ÿþþ  ÿ ÿ  ÿ

 ÿþþ
  ÿ ÿ  ÿ


 ÿÿÿþ
ÿ  ÿ

 ÿÿÿÿþzTestInterp1D._check_fill_valuec                 C   s   dD ]}|   |¡ qd S ©N)rS   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     À^@r`   g     t@)r   rt   ru   r   ra   )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•   rm   r*   ç      @r—   r8   r)   rÕ   ç      (@r   ©r�   rA   rš   g      *@g      .@g      1@rn   ç      @g      ,@)r   rt   ru   r   rD   rN   r   Ú
isinstanceZndarrayr   ræ   r|   r}   )r0   rA   rœ   Z	interp210Z	interp102Zx_newr8   r8   r9   Ú_nd_check_interpñ  s6    ÿÿÿÿÿÿÿzTestInterp1D._nd_check_interpc           
      C   sª   ddddg}t  t  |¡¡j|Ž }t|ƒD ]z\}}t  |¡}t||||d�}t||ƒ||d� t  d¡ d¡d }t|ƒ}	d	d
dg|	||d …< t||ƒj|	|d� q*d S )NrK   rL   é   r\   rò   ©r¶   )r%   rJ   r[   rñ   r%   rJ   r[   )	rD   rW   Úprodrv   Ú	enumerater   r   Úlistræ   )
r0   rA   rX   r1   ÚnÚsr2   r3   rx   rY   r8   r8   r9   Ú_nd_check_shape  s    
zTestInterp1D._nd_check_shapec                 C   s"   dD ]}|   |¡ |  |¡ qd S )N)rS   r?   r‰   rŠ   r†   rˆ   r‹   rŒ   )rõ   rý   r“   r8   r8   r9   Útest_nd  s    
zTestInterp1D.test_ndc           	      C   sº   t  ddddddddd	d
g
¡}||d  }| |¡}t|||d�}t|d d… ||ƒd d… ƒ t  dd
d¡}t||j|d�}t||j|d�}t||ƒj||ƒƒ t||ƒj||ƒƒ d S )Nr[   rU   rJ   gÍÌÌÌÌÌ@rK   gš™™™™™@gš™™™™™@g       @g      #@rq   ù      ð?       @r@   rM   rB   )rD   rN   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   sB   t  dd¡}t  dd¡}tt||ƒ�}|ddgƒ ~W 5 Q R X 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 ]6}t jdddgt jd�}t|||d�}t||ƒ|ƒ qd S )N)r†   r‹   rŒ   r   é2   é   r­   r@   )rD   rN   Z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 ]0}t|||d�}|ddgƒ}tt  |¡ 	¡ ƒ q&d S )Nrq   rö   )rˆ   r‰   r@   gš™™™™™@rð   )
rD   rW   rº   r«   rG   rb   r   r   re   rd   )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ƒ qhq.d S )Nr¬   rJ   )rŠ   r?   r@   rö   r[   rL   )rD   rW   rº   r«   rG   rb   r   Úasarrayr   rc   rd   r   ræ   )
r0   r2   r1   ZynrA   r  Zirnr»   ÚoutZoutnr8   r8   r9   Útest_spline_nansW  s    

zTestInterp1D.test_spline_nansc              	   C   s@   t  d¡t j }t  d¡}ttƒ� t||dd� W 5 Q R X d S )Nrq   r?   r@   )rD   r’   rb   rW   rO   rP   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 ]F}||j_d|j_dD ],}t|||d	�}||ƒ}tt  |¡ ¡ ƒ qFq.d S )
Nr   rq   r•   r¡   r  ©TFF)rS   r†   rˆ   r‰   rŠ   r?   r@   )	rD   rW   r¹   ÚflagsÚ	writeabler   r   re   rd   )r0   r2   r1   r»   Zxnew_writeablerA   r¼   r  r8   r8   r9   Útest_read_onlyp  s    zTestInterp1D.test_read_onlyrA   )rS   r†   r‡   r‹   rŒ   c              	   C   sh   t dgdg|ddd�}t|dddgƒdddgƒ t dgdg|d	d
�}ttdd�� |dƒ W 5 Q R X d S )NrT   rö   Frp   )rA   r_   ra   r[   r%   rq   Tr³   zx_new is above©Úmatchr*   )r   r   rO   rP   )r0   rA   r¼   r8   r8   r9   Útest_single_value~  s    ÿzTestInterp1D.test_single_valueN)rS   )rS   )rS   )rS   )+ri   rj   rk   r…   r”   r–   r�   rŸ   rž   r²   r½   rÀ   rÂ   rÃ   rÍ   rÎ   rÏ   rÔ   rÖ   rÛ   rÜ   rì   rî   rï   rõ   rý   rþ   rD   Zcomplex_r  r  ÚpytestÚmarkZskipifr!   r
  r  r  r  r  r  Zparametrizer  r8   r8   r8   r9   rl   x   sN   )D	EE		

 "
 

	 ÿrl   c                   @   s   e Zd Zdd„ ZdS )ÚTestLagrangec                 C   sF   t dddddgƒ}t t|jƒ¡}||ƒ}t||ƒ}t|j|jƒ d S )NrL   r%   r[   rK   rJ   )r   rD   rW   ÚlenÚcoeffsr   r   )r0   ÚpÚxsZysÚplr8   r8   r9   Útest_lagrangeŽ  s
    
zTestLagrange.test_lagrangeN)ri   rj   rk   r$  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   s�   t  dd¡}t  dddddddddd	dg¡}t||ƒ}t  dd
dddddd	dddddg¡}t  dddddddddddddg¡}t||ƒ|ƒ d S ©Nro   rÕ   r*   r)   r•   rš   ç      @çš™™™™™@çffffff@r(   rT   rU   ç      @ç      @ç      @çÍÌÌÌÌÌ@ç333333!@çÍÌÌÌÌÌ#@rn   ç      ö?ç     @ÿ?ç     à@çŒ.ºè¢‹@çß^äë@çn ¹ä@çGNBÐ@çrcß–÷·@ç¦	£ÎI@)rD   rW   rN   r   r   ©r0   r2   r1   Úakr  rÚ   r8   r8   r9   Ú	test_eval—  s$     
  ÿ   üz!TestAkima1DInterpolator.test_evalc                 C   s´   t  dd¡}t  dddddddddd	dg¡}t  |d| f¡}t||ƒ}t  dd
dddddd	dddddg¡}t  dddddddddddddg¡}t  |d| f¡}t||ƒ|ƒ d S r&  )rD   rW   rN   Zcolumn_stackr   r   r9  r8   r8   r9   Útest_eval_2d¤  s(     
  ÿ úz$TestAkima1DInterpolator.test_eval_2dc                 C   sL  t  dd¡}t  dddddddddd	dg¡}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  dddddddd	dddddg¡}t  d¡}t  ddddddddddd d!dg¡}||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 )"Nro   rÕ   r*   r)   r•   rš   r'  r(  r)  )r¢   r%   r%   r   r[   ró   r(   rT   rU   r*  r+  r,  r-  r.  r/  rn   )é   r%   r%   r0  r1  r2  r3  r4  r5  r6  r7  r8  )rD   rW   rN   Úemptyr   r   )r0   r2   Zy_r1   r:  r  rÚ   Zyi_r8   r8   r9   Útest_eval_3dµ  s8     

  ÿ
 úz$TestAkima1DInterpolator.test_eval_3dc                 C   sb   t  dddg¡}t  ||d f¡j}t||ƒ}t  ddg¡}||ƒ}t|t  ||d f¡jƒ d S )Nr   r[   r%   r(   rT   )rD   rN   ZvstackÚTr   r   )r0   r2   r1   r:  Zx_evalZy_evalr8   r8   r9   Ú%test_degenerate_case_multidimensionalÎ  s    
z=TestAkima1DInterpolator.test_degenerate_case_multidimensionalc                 C   sd   t  dd¡}t  dddddddddd	dg¡}t||ƒ}d
}tjt|d�� | d d ¡ W 5 Q R X d S )Nro   rÕ   r*   r)   r•   rš   r'  r(  r)  z9Extending a 1-D Akima interpolator is not yet implementedr  )rD   rW   rN   r   r  r	   ÚNotImplementedErrorÚextend)r0   r2   r1   r:  r  r8   r8   r9   Útest_extend×  s     
z#TestAkima1DInterpolator.test_extendN)ri   rj   rk   r;  r<  r?  rA  rD  r8   r8   r8   r9   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   sL   t  ddgddgddgg¡}t  dddg¡}ttt||ƒ ttt||ƒ d S )	Nr[   rK   r%   rL   rJ   rö   r   r(   )rD   rN   rO   rP   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 5 Q R X d S )Nr[   r%   r   )rO   rP   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 ]Ò}||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>   rJ   r   rq   rC   r%   r[   r¡   )rD   rE   rF   ÚuniquerØ   Úrandr  r   r   rC  r   rÙ   r2   )r0   Úorderr2   rÙ   ÚclsÚppÚpp2Úpp3r8   r8   r9   rD  í  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 ]z}|||ƒ}|||ƒ}|||ƒ}| ||dd … ¡ t jdddd	d
�}	t  ddd¡}
t||	ƒ||	ƒƒ t||
ƒ||
ƒƒ qLd S )Nr>   r   r[   rö   r%   rL   rK   rá   F)Úendpoint)	rD   rE   rF   r   rI  r   r   rC  r   )r0   r2   rÙ   rx   Úc2rK  Úpp1rM  Zpp_combZxi1Z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 ]Ò}|||ƒ}||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ƒ qNd S )Nr   rJ   rq   é   r[   r%   r¡   )rD   rE   rF   ÚsortÚuniformrI  ræ   r   r   rC  r   rÙ   r2   )r0   rJ  r2   rÙ   rK  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
ƒ qHttfD ]`}||d |ƒ}tt  |dƒ¡dƒ tt  |t  	d¡ƒ¡dƒ t
t|t j	ddgdggtd�ƒ qpd S )Nr>   r¬   rÅ   rL   rö   r\   r=  rJ   rK   )rJ   rK   rL   rö   r\   ).r   r   r   r(   r8   r  r	  çš™™™™™Ù?r­   )rD   rE   rF   rI  rT  r   r   r   ræ   rN   rO   rP   Úobject)r0   rÙ   r2   ÚxprK  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 ]`}|||ƒ|||ƒ|||ƒ  }}}	dD ]4}
t|||
ƒj|||
ƒƒ t|||
ƒj|	||
ƒƒ qzqPd S )Né90  r=  )r¬   rÅ   y      ð?333333Ó?rL   )r   r[   r%   )	rD   rE   rF   rT  r   r  r   r   r   )r0   r2   rÙ   Zc_reZc_imr[  rK  r!  Zp_reZ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 ]Ü}||||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ƒ �q0qjq8dD ].}ttfD ]}tt|ft|||d�Ž �qZ�qNd S )Nr]  rJ   rK   rL   rö   r\   r¬   )r[   r%   )r   r[   r%   rJ   r[   r‘   r%   )rM   rK   rL   rö   )rÙ   r2   r�   )rD   rE   rF   rI  ræ   rT  r   r   r   rÙ   Ú
derivativeÚantiderivativer�   rO   rP   r¨   )r0   rÙ   Zc_sr[  r�   Úmr2   rK  r!  ÚresZ
targ_shaperV  r8   r8   r9   Ú	test_axisO  s0    
*ÿ"ýzTestPPolyCommon.test_axisN)ri   rj   rk   rF  rG  rD  rR  rX  r\  r_  rd  r8   r8   r8   r9   rE  à  s   rE  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                   @   s   e Zd ZdS )zTestPolySubclassing.PN©ri   rj   rk   r8   r8   r8   r9   ÚPn  s   rg  c                   @   s   e Zd ZdS )zTestPolySubclassing.BNrf  r8   r8   r8   r9   ÚBq  s   rh  c                 C   sB   t j d¡ t  t j d¡¡}t j d¡}|  ||¡|  ||¡fS )Nr>   rJ   )rK   r%   )rD   rE   rF   rT  rg  rh  )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â   )ri  r`  r   Ú	__class__ra  )r0   rL  Úbpr!  ÚpdZ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[   ©rü   )rD   rE   rF   rT  rØ   rI  r  r   rg  Úfrom_spliner   rj  )r0   r2   r1   ÚsplrL  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â   )ri  rg  Úfrom_bernstein_basisr   rj  rh  Úfrom_power_basis)r0   rL  rk  rQ  Úbp1r8   r8   r9   Útest_conversionsŒ  s
    z$TestPolySubclassing.test_conversionsc                 C   s:   dddg}dgdgdgg}| j  ||¡}t|j| j ƒ d S )Nr   r[   r%   rJ   )rh  Úfrom_derivativesr   rj  )r0   r2   r1   rk  r8   r8   r9   Útest_from_derivatives•  s    
z)TestPolySubclassing.test_from_derivativesN)ri   rj   rk   r   rg  r   rh  ri  rm  rq  ru  rw  r8   r8   r8   r9   re  m  s   			re  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   sV   t  ddgddgddgg¡}t  dddg¡}t||ƒ}t|d	ƒd
ƒ t|dƒdƒ d S )Nr[   rK   r%   rL   rJ   rö   r   r(   ç333333Ó?ç…ëQ¸…@çffffffæ?ç¤p=
×£@©rD   rN   r   r   ©r0   rÙ   r2   r!  r8   r8   r9   Útest_simple�  s
    
zTestPPoly.test_simplec                 C   sz   t  ddgddgddgg¡}t  dddg¡}t||d	d
�}t|dƒdƒ t|dƒdƒ t|ddƒdƒ t|ddƒdƒ d S )Nr[   rK   r%   rL   rJ   rö   r   r(   Úperiodic©r�   gÍÌÌÌÌÌô?rz  ç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  dddg¡}t  dd	d
g¡}t||dd� dD ]0}||j_t||ƒ}||ƒ}tt  |¡ ¡ ƒ qNd S )Nr[   rK   r%   rL   rJ   rö   r   r(   r  r	  r€  r�  r  )rD   rN   r   r  r  r   re   rd   )r0   rÙ   r2   r»   r  r¼   r  r8   r8   r9   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 ]V\}}| ||¡}| ||¡}t
||dd� t
||ƒ||ƒ ||ƒ||ƒ dd� �qp| ¡ }| ¡ }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[   rM   )rD   rW   rv   r#   )Úpowerrû   Úkrh  r8   r8   r9   Úbinom_matrix¼  s    
z/TestPPoly.test_descending.<locals>.binom_matrixr   rJ   ©rq   rS  rC   rq   r[   rÄ   r%   ©ÚsizerM   Tr�  rß   rS  rÞ   ç‚vIhÂ%<=r¤   ©rL   r%   çê-�™—q=)rD   rE   rF   rT  rU  ÚdiffrW   Údotr@  r   r   r`  ra  Ú	integrateÚroots)r0   r†  r„  rb  r2   ÚcaÚhZh_powersrh  ÚcapZcdpÚcdÚparl  Úx_testÚpa_dÚpd_dÚpa_iÚpd_irX   rY   Úint_aÚint_dZroots_dZroots_ar8   r8   r9   Útest_descending»  s@    

,*ÿ
zTestPPoly.test_descendingc                 C   sÀ   t j ddddd¡}t  dddg¡}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[   rJ   r   r(   ry  rL   ©rL   rö   ©rL   r%   r[   r%   rJ   )r\   r%   r[   r%   rJ   )rD   rE   rI  rN   r   r   r2   ræ   rÙ   r`  ra  )r0   rÙ   r2   r!  ÚdpÚipr8   r8   r9   Útest_multi_shapeì  s    
(zTestPPoly.test_multi_shapec                 C   sh   t j d¡ t jddgddgddggtd�}t  d	d
dg¡}t ||¡}t|dƒdƒ t|dƒdƒ d S )Nr>   r[   rK   r%   rL   rJ   rö   r­   r   r(   ry  rz  r{  r|  )rD   rE   rF   rN   r«   r   Z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>   rJ   rÅ   é   r   r¢   r[   )ry  r(   g…ëQ¸Õ?ç333333ã?)
rD   rE   rF   rI  rT  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ƒ q¦d S )	Nr>   r   r¢   r[   rn  rà   )NTFr�  )rD   rE   rF   rT  rØ   rI  r  r   r   ro  r   r   r   r   r   r�   )r0   r2   r1   rp  rL  r  rY   ZpppÚtrÙ   r…  Zextrapr!  r8   r8   r9   rq    s    



zTestPPoly.test_from_splinec                 C   sž   t j d¡ t  ddddgg¡j}t  dddg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>   rK   rJ   r%   r[   rÅ   rö   é   r   )	rD   rE   rF   rN   r@  r   r   r`  rÙ   )r0   rÙ   ZdcZddcr2   rL  ZdppZ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|||ƒƒ qjd S )Nr>   r   r¢   r[   rn  rà   rJ   )rD   rE   rF   rT  rØ   rI  r  r   r   ro  r   rç   r   r   ©r0   r2   r1   rp  rL  r  Ú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
� qld S )Nr>   r   r¢   r[   rL   ©rü   r…  rà   rq   zdx=%dr÷   )rD   rE   rF   rT  rØ   rI  r  r   r   ro  r   rç   r   r`  r­  r8   r8   r9   rm  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   ra  rÙ   r2   )r0   r!  r8   r8   r9   Útest_antiderivative_of_constantO  s    $z)TestPPoly.test_antiderivative_of_constantc                 C   st   t ddggdddgƒ}| ¡ }t|jddgddggƒ t|jdddgƒ t| dd¡dƒ t|dƒ|dƒ dƒ d S )Nr)   r(   r   r[   r%   rT   )r   ra  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  dddgdddgg¡j}t  ddddgddddgg¡j}t  dd	d
ddgdddddgg¡j}t  dddg¡}t||ƒ}| ¡ }| d¡}| ¡ }t|j|ƒ t|j	j|jƒ t|j	j|jƒ t|j	j|jƒ d S )Nr>   rJ   r%   r[   r   g      û?g      Õ?ç      Ð?gUUUUUUÕ?r(   g      ë?g«ªªªª*£?)
rD   rE   rF   rN   r@  r   ra  r   r2   rÙ   )	r0   rÙ   ZicZiicr2   rL  ÚippZiippZ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 ]”}| 
|¡}| |¡}t|j|jƒ t	|ƒD ]d}| |¡}d	}	|	|jd d
…  d|	 |jdd …   }
t||jdd … ƒ||
ƒdd||f d� q€qRd S )Nr>   r   r[   rC   r%   rL   r°  rq   rŠ  rM   r´   z
dx=%d k=%d)r¥   r¶   )rD   rE   rF   r   rI  r  r   r   ro  rç   ra  r`  r   rÙ   r2   )r0   r2   r1   rp  rL  r®  rµ  rM  r…  ÚrrO  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[   rL   r°  rq   rà   r´   r¤   )rD   rE   rF   rT  rØ   rI  r  r   r   ro  rç   ra  r   r   r   r   )	r0   r2   r1   rp  rL  r®  rM  Zspl2r  r8   r8   r9   Útest_antiderivative_vs_splineŽ  s    


ÿz'TestPPoly.test_antiderivative_vs_splinec                 C   sr   t  ddddgddddgg¡j}t  dddg¡}t||ƒ}| ¡ }t|dƒ|dƒdd	� | ¡ }t|j|jƒ d S )
Nr%   r[   rJ   r   r(   gAíþÿÿß?g_p‰   à?g:Œ0âŽyE>r¤   )rD   rN   r@  r   ra  r   r`  rÙ   )r0   rÙ   r2   r!  r¡  rW  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[   rL   r°  )ry  çÍÌÌÌÌÌì?)r‚  r»  Tr�  F)rD   rE   rF   rT  rØ   rI  r  r   r   ro  r�  ra  r   r   r   rc   rd   )	r0   r2   r1   rp  rL  rX   rY   Úigrµ  r8   r8   r9   Útest_integrate¬  s    
zTestPPoly.test_integratec                 C   sp   t  dddg¡}t  ddgddgddgddgg¡}d	D ]4}||j_t||ƒ}| dd¡}tt  |¡ ¡ ƒ q6d S )
Nr[   r%   rK   ro   r    r*   ç       €r)   r  )	rD   rN   r  r  r   r�  r   re   rd   )r0   r2   rÙ   r  rg  r  r8   r8   r9   Útest_integrate_readonlyÁ  s    "
z!TestPPoly.test_integrate_readonlyc                 C   s¨  t  dddg¡}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[   r%   rK   ro   r    r*   r¾  r)   r€  r�  rß   iùÿÿÿéüÿÿÿrT   rU   r*  rL   g      /@é   r   rM   rJ   i÷ÿÿÿ)rD   rN   r   ra  r   r�  ©r0   r2   rÙ   rg  ÚIZ
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   rJ   r°  gVçž¯Ò¼g     ð?r¯   r°   )	rD   r   r   r   r   ro  r�  r   r   )r0   r2   r1   rp  rL  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  ddddg¡}t||ƒ}t| ¡ ddt jdgƒ d}| ¡ }|d	d d …f  |7  < t||ƒ}t| |¡ddt jdgƒ d S )
NrM   r´  r   rY  r¥  r)   g333333ë?r*   r[   )	rD   rN   r@  r   r   r�  rb   rG   Úsolve)r0   rÙ   r2   rL  ÚconstÚc1rQ  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}dddg}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   rb   rÇ  r~  r8   r8   r9   Útest_roots_all_zero  s    


zTestPPoly.test_roots_all_zeroc                 C   s`   t  dddgdddgg¡j}t  dddg¡}t||ƒ}t| ¡ ddgƒ t|jdd�dgƒ d S )Nr[   r   rM   rÄ   Fr�  )rD   rN   r@  r   r   r�  ©r0   rÙ   r2   rL  r8   r8   r9   Útest_roots_repeated  s
    
zTestPPoly.test_roots_repeatedc                 C   sž   t  dgdgg¡j}t  dddg¡}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[   rM   r   r(   F)ÚdiscontinuityrT   )rD   rN   r@  r   r   r�  rÇ  rÌ  r8   r8   r9   Útest_roots_discont  s    
zTestPPoly.test_roots_discontc                 C   sT  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 ]®}|j	|d
|d�}tdƒD ]�}	td	ƒD ]‚}
||	|
f }|j
dkr²||j
7 }|||d�d d …|	|
f }||d|d�d d …|	|
f }d|t|ƒf }t|| | dd|d� q²q¦qŠq$qt|dkt|ƒƒ d S )Nr>   r   r  rS  rq   rC   r%   r[   rJ   F)rÎ  r�   r�  )r^  r�   z(%r) r = %sr´   rµ   rÞ   )rD   rE   rF   rç   rH  rØ   rI  r  r   rÇ  r‰  Úreprr   r   )r0   Únumr�   rJ  r2   rÙ   rL  r1   r·  ÚiÚjÚrrÚvalZcmpvalÚmsgr8   r8   r9   Útest_roots_random.  s4    
"&


ÿ
 ÿÿzTestPPoly.test_roots_randomc                 C   s8  t j d¡ tddƒD �]}t j |dd¡}|dkrFd|d d …ddf< dt j ¡ fD ]Ü}t j|jtd�}t 	||¡ |dkr�t
t  |¡ ¡ ƒ qTd}d}t|ƒD ]H}|||d f ||d |   7 }|t||d f ||d |   ƒ7 }q t jd	d
�� || }W 5 Q R X | ¡ }|t  |¡  }t|ddd� qTqd S )Nr>   r[   rÇ   é‚   rJ   )r[   r%   r[   r   r­   Úignore)Úinvalidg»½×Ùß|Û=r°   )rD   rE   rF   rç   rI  r>  ræ   Úcomplexr   Z_croots_poly1r   rc   rd   ÚabsZerrstater/   r   )r0   r…  rÙ   r1   Úwrc  ZcresrÒ  r8   r8   r9   Útest_roots_crootsM  s*     &zTestPPoly.test_roots_crootsc                 C   s  t  dddgg¡j}t  ddg¡}dD ]ê}t|||d�}| ¡ }| ¡ }|dkr°t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 )NrM   r   r[   ©TFNr�  Fçš™™™™™¹¿çš™™™™™ñ?g®Gáz®ï?gèz®GáÊ¿)rD   rN   r@  r   r`  ra  r   rc   rd   r   r�  r   Úany)r0   rÙ   r2   r�   rL  Zpp_dZpp_ir8   r8   r9   Útest_extrapolate_attrk  s    zTestPPoly.test_extrapolate_attrN)ri   rj   rk   r  rƒ  r  r�  r¢  r£  r©  rq  r¬  r¯  rm  r±  r³  r¶  r¸  r¹  rº  r½  r¿  rÅ  rÆ  rÊ  rË  rÍ  rÏ  r×  rÞ  rã  r8   r8   r8   r9   rx  œ  s8   1	rx  c                   @   sd   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[   rJ   r  r•   ©r   r   ©r0   r2   rÙ   rk  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[   rJ   r  ggfffff@rå  ræ  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[   rJ   rK   r	  g433333@rå  ræ  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%   ry  g:ßO�—nð?rå  ræ  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%   ry  g”Ô	h"l@rå  ræ  r8   r8   r9   Útest_simple5ž  s    
zTestBPoly.test_simple5c                 C   sn   dddg}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 )Nr   r[   rJ   r%   r€  r�  g333333@gHáz®Gñ?gÍÌÌÌÌÌô¿ç[�Âõ(\Ï?çÌÌÌÌÌÌÀr{  rå  ræ  r8   r8   r9   rƒ  ¨  s    
zTestBPoly.test_periodicc              	   C   s|  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 ]V\}}| 
||¡}| 
||¡}t||dd� t||ƒ||ƒ ||ƒ||ƒ dd� �qqd S )Nr   rJ   r‡  rq   r[   rà  r  rˆ  rM   Tr�  rß   rS  rÞ   rŠ  r¤   r‹  rŒ  )rD   rE   rF   rT  rU  rG   r   r   r`  ra  r�  )r0   r„  rb  r2   r‘  r”  r•  rl  r–  r—  r˜  r™  rš  rX   rY   r›  rœ  r8   r8   r9   r�  ´  s.    
*ÿzTestBPoly.test_descendingc                 C   sª   t j ddddd¡}t  dddg¡}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[   rJ   r   r(   ry  rL   rž  rŸ  )
rD   rE   rI  rN   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%   rJ   r[   rK   r  rå  )r0   r2   rÙ   rk  Zxvalrü   r8   r8   r9   Útest_interval_lengthã  s    
zTestBPoly.test_interval_lengthc                 C   sJ   dddg}ddgddgddgg}t ||ƒ}t|dƒdƒ t|dƒdƒ d S )	Nr   r[   rJ   r%   rY  gGáz®Gñ?ç333333û?rë  rå  ræ  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 ]�}t |||d�}| ¡ }|dk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%   rJ   r[   rK   rß  r�  Frà  gÍÌÌÌÌÌ @)r   r`  r   rD   rc   rd   râ  )r0   r2   rÙ   rk  r�   Zbp_dr8   r8   r9   rã  ó  s    
zTestBPoly.test_extrapolate_attrN)ri   rj   rk   r  rç  rè  ré  rê  rƒ  r�  r¢  rí  rï  rã  r8   r8   r8   r9   rä  �  s   	
"rä  c                   @   sd   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 )ÚTestBPolyCalculusc                 C   s®   dddg}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dd
dgƒ t|ddd	�|ddd	�|ddd	�gdddgƒ d S )Nr   r[   rJ   r%   rY  rì  rî  r{  ©r^  rš   ro   r)   )r   r`  r   )r0   r2   rÙ   rk  Zbp_derr8   r8   r9   rm    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
||ƒ||ƒƒ qVd S ©Nr>   ©rL   r¬   r[   r   rM   r<   )rD   rE   rF   rT  r   r   rr  rç   r`  r   r   )	r0   rb  r…  r2   rÙ   rk  rL  Ú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 ]L}t||ƒ}t  |d |d d¡}t|ƒD ]}t|||ƒ| 	|¡|ƒƒ qvqJd S )Nr>   ró  r[   rÿ   r   rM   r<   )
rD   rE   rF   rT  rG   r   r   rç   r   r`  )	r0   rb  r…  r2   rÙ   Úccrk  r[  rÒ  r8   r8   r9   Útest_deriv_inplace!  s    
z$TestBPolyCalculus.test_deriv_inplacec              	   C   s|   dddg}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[   rJ   r¢   r%   r*   r(   g      è?rŒ  ©r±   r¥   )r   ra  rD   r   r   Úwhere)r0   r2   rÙ   rk  Z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¢   ©rK   rq   r%   rJ   r   rM   rÞ   rŒ  rø  )	rD   rE   rF   rT  r   r   r   ra  r`  ©r0   r2   rÙ   rk  rú  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¢   rû  r   rM   rq   r%   rŒ  rø  )
rD   rE   rF   rT  r   r   rr  r   r   ra  )r0   r2   rÙ   rk  rL  rú  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¢   ©rK   rq   r[   rM   r£   rŒ  rø  )rD   rE   rF   rT  r   ra  r2   r   rü  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¢   rÿ  r   r[   rŒ  rø  )	rD   rE   rF   rT  r   r   rr  r   r�  )r0   r2   rÙ   rk  rL  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   rc   )r0   rÙ   r2   rY   Úb1r8   r8   r9   Útest_integrate_extrapk  s    
z'TestBPolyCalculus.test_integrate_extrapc                 C   s®  t  dddg¡}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   rN   r   rs  r   ra  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<   rM   rŒ  rø  )r   rD   r   r   r`  ra  )r0   rÙ   r2   rY   rú  r8   r8   r9   Útest_antider_neg�  s    
 ÿ ÿz"TestBPolyCalculus.test_antider_negN)ri   rj   rk   rm  rõ  r÷  r¶  rý  rþ  r   r½  r  rÅ  r  r8   r8   r8   r9   rð    s   

	rð  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestPolyConversionsc                 C   sn   dddg}ddgddgddgg}t ||ƒ}t |¡}t  |¡}ddg}t||ƒ||ƒƒ t||ƒ||ƒƒ d S )	Nr   r[   rJ   r%   r¬   rK   r  çffffffö?)r   r   rs  rr  r   )r0   r2   rÙ   rL  rk  rQ  r[  r8   r8   r9   Útest_bp_from_ppŸ  s    



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ò  )
rD   rE   rF   rT  r   r   rs  rr  r   r   )	r0   rb  r…  r2   rÙ   rL  rk  rQ  r[  r8   r8   r9   Útest_bp_from_pp_randomª  s    


z*TestPolyConversions.test_bp_from_pp_randomc                 C   sn   dddg}ddgddgddgg}t ||ƒ}t |¡}t  |¡}ddg}t||ƒ||ƒƒ t||ƒ||ƒƒ d S )Nr   r[   rJ   rK   r%   r  r  )r   r   rr  rs  r   )r0   r2   rÙ   rk  rL  rt  r[  r8   r8   r9   Útest_pp_from_bp·  s    



z#TestPolyConversions.test_pp_from_bpc              	   C   st   dddg}ddgddgddgg}t ||ƒ}ttƒ� t  |¡ W 5 Q R X t||ƒ}ttƒ� t |¡ W 5 Q R X d S )Nr   r[   rJ   rK   r%   )r   rO   Ú	TypeErrorrr  r   rs  )r0   r2   rÙ   rL  rk  r8   r8   r9   Útest_broken_conversionsÂ  s    




z+TestPolyConversions.test_broken_conversionsN)ri   rj   rk   r  r  r  r
  r8   r8   r8   r9   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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%   rJ   r*   r•   ©r   Ú_construct_from_derivativesr   )r0   rÉ  r8   r8   r9   Útest_make_poly_1Ð  s    z)TestBPolyFromDerivatives.test_make_poly_1c                 C   sv   t  ddddgdg¡}t|dddgƒ t  ddddgdg¡}t|dddgƒ t  dddgddg¡}t|dddgƒ d S )	Nr   r[   r)   r%   rJ   r*   r*  g      à¿r  ©r0   rÉ  rP  Úc3r8   r8   r9   Útest_make_poly_2Ô  s    z)TestBPolyFromDerivatives.test_make_poly_2c                 C   s‚   t  dddddgdg¡}t|dddd	gƒ t  dddgdddg¡}t|dd
dd	gƒ t  ddddgddg¡}t|dddd	gƒ d S )Nr   r[   r%   rJ   rK   r)   g«ªªªªªú?g«ªªªªª@ró   gUUUUUU	@g«ªªªªª
@r•   r  r  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ƒ | ¡ }qjd S )Nr]  r   rL   r[   rö   ro   r)   )	rD   rE   rF   rØ   r   r  rç   r   r`  )r0   ZyaZybrÙ   rL  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¬   rL   r%   rJ   rK   r¢   )rD   rE   rF   r   Z_raise_degreer   r   )	r0   r2   r…  rô  rÙ   rk  rÉ  rt  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[   ©rO   rP   r   rv  r„   r8   r8   r9   Ú
test_xi_yi  s    z#TestBPolyFromDerivatives.test_xi_yic                 C   s.   dddg}dgdgdgg}t ttj||ƒ d S r  r  )r0   r  rÚ   r8   r8   r9   Útest_coords_order  s    
z*TestBPolyFromDerivatives.test_coords_orderc                 C   sr   ddddg}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ƒ qNd S )Nr   r[   r%   rJ   )rK   rJ   )ro   r  r)   rá  gffffffþ?r*   rU   ro   )r   rv  r   rÙ   ræ   r`  r   )r0   r  rÚ   rL  Z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>  s     z<TestBPolyFromDerivatives._make_random_mk.<locals>.<listcomp>r[   c                    s   g | ]}t j ˆ ¡‘qS r8   )rD   rE   r  ©r…  r8   r9   r    s     )rD   rE   rF   r  rç   ©r0   rb  r…  r  rÚ   r8   r  r9   Ú_make_random_mk  s    z(TestBPolyFromDerivatives._make_random_mkc                    s^   d\}}|   ||¡\}}t ||¡}t|d ƒD ](‰ t||ƒ‡ fdd„|D ƒƒ | ¡ }q0d S )N©rL   rÅ   r%   c                    s   g | ]}|ˆ  ‘qS r8   r8   )rã   Úyy©rJ  r8   r9   r  $  s     z;TestBPolyFromDerivatives.test_random_12.<locals>.<listcomp>)r  r   rv  rç   r   r`  ©r0   rb  r…  r  rÚ   rL  r8   r!  r9   Útest_random_12  s    z'TestBPolyFromDerivatives.test_random_12c                 C   s6   d\}}|   ||¡\}}tttjft||dd�Ž d S )Nr  r   ©r  rÚ   Úorders)r  rO   rP   r   rv  r¨   r  r8   r8   r9   Útest_order_zero'  s
    
ÿz(TestBPolyFromDerivatives.test_order_zeroc                 C   sR   d\}}|   ||¡\}}tj||d| d d� tttjft||d| d�Ž d S )Nr  r%   r[   ©r%  r$  )r  r   rv  rO   rP   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 ]6}t||dd… d ƒ||dd… d ƒƒ | ¡ }q<tt ||dd… d ƒ||dd… d ƒ¡ ƒ d}tj|||d�}t|d ƒD ]6}t||dd… d ƒ||dd… d ƒƒ | ¡ }qÆtt ||dd… d ƒ||dd… d ƒ¡ ƒ d S )	Nr  rL   r'  r%   r[   rM   rŒ  rö   )	r  r   rv  rç   r   r`  r   rD   Úallclose)r0   rb  r…  r  rÚ   rJ  rL  rÓ  r8   r8   r9   Útest_orders_global5  s    *
2*
z+TestBPolyFromDerivatives.test_orders_globalc           
      C   s¶   d\}}|   ||¡\}}dd„ t|ƒD ƒ}t|dd… ƒD ]v\}}tj|||d�}t|| d d ƒD ]&}	t||d ƒ||d ƒƒ | ¡ }qftt 	||d ƒ||d ƒ¡ ƒ q:d S )	N)r\   rÅ   c                 S   s   g | ]}|d  ‘qS )r[   r8   )rã   Úor8   r8   r9   r  Q  s     z>TestBPolyFromDerivatives.test_orders_local.<locals>.<listcomp>r[   rM   r'  r%   rŒ  )
r  rç   rù   r   rv  r   r`  r   rD   r)  )
r0   rb  r…  r  rÚ   r%  rÒ  r2   rL  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)r\   rL   r[   rö   r\   r¬   r%   )rD   rT  rE   r   rv  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   Zint32r   rv  r   Zint64)r0   r%  r!  r8   r8   r9   Útest_gh_5430`  s    

z%TestBPolyFromDerivatives.test_gh_5430N)ri   rj   rk   r  r  r  r  r  r  r  r  r  r#  r&  r(  r*  r,  r-  r.  r8   r8   r8   r9   r  Ï  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 )Nr>   rK   rL   r   r[   rö   rà   )	rD   rE   rF   rI  r   r   r¦  r/   r   )r0   rÙ   r2   r  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 ]B}	|t j||f |	d�}t|||f|||	d�}t||t|	ƒd� qþd S )Nr>   rK   rL   rö   r\   r   r[   r¬   r%   rà   r­   rS  é*   )N©r   r   ©r   r[   )r[   r   )r%   rJ   )r¡   r%   rñ  r÷   )rD   rE   rF   rI  r   r>  r  r®   Úfillrb   r   Zevaluate_ndrv   rN   ZintcZc_r/   Ú_ppoly2d_evalr   r   rÐ  )
r0   rÙ   r2   r1   r  rÚ   r0  r1  r!  r^  r8   r8   r9   Útest_simple_2d�  s0    ú
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 ]B}	||||f|	d�}
t||||f||||	d�}t|
|t|	ƒd� qŒd S )Nr>   rK   rL   rö   r\   r¬   r¡   r   r[   r%   rq   rJ   é(   )N©r   r   r   ©r   r[   r   ©r[   r   r   )r%   rJ   r   )rö   r   r%   rñ  r÷   )	rD   rE   rF   rI  r   r   Ú_ppoly3d_evalr   rÐ  )r0   rÙ   r2   r1   r3   r  rÚ   Úzir!  r^  r0  r1  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>   rK   rL   rö   r\   r¬   r¡   rq   r¢   r   r[   r%   rJ   rÅ   rS  )rD   rE   rF   rI  r   r   Ú_ppoly4d_evalr   )r0   rÙ   r2   r1   r3   r7   r  rÚ   r>  Zuir!  r0  r1  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>   rK   rL   r   r[   rö   rñ  r%   )rD   rE   rF   rI  r   r   r`  r   r   rÙ   ra  )r0   rÙ   r2   r!  r   rV  Ú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dd	dgd�}| d	¡}t	|j
|j
 d
dddd	d¡ƒ t| d
ddd	dd¡|ƒ}|jdddgd�}| d¡}t	|j
|j
 d
ddddd	¡ƒ d S )Nr>   rK   rL   rö   r\   r¬   r¡   r   r[   r%   rq   rJ   rñ  )rD   rE   rF   rI  r   r   r   Ú	transposer`  r   rÙ   ra  )	r0   rÙ   r2   r1   r3   r!  rV  r   rB  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[   rJ   rK   rL   r   r[   rK   rL   r%   rö   rJ   )r[   r   rK   )r   r%   r   rS  )	rD   r’   r   r   ra  rE   rI  r   r   )
r0   rÙ   r2   r1   r3   r!  r¡  r  rÚ   r>  r8   r8   r9   Útest_deriv_3d_simpleù  s    


"ÿz TestNdPPoly.test_deriv_3d_simplec           	         st  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 ]N}ˆ  |¡}t‡ fdd„|tddd�gd	 d�\}}t||ddt|ƒd� �q d S )Nr>   rK   rL   r;   rÂ  r   r[   rÈ   r%   rJ   rM   r5  )r   r(   )ry  r{  )r¥  r	  c                    s   ˆ | |fƒS râ   r8   )r2   r1   ©r!  r8   r9   Ú<lambda>(	  ó    z/TestNdPPoly.test_integrate_2d.<locals>.<lambda>gñhãˆµøä>)ZepsrelZepsabs)rª   )r¥   r±   r¶   )rD   rE   rF   rI  r   rD  rv   ræ   rG   r   Zfix_continuityr   r�  r"   r¨   r   rÐ  )	r0   rÙ   r2   r1   ZcxÚrangesr¼  Zig2Zerr2r8   rG  r9   Útest_integrate_2d	  s6    ý
ÿ

ÿ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>   rK   rL   rö   r;   rÂ  rÈ   r   r[   r%   rÉ   rJ   rà   )r	  r{  r‘   r<  r;  )r   r   r[   )	rD   rE   rF   rI  r   r   Zintegrate_1dra  r   )r0   rÙ   r2   r1   r3   r!  r7   r6   rX   rY   ZpxZpaxÚpyZpayZpzZpazr8   r8   r9   Útest_integrate_1d-	  s$    
*
*
zTestNdPPoly.test_integrate_1dN)ri   rj   rk   r2  r8  r?  rA  rC  rE  rF  rK  rM  r8   r8   r8   r9   r/  r  s   !r/  c                    sÊ   t  t|ƒˆ jd f¡}t|ƒD ]¤\}}|dk s8|dkrLt j||dd…f< q t  ||¡d ‰||ˆ  ‰t|ˆ |  koˆ|ˆ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   s0   | ](}ˆ |ˆf ˆˆ j d  | d   V  qdS )r   r[   N)ræ   ©rã   r…  ©rÙ   rô  rÓ  r8   r9   rä   R	  s   ÿz _ppoly_eval_1.<locals>.<genexpr>)
rD   rV   r  ræ   rù   rb   Úsearchsortedr   Úsumrç   )rÙ   r2   Zxpsr  rÒ  r[  r·  r8   rO  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   rM   r[   )ÚNc              	      s4   g | ],}t  ˆ |d d …f ˆd d …ˆ| f ¡‘qS râ   )rD   rŽ  rN  ©ÚVZindxsrL  r8   r9   r  i	  s     z!_ppoly_eval_2.<locals>.<listcomp>)ræ   rD   r/   Z
empty_likeÚcompressrP  Zclipr  ZtakeZvanderrN   rç   )r   Zbreaksr»   r6  rX   rY   ÚKZ	saveshaperc  Úmaskrú  r�  Úvaluesr8   rS  r9   r§  X	  s$    





$r§  c                 C   s@   |dk rt dƒ‚n*||krdS t|| d |ƒ| ||   S dS )z
    d^n (x**y) / dx^n
    r   zinvalid derivative orderr[   N)rP   r   )r2   r1   rû   r8   r8   r9   Ú_dpowo	  s
    
rY  c              
   C   st  |dkrd}t jt|ƒf| jd�}| jdd… \}}tt||ƒƒD �]*\}\}	}
|d d |	  krt|d d kržn n&|d d |
  krœ|d d ksªn t j||< qBt  |d |	¡d }t  |d |
¡d }|	|d |  }|
|d |  }d}t	| jd ƒD ]`}t	| jd ƒD ]J}|| || d || d ||f t
|||d ƒ t
|||d ƒ 7 }�q�q|||< qB|S )z@
    Straightforward evaluation of 2-D piecewise polynomial
    Nr4  r­   r%   r   rM   r[   ©rD   r>  r  r®   ræ   rù   Úziprb   rP  rç   rY  )rÙ   r"  r»   Úynewr^  r  ÚnxÚnyÚjoutr2   r1   Új1Új2Ús1Ús2rÕ  Úk1Úk2r8   r8   r9   r7  {	  s6    (
 ÿ
ÿ
 ÿþ
r7  c                 C   sø  |dkrd}t jt|ƒf| jd�}| jdd… \}}}	tt|||ƒƒD �]ª\}
\}}}|d d |  krz|d d krÌn nN|d d |  kr¢|d d krÌn n&|d d |  krÊ|d d ksØn t j||
< qFt  |d |¡d }t  |d |¡d }t  |d |¡d }||d |  }||d |  }||d |  }d}t	| jd ƒD ]’}t	| jd ƒD ]|}t	| jd ƒD ]f}|| || d || d |	| d |||f t
|||d ƒ t
|||d ƒ t
|||d ƒ 7 }�qz�qh�qV|||
< qF|S )	z@
    Straightforward evaluation of 3-D piecewise polynomial
    Nr:  r­   rJ   r   rM   r[   r%   rZ  )rÙ   r"  r»   r\  Úznewr^  r  r]  r^  Znzr_  r2   r1   r3   r`  ra  Új3rb  rc  Ús3rÕ  rd  re  Úk3r8   r8   r9   r=  Ÿ	  sJ     (
 ÿ
ÿ

 þ
þ
,ÿþý
r=  c                 C   s~  |dkrd}t jt|ƒf| jd�}| jdd… \}}	}
}tt||||ƒƒD �],\}\}}}}|d d |  kr€|d d krün nx|d d |  kr¨|d d krün nP|d d |  krÐ|d d krün n(|d	 d |  krú|d	 d k�sn t j||< qJt  |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	| jd ƒD ]˜}t	| jd	 ƒD ]‚}|| || d |	| d |
| d || d ||||f t
|||d ƒ t
|||d ƒ t
|||d ƒ t
|||d	 ƒ 7 }�qà�qÎ�q¼�qª|||< qJ|S )
z@
    Straightforward evaluation of 4-D piecewise polynomial
    N)r   r   r   r   r­   rK   r   rM   r[   r%   rJ   rZ  )rÙ   r"  r»   r\  rf  Zunewr^  r  rf   rg   ZmzÚmur_  r2   r1   r3   r7   r`  ra  rg  Zj4rb  rc  rh  Zs4rÕ  rd  re  ri  Zk4r8   r8   r9   r@  Ç	  s^    $(
 ÿ
ÿ

 þ
þ

 ý
ý

8ÿþýü
r@  )N)N)N)>Znumpy.testingr   r   r   r   r   r   r   r  r	   rO   Únumpyr
   r   r   r   r   r   rD   Zscipy.interpolater   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#   r$   rl   r  r%  rE  re  rx  rä  rð  r  r  r/  r¦  rb   r§  rY  r7  r=  r@  r8   r8   r8   r9   Ú<module>   sT   $ <_      
J /   h  1 $ W
$
(