o
    EbO                     @   sd  d dl Z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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 d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&  m'Z( d dl)m*Z* G dd	 d	Z+d
d Z,dd Z-dd Z.dd Z/dd Z0dd Z1d(ddZ2d)ddZ3dd Z4G dd dZ5G d d! d!Z6d"d# Z7d*d$d%Z8G d&d' d'Z9dS )+    N)assert_equalassert_allcloseassert_suppress_warnings)raises)BSplineBPolyPPolymake_interp_splinemake_lsq_spline_bsplsplevsplrepsplprepsplder
splantidersprootsplintinsertCubicSpline)_pep440)_not_a_knot_augknt_woodbury_algorithm_periodic_knots_make_interp_per_full_matr)_splintc                   @   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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ej !d9e"d:d;d<d= Z#d>d? Z$d@dA Z%dBdC Z&dDdE Z'dFdG Z(ej !dHg dIdJdK Z)ej !dHg dIdLdM Z*dNdO Z+dPS )QTestBSplinec              	   C   s  t ttftfi tddgdgdd tjdd t ttfi tdtjgdgdd W d    n1 s6w   Y  t ttfi tdtjgdgdd t ttfi tddgdgdd t ttfi tdgdggdgdd t ttfi tg d	dgdd t ttfi tg d
ddgdd t ttfi tg dg ddd t ttfi tg dg ddd t ttfi tg dg ddd d\}}t	|| d }tj

|}t|||}t||j t||j t||j d S )N                 ?      ?r   tckignore)Zinvalidr   r      r   r   r(         r(   )        r,   r           @      @      @)r    r    r    Zcubic      @)r,   r   r   r   r(   r*   )r    r   r   )   r*   )assert_raises	TypeError
ValueErrorr   dictnpZerrstatenaninfarangerandomr   r"   r#   r   r$   )selfnr$   r"   r#   b r>   G/usr/lib/python3/dist-packages/scipy/interpolate/tests/test_bsplines.py	test_ctor   s:   &$"&"



zTestBSpline.test_ctorc                 C   s~   t  }|j}t|j|d ddd t|j|d ddd t|j|d  tt	 d|_W d    d S 1 s8w   Y  d S )Nr   V瞯<atolrtolr   r(   Zfoo)
_make_random_splinetckr   r"   r#   r   r$   pytestr   AttributeError)r;   r=   rF   r>   r>   r?   test_tck9   s   "zTestBSpline.test_tckc                 C   sf   t ddd}tddgdgdd}t||d tg dddgdd}t||t |d	k dd d S )
Nr   r   
   r.   r!   r*   )r   ffffff?r   r+   rK   )r6   linspacer   r   wherer;   xxr=   r>   r>   r?   test_degree_0E   s
    zTestBSpline.test_degree_0c                 C   s   g d}g d}d}t |||}tddd}t|d t| |d t|d   |d t|d   ||dd	 tt||||f||dd	 d S )
Nr)   r   r(   r*   r   r*   2   r   r(   +=rC   )r   r6   rL   r   B_012r   )r;   r"   r#   r$   r=   xr>   r>   r?   test_degree_1N   s   8"zTestBSpline.test_degree_1c                 C   s   d}t dg|d  dg|d   }t g d}t|ddddg}t|||}t ddd}t||d	d
||d	d
dd tt||||f||dd d S )Nr*   r   r   r    r-   r.   r/   r&   g      r-   rJ   TextrapolaterS   rT   )r6   asarrayr   reshaper   rL   r   r   )r;   r$   r"   r#   ZbpbsplrO   r>   r>   r?   test_bernsteinY   s   "
zTestBSpline.test_bernsteinc                    s   t  }|j\ t  d  d}||} fdd|D }t||dd  fdd|D }t||dd d S )Nr   rR   c                       g | ]	}t | qS r>   _naive_eval.0rV   r#   r$   r"   r>   r?   
<listcomp>o       z4TestBSpline.test_rndm_naive_eval.<locals>.<listcomp>rS   rT   c                    r_   r>   )_naive_eval_2rb   rd   r>   r?   re   r   rf   )rE   rF   r6   rL   r   )r;   r=   rO   Zy_bZy_nZy_n2r>   rd   r?   test_rndm_naive_evalg   s   z TestBSpline.test_rndm_naive_evalc                 C   sP   t  }|j\}}}t|| || d  d}t||t||||fdd d S )Nr   rR   rS   rT   rE   rF   r6   rL   r   r   r;   r=   r"   r#   r$   rO   r>   r>   r?   test_rndm_splevu   s   "zTestBSpline.test_rndm_splevc                 C   s   t jd t t jd}t jd}t||}t| }|j|j}}t || || d  d}t	||t
||dd d S )N     r   P   rS   rT   )r6   r:   seedsortr   r   r"   r$   rL   r   r   )r;   rV   yrF   r=   r"   r$   rO   r>   r>   r?   test_rndm_splrep{   s   
zTestBSpline.test_rndm_splrepc                 C   sJ   t  }t|j|_t|j|j |j|j d  d}t||d d S )Nr   d   r    )rE   r6   	ones_liker#   rL   r"   r$   r   )r;   r=   rO   r>   r>   r?   test_rndm_unity   s   $zTestBSpline.test_rndm_unityc           	      C   s~   d\}}t t j|}t jj|ddfd}t|||}|| || d  }}||| t jd  }t||jd d S )N   r*         sizer   r*   r+      )r*   r+   r}   rx   ry   )r6   rp   r:   r   r   shape)	r;   r<   r$   r"   r#   r=   tmtprO   r>   r>   r?   test_vectorization   s   zTestBSpline.test_vectorizationc           
      C   s   d\}}t t j|| d }t j|}t j|t j|d f }t|||t|||}}|d |d  }t |d | |d | d}	t||	||	dd t||	t|	|||fdd t||	t|	|||fdd d S )N)!   r*   r   r&   r   rR   rS   rT   )r6   rp   r:   r_r   rL   r   r   )
