o
    Ö­jñ} ã                   @   sÞ  d dl 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 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 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' 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,ej- .deeg¡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$ƒZ6G d%d&„ d&ƒZ7d'd(„ Z8ej9fd)d*„Z:d+d,„ Z;d3d-d.„Z<d3d/d0„Z=d3d1d2„Z>dS )4é    )Úxp_assert_equalÚxp_assert_closeÚassert_almost_equalÚassert_array_almost_equal)ÚraisesN)ÚmgridÚpiÚsinÚpoly1d)Úinterp1dÚinterp2dÚlagrangeÚPPolyÚBPolyÚsplrepÚsplevÚ
splantiderÚsplintÚsprootÚAkima1DInterpolatorÚNdPPolyÚBSplineÚPchipInterpolator)ÚpochÚgamma)Ú_ppoly)Úassert_deallocatedÚIS_PYPY)Ú_run_concurrent_barrier)Únquad)Úbinomc                   @   ó   e Zd Zdd„ ZdS )ÚTestInterp2Dc                 C   sf   t ddd…dtd…f \}}t|d|  ƒ}ttƒ� t|||ƒ W d   ƒ d S 1 s,w   Y  d S )Nr   é   y              4@y              5@ç      à?)r   r   r	   Úassert_raisesÚNotImplementedErrorr   )ÚselfÚyÚxÚz© r+   úe/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/interpolate/tests/test_interpolate.pyÚtest_interp2d   s
   
"ÿzTestInterp2D.test_interp2dN)Ú__name__Ú
__module__Ú__qualname__r-   r+   r+   r+   r,   r"      s    r"   c                   @   sB  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdId d!„ZdId"d#„Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ ZdId,d-„ZdId.d/„Zd0d1„ Zejdfd2d3„Zd4d5„ Zej j!e"d6d7�d8d9„ ƒZ#d:d;„ Z$d<d=„ Z%d>d?„ Z&d@dA„ Z'dBdC„ Z(ej  )dDdE¡dFdG„ ƒZ*dHS )JÚTestInterp1Dc                 C   sH  t  d¡| _t  d¡| _t  d¡| _| j d¡| _t  d¡| _t  d¡| _t  	dg¡| _
t  	dg¡| _t  d¡ d¡| _t  d¡ d¡| _t  d¡ d	¡| _t  d¡ d¡| _t  d
¡ d¡| _t  d
¡ d¡| _t  d¡ d¡| _d| jd d …df< d| jd d …df< t  d¡ d¡| _d| jdd d …f< d| jdd d …f< d| _d S )Nç      @ç      $@)r#   é   ç       @ç        g      4@©r#   é
   )r8   r#   )r#   r#   r4   g      >@)r#   é   r4   )r9   r#   r4   é   r   éâÿÿÿéÿÿÿÿç      YÀ)ÚnpÚarangeÚx5Úx10Úy10ÚreshapeÚx25Úx2Úy2ÚarrayÚx1Úy1Úy210Úy102Úy225Úy25Úy235Úy325Úy210_edge_updatedÚy102_edge_updatedÚ
fill_value©r'   r+   r+   r,   Úsetup_method$   s*   
zTestInterp1D.setup_methodc              
   C   s  dD ]}t | j| j|d� t | j| j|dd� qt | j| jddd� t | j| jdt dg¡d� t | j| jddd� t | j| jddd� t | j| jdd	d� t | j| jd
d� t | j| jdd� t | j| jdd� t | j| jdd� t | j| jddd	d� t | j| jdd
t d¡d� t | j| jdd
t d¡t d¡fd� t | j| jdd
t d¡dfd� tt	t | j
| jƒ tt	t | jt d
¡ƒ tt	t | j| jƒ tt	t | j| jƒ tt	t | j| jƒ t | j| jƒ t | j| jd
d� tt	t | j| jƒ tt	t | j| jƒ tt	t | j| jddd� tt	t | j| jdg d¢d� tt	t | j| jdt d¡d� tt	t | j| jddggd� tt	t | j| jdddgd� tt	t | j| jdt g ¡d� tt	t | j| jddd� tt	t | j| jdd
ddgd� tt	t | j| jdd
dddgfd� d S )N)	Únearestú
nearest-upÚzeroÚlinearÚslinearÚ	quadraticÚcubicÚpreviousÚnext©ÚkindÚextrapolate©r_   rR   rX   )r<   é   r<   )r<   )r<   r<   r   rb   r#   r9   ©r_   ÚaxisrR   r8   ©rd   )r<   r<   r<   r+   r6   )r   rA   rB   r>   rG   rJ   rE   Úonesr%   Ú
ValueErrorrD   rF   rK   rH   rI   ©r'   r_   r+   r+   r,   Útest_validationM   sˆ   
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
ÿzTestInterp1D.test_validationc                 C   sB  t | j| jƒjs
J ‚t | j| jdd�jrJ ‚t | j| jƒjs J ‚t | j| jdd�jr,J ‚t t | j| jƒj¡s9J ‚t | j| jdd�jdksGJ ‚t | j| jdd�jdksUJ ‚t | j| jƒjdksaJ ‚t | j| j	ƒjdksmJ ‚t | j| j
dd	�jdks{J ‚tt | j| jƒj| jƒ tt | j| jƒj| jƒ tt | j| j	ƒj| j	ƒ d S )
NF)Úcopy)Úbounds_errorç      @©rR   )ç      ð?r5   r   rb   re   )r   rA   rB   rj   rk   r>   ÚisnanrR   rd   rJ   rK   r   r)   r(   rS   r+   r+   r,   Ú	test_init‘   s   ÿzTestInterp1D.test_initc                 C   s.  t | j| jƒ}t | jd d d… | jd d d… ƒ}t|| jƒ| jƒ t|dƒt d¡ƒ 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 )Nr<   ç333333ó?©g333333@gffffff@ç      @F)Úassume_sortedT)	r   rA   rB   r   r>   rG   r%   rg   rJ   )r'   Úinterp10Úinterp10_unsortedÚinterp10_assume_kwÚinterp10_assume_kw2Úinterp10_y_2dÚinterp10_y_2d_unsortedr+   r+   r,   Útest_assume_sorted¤   s(   "
ÿÿÿ*
ÿzTestInterp1D.test_assume_sortedc                 C   ó   dD ]}|   |¡ qd S )N)rX   rY   )Ú_check_linearrh   r+   r+   r,   Útest_linear¾   s   ÿzTestInterp1D.test_linearc                 C   s´   t | j| j|d�}t|| jƒ| jƒ t|dƒt d¡ƒ t|g d¢ƒt g d¢¡ƒ t | j| j|dd�}t|g d¢ƒt g d¢¡dd� t|dd	d
�}t	t
t | j| jfi |¤Ž d S )Nr^   rq   rr   r`   ra   ©ç      ð¿r   é	   é   ç›+¡†›„=©ÚrtolT©r_   rR   rk   )r   rA   rB   r   r>   rG   r   ÚasarrayÚdictr%   rg   )r'   r_   ru   ÚextrapolatorÚoptsr+   r+   r,   r}   Â   s"   ÿÿÿþzTestInterp1D._check_linearc                 C   sŽ   t jt jt jt jfD ]"}t jd|d�}|}t||dd�|ƒ}|j|ks%J ‚t||dd� q
g d¢}t j	dd	g}t||ƒ|ƒ}t||dd� d S )
Né   ©ÚdtyperX   r^   çVçž¯Ò<©Úatol©r   rb   r#   r   rb   )
r>   Úfloat16Úfloat32Úfloat64Ú
longdoubler?   r   r�   r   Únan)r'   Údtypr)   r(   Ú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 ]D}t jdd|d�}|D ]7}t  | d ¡ |¡}|D ]'}| |¡}	|D ]}
t	|||
dd�}t
||	ƒ|dd|› d	|› d
|› �d� q:q1q"qd S )N)rY   rW   rZ   r[   r   r8   rŒ   rl   F©r_   rk   çH¯¼šò×z>z, ú )r�   Úcheck_dtypeÚerr_msg)r>   r’   r“   r”   Ú	complex64Ú
complex128r?   ÚexpÚastyper   r   )r'   Údt_rÚdt_rcÚspline_kindsÚdtxr)   Údtyr(   ÚdtnÚxnewr_   Úfr+   r+   r,   Útest_slinear_dtypesê   s&   
þþþþþz TestInterp1D.test_slinear_dtypesc                 C   sl   t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|g d¢ƒt g d¢¡ƒ d S )Nr[   r^   rq   ç      ø?rr   ©r   rA   rB   r   r>   rG   ©r'   ru   r+   r+   r,   Ú
test_cubicü   ó   ÿzTestInterp1D.test_cubicc                 C   sÂ   t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|g d¢ƒt g d¢¡ƒ t | j| jddd	�}t|g d
¢ƒg d¢dd� tdddd�}tt	t | j| jfi |¤Ž d S )NrU   r^   rq   rn   r¬   rr   ©r5   rs   rs   r`   ra   r   ©r6   r   r�   r�   rƒ   r„   Tr†   ©
r   rA   rB   r   r>   rG   r   rˆ   r%   rg   ©r'   ru   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 )NrV   r^   rq   rn   r¬   r5   rr   r±   r`   ra   r   r²   rƒ   r„   Tr†   r³   r´   r+   r+   r,   Útest_nearest_up  r¶   zTestInterp1D.test_nearest_upc              	   C   sŠ  t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|g d¢ƒt g d¢¡ƒ t | j| jddd	�}t|g d
¢ƒtjdddgdd� t | j| jddd	�}t|g d¢ƒtjtjddddgƒ t | j| jddd	�}t|g d¢ƒtjtjddddgtjtjddddggƒ t | j| j	dddd�}t|g d¢ƒtjtjgddgddggƒ t
dddd�}ttt | j| jfi |¤Ž t g d¢g d¢dddd�}t|g d¢ƒtjtjddd d d gƒ t g d!¢g d"¢ddd#d�}t|g d¢ƒtjtjddd d d gƒ t | j| jddd	�}t|g d¢ƒtjtjddd$d$gtjtjddd$d$ggƒ t | j| jdddd�}t|g d¢ƒtjtjgddgd$d$ggƒ d S )%Nr\   r^   rq   rn   r¬   rr   ©r5   r2   rs   r`   ra   r   r   r�   rƒ   r„   ©r<   éþÿÿÿr4   r‹   é   é   r4   r‹   é   é   é   rc   ©rº   r4   r»   r8   r‚   Tr†   r‘   ©r   rb   r<   ©r_   rR   rt   ©rº   r<   r   rb   r#   r9   r4   rb   r<   ©r#   r   rb   ©r<   r   rb   Fr;   ©r   rA   rB   r   r>   rG   r   r–   rJ   rK   rˆ   r%   rg   rP   rQ   ©r'   ru   r‰   Úinterpolator1DÚinterpolator2DÚinterpolator2DAxis0rŠ   r+   r+   r,   Útest_previous/  s˜   ÿÿÿÿÿÿÿÿÿ
þÿþýÿýÿ
þÿÿ
þ
þÿzTestInterp1D.test_previousc              	   C   sŠ  t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|g d¢ƒt g d¢¡ƒ t | j| jddd	�}t|g d
¢ƒdddtjgdd� t | j| jddd	�}t|g d¢ƒddddtjtjgƒ t | j| jddd	�}t|g d¢ƒddddtjtjgddddtjtjggƒ t | j| j	dddd�}t|g d¢ƒddgddgtjtjggƒ t
dddd�}ttt | j| jfi |¤Ž t g d¢g d¢dddd�}t|g d¢ƒdddddtjtjgƒ t g d ¢g d!¢ddd"d�}t|g d¢ƒdddddtjtjgƒ t | j| jddd	�}t|g d¢ƒd#d#ddtjtjgd#d#ddtjtjggƒ t | j| jdddd�}t|g d¢ƒd#d#gddgtjtjggƒ d S )$Nr]   r^   rq   r5   r¬   rr   )rl   rs   rs   r`   ra   r   r   r�   rƒ   r„   r¹   r4   r‹   r8   r½   r¾   rc   rÀ   rb   r‚   Tr†   r‘   rÁ   rÂ   rÃ   r<   rÄ   rÅ   Fr:   rÆ   rÇ   r+   r+   r,   Ú	test_nextt  s˜   ÿÿÿÿÿÿÿÿÿ
þÿþýÿýÿ
þÿÿ
þ
þÿzTestInterp1D.test_nextc                 C   sl   t | j| jdd�}t|| jƒ| jƒ t|dƒt d¡ƒ t|dƒt d¡ƒ t|g d¢ƒt g d¢¡ƒ d S )NrW   r^   rq   rn   r¬   rr   r¸   r­   r®   r+   r+   r,   Ú	test_zero¹  r°   zTestInterp1D.test_zeroc              
   C   sT   t t||ƒ z||ƒ W d S  ty) } z|› t|ƒv sJ ‚W Y d }~d S d }~ww ©N)r%   rg   Ústr)r'   ÚinterpolantÚ
