3
OdS                 @   s   d Z ddlZddlZddlmZmZmZmZ ddlm	Z	 ddl
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mZmZmZ dd	lmZ dd
lmZ ddl m!Z!m"Z" ddlZ#ddl$Z#dd Z%dd Z&G dd de'Z(G dd de'Z)dS )z2 Test functions for scipy.linalg.matfuncs module

    N)arrayeyeexprandom)matrix_power)assert_allcloseassert_assert_array_almost_equalassert_equalassert_array_almost_equal_nulpsuppress_warnings)
csc_matrixSparseEfficiencyWarning)r   )expm_expmProductOperatorMatrixPowerOperator_onenorm_matrix_power_nnm)matrix)logm)	factorialbinomc             C   s   | t | ks| dk rtdt | } |t |ks8|dk r@tdt |}t|| \}}tjd|  | }|tjd|   }tj|g| |  |tj|g| ||   S )aj  
    A helper function for testing matrix functions.

    Parameters
    ----------
    n : integer greater than 1
        Order of the square matrix to be returned.
    p : non-negative integer
        Power of the matrix.

    Returns
    -------
    out : ndarray representing a square matrix
        A Forsythe matrix of order n, raised to the power p.

       z#n must be an integer greater than 1r   z p must be a non-negative integerg      $@)int
ValueErrordivmodnppowerdiag)npabZlargesmall r$   [/var/www/html/virt/lib64/python3.6/site-packages/scipy/sparse/linalg/tests/test_matfuncs.py_burkardt_13_power   s    r&   c              C   sv   t jjd xdtddD ]V} xPtdD ]D}t jj| | f}t jj||}t||}t jj|d}t|| q&W qW d S )Ni        )	r   r   seedrangelinalgr   r   Znormr   )r   r    MZMpobservedexpectedr$   r$   r%   test_onenorm_matrix_power_nnm<   s    
r/   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=S )>TestExpMc             C   s2   t ddgddgg}tt|ddgddgg d S )Ng        r   r'   )r   r	   r   )selfr!   r$   r$   r%   test_zero_ndarrayH   s    zTestExpM.test_zero_ndarrayc             C   s6   t ddgddgg}tt|j ddgddgg d S )Ng        r   r'   )r   r	   r   toarray)r1   r!   r$   r$   r%   test_zero_sparseL   s    zTestExpM.test_zero_sparsec             C   s2   t ddgddgg}tt|ddgddgg d S )Ng        r   r'   )r   r	   r   )r1   r!   r$   r$   r%   test_zero_matrixP   s    zTestExpM.test_zero_matrixc             C   s   t tjdgg}tt d| tt dgg| tt tdgg| tt tjdgg| tt tdggj| t tjdgg}tt d| tt dgg| tt tdgg| tt tdggj| d S )Nr'                 ?r'   )r7   r6   )r8   )r   r   r   r   r   r   A)r1   r9   Br$   r$   r%   test_misc_typesT   s    zTestExpM.test_misc_typesc             C   s   t dddgdddgdddggtd}tjd}tjd}tj|d| d|d|   gd|d||  gdd|ggtd}t|j }t|| d S )Nr'      r   r(   r   )dtype   )	r   floatmathr   r   r   r   r3   r	   )r1   r9   e1e2r.   r-   r$   r$   r%   test_bidiagonal_sparsea   s    

zTestExpM.test_bidiagonal_sparsec             C   sb   x\t jt jgD ]L}xFd
D ]>}|td|d }t|}t|td|d }t||dd	 qW qW d S )N{Gz?皙?      ?r'   
   r<   )r=   d   )nulp)rD   rE   rF   r'   rG   )r   Zfloat32float64r   r   r   r   )r1   r=   scaler9   r-   r.   r$   r$   r%   test_padecases_dtype_floato   s    
z#TestExpM.test_padecases_dtype_floatc             C   sb   x\t jt jgD ]L}xFd
D ]>}|td|d }t|}t|td|d }t||dd	 qW qW d S )N{Gz?皙?      ?r'   rG   r<   )r=   rH   )rI   )rM   rN   rO   r'   rG   )r   Z	complex64
complex128r   r   r   r   )r1   r=   rK   r9   r-   r.   r$   r$   r%   test_padecases_dtype_complexw   s    
z%TestExpM.test_padecases_dtype_complexc             C   s   t j}xdD ]}|tdd|dd }t|td|d	 }t 2}|jtd
 t|ddj	 }t|ddj	 }W d Q R X t