r;   r<   r$   r"   r#   Zc_padr=   Zb_paddtrO   r>   r>   r?   
test_len_c   s   "zTestBSpline.test_len_cc                 C   sb   t  }|j\}}}|| || d  }}dD ]}t|||g|||d |d g|dd qd S )Nr   )TF绽|=&.>rT   rE   rF   r   )r;   r=   r"   _r$   r   r   Zextrapr>   r>   r?   test_endpoints   s   zTestBSpline.test_endpointsc                 C   sX   t  }|j\}}}t|||d | d  d |||d | d  d dd d S )Nr   r   r   rT   r   )r;   r=   r"   r   r$   r>   r>   r?   test_continuity   s
   :
zTestBSpline.test_continuityc                 C   s   t  }|j\}}}|d |d  }t|| | || d  | d}|| |k ||| d  k @ }t||| dd||| dd t||ddt||||fdd d S )	Nr&   r   r   rR   TrY   F)extri   )r;   r=   r"   r#   r$   r   rO   maskr>   r>   r?   test_extrap   s   $zTestBSpline.test_extrapc                 C   sL   t  }|j\}}}|d d |d d g}||}ttt|  d S )Nr   r   r&   )rE   rF   r   r6   allisnan)r;   r=   r"   r   r$   rO   yyr>   r>   r?   test_default_extrap   s
   zTestBSpline.test_default_extrapc           	      C   s  t jd t t jd}t jd}d}t|||dd}|j|d  }|d |d	  }t || | || | d
}|| |||  || ||    }t||t||||f g d}|| |||  || ||    }t	||dd||dd d S )Nrl      r+   r*   periodicrY   r   r&   r   rR   )r&   r         ?r   T)
r6   r:   ro   rp   r   r{   rL   r   r   r   )	r;   r"   r#   r$   r=   r<   r   rO   Zxyr>   r>   r?   test_periodic_extrap   s   $$z TestBSpline.test_periodic_extrapc                 C   sV   t  }|j\}}}t|||f}t|| ||  d}t||||ddd d S )Nrs   rS   rB   )rE   rF   r	   from_spliner6   rL   r   )r;   r=   r"   r#   r$   pprO   r>   r>   r?   
test_ppoly   s
   zTestBSpline.test_ppolyc                 C   s   t  }|j\}}}t|d |d d}tj||f }td|d D ]}t||||f|d}t||||ddd q"t|||d dddd d S )	Nr   r&   rR   r   dernurS   rT   )rE   rF   r6   rL   r   ranger   r   )r;   r=   r"   r#   r$   rO   r   Zydr>   r>   r?   test_derivative_rndm   s   z TestBSpline.test_derivative_rndmc              
   C   s4  d}g d}t jd t jddt jdddf }t|||}t g d}t|||dk d |||dk d  tt |d	|d
  t ddg}t||d dd||d dd t ddg}tt 	t ||d dd||d dd  tt 	t ||d dd||d dd  d S )Nr(   )r&   r&   r   r   r   r*   r+   rx   rx   rx   ry   ry   rl   r   r}   )r   r*   r+   rx   rx   r   g2H@gη   @r*   r+   r   r   )
r6   r:   ro   r   r   r[   r   r   Zallcloser   )r;   r$   r"   r#   r=   rV   x0x1r>   r>   r?   test_derivative_jumps   s*   
z!TestBSpline.test_derivative_jumpsc                 C   s   t ddd}tjg dd}t||t||j|j|jfdd t||t	|dd tjg dd}t d	d
d}t||t 
|dk || d| d
 dd d S )Nr&   r+   rm   r   r   r(   r*   )r"   rS   rT   r   r   r   r(   r   r(   rJ   r   r-   )r6   rL   r   basis_elementr   r   r"   r#   r$   B_0123rM   rN   r>   r>   r?   test_basis_element_quadratic  s   
z(TestBSpline.test_basis_element_quadraticc                 C   sN   t  }|j\}}}t|| || d  d}t||t||||dd d S )Nr   rm   rS   rT   )rE   rF   r6   rL   r   _sum_basis_elementsrj   r>   r>   r?   test_basis_element_rndm  s    z#TestBSpline.test_basis_element_rndmc           	      C   s   t  }|j\}}}|d }t|||}t||jj|}t||jj|}t|| || d  d}t||j||dd t||j||dd d S )Ny      ?      @r   rm   rS   rT   )	rE   rF   r   r#   realimagr6   rL   r   )	r;   r=   r"   r#   r$   ccb_reb_imrO   r>   r>   r?   
test_cmplx%  s   zTestBSpline.test_cmplxc                 C   s&   t g d}tt|tj d S )Nr   )r   r   r   r6   r   r7   r;   r=   r>   r>   r?   test_nan2  s   zTestBSpline.test_nanc                 C   st   t dd}|j\}}}t|||}t|| || d  d}td|D ]}| }t|||||ddd q$d S )Nr}   r$   r   rm   -q=rB   )rE   rF   r   r6   rL   r   
derivativer   )r;   r=   r"   r#   r$   Zb0rO   jr>   r>   r?   test_derivative_method7  s   
z"TestBSpline.test_derivative_methodc                 C   s   t  }|j\}}}t|| || d  d}t|  |||ddd tj|||f }t||f}t	|||}t|  |||ddd d S )Nr   rm   rS   rB   )
rE   rF   r6   rL   r   antiderivativer   c_dstackr   rj   r>   r>   r?   test_antiderivative_method@  s   


z&TestBSpline.test_antiderivative_methodc                 C   sN  t g d}t|ddd t|ddd t|ddd t|ddd t|jddddd t|jddd	dd t|jddd	dd |j\}}}t|jddd	dt|||ddd  d
|_| }|d|d }t|dd| t|d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   r   r   g      r&   TrY   Fr   r(   iii      ?r*   g      +@   rx   ir+   )r   r   r   	integraterF   r   rZ   r   )r;   r=   r"   r#   r$   iZ
period_intr>   r>   r?   test_integralN  s<   .&*zTestBSpline.test_integralc                 C   sN   g d}t ||}d|_t|}dD ]\}}t|||||| qd S )Nr)   r   ))r   )r   r}   )r      )r
   rZ   r	   r   r   r   )r;   rV   r=   pr   r   r>   r>   r?   test_integrate_ppolyt  s   