test_arrayÚ
fail_valueÚerrr+   r+   r,   Úbounds_check_helperÂ  s    €ÿz TestInterp1D.bounds_check_helperrX   c                 C   s   t | j| j| jd|d�}t|dƒt | j¡ƒ t|dƒt | j¡ƒ t|dgdgdgdgggƒt | j¡dd� t| t g d¢¡¡t g d	¢g d
¢g¡ƒ t | j| jd|d�}|  |dd¡ |  |dd¡ |  |g d¢d¡ |  |g d¢d¡ |g d¢ƒ d S )NF)rR   rk   r_   gffffff&@g333333Àg333333)@gÍÌÌÌÌL3@)Úcheck_shape)r€   r6   r2   ç      "@ç      &@)TFFFF)FFFFTT)rk   r_   r€   r×   )r6   r€   r6   )r6   rn   ç      5@rØ   )r6   r2   rÖ   )	r   rA   rB   rR   r   r>   rG   Ú_check_boundsrÔ   )r'   r_   Úextrap10Úraises_bounds_errorr+   r+   r,   Ú_bounds_checkË  s.   ÿÿÿ
ÿþÿzTestInterp1D._bounds_checkc                 C   st   t  d¡ t¡}t  d¡ t¡}t|||t jdd�}||d ƒ}t  |d ¡s)J ‚t|t jt j|d d… f ƒ d S )Nr8   Fr†   rb   r   r<   )	r>   r?   r¢   Úintr   r–   ro   r   Úr_)r'   r_   r)   r(   ÚcÚyir+   r+   r,   Ú_bounds_check_int_nan_fillã  s   "z'TestInterp1D._bounds_check_int_nan_fillc                 C   ó"   dD ]}|   |¡ |  |¡ qd S )N)rX   r[   rU   r\   r]   rY   rW   rZ   )rÜ   rá   rh   r+   r+   r,   Útest_boundsë  ó   
ýzTestInterp1D.test_boundsc                 C   s  t | j| j|ddd�}t|dƒt d¡ƒ t|dƒt d¡ƒ t|ddgƒdd	gƒ | j| j| j| j	fD ]u}t | j
||d
d	dd�}t|dƒt d¡ƒ t|dƒt d¡ƒ t|ddgƒt d¡ƒ t | j
||d
ddd�}t|dƒt d¡ƒ t|dƒt 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ƒ|ƒ q4g d¢}| j| jfD ]}ttt | j
||d
|dd� q´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 ƒ 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�r6|g|jd  }t|dƒ|ƒ t|dƒ|ƒ d	d	gddgg}|jdk�rZ|g|jd  }t|ddgƒ|ƒ �qt g d¢¡d	f}| j| jfD ]}ttt | j
||d
|dd� �qtt | j
| j|d
|dd�}t|dƒt 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 ]P}t | j
||d
|dd�}t|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ƒ|ƒ �qÛg d¢g d¢f}| j| jfD ]}ttt | j
||d
|dd� �q:tdƒD ]J}|dk�r_t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 ƒ �qOd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ƒ|ƒ �q¸d	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�rIt |¡}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� �q tdƒD ]S}|dk�rÊt |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ƒ �qµd S )N)éœÿÿÿéd   Fr†   r8   g      Y@éöÿÿÿr=   rå   ræ   r<   )r_   rd   rR   rk   r9   rb   r   )ræ   éÈ   é,  r#   rè   ré   )rå   é8ÿÿÿéÔþÿÿrê   rë   c                 s   s   � | ]}t  |¡V  qd S rÎ   )r>   rG   )Ú.0rª   r+   r+   r,   Ú	<genexpr>R  s   € z1TestInterp1D._check_fill_value.<locals>.<genexpr>iè  iÐ  iüÿÿi0øÿÿ)r   rA   rB   r   r>   r‡   rN   rO   rL   rM   r@   ÚndimÚshaper%   rg   rG   ÚrangeÚtuple)r'   r_   Úinterpr(   ÚresultrR   Úiir+   r+   r,   Ú_check_fill_valueñ  sX  ÿÿÿ
"ÿÿþþÿÿ
ÿÿþþÿÿ
ÿ
ÿþ
þÿÿ
ÿ

ÿÿÿ
þÿ
ÿ
ÿÿÿÿ
þøzTestInterp1D._check_fill_valuec                 C   r|   ©N)rX   rU   r[   rY   rZ   rW   r\   r]   )rõ   rh   r+   r+   r,   Útest_fill_value’  s   þzTestInterp1D.test_fill_valuec                 C   s8   t | j| jdd�}|jdksJ ‚d|_|jdksJ ‚d S )Ng     À^@rm   g     t@)r   rA   rB   rR   )r'   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|dƒtjƒs,J ‚|dƒjdks5J ‚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^   rl   r2   r5   ç      @rq   r+   rn   r×   ç      (@r   ©rd   r_   rs   g      *@g      .@g      1@r3   ç      @g      ,@)r   rA   rB   r   r>   rG   Ú
isinstanceÚndarrayrï   rJ   rK   )r'   r_   ru   Ú	interp210Ú	interp102Úx_newr+   r+   r,   Ú_nd_check_interpŸ  s6   ÿÿÿÿÿÿÿzTestInterp1D._nd_check_interpc           
      C   sª   g d¢}t  t  |¡¡j|Ž }t|ƒD ]?\}}t  |¡}t||||d�}t||ƒ||d� t  d¡ d¡d }t|ƒ}	g d¢|	||d …< ||ƒjt	|	ƒksRJ |ƒ‚qd S )N)é   r4   é   é   rû   ©rž   r  )r#   r9   rb   rú   rb   )
r>   r?   ÚprodrC   Ú	enumerater   r   Úlistrï   rñ   )
r'   r_   Úar(   ÚnÚsr)   r*   rE   Úbr+   r+   r,   Ú_nd_check_shape¿  s   
øzTestInterp1D._nd_check_shapec                 C   râ   )N)rX   r[   rY   rZ   rU   rW   r\   r]   )r  r  rh   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)
rb   ç      @r9   gÍÌÌÌÌÌ@r  gš™™™™™@gš™™™™™@g       @g      #@r8   ù      ð?       @r^   r<   rb   r8   é   )r>   rG   r¢   r   r   ÚlinspaceÚrealÚimag)	r'   r�   r_   r)   r(   rß   ÚxiÚcrÚcir+   r+   r,   Ú_check_complexÓ  s   
zTestInterp1D._check_complexc                 C   s*   dD ]}|   tj|¡ |   tj|¡ qd S rö   )r  r>   rŸ   r    rh   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   rb   çš™™™™™¹?çš™™™™™É?)r>   r  r   r   )r'   r)   r(   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)rU   r\   r]   )r   é2   é   rŒ   r^   )r>   rG   Úint8r   r   )r'   r_   r)   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  |¡ ¡ s+J ‚qd S )Nr8   r  )rW   rY   r^   gš™™™™™@rù   )	r>   r?   r¢   Úfloatrj   r–   r   ÚisfiniteÚall)r'   r)   r(   r_   Ú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  |	¡ 	¡ sMJ ‚|j
|	j
ksUJ ‚q4qd S )Nr‹   r9   )rZ   r[   r^   r  rb   r4   )r>   r?   r¢   r#  rj   r–   r   r‡   ro   r%  rï   )
r'   r)   r(   Úynr_   r&  Úirnr©   ÚoutÚ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 )Nr8   r[   r^   )r>   rf   r–   r?   r%   rg   r   )r'   r)   r(   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  |¡ ¡ s9J ‚q#qd S )
Nr   r8   rl   r�   r  ©TFF)rX   rU   rW   rY   rZ   r[   r^   )r>   r?   r¡   ÚflagsÚ	writeabler   r$  r%  )r'   r)   r(   r©   Úxnew_writeabler_   rª   r'  r+   r+   r,   Útest_read_only  s   üýzTestInterp1D.test_read_onlyr_   )rX   rU   rV   r\   r]   c                 C   s€   t dgdg|ddd�}t|g d¢ƒt g d¢¡ƒ t dgdg|dd	�}ttd
d�� |dƒ W d   ƒ d S 1 s9w   Y  d S )Nr¬   r  Fr7   )r_   rk   rR   )rb   r¬   r#   )r5   r  r8   Trš   zx_new is above©Úmatchr5   )r   r   r>   r‡   r%   rg   )r'   r_   rª   r+   r+   r,   Útest_single_value,  s   ÿ
"ÿzTestInterp1D.test_single_valueN)rX   )+r.   r/   r0   rT   ri   rp   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  ÚpytestÚmarkÚskipifr   r  r"  r(  r-  r.  r3  Úparametrizer6  r+   r+   r+   r,   r1   "   sN    )D	EE	
	
 "

 
	ÿr1   c                   @   r!   )ÚTestLagrangec                 C   s@   t g d¢ƒ}t t|jƒ¡}||ƒ}t||ƒ}t|j|jƒ d S )N)r4   r#   rb   r  r9   )r
   r>   r?   ÚlenÚcoeffsr   r   )r'   ÚpÚxsÚysÚplr+   r+   r,   Útest_lagrange<  s
   