||dd t
||dd qW d S )N{Gz?皙?      ?r'   rG   r<   csc)r=   format)r=   z=Changing the sparsity structure of a csc_matrix is expensive.T)Zuse_exact_onenormFrH   )rI   )rR   rS   rT   r'   rG   )r   rJ   speyer   r   r   filterr   r   r3   r   )r1   r=   rK   r!   esupZexact_onenormZinexact_onenormr$   r$   r%   !test_padecases_dtype_sparse_float   s    
z*TestExpM.test_padecases_dtype_sparse_floatc             C   st   t j}xhdD ]`}|tdd|dd }t|td|d	 }t (}|jtd
 tt	|j
 |dd W d Q R X qW d S )N{Gz?皙?      ?r'   rG   r<   rU   )r=   rV   )r=   z=Changing the sparsity structure of a csc_matrix is expensive.rH   )rI   )r\   r]   r^   r'   rG   )r   rP   rW   r   r   r   rX   r   r   r   r3   )r1   r=   rK   r!   rY   rZ   r$   r$   r%   #test_padecases_dtype_sparse_complex   s    
z,TestExpM.test_padecases_dtype_sparse_complexc          	   C   s   t jd xtjtjgD ]x}xrtddD ]d}x^dD ]V}t|t j|||  j|}tj	|rv|d
t j|| |  }t
tt|| q2W q(W qW d S )Ni  r'   rG   -C6?MbP?{Gz?皙?      $@      Y@y              ?)r`   ra   rb   rc   r'   rd   re   )r   r)   r   rJ   rP   r*   r   ZrandZastypeZiscomplexobjr	   r   r   )r1   r=   r   rK   r9   r$   r$   r%   test_logm_consistency   s    


zTestExpM.test_logm_consistencyc             C   sL   t jddddgddddgddddgddddgg}tt|td|  d S )Nr<   r'   g      ?rg   rg   rg   )r   r   r   r   )r1   Qr$   r$   r%   test_integer_matrix   s    


zTestExpM.test_integer_matrixc             C   st   t jd	dddgdd
ddgddddgddddggt jd}tt|td|  t|}tt|jtd| j d S )Ni  r   i&  ih     iv  )r=   g      ?iii)r   r   Zint16r   r   r   r9   )r1   rh   r$   r$   r%   test_integer_matrix_2   s    

zTestExpM.test_integer_matrix_2c       	      C   s   t jddddgddddgddddgddddggtd}t jdd	ddgddddgddddgdddd ggtd}tt||dd tjd d}|j }||d!< t }|j	t
d t|}W d Q R X d}d| }tt j||||d  d S )"Ng3d?g     L@r   gRal!A?gQI?g^?)r=   g<?gGgx@g9=Ag[dBg        g'V7?gZ@g2pAgѤT ?g\GeE@gPǆ!?g-C6?)rtoli  gFFg<r'   zIll-conditioned.*rH   )rl   atolg<g9=g'V7g2pgѤT gPǆ!)r'   r   )r   r   r?   r   r   r   r)   copyr   rX   RuntimeWarningr   Zallclose)	r1   r9   ZA_logmZtinyZA_logm_perturbedrZ   ZA_expm_logm_perturbedrl   rm   r$   r$   r%   test_triangularity_perturbation   s6    



z(TestExpM.test_triangularity_perturbationc             C   s^   t jd}t jd}t jddgddggtd}t j|dgd|ggtd}t|}t|| d S )Nr'   r   r   )r=   )r   r   r   r?   r   r   )r1   exp1Zexp2r9   desiredactualr$   r$   r%   test_burkardt_1   s    

zTestExpM.test_burkardt_1c             C   sJ   t jddgddggtd}t jddgddggtd}t|}t|| d S )	Nr'   r<   r   )r=   gkQC@gb]IG@gd]IG@gJ[K@)r   r   r?   r   r   )r1   r9   rr   rs   r$   r$   r%   test_burkardt_2  s    zTestExpM.test_burkardt_2c             C   s   t jd}t jd}t jddgddggtd}t jdd|  dd|   t jd	 d|  gdt jd
 d|  dd|  dd|   ggtd}t|}t|| d S )Nr'   '   r   (   )r=   &   iiii)r   r   r   r?   expm1r   r   )r1   rq   Zexp39r9   rr   rs   r$   r$   r%   test_burkardt_3  s    