z TestBSpline.test_integrate_ppolyc                 C   sN   G dd dt }|g d}t|j| t| j| t| j| d S )Nc                   @   s   e Zd ZdS )z'TestBSpline.test_subclassing.<locals>.BN)__name__
__module____qualname__r>   r>   r>   r?   B  s    r   )r   r   r(   r(   )r   r   r   	__class__r   r   )r;   r   r=   r>   r>   r?   test_subclassing  s
   zTestBSpline.test_subclassingaxisr   r+   c              
   C   sf  d\}}t dd|| d }g d}|d }||| t jj|d}t||||d}t|jj|| g|d |  ||d d    t jd}	t||	j|d | t|	j ||d d    |j	 d |j	fD ]}
t
t jtfi t||||
d	 qlt||||d t||||dd
t||||d t||||dd
fD ]	}t|j|j qd S )Nrv   r   r   )rx   ry   r   r+   rz   r   r|   )r"   r#   r$   r   r(   )r6   rL   r   r:   r   r   r#   r~   listndimr2   Z	AxisErrorr5   r   r   r   )r;   r   r<   r$   r"   shZpos_axisr#   r=   ZxpZaxb1r>   r>   r?   	test_axis  s2   $
$zTestBSpline.test_axisc                 C   sp   d}g d}t g dg dg}t|||dd}t||d |}t||d |}t|d	|d	|d	g d S )
Nr(   )r   r   r(   r*   r+   r}   rx   )r&   r(   r   r&   )r(   r   r   r&   r   r   r   r0   )r6   arrayr   r   )r;   r$   r"   r#   splZspl0Zspl1r>   r>   r?   test_neg_axis  s   zTestBSpline.test_neg_axisc                 C   sh   dd }d}d}dD ]}|||| q
t dddD ]}|||d qd	}t dd
D ]}|||d q)dS )a7  
        Splines with different boundary conditions are built on different
        types of vectors of knots. As far as design matrix depends only on
        vector of knots, `k` and `x` it is useful to make tests for different
        boundary conditions (and as following different vectors of knots).
        c           	      S   s   t jd t t j| d d }t j| d d }|dkr'|d |d< t||||d}t t|j| d }t	|j|||}t	
||j| }t||j |d	d
 t||d	d
 dS )zi
            To avoid repetition of the code the following function is
            provided.
            rl   (   rm   r   r&   r   r$   bc_typer   rS   rT   N)r6   r:   ro   rp   random_sampler
   Zeyelenr"   r   design_matrixtoarrayr   r#   )	r<   r$   r   rV   rq   r]   r#   Zdes_matr_defdes_matr_csrr>   r>   r?   run_design_matrix_tests  s    zHTestBSpline.test_design_matrix_bc_types.<locals>.run_design_matrix_testsr1   r*   clampednaturalr   r(   
not-a-knotr}   ry   r   N)r   )r;   r   r<   r$   Zbcr>   r>   r?   test_design_matrix_bc_types  s   z'TestBSpline.test_design_matrix_bc_typesc           
      C   s   t jd d}d}t t j|d d }t j|d d }t|||d}tddD ]"}|d | }|d | }t||j	|
 }	t|	|j |d	d
 q-d S )Nrl   rJ   r*   r   rm   r   r   r+   rS   rT   )r6   r:   ro   rp   r   r
   r   r   r   r"   r   r   r#   )
r;   r<   r$   rV   rq   r]   r   Zxcycr   r>   r>   r?   test_design_matrix_x_shapes  s"   z'TestBSpline.test_design_matrix_x_shapesc                 C   s2   g d}t d|d }t|g dgdd d S )N)r    r    r    r-   r.   r/   r/   r/   r-   r*   )g      ?gmਪ?gK}\UU?r,   rS   rT   )r   r   r   r   )r;   r"   Zdes_matrr>   r>   r?   test_design_matrix_t_shapes  s   
z'TestBSpline.test_design_matrix_t_shapesc                 C   s   t jd d}d}t t j|d d }t j|d d }t|||d}tt t	||j
d d d | W d    n1 sDw   Y  d}g d	}g d
}tt t	||| W d    d S 1 sjw   Y  d S )Nrl   rJ   r*   r   rm   r   r&   r(   )r,   r    r-   r.   r/   g      @rX   )r6   r:   ro   rp   r   r
   r2   r4   r   r   r"   )r;   r<   r$   rV   rq   r]   r"   r>   r>   r?   test_design_matrix_asserts  s   

"z&TestBSpline.test_design_matrix_assertsr   )r   r   r   r   c                 C   s   t jd t t jd}t jd}|dkr|d |d< t|||d}tj||d}t ddd}t||||dd	 t	|||d}t|j
|j
dd	 d S )
Nrl   rm   r   r   r&   r   r   rA   rT   )r6   r:   ro   rp   r   r   from_power_basisrL   r   r
   r#   )r;   r   rV   rq   cbr]   rO   Zbspl_newr>   r>   r?   test_from_power_basis  s   z!TestBSpline.test_from_power_basisc                 C   s   t jd t t jd}t jdt jdd  }|dkr'|d |d< t|||d}tj||d}t||j|d}t||j	|d}t
|jj|jd|j  j t|j|jd|j  dd	 d S )
Nrl   rm   r   r   r   r&   r   rA   rT   )r6   r:   ro   rp   r   r   r   r
   r   r   r   r#   dtyper   )r;   r   rV   rq   r   r]   Zbspl_new_realZbspl_new_imagr>   r>   r?   test_from_power_basis_complex  s&   