zTestLagrange.test_lagrangeN)r.   r/   r0   rB  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 )ÚTestAkima1DInterpolatorc                 C   sR   t  dd¡}t  g d¢¡}t||ƒ}t  g d¢¡}t  g d¢¡}t||ƒ|ƒ d S )Nr6   r×   ©r6   r5   rn   rl   r5   rs   ç      @rE  gš™™™™™@çffffff@rl   ©r6   r$   rn   r¬   r  ç      @g      @rF  g      @gÍÌÌÌÌÌ@g333333!@gÍÌÌÌÌÌ#@r3   ©r6   g      ö?r5   r¬   g     @ÿ?g     à@gŒ.ºè¢‹@gß^äë@gn ¹ä@gGNBÐ@grcß–÷·@g¦	£ÎI@rl   ©r>   r?   rG   r   r   ©r'   r)   r(   Úakr  rà   r+   r+   r,   Ú	test_evalE  s   
z!TestAkima1DInterpolator.test_evalc                 C   sV   t  dd¡}t  g d¢¡}t||dd�}t  g d¢¡}t  g d¢¡}t||ƒ|ƒ d S )Nr6   r×   rD  Úmakima©ÚmethodrG  )r6   gFð?ðƒõ?r5   gš™™™™÷?gš™™™™ÿ?g…¶g{¶'@gú>J(j@g?±Ôç§ð@gqÁü@gýÞÀÇð³@gû•Š9~@g­Áøo¢
@rl   rJ  rK  r+   r+   r,   Útest_eval_modR  s   z%TestAkima1DInterpolator.test_eval_modc                 C   sv   t  dd¡}t  g d¢¡}t  |d| f¡}t||ƒ}t  g d¢¡}t  g d¢¡}t  |d| f¡}t||ƒ|ƒ d S )Nr6   r×   rD  r5   rG  rI  )r>   r?   rG   Úcolumn_stackr   r   rK  r+   r+   r,   Útest_eval_2dc  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 )Nr6   r×   rD  )r‚   r#   r#   r   r5   rb   rl   rü   rG  )é   r#   r#   rI  )r>   r?   rG   Úemptyr   r   )r'   r)   Úy_r(   rL  r  rà   Úyi_r+   r+   r,   Útest_eval_3dt  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$   r¬   )r>   rG   ÚvstackÚTr   r   )r'   r)   r(   rL  Úx_evalÚy_evalr+   r+   r,   Ú%test_degenerate_case_multidimensional�  s   
z=TestAkima1DInterpolator.test_degenerate_case_multidimensionalc                 C   sh   t  dd¡}t  g d¢¡}t||ƒ}d}tjt|d�� | d d ¡ W d   ƒ d S 1 s-w   Y  d S )Nr6   r×   rD  z9Extending a 1-D Akima interpolator is not yet implementedr4  )r>   r?   rG   r   r7  r   r&   Úextend)r'   r)   r(   rL  r5  r+   r+   r,   Útest_extend–  s   
"ÿz#TestAkima1DInterpolator.test_extendc                 C   s`   t  dd¡}t  g d¢¡}d}tjt|d�� t||dd� W d   ƒ d S 1 s)w   Y  d S )Nr6   r×   rD  z `method`=invalid is unsupported.r4  ÚinvalidrO  )r>   r?   rG   r7  r   r&   r   )r'   r)   r(   r5  r+   r+   r,   Útest_mod_invalid_methodž  s   "ÿz/TestAkima1DInterpolator.test_mod_invalid_methodc                 C   sÜ   t  ddd¡}|d }t  ddd¡}|d }t||dd	�}t||d
d	�}t||d d	�}t||ƒ||ƒdd� t||ƒdd… t  dt j¡ƒ t||ƒdd… t  dt j¡ƒ t||dd	�||ƒdd� t|||ƒdd� d S )Néûÿÿÿr4   r‚   r#   rç   r8   é   T©r`   FrŽ   r�   r   r  éüÿÿÿr<   r9   )r>   r  r   r   r   Úfullr–   )r'   r)   r(   Úx_extÚy_extÚak_trueÚak_falseÚak_noner+   r+   r,   Útest_extrapolate_attr¥  s     z-TestAkima1DInterpolator.test_extrapolate_attrN)r.   r/   r0   rM  rQ  rS  rX  r]  r_  ra  rl  r+   r+   r+   r,   rC  D  s    	rC  rP  c                 C   sn   t  dd¡}t  g d¢¡}|d|  }d}tjt|d�� | ||ƒ W d   ƒ n1 s,w   Y  dd„ }d S )	Nr6   r×   rD  y               @zreal valuesr4  c                 S   sL   t  ddd¡}|d }t  ddd¡}t||dd	�}d
d„ }td|||ƒ d S )Nrb  r4   r‚   r#   rç   r8   rc  Trd  c                 S   ó   ||ƒ d S rÎ   r+   )Ú_rL  rg  r+   r+   r,   Ú	worker_fnÊ  ó   z9test_complex.<locals>.test_concurrency.<locals>.worker_fn)r>   r  r   r   )r'   r)   r(   rg  rL  ro  r+   r+   r,   Útest_concurrencyÃ  s   z&test_complex.<locals>.test_concurrency)r>   r?   rG   r7  r   rg   )rP  r)   r(   Úmsgrq  r+   r+   r,   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 )Ú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 )Nrb   r  r#   r4   r9   r  )r   rb   r$   )r>   rG   r%   rg   r   r   )r'   rß   r)   r+   r+   r,   Útest_sort_checkÒ  s   zTestPPolyCommon.test_sort_checkc                 C   s@   t tƒ� tddgddgƒ W d   ƒ d S 1 sw   Y  d S )Nrb   r#   r   )r%   rg   r   rS   r+   r+   r,   Útest_ctor_cØ  s   
"ÿzTestPPolyCommon.test_ctor_cc                 C   s8  t j d¡ d}t  t jddt j d¡ df ¡}dt j |d t|ƒd dd¡ d }ttfD ]i}||d d …d d…f |d d… ƒ}| 	|d d …dd …f |dd … ¡ ||d d …dd …f |dd … ƒ}| 	|d d …d d…f |d d… ¡ |||ƒ}t
|j|jƒ t
|j|jƒ t
|j|jƒ t
|j|jƒ q0d S )	NéÒ  r9   r   r8   r:   r#   rb   r�   )r>   ÚrandomÚseedÚuniquerÞ   Úrandr<  r   r   r^  r   rß   r)   )r'   Úorderr)   rß   ÚclsÚppÚpp2Úpp3r+   r+   r,   r_  Ý  s   "&"$"$
ôzTestPPolyCommon.test_extendc                 C   sÌ   t j d¡ t  ddd¡}t j dd¡}t  ddd¡}t j dd¡}ttfD ]=}|||ƒ}|||ƒ}|||ƒ}| ||dd … ¡ t jdddd	d
�}	t  ddd¡}
t||	ƒ||	ƒƒ t||
ƒ||
ƒƒ q&d S )Nrv  r   rb   r  r#   r4   r  ré   F)Úendpoint)	r>   rw  rx  r  rz  r   r   r^  r   )r'   r)   rß   rE   Úc2r|  Úpp1r~  Úpp_combÚxi1Úxi2r+   r+   r,   Útest_extend_diff_ordersó  s   


