U
    Gvfu                    @   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   L/tmp/pip-unpacked-wheel-96ln3f52/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   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   ri   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%   
   )rr   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   rr   r   )rM   rM   rM   r8   rp   )r   ru   rv   rD   rN   r}   ry   onesrO   rP   rx   rz   r~   r{   r|   r0   rA   r8   r8   r9   test_validation   s    
  
zTestInterp1D.test_validationc                 C   s<  t t| j| jj t t| j| jddj  t t| j| jj t t| j| jddj  t tt| j| jj t	t| j| jddjd t	t| j| jddjd t	t| j| jj
d t	t| j| jj
d t	t| j| jdd	j
d tt| j| jj| j tt| j| jj| j tt| j| jj| j d S )
NF)rG   r^         @r`   )r)   r*   r   r[   r   )r   r   ru   rv   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   ru   rv   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   ru   rv   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   rr   r   r   FrA   r_   Hz>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   ru   rv   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*   rn   r   r   r   r   r   r   r   r   rM   rL   r                  r   rr   Tr   r[   r%   rA   ra   r   rJ   Frs   r   ru   rv   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   rr   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*   rn   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)@gL3@r   rp   rn   g      "@      &@T)r_   rA   r)   g      5@)	r   ru   rv   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 )Nrr   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	 qt | 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| qdddgdddgf}| j| jfD ] }ttt | j||d|dd	 qPtdD ]}|dkrt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   rr   r   r   rM   )rA   r   ra   r_   rJ   r[   r      ,  r%   i8ic                 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   ru   rv   r   r   r   r   r   rt   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   ru   rv   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   rn   r*         @r   r8   r)   r         (@r   r   rA   r   g      *@g      .@g      1@ro         @g      ,@)r   ru   rv   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   prodrw   	enumerater   r   listr   )
r0   rA   rX   r1   nsr2   r3   ry   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      #@rr         ?       @r@   rM   rB   )rD   rN   r   r   r   r   realimag)	r0   r   rA   r2   r1   r   xiZ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 )Nrr   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 )Nrr   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   rr   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   Frq   )rA   r_   ra   r[   r%   rr   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   )+rj   rk   rl   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   rm   x   sN   )D	EE		

 "
 

	 rm   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)rj   rk   rl   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 Nrp   r   r*   r)   r   r         @皙@ffffff@r(   rT   rU         @      @      @@333333!@#@ro         ?     @?     @.袋@^@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 )"Nrp   r   r*   r)   r   r   r'  r(  r)  )r   r%   r%   r   r[   r   r(   rT   rU   r*  r+  r,  r-  r.  r/  ro   )   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 )Nrp   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)rj   rk   rl   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   rr   rC   r%   r[   r   )rD   rE   rF   uniquer   randr  r   r   rC  r   r   r2   )r0   orderr2   r   clspppp2Z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   ry   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   rr      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  rS  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 )N90  r=  )r   r   y      ?333333?rL   )r   r[   r%   )	rD   rE   rF   rS  r  r  r   r   r   )r0   r2   r   Zc_reZc_imrZ  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   rS  r   r   r   r   
derivativeantiderivativer   rO   rP   r   )r0   r   Zc_srZ  r   mr2   rK  r!  resZ
targ_shaperU  r8   r8   r9   	test_axisO  s0    
*"zTestPPolyCommon.test_axisN)rj   rk   rl   rF  rG  rD  rQ  rW  r[  r^  rc  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rj   rk   rl   r8   r8   r8   r9   Pn  s   rf  c                   @   s   e Zd ZdS )zTestPolySubclassing.BNre  r8   r8   r8   r9   Bq  s   rg  c                 C   sB   t jd t t jd}t jd}| ||| ||fS )Nr>   rJ   )rK   r%   )rD   rE   rF   rS  rf  rg  )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   )rh  r_  r   	__class__r`  )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   rS  r   rI  r  r   rf  from_spliner   ri  )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   )rh  rf  from_bernstein_basisr   ri  rg  from_power_basis)r0   rL  rj  rP  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   )rg  from_derivativesr   ri  )r0   r2   r1   rj  r8   r8   r9   test_from_derivatives  s    
z)TestPolySubclassing.test_from_derivativesN)rj   rk   rl   r   rf  r   rg  rh  rl  rp  rt  rv  r8   r8   r8   r9   rd  m  s   			rd  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?ry  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   rw   r#   )powerr   krg  r8   r8   r9   binom_matrix  s    
z/TestPPoly.test_descending.<locals>.binom_matrixr   rJ   rr   rR  rC   rr   r[   r   r%   sizerM   Tr  r   rR  r   vIh%<=r   rL   r%   -q=)rD   rE   rF   rS  rT  diffrW   dotr@  r   r   r_  r`  	integrateroots)r0   r  r  ra  r2   cahZh_powersrg  capZcdpcdpark  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(   rx  rL   rL   r   rL   r%   r[   r%   rJ   )r\   r%   r[   r%   rJ   )rD   rE   rI  rN   r   r   r2   r   r   r_  r`  )r0   r   r2   r!  dpipr8   r8   r9   test_multi_shape  s    
(zTestPPoly.test_multi_shapec                 C   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(   rx  ry  rz  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[   )rx  r(   gQ?333333?)
rD   rE   rF   rI  rS  r   r   _ppoly_eval_1r   _ppoly_eval_2)r0   r   r2   r!  rZ  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 qd S )	Nr>   r   r   r[   rm  r   )NTFr  )rD   rE   rF   rS  r   rI  r  r   r   rn  r   r   r   r   r   r   )r0   r2   r1   ro  rL  r  rY   Zppptr   r  Zextrapr!  r8   r8   r9   rp    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   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[   rm  r   rJ   )rD   rE   rF   rS  r   rI  r  r   r   rn  r   r   r   r   r0   r2   r1   ro  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   rr   zdx=%dr   )rD   rE   rF   rS  r   rI  r  r   r   rn  r   r   r   r_  r  r8   r8   r9   rl  B  s    
zTestPPoly.test_derivativec                 C   s^   t dggddg}t| jt dgdggddgj t| jt dgdggddgj d S )Nr)   r   r[   )r   r   r`  r   r2   )r0   r!  r8   r8   r9   test_antiderivative_of_constantO  s    $z)TestPPoly.test_antiderivative_of_constantc                 C   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   r`  r   r   r2   r   r  )r0   r!  qr8   r8   r9   #test_antiderivative_regression_4355U  s    z-TestPPoly.test_antiderivative_regression_4355c           	      C   s   t jd t 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   r`  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 qqRd S )Nr>   r   r[   rC   r%   rL   r  rr   r  rM   r   z
dx=%d k=%d)r   r   )rD   rE   rF   r   rI  r  r   r   rn  r   r`  r_  r   r   r2   )r0   r2   r1   ro  rL  r  r  rM  r  rrN  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  rr   r   r   r   )rD   rE   rF   rS  r   rI  r  r   r   rn  r   r`  r   r   r   r   )	r0   r2   r1   ro  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:0yE>r   )rD   rN   r@  r   r`  r   r_  r   )r0   r   r2   r!  r  rV  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  )rx  ?)r  r  Tr  F)rD   rE   rF   rS  r   rI  r  r   r   rn  r  r`  r   r   r   rc   rd   )	r0   r2   r1   ro  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   rp   r   r*          r)   r  )	rD   rN   r  r  r   r  r   re   rd   )r0   r2   r   r  rf  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   rp   r   r*   r  r)   r  r  r   irT   rU   r*  rL   g      /@   r   rM   rJ   i)rD   rN   r   r`  r   r  r0   r2   r   rf  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   rn  r  r   r   )r0   r2   r1   ro  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   rX  r  r)   g333333?r*   r[   )	rD   rN   r@  r   r   r  rb   rG   solve)r0   r   r2   rL  constc1rP  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 qqqq$qt|dkt| d S )Nr>   r   r  rR  rr   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rt
t |  qTd}d}t|D ]H}|||d f ||d |   7 }|t||d f ||d |   7 }qt 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   wrb  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rt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皙皙?gGz?gzGʿ)rD   rN   r@  r   r_  r`  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)rj   rk   rl   r~  r  r  r  r  r  r  rp  r  r  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r8   r8   r8   r9   rw    s8   1	rw  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   rj  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%   rx  g:On?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%   rx  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@gHzG?g[(\?rz  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  rr   r[   r  r  r  rM   Tr  r   rR  r   r  r   r  r  )rD   rE   rF   rS  rT  rG   r   r   r_  r`  r  )r0   r  ra  r2   r  r  r  rk  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(   rx  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   rj  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%   rX  gGz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   rj  r   Zbp_dr8   r8   r9   r    s    
zTestBPoly.test_extrapolate_attrN)rj   rk   rl   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%   rX  r  r  rz  r]  r   rp   r)   )r   r_  r   )r0   r2   r   rj  Zbp_derr8   r8   r9   rl    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   rS  r   r   rq  r   r_  r   r   )	r0   ra  r  r2   r   rj  rL  drZ  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   rS  rG   r   r   r   r   r_  )	r0   ra  r  r2   r   ccrj  rZ  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   r`  rD   r   r   where)r0   r2   r   rj  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   rr   r%   rJ   r   rM   r   r  r  )	rD   rE   rF   rS  r   r   r   r`  r_  r0   r2   r   rj  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   rr   r%   r  r  )
rD   rE   rF   rS  r   r   rq  r   r   r`  )r0   r2   r   rj  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   rr   r[   rM   r   r  r  )rD   rE   rF   rS  r   r`  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   rS  r   r   rq  r   r  )r0   r2   r   rj  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   Z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   rr  r   r`  r   r  r  r8   r8   r9   r  x  s&    ".&z)TestBPolyCalculus.test_integrate_periodicc                 C   sr   dgg}ddg}t ||}tddd}t|d|| |ddd t|d||d|ddd d S )Nr[   r   r<   rM   r  r  )r   rD   r   r   r_  r`  )r0   r   r2   rY   r  r8   r8   r9   test_antider_neg  s    
  z"TestBPolyCalculus.test_antider_negN)rj   rk   rl   rl  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   rr  rq  r   )r0   r2   r   rL  rj  rP  rZ  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   rS  r   r   rr  rq  r   r   )	r0   ra  r  r2   r   rL  rj  rP  rZ  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   rq  rr  r   )r0   r2   r   rj  rL  rs  rZ  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   	TypeErrorrq  r   rr  )r0   r2   r   rL  rj  r8   r8   r9   test_broken_conversions  s    