zTestExpM.test_burkardt_3c             C   s   t jddgddggtd}t jddgdd	ggtd}t jddgddggtd}t jddgtd}t j|t j| |}t|}t|| d S )N1      @      )r=   r<   r'      r      iiry   g      g      ?iry   )r   r   r?   dotr   r   r   )r1   r9   UVwrr   rs   r$   r$   r%   test_burkardt_4%  s    zTestExpM.test_burkardt_4c             C   s   t jddddgddddgddddgddddggtd}t jddddgddddgddddgddddggtd}t|}t|| d S )Nr      )r=   r'      $   )r   r   r?   r   r   )r1   r9   rr   rs   r$   r$   r%   test_burkardt_54  s    





zTestExpM.test_burkardt_5c             C   sT   t jd}t jddgddggtd}t j||gd|ggtd}t|}t|| d S )Nr'   r   )r=   )r   r   r   r?   r   r   )r1   rq   r9   rr   rs   r$   r$   r%   test_burkardt_6H  s    
zTestExpM.test_burkardt_6c             C   sf   t jd}t jd}t jd| dgdd| ggtd}t j||gd|ggtd}t|}t|| d S )Nr'   r   )r=   )r   r   spacingr   r?   r   r   )r1   rq   Zepsr9   rr   rs   r$   r$   r%   test_burkardt_7X  s    


zTestExpM.test_burkardt_7c             C   s   t jd}t jd}t jdddgdddgdddggtd}t jd	| | d	| d|  d
| d
|  gd| | d| d|  d| d
|  gd| d| d| ggtdd }t|}t|| d S )Nr         r   r   r(   r'   )r=      r   	   g      ?ry   iiir   )r   r   r   r?   r   r   )r1   Zexp4Zexp16r9   rr   rs   r$   r$   r%   test_burkardt_8j  s    


((zTestExpM.test_burkardt_8c             C   s   t jddddgddddgddddgddddggtd}t jddddgd	d
ddgddd
dgddd	dggtd}t|}t|| d S )Nr'   r   r<   )r=   gfa%@g@gX21@g鷯g)@g^Iچ@g|Pk܂@g'@gv@gBfg;@gDl{3@)r   r   r?   r   r   )r1   r9   rr   rs   r$   r$   r%   test_burkardt_9{  s    





zTestExpM.test_burkardt_9c             C   sx   t jdddgdddgdddggtd}tttjj|d t jdd	d
gdd	dgdddggtd}t|}t|| d S )Nr   r   r   r'   )r=   r<   r   gl$^{b@g
|f@g.Q@g\"N_@g
|V@g\"N_@gLud@gs[@)r<   r<   r   )	r   r   r?   r   sortedscipyr+   eigvalsr   )r1   r9   rr   rs   r$   r$   r%   test_burkardt_10  s    

zTestExpM.test_burkardt_10c             C   st   t jdddgdddgdddggtd}ttjj|d t jdddgdddgdddggtd}t|}t|| d S )Ng!=@gl?gQP@gt 9@g誉\!@g0n2A@)r=         rw   gJކ3Cg;%s1PCgMSUc[Cg;%s1PCgcx
MjCgO}vCg˂CgQPgQP)r   r   rw   g;%s1PgMSUc[g;%s1PgMSUc[)r   r   r?   r   r   r+   Zeigvalshr   )r1   r9   rr   rs   r$   r$   r%   test_burkardt_11  s&    
zTestExpM.test_burkardt_11c             C   sx   t jdddgdddgddd	ggtd
}tttjj|d t jdddgdddgd ddggtd
}t|}t|| d S )!N      r   i  8   6   i  9   4   )r=   r   r   r'   g)'?g13V?g-RR?gǣ@g׃4V?g3?gWNx`@gp?g}mR?i}izi}r   ry   )r   r   ry   g)'gǣgWNx`)	r   r   r?   r   r   r   r+   r   r   )r1   r9   rr   rs   r$   r$   r%   test_burkardt_12  s    