óz'TestPPolyCommon.test_extend_diff_ordersc                 C   s&  t j d¡ d}t  t j ddd¡¡}t j |d |jd d dd¡}ttfD ]i}|||ƒ}||d d …d d…f |d d… ƒ}| 	|d d …dd …f |dd … ¡ ||d d …dd …f |dd … ƒ}| 	|d d …d d…f |d d… ¡ t
|j|jƒ t
|j|jƒ t
|j|jƒ t
|j|jƒ q'd S )Nr   r9   r8   é   rb   r#   r�   )r>   rw  rx  ÚsortÚuniformrz  rï   r   r   r^  r   rß   r)   )r'   r{  r)   rß   r|  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 ]}|||ƒ}||ƒjd
ks4J ‚q$ttfD ]2}||d |ƒ}t  |dƒ¡dksMJ ‚t  |t  d¡ƒ¡dks[J ‚t	t
|t jddgdggtd�ƒ q9d S )Nrv  r‹   r»   r4   r  r  rT  r9   r  )r9   r  r4   r  r  ).r   r   r   r$   r+   r  r  çš™™™™™Ù?rŒ   )r>   rw  rx  rz  rˆ  r   r   rï   rG   r%   rg   Úobject)r'   rß   r)   Úxpr|  r>  r+   r+   r,   Ú
test_shape!  s   
"úzTestPPolyCommon.test_shapec                 C   sf   t j ddddd¡}t  t j d¡¡}t j dd¡}ttfD ]}|||ƒ}d	d
„ }td|||ƒ qd S )Nr‹   r»   r4   r  r  rT  r9   r  c                 S   rm  rÎ   r+   )rn  rò   r�  r+   r+   r,   ro  <  rp  z3TestPPolyCommon.test_concurrency.<locals>.worker_fnr8   )r>   rw  rz  rˆ  r   r   r   )r'   rß   r)   r�  r|  rò   ro  r+   r+   r,   rq  3  s   
úz TestPPolyCommon.test_concurrencyc                 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 )Né90  rT  )r‹   r»   y      ð?333333Ó?r4   r‘   )	r>   rw  rx  rˆ  r  r  r   r   r   )r'   r)   rß   Úc_reÚc_imr�  r|  r>  Úp_reÚp_imÚnur+   r+   r,   Útest_complex_coefB  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 ]p}||||d�}|jj|||d … |d |…  ||d d …  ksYJ ‚||ƒ}	|d |… |j |d| d …  }
|	j|
ksuJ ‚||||d� 	¡ ||||d� 	d¡||||d� 
¡ ||||d� 
d¡fD ]
}|j|jks£J ‚q™q4qdD ]}ttfD ]}tt|fi t|||d�¤Ž q®q¨d S )Nr‘  r9   r  r4   r  r  r‹   )rb   r#   ©r   rb   r#   r9   rb   re   r#   )r<   r  r4   r  )rß   r)   rd   )r>   rw  rx  rz  rï   rˆ  r   r   rß   Ú
derivativeÚantiderivativerd   r%   rg   rˆ   )r'   rß   Úc_sr�  rd   Úmr)   r|  r>  ÚresÚ
targ_shaperŠ  r+   r+   r,   Ú	test_axisN  s4   8"ýüøÿÿzTestPPolyCommon.test_axisN)r.   r/   r0   rt  ru  r_  r†  rŒ  r�  rq  r—  rŸ  r+   r+   r+   r,   rs  Ð  s    rs  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©r.   r/   r0   r+   r+   r+   r,   ÚPl  ó    r£  c                   @   r¡  )zTestPolySubclassing.BNr¢  r+   r+   r+   r,   ÚBo  r¤  r¥  c                 C   sB   t j d¡ t  t j d¡¡}t j d¡}|  ||¡|  ||¡fS )Nrv  r9   )r  r#   )r>   rw  rx  rˆ  r£  r¥  )r'   r)   rß   r+   r+   r,   Ú_make_polynomialsr  s   z%TestPolySubclassing._make_polynomialsc                 C   sN   |   ¡ \}}||fD ]}| ¡ }|j|jksJ ‚q
| ¡ }|j|jks%J ‚d S rÎ   )r¦  r™  Ú	__class__rš  )r'   r}  Úbpr>  ÚpdÚppar+   r+   r,   Útest_derivativex  s   z#TestPolySubclassing.test_derivativec                 C   sh   t j d¡ t  t jdt j d¡df ¡}t j t|ƒ¡}t||dd�}| j 	|¡}|j
| jks2J ‚d S )Nrv  r   r‚   rb   ©r  )r>   rw  rx  rˆ  rÞ   rz  r<  r   r£  Úfrom_spliner§  )r'   r)   r(   Úsplr}  r+   r+   r,   Útest_from_spline�  s   z$TestPolySubclassing.test_from_splinec                 C   sH   |   ¡ \}}| j |¡}|j| jksJ ‚| j |¡}|j| jks"J ‚d S rÎ   )r¦  r£  Úfrom_bernstein_basisr§  r¥  Úfrom_power_basis)r'   r}  r¨  r‚  Úbp1r+   r+   r,   Útest_conversionsŠ  s
   z$TestPolySubclassing.test_conversionsc                 C   s:   g d¢}dgdgdgg}| j  ||¡}|j| j ksJ ‚d S )Nr‘   rb   r#   r9   )r¥  Úfrom_derivativesr§  )r'   r)   r(   r¨  r+   r+   r,   Útest_from_derivatives“  s   z)TestPolySubclassing.test_from_derivativesN)r.   r/   r0   r   r£  r   r¥  r¦  r«  r¯  r³  rµ  r+   r+   r+   r,   r   k  s    			r   c                   @   sì   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9S ):Ú	TestPPolyc                 C   s`   t  ddgddgddgg¡}t  g d¢¡}t||ƒ}t|dƒt  d	¡ƒ t|d
ƒt  d¡ƒ d S )Nrb   r  r#   r4   r9   r  ©r   r$   rb   ç333333Ó?ç…ëQ¸…@çffffffæ?ç¤p=
×£@©r>   rG   r   r   r‡   ©r'   rß   r)   r>  r+   r+   r,   Útest_simple›  s
   
zTestPPoly.test_simplec                 C   s�   t  ddgddgddgg¡}t  g d¢¡}t||dd	�}t|d
ƒt  d¡ƒ t|dƒt  d¡ƒ t|d
dƒt  d¡ƒ t|ddƒt  d¡ƒ d S )Nrb   r  r#   r4   r9   r  r·  Úperiodicrd  gÍÌÌÌÌÌô?r¹  ç333333Ó¿r»  gÍÌÌÌÌÌ@gffffff@r¼  r½  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_||j_t||ƒ}||ƒ}t  |¡ ¡ sAJ ‚q%d S )Nrb   r  r#   r4   r9   r  r·  )r   r  r  r¿  rd  r/  )r>   rG   r   r0  r1  r$  r%  )r'   rß   r)   r©   r1  rª   r'  r+   r+   r,   r3  ¯  s   
ûzTestPPoly.test_read_onlyc              	   C   sæ  dd„ }t j d¡}d}dD ]â}t  | dd|d ¡¡}|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�}| ddd¡}t
||ƒ||ƒdd� t
||dƒ||dƒdd� | ¡ }| ¡ }t
||ƒ||ƒdd� | ¡ }| ¡ }| 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 )Nrb   r<   )r>   r?   rC   r    )Úpowerr  Úkr¥  r+   r+   r,   Úbinom_matrix½  s   
z/TestPPoly.test_descending.<locals>.binom_matrixr   r9   ©r8   r‡  r:   r8   rb   rº   r#   ©Úsizer<   Trd  rç   r‡  ræ   ç‚vIhÂ%<=r„   ©r4   r#   çê-�™—q=)r>   rw  ÚRandomStaterˆ  r‰  Údiffr?   ÚdotrZ  r   r   r™  rš  Ú	integrateÚroots)r'   rÄ  ÚrngrÂ  rœ  r)   ÚcaÚhÚh_powersr¥  ÚcapÚcdpÚcdÚpar©  Úx_testÚpa_dÚpd_dÚpa_iÚpd_ir
  r  Úint_aÚint_dÚroots_dÚroots_ar+   r+   r,   Útest_descending¼  sB   
,*ÿÛzTestPPoly.test_descendingc                 C   sÊ   t j ddddd¡}t  g d¢¡}t||ƒ}|jj|jksJ ‚|jj|jks(J ‚|dƒj|jdd … ks6J ‚|t j dd¡ƒjd|jdd …  ksKJ ‚| ¡ }|jjd	ksWJ ‚| 	¡ }|jjd
kscJ ‚d S )Nr  r#   rb   r9   r·  r¸  r4   ©r4   r  ©r4   r#   rb   r#   r9   )r  r#   rb   r#   r9   )
r>   rw  rz  rG   r   r)   rï   rß   r™  rš  )r'   rß   r)   r>  ÚdpÚipr+   r+   r,   Útest_multi_shapeí  s   
*zTestPPoly.test_multi_shapec                 C   sr   t j d¡ t jddgddgddggtd�}t  g d	¢¡}t ||¡}t|d
ƒt  d¡ƒ t|dƒt  d¡ƒ d S )Nrv  rb   r  r#   r4   r9   r  rŒ   r·  r¸  r¹  rº  r»  )	r>   rw  rx  rG   r#  r   Úconstruct_fastr   r‡   r½  r+   r+   r,   Útest_construct_fastü  s    zTestPPoly.test_construct_fastc                 C   s    t j d¡}| ddd¡}t  t jd| d¡df ¡}t||ƒ}t jd }t|||ƒ}t||ƒ|ƒ t	|d d …d d …df ||ƒ}t||ƒd d …df |ƒ d S )	Nrv  r9   r»   é   r   r‚   rb   )r¸  r$   g…ëQ¸Õ?ç333333ã?)
r>   rw  rË  rz  rˆ  rÞ   r   Ú_ppoly_eval_1r   Ú_ppoly_eval_2)r'   rÐ  rß   r)   r>  r�  Úexpectedr+   r+   r,   Ú#test_vs_alternative_implementations  s   