z)TestBSpline.test_from_power_basis_complexc                 C   sL   t g d}t g d}tjt||dddd}t|jg ddd dS )	a}  
        For x = [0, 1, 2, 3, 4] and y = [1, 1, 1, 1, 1]
        the coefficients of Cubic Spline in the power basis:

        $[[0, 0, 0, 0, 0],\$
        $[0, 0, 0, 0, 0],\$
        $[0, 0, 0, 0, 0],\$
        $[1, 1, 1, 1, 1]]$

        It could be shown explicitly that coefficients of the interpolating
        function in B-spline basis are c = [1, 1, 1, 1, 1, 1, 1]
        r)   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rA   rT   N)r6   r   r   r   r   r   r#   )r;   rV   rq   r]   r>   r>   r?   test_from_power_basis_exmp'  s   z&TestBSpline.test_from_power_basis_exmpN),r   r   r   r@   rI   rP   rW   r^   rh   rk   rr   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   markparametrizer   r   r   r   r   r   r   r   r   r   r>   r>   r>   r?   r      sR    #				&


+

r   c               	   C   sf   d	dd} dD ])}t |d}tt|D ]\}}| || td|d D ]
}| |||dd q$qqd S )
Nr   rS   c           	      S   s   | j \}}}t|}tj|d d d|dd  |d d   |d d f }tt||||f|| ||||d|| jf d d S )Nr   g?r   r   r&   zder = %s  k = %s)rC   rD   err_msg)rF   r6   uniquer   r   r   r$   )	r=   r   r   rC   rD   r"   r#   r$   rV   r>   r>   r?   check_splev?  s   
8
z,test_knots_multiplicity.<locals>.check_splev)r   r(   r*   r+   r}   r   r   r   )r   rS   rS   )rE   	enumerate_make_multiplesr   )r   r$   r=   r   r   r   r>   r>   r?   test_knots_multiplicity;  s   



r   c                 C   s   |dkr|| |   kr||d  k rdS  dS |||  || kr%d}n| ||  |||  ||   t | |d || }||| d  ||d  krRd}|| S ||| d  |  ||| d  ||d    t | |d |d | }|| S )zw
    Naive way to compute B-spline basis functions. Useful only for testing!
    computes B(x; t[i],..., t[i+k+1])
    r   r   r    r,   _naive_B)rV   r$   r   r"   c1c2r>   r>   r?   r   R  s   (2Fr   c                    s    kr	nt d    kr"d  ks%J  J kr1t k s3J t fddtdd D S )z=
    Naive B-spline evaluation. Useful only for testing!
    r   c                 3   s.    | ]} |  t |  V  qd S Nr   )rc   r   r#   r   r$   r"   rV   r>   r?   	<genexpr>o  s   , z_naive_eval.<locals>.<genexpr>r   )r6   searchsortedr   sumr   )rV   r"   r#   r$   r>   r   r?   ra   e  s   ((ra   c                    st   t d  }|d ksJ t  |ksJ    kr'| ks*J  J t fddt|D S )z'Naive B-spline evaluation, another way.r   c                 3   s&    | ]} | t | V  qd S r   r   )rc   r   r#   r$   r"   rV   r>   r?   r   x  s   $ z _naive_eval_2.<locals>.<genexpr>)r   r   r   )rV   r"   r#   r$   r<   r>   r   r?   rg   r  s
   $ rg   c                 C   s~   t ||d  }||d ksJ t ||ksJ d}t|D ]}tj|||| d  dd| }||| t| 7 }q|S )Nr   r,   r(   FrY   )r   r   r   r   r6   Z
nan_to_num)rV   r"   r#   r$   r<   sr   r=   r>   r>   r?   r   {  s   "r   c                 C   sT   t | } t | | dk | dkB | dk| dk @ | dk| dk@ gdd dd dd gS )z+ A linear B-spline function B(x | 0, 1, 2).r   r(   r   c                 S      dS )Nr,   r>   rV   r>   r>   r?   <lambda>      zB_012.<locals>.<lambda>c                 S   s   | S r   r>   r  r>   r>   r?   r    r  c                 S   s   d|  S Nr-   r>   r  r>   r>   r?   r    s    )r6   
atleast_1d	piecewiser  r>   r>   r?   rU     s   
rU   c                 C   s   t | } | dk | dk| dk @ | dkg}|dkr$dd dd dd g}n|dkr4dd d	d d
d g}ntd| t | ||}|S )z0A quadratic B-spline function B(x | 0, 1, 2, 3).r   r(   r   c                 S   s   | |  d S r  r>   r  r>   r>   r?   r    s    zB_0123.<locals>.<lambda>c                 S   s   d| d d  S )Ng      ?r   r(   r>   r  r>   r>   r?   r        c                 S   s   d|  d d S )Nr.   r(   r>   r  r>   r>   r?   r    r	  c                 S   r  Nr    r>   r  r>   r>   r?   r    r  c                 S   r  )Ng       r>   r  r>   r>   r?   r    r  c                 S   r  r
  r>   r  r>   r>   r?   r    r  znever be here: der=%s)r6   r  r4   r  )rV   r   ZcondsZfuncspiecesr>   r>   r?   r     s   
r   #   r*   c                 C   s@   t jd t t j| | d }t j| }t|||S )N{   r   )r6   r:   ro   rp   r   Zconstruct_fast)r<   r$   r"   r#   r>   r>   r?   rE     s   rE   c                 c   s    | j | j}}| j }|d |dd< |d |d< t|||V  | j }|d |d|d < t|||V  | j }|d || d d< t|||V  dS )	zIncrease knot multiplicity.         rw   r   Nr   r&   )r#   r$   r"   copyr   )r=   r#   r$   t1r>   r>   r?   r     s   


r   c                   @   s   e Zd Zdd Zdd Zdd Zejje	
eje	dk dd	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 )TestInteropc                 C   s   t ddt j d}t |}t||}|j|j|jf| _|||| _	| _
| _t ddt j d| _t j|j|j|jf }t ||f| _t|j| j|j| _d S )Nr   r/   )   r  )r6   rL   picosr
   r"   r#   r$   rF   rO   r   r=   xnewr   r   r   r   b2)r;   rO   r   r=   r   r>   r>   r?   setup_method  s   