z+TestPolyConversions.test_broken_conversionsN)rj   rk   rl   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  rO  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   rp   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   rj  r  rs  rZ  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   ru  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   )rp   r  r)   r  gffffff?r*   rU   rp   )r   ru  r   r   r   r_  r   )r0   r  r   rL  ZppdrZ  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   ra  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   ru  r   r   r_  r0   ra  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   ru  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   ru  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  | }qtt||dd d ||dd d   d S )	Nr  rL   r&  r%   r[   rM   r  r   )	r  r   ru  r   r   r_  r   rD   allclose)r0   ra  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   ru  r   r_  r   rD   r(  )
r0   ra  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   rS  rE   r   ru  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   ru  r   Zint64)r0   r$  r!  r8   r8   r9   test_gh_5430`  s    

z%TestBPolyFromDerivatives.test_gh_5430N)rj   rk   rl   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 qd S )Nr>   rK   rL   r   r\   r   r[   r   r%   r   r   rR  *   )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_ndrw   rN   ZintcZc_r/   _ppoly2d_evalr   r   r  )
r0   r   r2   r1   r  r   r/  r0  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 qd S )Nr>   rK   rL   r   r\   r   r   r   r[   r%   rr   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]  r/  r0  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   rr   r   r   r[   r%   rJ   r   rR  )rD   rE   rF   rI  r   r   _ppoly4d_evalr   )r0   r   r2   r1   r3   r7   r  r   r=  uir!  r/  r0  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   r`  )r0   r   r2   r!  r  rU  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%   rr   rJ   r  )rD   rE   rF   rI  r   r   r   	transposer_  r   r   r`  )	r0   r   r2   r1   r3   r!  rU  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   rR  )	rD   r   r   r   r`  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   r4  )r   r(   )rx  rz  )r  r	  c                    s    | |fS r   r8   )r2   r1   r!  r8   r9   <lambda>(	      z/TestNdPPoly.test_integrate_2d.<locals>.<lambda>gh㈵>)ZepsrelZepsabs)r   )r   r   r   )rD   rE   rF   rI  r   rD  rw   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	  rz  r   r;  r:  )r   r   r[   )	rD   rE   rF   rI  r   r   Zintegrate_1dr`  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)rj   rk   rl   r1  r7  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  rZ  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   r5  rX   rY   KZ	saveshaperb  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rn n&|d d |
  kr|d d ksn 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
    Nr3  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   r6  {	  s6    (
 

 
r6  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rn nN|d d |  kr|d d krn n&|d d |  kr|d d ksn 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
    Nr9  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rn nx|d d |  kr|d d krn nP|d d |  kr|d d krn 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  rg   rh   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   Z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$   rm   r  r%  rE  rd  rw  r  r  r  r
  r.  r  rb   r  rY  r6  r<  r?  r8   r8   r8   r9   <module>   sT   $ <_      
J /   h  1 $ W
$
(