z-TestPPoly.test_vs_alternative_implementationsc                 C   sÖ   t j d¡}t  t jd| d¡df ¡}| t|ƒ¡}t||dd�}t 	|¡}t  
ddd¡}t||ƒt||ƒƒ t|Ž }t 	|¡}t||ƒ||ƒƒ |\}	}
}dD ]}t|	|
||d�}t 	|¡}|j|jkshJ ‚qQd S )	Nrv  r   r‚   rb   r¬  rè   )NTFrd  )r>   rw  rË  rˆ  rÞ   rz  r<  r   r   r­  r  r   r   r   r`   )r'   rÐ  r)   r(   r®  r}  r  r  ÚpppÚtrß   rÃ  Úextrapr>  r+   r+   r,   r¯    s    



ýzTestPPoly.test_from_splinec                 C   s˜   t j d¡ t  g d¢g¡j}t  g d¢g¡j}t  ddgg¡j}t  ddg¡}t||ƒ}t||ƒ}t||ƒ}t| ¡ j|jƒ t| d¡j|jƒ d S )	Nrv  )r  r9   r#   rb   )r»   r  r#   é   r  r   rb   r#   )	r>   rw  rx  rG   rZ  r   r   r™  rß   )r'   rß   ÚdcÚddcr)   r}  ÚdppÚddppr+   r+   r,   Útest_derivative_simple)  s   


z TestPPoly.test_derivative_simplec                 C   sˆ   t j d¡}t  t jd| d¡df ¡}| t|ƒ¡}t||dd�}t 	|¡}t  
ddd¡}tddƒD ]}t|||ƒt|||ƒƒ q3d S )Nrv  r   r‚   rb   r¬  rè   r9   )r>   rw  rË  rˆ  rÞ   rz  r<  r   r   r­  r  rð   r   r   ©r'   rÐ  r)   r(   r®  r}  r  Údxr+   r+   r,   Útest_derivative_eval7  s   
ÿzTestPPoly.test_derivative_evalc                 C   s–   t j d¡}t  t jd| d¡df ¡}| t|ƒ¡}t||ddd�}t 	|¡}t  
ddd¡}tddƒD ]}t|||ƒ| |¡|ƒd	|f d
� q4d S )Nrv  r   r‚   rb   r4   ©r  rÃ  rè   r8   zdx=%dr  )r>   rw  rË  rˆ  rÞ   rz  r<  r   r   r­  r  rð   r   r™  rø  r+   r+   r,   r«  C  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 )Nrn   r   rb   )r   r   rš  rß   r)   )r'   r>  r+   r+   r,   Útest_antiderivative_of_constantP  s   $(z)TestPPoly.test_antiderivative_of_constantc                 C   s‚   t ddggg d¢ƒ}| ¡ }t|jddgddggƒ t|jg d¢ƒ t| dd¡t d¡ƒ tt |dƒ|dƒ ¡t d¡ƒ d S )	Nrn   r$   r‘   rb   r   )r6   rb   r#   r#   r¬   )	r   rš  r   rß   r)   r   rÎ  r>   r‡   )r'   r>  Úqr+   r+   r,   Ú#test_antiderivative_regression_4355V  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 )
Nrv  )r9   r#   rb   )r   r   ç      û?)rb   rb   rb   r   )r   r   rÿ  ç      Õ?)ç      Ð?gUUUUUUÕ?r$   r   r   )r   r   g      ë?r   g«ªªªª*£?)r   r  rb   r#   )
r>   rw  rx  rG   rZ  r   rš  r   r)   rß   )	r'   rß   ÚicÚiicr)   r}  ÚippÚiippÚiipp2r+   r+   r,   Útest_antiderivative_simple`  s"   
ÿÿ

z$TestPPoly.test_antiderivative_simplec              	   C   sê   t j d¡}t  ddd¡d }| 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 )Nrv  r   rb   r:   r#   r4   rû  r8   rÈ  r<   r›   z
dx=%d k=%d)r…   rž   )r>   rw  rË  r  rz  r<  r   r   r­  rð   rš  r™  r   rß   r)   )r'   rÐ  r)   r(   r®  r}  rù  r  r~  rÃ  Úrr€  r+   r+   r,   Ú!test_antiderivative_vs_derivativex  s$   



(ÿúøz+TestPPoly.test_antiderivative_vs_derivativec           
      C   sž   t j d¡}t  t jd| d¡df ¡}| t|ƒ¡}t||ddd�}t 	|¡}t
ddƒD ]}| |¡}t||ƒ}t  ddd¡}	t||	ƒt|	|ƒd	d
� q-d S )Nrv  r   r‚   rb   r4   rû  r8   rè   r›   r„   )r>   rw  rË  rˆ  rÞ   rz  r<  r   r   r­  rð   rš  r   r  r   r   )
r'   rÐ  r)   r(   r®  r}  rù  r~  Ú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#   rb   r#   r#   )r#   rb   r9   r9   r·  gAíþÿÿß?g_p‰   à?g:Œ0âŽyE>r„   )r>   rG   rZ  r   rš  r   r™  rß   )r'   rß   r)   r>  rå  r‹  r+   r+   r,   Útest_antiderivative_continuity   s   
z(TestPPoly.test_antiderivative_continuityc           
      C   sð   t j d¡}t  t jd| d¡df ¡}| t|ƒ¡}t||ddd�}t 	|¡}d\}}| 
||¡}| ¡ }	t||	|ƒ|	|ƒ dd	� t|t|||ƒdd	� d
\}}|j
||dd�}t||	|ƒ|	|ƒ dd	� t  |j
||dd�¡ ¡ svJ ‚d S )Nrv  r   r‚   rb   r4   rû  )r¸  çÍÌÌÌÌÌì?F©Úcheck_0d)rÀ  r  Trd  )r>   rw  rË  rˆ  rÞ   rz  r<  r   r   r­  rÎ  rš  r   r   ro   r%  )
r'   rÐ  r)   r(   r®  r}  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  |¡ ¡ s4J ‚qd S )
N©rb   r#   r  r6   r€   r5   ç       €rn   r/  rb   r  )r>   rG   r0  r1  r   rÎ  r$  r%  )r'   r)   rß   r1  r£  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�}| ¡ }t  |d	ƒ|d
ƒ ¡}t| d
d	¡|ƒ t| dd¡|ƒ t| dd¡t  d| ¡ƒ t| dd¡t  |dƒ|dƒ ¡ƒ t| dd¡t  |dƒ|d
ƒ |d	ƒ |dƒ ¡ƒ t| dd¡t  |dƒ|d
ƒ |d	ƒ |dƒ ¡ƒ t| dd¡t  |dƒ|d
ƒ |d	ƒ |dƒ d	|  ¡ƒ t| dd¡t  |dƒ|dƒ ¡ƒ t| dd¡t  |dƒ|dƒ ¡ƒ t| dd¡t  |dƒ|dƒ d|  ¡ƒ d S ©Nr  r6   r€   r5   r  rn   r¿  rd  r  rb   rç   iùÿÿÿre  r#   r¬   r  rH  r4   g      /@rc  r   r<   r9   i÷ÿÿÿ)r>   rG   r   rš  r‡   r   rÎ  ©r'   r)   rß   r£  ÚIÚ
period_intr+   r+   r,   Ú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   rb   r  r#   r:   r9   rû  gVçž¯Ò¼g     ð?rŽ   r�   )	r>   r  r	   r   r   r­  rÏ  r   r   )r'   r)   r(   r®  r}  r  r+   r+   r,   Ú
test_rootsë  s   
zTestPPoly.test_rootsc                 C   sš   t  ddgddgddgg¡j}t  g d¢¡}t||ƒ}t| ¡ ddt jdgƒ d}| ¡ }|dd d …f  |7  < t||ƒ}t| |¡ddt jdgƒ d S )	Nr<   r  r   )r   r�  rê  rn   r�  g333333ë?r5   rb   )	r>   rG   rZ  r   r   rÏ  r–   rj   Úsolve)r'   rß   r)   r}  ÚconstÚc1r‚  r+   r+   r,   Útest_roots_idzeroö  s   
ÿ

ÿzTestPPoly.test_roots_idzeroc                 C   sÄ   dgdgg}ddg}t ||ƒ}t| ¡ dtjgƒ t| d¡dtjgƒ t| d¡g ƒ ddgddgg}g d¢}t ||ƒ}t| ¡ dtjdtjgƒ t| d¡dtjdtjgƒ t| d¡g ƒ d S )Nr   rb   r‘   )r   r   rÏ  r>   r–   r  r½  r+   r+   r,   Útest_roots_all_zero	  s   

zTestPPoly.test_roots_all_zeroc                 C   sf   t  g d¢g d¢g¡j}t  g d¢¡}t||ƒ}t| ¡ t  ddg¡ƒ t|jdd�t  dg¡ƒ d S )N)rb   r   r<   )r<   r   r   rÅ   g       Àr6   Frd  )r>   rG   rZ  r   r   rÏ  r‡   ©r'   rß   r)   r}  r+   r+   r,   Útest_roots_repeated  s
   
zTestPPoly.test_roots_repeatedc                 C   sÀ   t  dgdgg¡j}t  g d¢¡}t||ƒ}t| ¡ t  dg¡ƒ t|jdd�t  g ¡ƒ t| d¡t  dg¡ƒ t|jddd�t  g ¡ƒ t| d¡t  g ¡ƒ t|jddd�t  g ¡ƒ d S )Nrb   r<   r·  r$   F)Údiscontinuityr¬   )r>   rG   rZ  r   r   rÏ  r‡   r  r   r+   r+   r,   Útest_roots_discont%  s   
zTestPPoly.test_roots_discontc                 C   sX  t j d¡}d}dD ]•}tddƒD ]�}t  t jdd| d¡ df ¡}d| |d t|ƒd dd	¡ d }t||ƒ}d| ¡ fD ]]}|j	|d
|d�}	tdƒD ]N}
td	ƒD ]G}|	|
|f }|j
dkr›||j
7 }|||d�d d …|
|f }||d|d�d d …|
|f }d|›dt|ƒ› �}t|| | t  d¡d|d
d� qTqNq@qq
|dksªJ t|ƒƒ‚d S )Nrv  r   r/  r‡  r8   r:   r#   rb   r9   F)r"  r`   rd  )r–  r`   ú(z) r = r6   r›   )r�   rž   rÕ   ræ   )r>   rw  rË  rð   ry  rÞ   rz  r<  r   r  rÇ  Úreprr   r‡   )r'   rÐ  Únumr`   r{  r)   rß   r}  r(   r  ÚiÚjÚrrÚvalÚcmpvalrr  r+   r+   r,   Útest_roots_random4  s>    $


ÿÿþ€÷ÿýûzTestPPoly.test_roots_randomc           	   
   C   sP  t j d¡}tddƒD ]š}| |dd¡}|dkr!d|d d …ddf< d| ¡ fD ]}}t j|jtd�}t 	|||¡ |dkrFt  