zTestInterop.setup_methodc                    s  | j | j| j} }tt|  |ddd tt| j |ddd t fdd|D  |ddd t }|td tt||||ddd W d    n1 sXw   Y  t	t
d|jjd }|j|}|j||jf}tt|||||ddd d S )NrA   rB   c                    s   g | ]}t | qS r>   )r   rb   r=   r>   r?   re     s    z*TestInterop.test_splev.<locals>.<listcomp>zHCalling splev.. with BSpline objects with c.ndim > 1 is not recommended.r   r   )r  r=   r  r   r   rF   r   filterDeprecationWarningtupler   r#   r   	transposer"   r$   )r;   r  r  supr   r   rF   r>   r  r?   
test_splev  s,   



	

zTestInterop.test_splevc                 C   s   | j | j}}t||}t||\}}}t|d |dd t|d |dd t|d | t||dd\}}}}t|d |dd t|d |dd t|d | t||}	t||	dd t| }
t||
|dd d S )Nr   rA   rT   r   r(   T)full_output)rO   r   r   _implr   r   r   r   )r;   rV   rq   rF   r"   r#   r$   Ztck_fr   r   r=   r>   r>   r?   test_splrep  s   

zTestInterop.test_splrepz1.14.0zrequires NumPy >= 1.14.0reasonc                 C   s  | j | j}}tj||f }tt t|| W d    n1 s"w   Y  tt t|| W d    n1 s<w   Y  ttdd t|d d |d d  W d    n1 s_w   Y  ttdd t|d d |d d  W d    d S 1 sw   Y  d S )Nm > k must holdmatchr*   )	rO   r   r6   r   r2   r4   r   r#  r3   )r;   rV   rq   Zy2r>   r>   r?   test_splrep_errors   s   

"zTestInterop.test_splrep_errorsc           	      C   s   t dd}t|\}}t|\}}t||dd tt|||dd tt|||dd t|ddd\\}}}}}t||dd tt|||dd d S )Nr   r*   r}   rA   rT   r   T)r  r"  )r6   r9   r\   r   r#  r   r   )	r;   rV   r=   urF   Zu1Zb_fZu_fr   r>   r>   r?   test_splprep  s   zTestInterop.test_splprepc                 C   s  t dd}ttdd t| W d    n1 sw   Y  ttdd t| W d    n1 s8w   Y  t jdddd}ttd	d t|g W d    n1 s[w   Y  ttd	d t|g W d    n1 sww   Y  g d
}ttdd t|g W d    n1 sw   Y  ttdd t|g W d    n1 sw   Y  g d}g d}ttdd t|gd |g  W d    d S 1 sw   Y  d S )N<   r|   ztoo many values to unpackr(  r   r   r*   )Znumr'  ) >Ir/   >Kr0  zInvalid inputs)r   r*   r(   r+   )r   g333333?g?r   )	r6   r9   r\   r2   r4   r   r#  rL   r3   )r;   rV   r,  r>   r>   r?   test_splprep_errors!  s4   
"zTestInterop.test_splprep_errorsc                 C   s
  | j | j}}tg dtj }tt||ddd tt|j|j|j	f|ddd t
 }|td t|dd}W d    n1 sEw   Y  t|}t|jd t|| dd	d
 |jddd}tt|j||j	fdd}t|jd t|| dd	d
 d S )N)r   r   r0   g      @gHz>rB   zICalling sproot.. with BSpline objects with c.ndim > 1 is not recommended.rR   )Zmest)r*   r(   r+   r   r   rT   r   r(   )r=   r  r6   r   r  r   r   r"   r#   r$   r   r  r  r[   r   r~   r  )r;   r=   r  rootsr   rc2rZrrr>   r>   r?   test_sproot>  s"    
zTestInterop.test_sprootc                 C   s   | j | j}}ttdd|tdd|jdd ttdd||dddd t }|td ttdd||dddd W d    n1 sIw   Y  |j	
ddd}ttdd|j||jf}t|jd t|tdd|dd d S )Nr   r   rS   rT   zICalling splint.. with BSpline objects with c.ndim > 1 is not recommended.r(   )r*   r(   )r=   r  r   r   rF   r   r   r  r  r#   r  r6   r[   r"   r$   r   r~   )r;   r=   r  r   r4  Zintegrr>   r>   r?   test_splintU  s&    
zTestInterop.test_splintc              	   C      | j | jfD ]c}t|jt|j }|dkr+tj|jt|f|jjdd   f |_dD ];}t	|}t
	|j|j|jf}t|j|d dd t|j|d dd t|j|d  tt|t tt|t q-qd S Nr   r   rQ   rA   rT   r(   )r=   r  r   r"   r#   r6   r   zerosr~   r   r#  r$   r   r   r   
isinstancer   r  r;   r=   Zctr<   ZbdZtck_dr>   r>   r?   test_splderj     *zTestInterop.test_splderc              	   C   r7  r8  )r=   r  r   r"   r#   r6   r   r9  r~   r   r#  r$   r   r   r   r:  r   r  r;  r>   r>   r?   test_splantiderz  r=  zTestInterop.test_splantiderc                 C   s$  | j | j| j}}}|jjd }d|j| |j|d    }t||t||j|j|jf}}tt	||t	||dd t
t|t t
t|t tt|jj}|j|dd  d }	t||j|	|jf}
t||}ttt	||
ddd||dd t
t|t t
t|
t d S )Nr(   r   r   rA   rT   r  r   )r=   r  rO   r"   r{   r   r#   r$   r   r   r   r:  r   r  r   r   r  r6   r[   )r;   r=   r  rO   r   tnZbnZtck_nr   r   Ztck_n2Zbn2r>   r>   r?   test_insert  s$   "


zTestInterop.test_insertN)r   r   r   r  r!  r$  rG   r   xfailr   parser6   __version__ZVersionr*  r-  r1  r5  r6  r<  r>  r@  r>   r>   r>   r?   r    s    
r  c                   @   sT  e Zd Zeddej ZeeZdd Z	dd Z
dd Zd	d
 Zdd Zejdg ddd Zdd Zdd Zdd Zejdg ddd Zdd Zdd Zdd Zd d! Zd"d# Zejjd$d%d&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Z d0d1 Z!d2d3 Z"d4d5 Z#ejdg d6d7d8 Z$d9d: Z%d;d< Z&d=d> Z'd?d@ Z(dAdB Z)dCS )D