zTestExpM.test_burkardt_12c       	   	   C   s   t dd}ddddgddddgddddgddddgg}t|| xd
D ]}tdttjd| }tj||ftd	}xft|| D ]V}t ||}t	tj
|d ttj|tjdtj||  |  ||t| 7 }qW tt |d}t|| qFW d S )Nr   r'   r   g-C6?r   r<   rG   r   )r=   )r   r<   r   rG   )r&   r   maxr   r   ceilzerosr?   r*   r
   minr   floorr   r   )	r1   Z	A4_actualZ
A4_desiredr   krr   r    ZAprs   r$   r$   r%   test_burkardt_13  s     






(zTestExpM.test_burkardt_13c             C   sb   t jdddgdddgdddggtd	}t jd
ddgdddgdddggtd	}t|}t|| d S )Nr   g:0yE>g    _Bg    ׷Ag      @r<   g      i@g      @)r=   g .?gzDv>g1O?gvUAg԰gL?g@sDQAg F~?gg=>gcE?gUUUUʏAg"DBg"Drg   gP@g      igPgvUg԰gLg@sDQ)r   r   r?   r   r   )r1   r9   rr   rs   r$   r$   r%   test_burkardt_14  s    

zTestExpM.test_burkardt_14c       	      C   s   xdD ]}xt dddD ]}|tj|dd }tj|dk r>P tjtjd|d d| }t|}|}ttj|d d d d f tj|d d d d f |d d d f  |d d d f  }d	t|j  }t	|||d
 qW qW d S )N      ?MbP?ư>r   P   r<   r'   gYngvIh%<=)rm   )r   r   r   ry   ry   ry   )
r*   r   Zarangeanyr   r   r   absr   r   )	r1   rK   r   Zscr9   r:   gotr.   rm   r$   r$   r%   test_pascal  s    
VzTestExpM.test_pascalc          
   C   s`   t jd}d|d< t|}t ,}|jtd |jtd tt j|}W d Q R X t|| d S )N   r'   r   zthe matrix subclass.*)r   r   ry   )ry   r   )	r   r   r   r   rX   DeprecationWarningPendingDeprecationWarningr   r   )r1   r9   B0rZ   r:   r$   r$   r%   test_matrix_input  s    
zTestExpM.test_matrix_inputc             C   s   t jdddddddgddddd	ddgdddddd
dgdddddddgdddddddgdddddddgdddddddgg}t| }td| }|}xtdD ]}|| }qW t|| d S )Ng      ?g      ?g        r      g      g      g      g      g      g      i   i )r   r   r   r*   r   )r1   LZE0ZE1ZE2jr$   r$   r%   test_exp_sinch_overflow  s    
z TestExpM.test_exp_sinch_overflowN)!__name__
__module____qualname__r2   r4   r5   r;   rC   rL   rQ   r[   r_   rf   ri   rk   rp   rt   ru   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r$   r$   r%   r0   G   s<   $(r0   c               @   s   e Zd Zdd Zdd ZdS )TestOperatorsc       
      C   s   t jd d}d}d}xt|D ]}tj j||}tj j||}tj j||}tj j||}t|||}	t|	j||j|j|j| t|	j	j||j|j|j	j| q W d S )Ni  r(   r   rG   )
r   r)   r*   r   randnr   r   matmatr   T)
r1   r   r   nsamplesir9   r:   CDopr$   r$   r%   test_product_operator,  s    
"z#TestOperators.test_product_operatorc       	      C   s   t jd d}d}d}d}xrt|D ]f}tj j||}tj j||}t||}t|j|t||j	| t|j
j|t||j
j	| q$W d S )Ni  r(   r   r<   rG   )r   r)   r*   r   r   r   r   r   r   r   r   )	r1   r   r   r    r   r   r9   r:   r   r$   r$   r%   test_matrix_power_operator:  s    

z(TestOperators.test_matrix_power_operatorN)r   r   r   r   r   r$   r$   r$   r%   r   *  s   r   )*__doc__r@   Znumpyr   r   r   r   r   Znumpy.linalgr   Znumpy.testingr   r   r	   r
   r   r   Zscipy.sparser   r   Zscipy.sparse.constructrW   Zscipy.sparse.linalg.matfuncsr   r   r   r   r   Zscipy.sparse.sputilsr   Zscipy.linalgr   Zscipy.specialr   r   r   Zscipy.sparse.linalgr&   r/   objectr0   r   r$   r$   r$   r%   <module>   s(        f