|¡ ¡ sEJ ‚q'| }d}t|ƒD ]$}|||d f ||d |   7 }|t||d f ||d |   ƒ7 }qOt jd	d
�� || }W d   ƒ n1 s‰w   Y  | ¡ }|t  
|¡  }t|t  |¡dd� q'qd S )Nrv  rb   r½   é‚   r9   )rb   r#   rb   r   rŒ   Úignore)r`  g»½×Ùß|Û=r�   )r>   rw  rË  rð   rz  rU  rï   Úcomplexr   Ú_croots_poly1ro   r%  ÚabsÚerrstateÚravelr   Ú
zeros_like)	r'   rÐ  rÃ  rß   r(   Úwr�  Úcresr'  r+   r+   r,   Útest_roots_crootsT  s0    &
ÿïùzTestPPoly.test_roots_crootsc                 C   s  t  g d¢g¡j}t  ddg¡}dD ]w}t|||d�}| ¡ }| ¡ }|du rXt  |ddgƒ¡ ¡ s4J ‚t  |ddgƒ¡ ¡ sAJ ‚t  |ddgƒ¡ ¡ sNJ ‚| ¡ dgksWJ ‚qt	|ddgƒd	d
gƒ t  |ddgƒ¡ 
¡ rpJ ‚t  |ddgƒ¡ 
¡ r}J ‚t	| ¡ t  ddg¡ƒ qd S )NrÅ   r   rb   ©TFNrd  Fçš™™™™™¹¿çš™™™™™ñ?g®Gáz®ï?gèz®GáÊ¿rn   r€   )r>   rG   rZ  r   r™  rš  ro   r%  rÏ  r   Úanyr‡   )r'   rß   r)   r`   r}  Úpp_dÚpp_ir+   r+   r,   rl  r  s    òzTestPPoly.test_extrapolate_attrN)r.   r/   r0   r¾  rÁ  r3  rá  ræ  rè  rî  r¯  r÷  rú  r«  rü  rþ  r  r	  r  r  r  r  r  r  r  r  r!  r#  r,  r7  rl  r+   r+   r+   r,   r¶  š  s:    1
 r¶  c                   @   ód   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )Ú	TestBPolyc                 C   s2   ddg}dgg}t ||ƒ}t|dƒt d¡ƒ d S )Nr   rb   r9   r  rl   ©r   r   r>   r‡   ©r'   r)   rß   r¨  r+   r+   r,   r¾  ‰  s   
zTestBPoly.test_simplec                 C   s6   ddg}dgdgg}t ||ƒ}t|dƒt d¡ƒ d S )Nr   rb   r9   r  ggfffff@r@  rA  r+   r+   r,   Útest_simple2�  s   
zTestBPoly.test_simple2c                 C   s:   ddg}dgdgdgg}t ||ƒ}t|dƒt d¡ƒ d S )Nr   rb   r9   r  r  g433333@r@  rA  r+   r+   r,   Útest_simple3•  s   
ÿzTestBPoly.test_simple3c                 C   s>   ddg}dgdgdgdgg}t ||ƒ}t|dƒt d¡ƒ d S )Nr   rb   r#   r¸  g:ßO�—nð?r@  rA  r+   r+   r,   Útest_simple4œ  s   
ÿzTestBPoly.test_simple4c                 C   sB   ddg}dgdgdgdgdgg}t ||ƒ}t|dƒt d¡ƒ d S )Nr   rb   r‹   r#   r¸  g”Ô	h"l@r@  rA  r+   r+   r,   Útest_simple5§  s   
ÿzTestBPoly.test_simple5c                 C   s„   g d¢}ddgddgddgg}t ||dd�}t|dƒt d¡ƒ t|d	ƒt d
¡ƒ t|ddƒt d¡ƒ t|d	dƒt d¡ƒ d S )N©r   rb   r9   r9   r   r#   r¿  rd  g333333@gHáz®Gñ?gÍÌÌÌÌÌô¿ç[�Âõ(\Ï?rb   çÌÌÌÌÌÌÀrº  r@  rA  r+   r+   r,   rÁ  ³  s   zTestBPoly.test_periodicc              	   C   sp  t j d¡}d}dD ]«}t  | dd|d ¡¡}|jdd|d |fd�}|d d d	…  ¡ }t||d
d�}t|d d …d d d	…f |d d d	… d
d�}| ddd¡}	t||	ƒ||	ƒdd� t||	dƒ||	dƒdd� | ¡ }
| ¡ }t|
|	ƒ||	ƒdd� | 	¡ }| 	¡ }| ddd¡D ]*\}}| 
||¡}| 
||¡}t||dd� t||ƒ||ƒ ||ƒ||ƒ dd� qŠq
d S )Nr   r9   rÅ  r8   rb   r9  r  rÆ  r<   Trd  rç   r‡  ræ   rÈ  r„   rÉ  rÊ  )r>   rw  rË  rˆ  r‰  rj   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á  ¿  s2   *ÿüézTestBPoly.test_descendingc                 C   sº   t j d¡}| ddddd¡}t  g d¢¡}t||ƒ}|jj|jks$J ‚|jj|jks-J ‚|dƒj|jdd … ks;J ‚|| dd¡ƒjd	|jdd …  ksOJ ‚| 	¡ }|jjd
ks[J ‚d S )Nrv  r  r#   rb   r9   r·  r¸  r4   râ  rã  )
r>   rw  rË  rz  rG   r   r)   rï   rß   r™  )r'   rÐ  rß   r)   r>  rä  r+   r+   r,   ræ  á  s   
(zTestBPoly.test_multi_shapec                 C   sr   ddg}dgdgdgg}t ||ƒ}d}|d }t||ƒt dd|  d|  d| d|   d| |  ¡ƒ d S )Nr   r#   r9   rb   r  r  r@  )r'   r)   rß   r¨  Úxvalr  r+   r+   r,   Útest_interval_lengthî  s   
4ÿzTestBPoly.test_interval_lengthc                 C   sT   g d¢}ddgddgddgg}t ||ƒ}t|dƒt d¡ƒ t|dƒt d¡ƒ d S )	NrF  r9   r   r#   r�  gGáz®Gñ?ç333333û?rG  r@  rA  r+   r+   r,   Útest_two_intervalsø  s
   
zTestBPoly.test_two_intervalsc                 C   s¸   ddg}dgdgdgg}t ||ƒ}dD ]F}t |||d�}| ¡ }|du r?t |d	d
gƒ¡ ¡ s1J ‚t |d	d
gƒ¡ ¡ s>J ‚qt |d	d
gƒ¡ ¡ rLJ ‚t |d	d
gƒ¡ ¡ rYJ ‚qd S )Nr   r#   r9   rb   r  r8  rd  Fr9  gÍÌÌÌÌÌ @)r   r™  r>   ro   r%  r;  )r'   r)   rß   r¨  r`   Úbp_dr+   r+   r,   rl     s   
øzTestBPoly.test_extrapolate_attrN)r.   r/   r0   r¾  rB  rC  rD  rE  rÁ  rá  ræ  rJ  rL  rl  r+   r+   r+   r,   r?  ˆ  s    "
r?  c                   @   r>  )ÚTestBPolyCalculusc                    s¬   g d¢}ddgddgddgg}t ||ƒ‰ ˆ  ¡ }t|dƒt d¡ƒ t|dƒt d¡ƒ tt ‡ fd	d
„dD ƒ¡t g d¢¡ƒ tt ‡ fdd
„dD ƒ¡t g d¢¡ƒ d S )NrF  r9   r   r#   r�  rH  rK  rº  c                    ó   g | ]}ˆ d |ƒ‘qS )r�  r+   ©rì   r–  ©r¨  r+   r,   Ú
<listcomp>  ó    z5TestBPolyCalculus.test_derivative.<locals>.<listcomp>©rb   r#   r9   )rH  rs   r6   c                    rO  )rK  r+   rP  rQ  r+   r,   rR    rS  )rº  rn   r   )r   r™  r   r>   r‡   )r'   r)   rß   Úbp_derr+   rQ  r,   r«    s   
ÿÿz!TestBPolyCalculus.test_derivativec           
      C   s”   t j d¡}d\}}t  | |¡¡}| ||d f¡}t||ƒ}t |¡}t|ƒD ]}| ¡ }| ¡ }t  	|d |d d¡}	t
||	ƒ||	ƒƒ q)d S ©Nrv  ©r4   r‹   rb   r   r<   é   )r>   rw  rË  rˆ  r   r   r°  rð   r™  r  r   )
r'   rÐ  rœ  rÃ  r)   rß   r¨  r}  Údr�  r+   r+   r,   Útest_derivative_ppoly!  s   

üz'TestBPolyCalculus.test_derivative_ppolyc           
      C   s˜   t j d¡}d\}}t  | |¡¡}| ||d f¡}| ¡ |d fD ]&}t||ƒ}t  |d |d d¡}t|ƒD ]}	t|||	ƒ| 	|	¡|ƒƒ q9q#d S )Nrv  rW  rb   r  r   r<   rX  )
r>   rw  rË  rˆ  rj   r   r  rð   r   r™  )
r'   rÐ  rœ  rÃ  r)   rß   Úccr¨  r�  r'  r+   r+   r,   Útest_deriv_inplace0  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 )NrF  r   rb   r9   r‚   r#   r5   r$   g      è?rÊ  ©r�   r…   )r   rš  r>   r  r   Úwhere)r'   r)   rß   r¨  ÚbiÚxxr+   r+   r,   r  =  s   
ÿ
ýz,TestBPolyCalculus.test_antiderivative_simplec                 C   sj   t j d¡}t  | d¡¡}| d¡}t||ƒ}t  |d |d d¡}t| ¡  ¡ |ƒ||ƒddd� d S )	Nrv  r‚   ©r  r8   r#   r9   r   r<   ræ   rÊ  r]  )	r>   rw  rË  rˆ  r   r  r   rš  r™  ©r'   rÐ  r)   rß   r¨  r`  r+   r+   r,   Útest_der_antiderQ  s   



ÿz"TestBPolyCalculus.test_der_antiderc                 C   sx   t j d¡}t  | d¡¡}| d¡}t||ƒ}t |¡}t  |d |d d¡}t| 	d¡|ƒ| 	d¡|ƒddd	� d S )
Nrv  r‚   ra  r   r<   r8   r#   rÊ  r]  )
r>   rw  rË  rˆ  r   r   r°  r  r   rš  )r'   rÐ  r)   rß   r¨  r}  r`  r+   r+   r,   Útest_antider_ppoly[  s   



ÿz$TestBPolyCalculus.test_antider_ppolyc                 C   sf   t j d¡}t  | d¡¡}| d¡}t||ƒ ¡ }|jdd… }t||d ƒ||d ƒddd� d S )	Nrv  r‚   ©r  r8   rb   r<   rƒ   rÊ  r]  )r>   rw  rË  rˆ  r   rš  r)   r   rb  r+   r+   r,   Útest_antider_continuousg  s   