TestInterpr,   r-   c                 C   s@   t t t| j| jdd W d    d S 1 sw   Y  d S )Nr0   r   )r2   r3   r
   rO   r   )r;   r>   r>   r?   test_non_int_order  s   
"zTestInterp.test_non_int_orderc                 C   Z   t | j| jdd}t|| j| jddd t | j| jddd}t|| j| jddd d S )Nr   r   rS   rB   r&   r$   r   r
   rO   r   r   r   r>   r>   r?   test_order_0     zTestInterp.test_order_0c                 C   rF  )Nr   r   rS   rB   r&   rG  rH  r   r>   r>   r?   test_linear  rJ  zTestInterp.test_linearc                 C   s6   dD ]}t | j| j|}t|| j| jddd qd S )Nr+  rS   rB   rH  )r;   r$   r=   r>   r>   r?   test_not_a_knot  s   zTestInterp.test_not_a_knotc                 C   s   t | j| jddd}t|| j| jddd tddD ]}t|| jd |d|| jd	 |dd
d qt | j| jddd	d}t|| j| jddd tddD ]}t|| jd |d|| jd	 |dd
d qOd S )Nr}   r   r   rS   rB   r   r   r   r&   gdy=rT   r$   r   r   )r
   rO   r   r   r   )r;   r=   r   r>   r>   r?   test_periodic  s   ,,zTestInterp.test_periodicr$   )r(   r*   r+   r}   rx   ry   c                 C   sh   d}t jd t t j|d }t j|d }|d |d< t|||dd}t|||d	d
 d S )Nr}   rl   rJ   rs   r&   r   r   r   rS   rT   )r6   r:   ro   rp   r   r
   r   )r;   r$   r<   rV   rq   r=   r>   r>   r?   test_periodic_random  s   zTestInterp.test_periodic_randomc                 C   s   | j jd }tjd tj|d tj }t|}d|d< dtj |d< td|f}t	||d< t
||d< t||dddd	}t|D ]}t||| |d d |f d
d qIt||d ||d d
d d S )Nr   rl   r(   r,   r&   r   r}   r   rM  rS   rT   )rO   r~   r6   r:   ro   r   r  rp   r9  sinr  r
   r   r   )r;   r<   rV   rq   r=   r   r>   r>   r?   test_periodic_axis  s   
$"zTestInterp.test_periodic_axisc                 C   s   t jd d}d}t t j|}t j|}|d d |d< tt t|||dd W d    d S 1 s9w   Y  d S )	Nrl   r}   r   r&   r   r   r   r   )r6   r:   ro   rp   r   r2   r4   r
   )r;   r$   r<   rV   rq   r>   r>   r?   test_periodic_points_exception  s   
"z)TestInterp.test_periodic_points_exceptionc                 C   s   t jd d}d}t t j|}t j|}t |d|  }tt t||||d W d    d S 1 s:w   Y  d S )Nrl   r*   ry   r(   r   )	r6   r:   ro   rp   r   r9  r2   r4   r
   )r;   r$   r<   rV   rq   r"   r>   r>   r?   test_periodic_knots_exception  s   
"z(TestInterp.test_periodic_knots_exception)r(   r*   r+   r}   c                 C   s   t | j| j|dd}t| j| jd|d}t| j|}t||| jdd td|D ]}t| j||d}t||| j|d	d
d q)d S )Nr   r   T)Zperr$   rS   rT   r   r   r   r   )r
   rO   r   r   r   r   r   )r;   r$   r=   rF   r   r   r>   r>   r?   test_periodic_splev  s   zTestInterp.test_periodic_splevc                 C   s   t | j| jddd}t| j| jdd}t|| j|| jdd d}ttj|d }tj|d }|d	 |d
< t ||ddd}t||dd}t||||dd d S )Nr*   r   r   r   rS   rT   rJ   rs   r&   r   )	r
   rO   r   r   r   r6   rp   r:   r   )r;   r=   Zcubr<   rV   rq   r>   r>   r?   test_periodic_cubic  s   zTestInterp.test_periodic_cubicc                    sj   dt | j| jdd}t| jt| j| j t fdd}t|| j|| jdd d S )Nr*   r   r   c                    s   t |  S r   r`   r  rd   r>   r?   r  "  s    z6TestInterp.test_periodic_full_matrix.<locals>.<lambda>rS   rT   )r
   rO   r   r   r   r6   Z	vectorizer   )r;   r=   r   r>   rd   r?   test_periodic_full_matrix  s   z$TestInterp.test_periodic_full_matrixc                 C   s   dg}t | j| jdd |fd}t|| j| jddd t|| jd d|d d ddd t | j| jd|d fd}t|| j| jddd t|| jd d|d d ddd d S )	Nr   g       @r(   r   rS   rB   r&   r   r   rH  )r;   r   r=   r>   r>   r?   test_quadratic_deriv%  s   $(zTestInterp.test_quadratic_derivc                 C   s   d}dgdg}}t | j| j|||fd}t|| j| jddd t|| jd d|| jd	 dg|d d |d d gddd d
gd
g}}t | j| j|||fd}t|| j| jddd d S )Nr*   r   r.   )r   r/   r   rS   rB   r   r   r&   r(   r   rH  )r;   r$   der_lder_rr=   r>   r>   r?   test_cubic_deriv2  s    zTestInterp.test_cubic_derivc                 C   s   d\}}t |t j}t |}ddg}ddg}t|||||fd}t|||ddd t||d	 d
||d	 dgdd |D  t||d d
||d dgdd |D  d S )N)r}   ry   )r   g      ()r(   r   rW  )r(   r.   r   rS   rB   r   r   r(   c                 S      g | ]\}}|qS r>   r>   rc   r   valr>   r>   r?   re   J      z2TestInterp.test_quintic_derivs.<locals>.<listcomp>r&   c                 S   r^  r>   r>   r_  r>   r>   r?   re   L  ra  )r6   r9   astypefloat_rP  r
   r   )r;   r$   r<   rV   rq   r[  r\  r=   r>   r>   r?   test_quintic_derivsA  s   
zTestInterp.test_quintic_derivsZunstabler%  c                 C   sN   d}t | j|}ddg}t| j| j|||d fd}t|| j| jddd d S )Nr*   rY  )r(   r/   r   rS   rB   )r   rO   r
   r   r   )r;   r$   r"   r[  r=   r>   r>   r?   test_cubic_deriv_unstableN  s
   z$TestInterp.test_cubic_deriv_unstablec                 C   s   d}t j| jd f|d  | jdd  | jd d  d | jd f|d  f }t| j| j||dgdgfd}t|| j| jddd	 t|| jd d|| jd dgd
d
gdd d S )Nr(   r   r   r&   r-   rZ  r   rS   rB   r,   rT   )r6   r   rO   r
   r   r   )r;   r$   r"   r=   r>   r>   r?   test_knots_not_data_sites]  s   
&
z$TestInterp.test_knots_not_data_sitesc                 C   sX   d}ddg}ddg}t |||dgdgfd}tdd}|d }t|||ddd d S )	Nr*   r,   r    r   r,   rY  r   rS   rB   )r
   r6   rL   r   )r;   r$   rV   rq   r=   rO   r   r>   r>   r?   test_minimum_points_and_derivl  s   z(TestInterp.test_minimum_points_and_derivc                 C   s4  g d }}t t t||dgd fd W d    n1 sw   Y  t t t||dd W d    n1 s:w   Y  t t t||dgd W d    n1 sVw   Y  t t t||dd W d    n1 sqw   Y  d\}}t t t||||fd W d    d S 1 sw   Y  d S )N)r    r(   r*   r+   r}   rx   rg  r   *   )rg  rg  )r2   r4   r
   )r;   rV   rq   lr3  r>   r>   r?   test_deriv_specx  s"   




"zTestInterp.test_deriv_specc                 C   s   d}| j }| jd| j  }dgdg}}t|||||fd}t|||ddd t||d d	||d
 d	g|d d	 |d d	 gddd dD ]}t|||d}t|||ddd qHd S )Nr*   r   )r   y              @)r   y      @       @r   rS   rB   r   r   r&   )r   r   r   )rO   r   r
   r   )r;   r$   rO   r   r[  r\  r=   r>   r>   r?   test_complex  s   zTestInterp.test_complexc                 C   sH   t dt j}t dt j}dD ]}t|||d}|| qd S )NrJ   r   r   )r6   r9   rb  int_r
   )r;   rV   rq   r$   r=   r>   r>   r?   test_int_xy  s   
zTestInterp.test_int_xyc                 C   sF   t ddd}|d d d }|d d d }dD ]	}t|||d qd S )Nr&   r   rs   r}   r   r   )r6   rL   r
   )r;   rO   rV   rq   r$   r>   r>   r?   test_sliced_input  s   zTestInterp.test_sliced_inputc                 C   sJ   t dt}|d }t jt jt j fD ]}||d< ttt|| qd S )NrJ   r(   r&   )	r6   r9   rb  floatr7   r8   r2   r4   r
   )r;   rV   rq   zr>   r>   r?   test_check_finite  s   zTestInterp.test_check_finite)r   r(   r*   r}   c                 C   s,   t td}dd |D }t|||d d S )NrJ   c                 S   s   g | ]}|d  qS )r(   r>   )rc   ar>   r>   r?   re     ra  z.TestInterp.test_list_input.<locals>.<listcomp>r   )r   r   r
   )r;   r$   rV   rq   r>   r>   r?   test_list_input  s   zTestInterp.test_list_inputc                 C   s   t jt | jt | jf }dddgfg}dddgfg}t| j|d||fd}t|| j|ddd	 t|| jd
 d|d
 d ddd	 t|| jd d|d
 d ddd	 d S )Nr   r    r-   r.   r/   r*   r   rS   rB   r   r&   )r6   r   rP  rO   r  r
   r   )r;   r   r[  r\  r=   r>   r>   r?   test_multiple_rhs  s   $(zTestInterp.test_multiple_rhsc                 C   s   t jd d\}}t t jj|d}t jj|dddfd}t|||}t|jj|dddf dt jdfg}dt jdfg}t|||||fd	}t|jj|| d dddf d S )
Nrl   r*   rw   rz   r}   rx   ry   r   r}   rx   ry   r   )r6   r:   ro   rp   r
   r   r#   r~   )r;   r$   r<   rV   rq   r=   d_ld_rr>   r>   r?   test_shapes  s   "zTestInterp.test_shapesc                 C   s@  t | j}t| j|ddd}t| j|ddgdgfd}t|j|jdd t| j|ddd}t| j|ddgdgfd}t|j|jdd t| j|d	d
d}t| j|d	d dgfd}t|j|jdd t| j|ddd}t| j|dd d}t|j|jdd tt t| j|ddd W d    n1 sw   Y  t jt | jt 	| jf }dddgfg}d	ddgfg}t| j|d||fd}t| j|ddd}t|j|jdd t j
d d\}}t t j
j
|d}t j
j
|dddfd}	dt dfg}
dt dfg}t||	||
|fd}t||	|dd}t|j|jdd d S )Nr*   r   r   rZ  rA   rT   )r   r   )r   r   r(   )Nr   rg  r   Ztypor   r,   r   rl   rv  rz   r}   rx   ry   rw  r   r   )r6   rP  rO   r
   r   r#   r2   r4   r   r  r:   ro   rp   r9  )r;   r   r   r  r[  r\  r$   r<   rV   rq   rx  ry  r>   r>   r?   test_string_aliases  sJ   




zTestInterp.test_string_aliasesc                 C   sr   t jd d\}}t t jj|d}t jj|d}t||}t||||}t||||}t|j|ddd d S )Nrl   )r*   ry   rz   rS   rB   )	r6   r:   ro   rp   r   r
   make_interp_full_matrr   r#   )r;   r$   r<   rV   rq   r"   r=   Zcfr>   r>   r?   test_full_matrix  s   
zTestInterp.test_full_matrixc                 C   s  t jd d}tdddD ]}t|d d }t t jd|f}td|d D ]6}|d| |df  t t jd|| f7  < ||dd| f  t t jd|| f7  < q*t j||f}||d|| df< t j||f}||| dd|f< t ||f}tt|| d dD ]#\}}	|	d	k rt j||	d
||d|	f< qt j||	d
|||	df< qt j|}
t	t
||||
|t j||
dd qdS )z
        Random elements in diagonal matrix with blocks in the
        left lower and right upper corners checking the
        implementation of Woodbury algorithm.
        rl      r*       r(   r   Nr&   r   )offsetrS   rT   )r6   r:   ro   r   intZdiagflatr9  r   Zdiagonalr   r   linalgsolve)r;   r<   r$   r  rs  r   urZlldr   r=   r>   r>   r?   test_woodbury  s,   46zTestInterp.test_woodburyN)*r   r   r   r6   rL   r  rO   rP  r   rE  rI  rK  rL  rN  rG   r   r   rO  rQ  rR  rS  rT  rU  rV  rX  r]  rd  rA  re  rf  rh  rk  rl  rn  ro  rr  rt  ru  rz  r{  r}  r  r>   r>   r>   r?   rD    sH    







	

3rD  c                 C   s   | j |j ksJ |j | j | d ksJ | j }tj||ftjd}t|D ]+}| | }||| kr4|}nt||d }t||||}	|	|||| |d f< q%t	||}
|
S )zAssemble an spline order k with knots t to interpolate
    y(x) using full matrices.
    Not-a-knot BC only.

    This routine is here for testing only (even though it's functional).
    r   r   )
r{   r6   r9  rc  r   r   r   evaluate_all_bsplslr  )rV   rq   r"   r$   r<   Ar   xvalleftbbr#   r>   r>   r?   r|  8  s   r|  c                 C   s   t tj| ||f\} }}| j}|j| d }tj||ftjd}t|D ]+}| | }||| kr3|}	nt||d }	t	||||	}
|
|||	| |	d f< q$t
|j|}t
|j|}t||}|||ffS )z,Make the least-square spline, full matrices.r   r  )mapr6   r[   r{   r9  rc  r   r   r   r  dotTr  r  )rV   rq   r"   r$   mr<   r  r   r  r  r  r   Yr#   r>   r>   r?   make_lsq_full_matrixT  s   r  c                   @   s   e Zd Zejd d\ZZeejeZ	ejeZ
eee	d e	d deZdd Zdd	 Zd
d Zdd Zdd Zdd Zdd ZdS )TestLSQrl   )r   r*   r   r&   ry   c                 C   s   | j | j| j| jf\}}}}t||||\}}t||||}t|j| t|jj	|j
| d f |\}}	tjj||dd\}
}}}t|j|
 d S )Nr   r&   )Zrcond)rV   rq   r"   r$   r  r   r   r#   r   r~   r{   r6   r  Zlstsq)r;   rV   rq   r"   r$   Zc0ZAYr=   Zaar   r   r   r>   r>   r?   
test_lstsqz  s   zTestLSQ.test_lstsqc                 C   s|   | j | j| j| jf\}}}}t|}t||||}t|||||d}t|j|jdd t|j|jdd t	|j|j d S )N)wrS   rT   )
rV   rq   r"   r$   r6   rt   r   r   r#   r   )r;   rV   rq   r"   r$   r  r=   Zb_wr>   r>   r?   test_weights  s   
zTestLSQ.test_weightsc                 C   sd   | j | j| j| jf\}}}}tjj|dddfd}t||||}t|jj	|j
| d dddf d S )Nr}   rx   ry   rz   r   )rV   r"   r$   r<   r6   r:   r   r   r#   r~   r{   )r;   rV   r"   r$   r<   rq   r=   r>   r>   r?   ru    s   $zTestLSQ.test_multiple_rhsc                 C   sv   | j | j| j}}}| jd }t||||}t||j||}t||j||}t||||d||  ddd d S )Ny      ?       @r   rA   rB   )rV   r"   r$   rq   r   r   r   r   )r;   rV   r"   r$   r   r=   r   r   r>   r>   r?   rl    s   
(zTestLSQ.test_complexc                 C   sD   t dt j}t dt j}t|dd}t|||dd d S )NrJ   r   r   )r6   r9   rb  rm  r   r   )r;   rV   rq   r"   r>   r>   r?   rn    s   zTestLSQ.test_int_xyc                 C   sH   t ddd}|d d d }|d d d }t|d}t|||dd d S )Nr&   r   rs   r*   r   )r6   rL   r   r   )r;   rO   rV   rq   r"   r>   r>   r?   ro    s
   
zTestLSQ.test_sliced_inputc                 C   sV   t dt}|d }t|d}t jt jt j fD ]}||d< ttt	||| qd S )N   r(   r*   r&   )
r6   r9   rb  rp  r   r7   r8   r2   r4   r   )r;   rV   rq   r"   rq  r>   r>   r?   test_checkfinite  s   
zTestLSQ.test_checkfiniteN)r   r   r   r6   r:   ro   r<   r$   rp   rV   rq   r   rL   r"   r  r  ru  rl  rn  ro  r  r>   r>   r>   r?   r  p  s    	r  r  )r  r*   )r*   ):Znumpyr6   Znumpy.testingr   r   r   r   rG   r   r2   Zscipy.interpolater   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zscipy.linalgr  r  Z
scipy._libr   Zscipy.interpolate._bsplinesr   r   r   r   r   Zscipy.interpolate._fitpack_implZinterpolateZ_fitpack_implr#  Zscipy.interpolate._fitpackr   r   r   r   ra   rg   r   rU   r   rE   r   r  rD  r|  r  r  r>   r>   r>   r?   <module>   sB    D    +	
	
 l   