ÿz)TestBPolyCalculus.test_antider_continuousc                 C   s`   t j d¡}t  | d¡¡}| d¡}t||ƒ}t |¡}t| dd¡| dd¡dddd� d S )	Nrv  r‚   re  r   rb   rÊ  F)r�   r…   r  )	r>   rw  rË  rˆ  r   r   r°  r   rÎ  )r'   rÐ  r)   rß   r¨  r}  r+   r+   r,   r  q  s   



ÿz TestBPolyCalculus.test_integratec                 C   s‚   dgg}ddg}t ||ƒ}t| dd¡t d¡ddd� t ||dd�}t | dd¡¡s.J ‚t|jddd	d�t d¡ddd� d S )
Nrb   r   r#   r5   rƒ   F)r�   r  rd  T)r   r   rÎ  r>   r‡   ro   )r'   rß   r)   r  Úb1r+   r+   r,   Útest_integrate_extrapz  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  )r>   rG   r   r±  r   rš  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 )Nrb   r   rX  r<   rÊ  r]  )r   r>   r  r   r™  rš  )r'   rß   r)   r  r`  r+   r+   r,   Útest_antider_neg¡  s   
ÿ
ÿz"TestBPolyCalculus.test_antider_negN)r.   r/   r0   r«  rZ  r\  r  rc  rd  rf  r  rh  r  ri  r+   r+   r+   r,   rN    s    

	rN  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 )	NrF  r9   r#   rb   r‹   r  r  çffffffö?)r   r   r±  r°  r   )r'   r)   rß   r}  r¨  r‚  r�  r+   r+   r,   Útest_bp_from_pp°  ó   


z#TestPolyConversions.test_bp_from_ppc           
      C   s’   t j d¡}d\}}t  | |¡¡}| ||d f¡}t||ƒ}t |¡}t |¡}t  |d |d d¡}	t	||	ƒ||	ƒƒ t	||	ƒ||	ƒƒ d S rV  )
r>   rw  rË  rˆ  r   r   r±  r°  r  r   )
r'   rÐ  rœ  rÃ  r)   rß   r}  r¨  r‚  r�  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 )NrF  r9   rb   r  r#   r  rk  )r   r   r°  r±  r   )r'   r)   rß   r¨  r}  r²  r�  r+   r+   r,   Útest_pp_from_bpÈ  rm  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 )NrF  r9   rb   r  r#   )r   r%   Ú	TypeErrorr°  r   r±  )r'   r)   rß   r}  r¨  r+   r+   r,   Útest_broken_conversionsÓ  s   

ÿ

"ÿz+TestPolyConversions.test_broken_conversionsN)r.   r/   r0   rl  rn  ro  rq  r+   r+   r+   r,   rj  ¯  s
    rj  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   rb   r#   r9   r5   rl   ©r   Ú_construct_from_derivativesr   )r'   r  r+   r+   r,   Útest_make_poly_1á  s   z)TestBPolyFromDerivatives.test_make_poly_1c                 C   sp   t  ddddgdg¡}t|g d¢ƒ t  ddddgdg¡}t|g d¢ƒ t  dddgddg¡}t|g d¢ƒ d S )Nr   rb   )rn   rn   rn   r#   r9   )r5   rH  rn   )r5   g      à¿rn   rs  ©r'   r  r�  Ú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   rb   rT  r  )rn   ç«ªªªªªú?g«ªªªªª@rü   )r  r#   r9   )rn   gUUUUUU	@g«ªªªªª
@rü   r#   r9   )rn   ry  rl   rü   rs  rv  r+   r+   r,   Útest_make_poly_3ñ  s   z)TestBPolyFromDerivatives.test_make_poly_3c                 C   s¤   t j d¡}t jd| d¡f }t jd| d¡f }t dd||¡}t|d d …d f ddgƒ}tdƒD ]}t|dƒ|| dd� t|d	ƒ|| dd� | ¡ }q3d S )
Nr‘  r   r4   rb   r  r6   Fr  rn   )	r>   rw  rË  rÞ   r   rt  rð   r   r™  )r'   rÐ  ÚyaÚybrß   r}  r(  r+   r+   r,   Útest_make_poly_12þ  s   
ýz*TestBPolyFromDerivatives.test_make_poly_12c           
      C   st   t j d¡}ddg}d\}}| |ddddf¡}t||ƒ}t ||¡}t||ƒ}t  ddd¡}	t||	ƒ||	ƒƒ d S )	Nr‘  r   rb   )r‹   r4   r#   r9   r  r‚   )r>   rw  rË  r   Ú_raise_degreer  r   )
r'   rÐ  r)   rÃ  rY  rß   r¨  r  r²  r�  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   rb   ©r%   rg   r   r´  rS   r+   r+   r,   Ú
test_xi_yi  s   z#TestBPolyFromDerivatives.test_xi_yic                 C   s,   g d¢}dgdgdgg}t ttj||ƒ d S )N©r   r   rb   r   r€  )r'   r  rà   r+   r+   r,   Útest_coords_order  s   z*TestBPolyFromDerivatives.test_coords_orderc                 C   s|   g d¢}ddgdgddgddgg}t  ||¡}|jjdksJ ‚| ¡ }dD ]}t||ƒt d¡ƒ t||ƒt d¡ƒ q%d S )Nr˜  r   )r  r9   )r6   r  rn   r:  gffffffþ?r5   r  r6   )r   r´  rß   rï   r™  r   r>   r‡   )r'   r  rà   r}  Úppdr�  r+   r+   r,   Ú
test_zeros  s   þz#TestBPolyFromDerivatives.test_zerosc                    sL   t j d¡‰t  dd„ t|d ƒD ƒ¡}‡ ‡fdd„t|d ƒD ƒ}||fS )Nrv  c                 S   s   g | ]}d |d  ‘qS )rn   r#   r+   ©rì   r(  r+   r+   r,   rR  .  s    z<TestBPolyFromDerivatives._make_random_mk.<locals>.<listcomp>rb   c                    s   g | ]}ˆ  ˆ ¡‘qS r+   )rw  r†  ©rÃ  rÐ  r+   r,   rR  /  rS  )r>   rw  rË  r‡   rð   ©r'   rœ  rÃ  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©r4   r»   r#   c                    s   g | ]}|ˆ  ‘qS r+   r+   )rì   Úyy©r{  r+   r,   rR  8  ó    z;TestBPolyFromDerivatives.test_random_12.<locals>.<listcomp>)r‰  r   r´  rð   r   r™  )r'   rœ  rÃ  r  rà   r}  r+   rŒ  r,   Útest_random_122  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‰  r%   rg   r   r´  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#   rb   ©r�  r�  )r‰  r   r´  r%   rg   rˆ   rˆ  r+   r+   r,   Útest_orders_too_highA  s   
ÿz-TestBPolyFromDerivatives.test_orders_too_highc                 C   s0  d\}}|   ||¡\}}d}tj|||d�}t|d d ƒD ]}t||dd… d ƒ||dd… d ƒƒ | ¡ }qt ||dd… d ƒ||dd… d ƒ¡rRJ ‚d}tj|||d�}t|d ƒD ]}t||dd… d ƒ||dd… d ƒƒ | ¡ }qbt ||dd… d ƒ||dd… d ƒ¡r–J ‚d S )	NrŠ  r4   r’  r#   rb   r<   rÊ  r  )r‰  r   r´  rð   r   r™  r>   Úallclose)r'   rœ  rÃ  r  rà   r{  r}  r(  r+   r+   r,   Útest_orders_globalI  s   *
0*
4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 ||d ƒ||d ƒ¡rWJ ‚qd S )	N)r  r»   c                 S   s   g | ]}|d  ‘qS )rb   r+   )rì   Úor+   r+   r,   rR  e  r�  z>TestBPolyFromDerivatives.test_orders_local.<locals>.<listcomp>rb   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,   Útest_orders_locala  s   
"ûz*TestBPolyFromDerivatives.test_orders_localc                 C   sn   t j d¡}d\}}t  | |d ¡¡}| |d |dddf¡}t ||¡}|jjd| |dddfks5J ‚d S )Nrv  )r  r4   rb   r  r  r‹   r#   )r>   rw  rË  rˆ  r   r´  rß   rï   )r'   rÐ  rœ  rÃ  r  rà   r}  r+   r+   r,   Útest_yi_trailing_dimsm  s   "z.TestBPolyFromDerivatives.test_yi_trailing_dimsc                 C   s°   t  d¡}tjddgdgdgg|d�}t|dƒt  d¡ƒ t  d¡}tjddgdgdgg|d�}t|dƒt  d¡ƒ d}tjddgdgdgg|d�}t|dƒt  d¡ƒ d}d S )Nrb   r   r’  )r>   Úint32r   r´  r   r‡   Úint64)r'   r�  r>  r+   r+   r,   Útest_gh_5430u  s   

z%TestBPolyFromDerivatives.test_gh_5430N)r.   r/   r0   ru  rx  rz  r}  r  r�  rƒ  r…  r‰  rŽ  r‘  r“  r•  r—  r˜  r›  r+   r+   r+   r,   rr  à  s"    	rr  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ejjdd„ ƒZdS )ÚTestNdPPolyc                 C   sv   t j d¡}| dd¡}t  ddd¡}| d¡}t||fƒ}||fƒ}t|d d …d d …d f ||ƒ ¡ }t||ƒ d S )Nrv  r  r4   r   rb   r  rè   )	r>   rw  rË  rz  r  r   rë  r3  r   )r'   rÐ  rß   r)   r  r>  Úv1Úv2r+   r+   r,   Útest_simple_1dˆ  s   

"zTestNdPPoly.test_simple_1dc              
   C   s@  t j d¡}| dddd¡}t  ddd¡}t  ddd¡d	 }| d
¡}| 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 )Nrv  r  r4   r  r  r   rb   r‹   r#   rè   rŒ   r‡  é*   )N©r   r   ©r   rb   )rb   r   )r#   r9   )r�   r#   ©r–  r  )r>   rw  rË  rz  r  rU  r<  r�   Úfillr–   r   Úevaluate_ndrC   rG   ÚintcÚc_r3  Ú_ppoly2d_evalr   r   r%  )r'   rÐ  rß   r)   r(   r  rà   r�  rž  r>  r–  r+   r+   r,   Útest_simple_2d–  s2   

ú
ýzTestNdPPoly.test_simple_2dc              	   C   sÌ   t j d¡}| dddddd¡}t  dd	d¡}t  dd	d¡d
 }t  dd	d¡d }| d¡}| d¡}| d¡}t||||fƒ}	dD ]!}
|	|||f|
d�}t||||f||||
d�}t||t|
ƒd� qBd S )Nrv  r  r4   r  r  r‹   r�   r   rb   r#   r8   r9   é(   )N©r   r   r   ©r   rb   r   ©rb   r   r   )r#   r9   r   )r  r   r#   r£  r  )	r>   rw  rË  rz  r  r   Ú_ppoly3d_evalr   r%  )r'   rÐ  rß   r)   r(   r*   r  rà   Úzir>  r–  r�  rž  r+   r+   r,   Útest_simple_3d³  s   


üzTestNdPPoly.test_simple_3dc              
   C   sÚ   t j d¡}| 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 }| d¡}| d¡}| d¡}	| d¡}
t|||||fƒ}||||	|
fƒ}t|||||f|||	|
ƒ}t||ƒ d S )Nrv  r  r4   r  r  r‹   r�   r8   r‚   r   rb   r#   r9   r»   r‡  )r>   rw  rË  rz  r  r   Ú_ppoly4d_evalr   )r'   rÐ  rß   r)   r(   r*   Úur  rà   r¯  Úuir>  r�  rž  r+   r+   r,   Útest_simple_4dÇ  s   



zTestNdPPoly.test_simple_4dc                 C   s”   t j d¡}| 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 )	Nrv  r  r4   r   rb   r  r£  r#   )r>   rw  rË  rz  r  r   r™  r   r   rß   rš  )r'   rÐ  rß   r)   r>  rä  rŠ  Údp1r+   r+   r,   Útest_deriv_1dÛ  s   


zTestNdPPoly.test_deriv_1dc           
   
   C   sZ  t j d¡}| 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 )Nrv  r  r4   r  r  r‹   r�   r   rb   r#   r8   r9   r£  r¬  )r   r   r9   )r>   rw  rË  rz  r  r   r   Ú	transposer™  r   rß   rš  )
r'   rÐ  rß   r)   r(   r*   r>  rŠ  rä  rµ  r+   r+   r,   Útest_deriv_3dï  s0   
ÿ
ÿ
ÿzTestNdPPoly.test_deriv_3dc                 C   sÆ   t j d¡}t  d¡}t  ddd¡d }t  ddd¡d }t  ddd¡d	 }t||||fƒ}| d
¡}| d¡}| d¡}| d¡}	| d¡}
t|||	|
fƒ||	d  |
d  t	d	ƒt	dƒ  ƒ d S )Nrv  )rb   rb   rb   r9   r  r4   r   rb   r  r4   r#   r  r9   )rb   r   r  )r   r#   r   r‡  )
r>   rw  rË  rf   r  r   rš  rz  r   r   )r'   rÐ  rß   r)   r(   r*   r>  rå  r  rà   r¯  r+   r+   r,   Útest_deriv_3d_simple	  s   





"ÿz TestNdPPoly.test_deriv_3d_simplec           
   	      sr  t j d¡}| 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dt|ƒd� q�d S )Nrv  r  r4   é   rc  r   rb   r¾   r#   r9   r<   r¢  )r   r$   )r¸  rº  )rê  r  c                    s   ˆ | |fƒS rÎ   r+   )r)   r(   ©r>  r+   r,   Ú<lambda>>	  s    z/TestNdPPoly.test_integrate_2d.<locals>.<lambda>gñhãˆµøä>)ÚepsrelÚepsabs)rŠ   F)r…   r�   r  rž   )r>   rw  rË  rz  r  r·  rC   rï   rj   r   Úfix_continuityr   rÎ  r   rˆ   r   r%  )
r'   rÐ  rß   r)   r(   ÚcxÚrangesr  Úig2Úerr2r+   r»  r,   Útest_integrate_2d"	  s8   ý

ÿÿøzTestNdPPoly.test_integrate_2dc                 C   sR  t j d¡}| dddddd¡}t  dd	d¡d	 }t  dd	d¡d
 }t  dd	d¡d }t||||fƒ}| d¡}| 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 )Nrv  r  r4   r  rº  rc  r¾   r   rb   r#   r¿   r9   rè   )r  rº  re   r­  r¬  r‚  )	r>   rw  rË  rz  r  r   Úintegrate_1drš  r   )r'   rÐ  rß   r)   r(   r*   r>  r²  Úvr
  r  ÚpxÚpaxÚpyÚpayÚpzÚpazr+   r+   r,   Útest_integrate_1dC	  s$   


*
*
.zTestNdPPoly.test_integrate_1dc                    sv   t j d¡‰ ˆ jdd�}t  ddd¡}t  ddd¡d }t  ddd	¡d
 }t||||fƒ}‡ fdd„}td	||ƒ d S )Nr‘  )r  r4   r  r  r‹   r�   rÆ  r   rb   r‹   r�   r#   r8   r9   c                    s6   ˆ j dd�}ˆ j dd�}ˆ j dd�}||||fƒ d S )Nrª  rÆ  )r‰  )rn  r®  r  rà   r¯  ©rÐ  r+   r,   ro  h	  s   z/TestNdPPoly.test_concurrency.<locals>.worker_fn)r>   rw  Údefault_rngr‰  r  r   r   )r'   rß   r)   r(   r*   r>  ro  r+   rÎ  r,   rq  ]	  s   zTestNdPPoly.test_concurrencyN)r.   r/   r0   rŸ  r©  r°  r´  r¶  r¸  r¹  rÄ  rÍ  r7  r8  Úthread_unsaferq  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 ‰||ˆ  ‰|ˆ |  krE|ˆd  k sHJ ‚ J ‚t‡ ‡‡fdd„tˆ jd ƒD ƒƒ}|||dd…f< q|S )z&Evaluate piecewise polynomial manuallyr#   r   rb   Nc                 3   s2   � | ]}ˆ |ˆf ˆˆ j d  | d   V  qdS )r   rb   N)rï   ©rì   rÃ  ©rß   rY  r(  r+   r,   rí   {	  s   € *ÿz _ppoly_eval_1.<locals>.<genexpr>)	r>   Úzerosr<  rï   r  r–   ÚsearchsortedÚsumrð   )rß   r)   Úxpsr+  r'  r�  r  r+   rÒ  r,   rë  q	  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   r<   rb   )ÚNc              	      s4   g | ]}t  ˆ |d d …f ˆd d …ˆ| f ¡‘qS rÎ   )r>   rÍ  rÑ  ©ÚVÚindxsr}  r+   r,   rR  ’	  s   4 z!_ppoly_eval_2.<locals>.<listcomp>)rï   r>   r3  Ú
empty_likeÚcompressrÔ  Úclipr<  ÚtakeÚvanderrG   rð   )r=  Úbreaksr©   r¤  r
  r  ÚKÚ	saveshaper�  Úmaskr`  rÌ  Úvaluesr+   rØ  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 orderrb   )rg   r   )r)   r(   r  r+   r+   r,   Ú_dpow˜	  s
   rå  c              
   C   sn  |du rd}t jt|ƒf| jd�}| jdd… \}}tt||ƒƒD ]“\}\}	}
|d d |	  kr9|d d krNn n|d d |
  krM|d d ksTn t j||< q!t  |d |	¡d }t  |d |
¡d }|	|d |  }|
|d |  }d}t	| jd ƒD ].}t	| jd ƒD ]$}|| || d || d ||f t
|||d ƒ t
|||d ƒ 7 }qŠq�|||< q!|S )z@
    Straightforward evaluation of 2-D piecewise polynomial
    Nr¡  rŒ   r#   r   r<   rb   ©r>   rU  r<  r�   rï   r  Úzipr–   rÔ  rð   rå  )rß   r?  r©   Úynewr–  r+  ÚnxÚnyÚjoutr)   r(   Új1Új2Ús1Ús2r*  Úk1Úk2r+   r+   r,   r¨  ¤	  s0   (&
 ÿþÿ
r¨  c                 C   sð  |du rd}t jt|ƒf| jd�}| jdd… \}}}	tt|||ƒƒD ]Ò\}
\}}}|d d |  kr<|d d kren n'|d d |  krP|d d kren n|d d |  krd|d d kskn t j||
< q#t  |d |¡d }t  |d |¡d }t  |d |¡d }||d |  }||d |  }||d |  }d}t	| jd ƒD ]F}t	| jd ƒD ]<}t	| jd ƒD ]2}|| || d || d |	| d |||f t
|||d ƒ t
|||d ƒ t
|||d ƒ 7 }q¼q³qª|||
< q#|S )	z@
    Straightforward evaluation of 3-D piecewise polynomial
    Nr«  rŒ   r9   r   r<   rb   r#   ræ  )rß   r?  r©   rè  Úznewr–  r+  ré  rê  Únzrë  r)   r(   r*   rì  rí  Új3rî  rï  Ús3r*  rð  rñ  Úk3r+   r+   r,   r®  È	  s>   ((&
,ÿþýÿÿ
r®  c                 C   st  |du rd}t jt|ƒf| jd�}| jdd… \}}	}
}tt||||ƒƒD �]\}\}}}}|d d |  kr@|d d kr}n n;|d d |  krT|d d kr}n n'|d d |  krh|d d kr}n n|d	 d |  kr||d	 d ksƒn 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 }qïqæqÝqÔ|||< q%|S )
z@
    Straightforward evaluation of 4-D piecewise polynomial
    N)r   r   r   r   rŒ   r  r   r<   rb   r#   r9   ræ  )rß   r?  r©   rè  rò  Úunewr–  r+  ÚmxÚmyÚmzÚmurë  r)   r(   r*   r²  rì  rí  rô  Új4rî  rï  rõ  Ús4r*  rð  rñ  rö  Úk4r+   r+   r,   r±  ð	  sL   $(((&
8ÿþýüÿÿÿ
	r±  rÎ   )?Úscipy._lib._array_apir   r   r   r   r7  r   r%   Únumpyr   r   r	   r
   r>   Úscipy.interpolater   r   r   r   r   r   r   r   r   r   r   r   r   r   Úscipy.specialr   r   r   Úscipy._lib._gcutilsr   r   Úscipy._lib._testutilsr   Úscipy.integrater   r    r"   r1   r;  rC  r8  r:  r  rs  r   r¶  r?  rN  rj  rr  rœ  rë  r–   rì  rå  r¨  r®  r±  r+   r+   r+   r,   Ú<module>   s\    @      
u
 /   q 	  1 ( k

$(