U
    »mœdÙg  ã                   @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlmZmZmZmZ d dlZd dlmZ d dlZd dlmZmZmZ ddgZG d	d
„ d
ƒZG dd„ deƒZdZdZdZdZdZ dZ!dZ"dZ#G dd„ dƒZ$dZ%dZ&dZ'dZ(dZ)dZ*G dd„ dƒZ+dd „ Z,dS )!é    )ÚmkdtempN)ÚarrayÚ	transposeÚpi)Úassert_equalÚassert_allcloseÚassert_array_equalÚassert_array_almost_equal)Úraises)ÚmminfoÚmmreadÚmmwrite)ÚintegerÚint)úunsigned-integerZuintc                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	e
¡d
d„ ƒZej 	d	e
¡dd„ ƒZdd„ Zdd„ Zej 	d	e
¡dd„ ƒZej 	d	e
¡dd„ ƒZej 	d	e
¡dd„ ƒZdd„ Zdd„ Zdd„ Zej 	d	e
¡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d0S )1ÚTestMMIOArrayc                 C   s   t ƒ | _tj | jd¡| _d S ©Nztestfile.mtx©r   ÚtmpdirÚosÚpathÚjoinÚfn©Úself© r   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/io/tests/test_mmio.pyÚsetup_method   s    zTestMMIOArray.setup_methodc                 C   s   t  | j¡ d S ©N©ÚshutilÚrmtreer   r   r   r   r   Úteardown_method   s    zTestMMIOArray.teardown_methodc                 C   s4   t | j|ƒ tt| jƒ|ƒ t| jƒ}t||ƒ d S r   )r   r   r   r   r   r	   ©r   ÚaÚinfoÚbr   r   r   Úcheck   s    
zTestMMIOArray.checkc                 C   s4   t | j|ƒ tt| jƒ|ƒ t| jƒ}t||ƒ d S r   )r   r   r   r   r   r#   r   r   r   Úcheck_exact#   s    
zTestMMIOArray.check_exactútypeval, dtypec              	   C   s0   |   tddgddgg|d�dddd|df¡ d S )Né   é   é   é   ©Údtyper   Úgeneral©r(   r   ©r   Útypevalr/   r   r   r   Útest_simple_integer)   s    ÿz!TestMMIOArray.test_simple_integerc              	   C   s4   t ddgddgg|d�}|  |dddd|d	f¡ d S )
Néÿÿÿéþÿÿéýÿÿéüÿÿr.   r+   r-   r   r0   )r   r(   )r   r3   r/   r$   r   r   r   Útest_32bit_integer.   s    z TestMMIOArray.test_32bit_integerc                 C   sL   t ddgddggtjd�}t d¡jdk r<ttt| j|ƒ n|  	|d¡ d S )	Nì        ì        ì   þÿÿÿ ì   ÿÿÿÿ r.   r   é   ©r+   r+   r-   r   r   r0   )
r   ÚnpÚint64ÚintpÚitemsizeÚassert_raisesÚOverflowErrorr   r   r(   ©r   r$   r   r   r   Útest_64bit_integer3   s    z TestMMIOArray.test_64bit_integerc                 C   s*   t ddgddggtjd�}|  |d¡ d S )Nr:   r;   ì   þÿÿÿ ì   ÿÿÿÿ r.   )r+   r+   r-   r   r   r0   )r   r@   Úuint64r(   rF   r   r   r   Útest_64bit_unsigned_integer:   s    z)TestMMIOArray.test_64bit_unsigned_integerc              	   C   s0   |   tddgddgg|d�dddd|df¡ d S ©Nr   r*   r.   r+   r-   r   r0   r1   r2   r   r   r   Ú"test_simple_upper_triangle_integer>   s    ÿz0TestMMIOArray.test_simple_upper_triangle_integerc              	   C   s0   |   tddgddgg|d�dddd|df¡ d S rL   r1   r2   r   r   r   Ú"test_simple_lower_triangle_integerC   s    ÿz0TestMMIOArray.test_simple_lower_triangle_integerc              	   C   s4   |   tdddgdddgg|d�dddd|d	f¡ d S )
Nr*   r+   r,   r-   é   é   r.   r   r0   r1   r2   r   r   r   Útest_simple_rectangular_integerH   s    ÿz-TestMMIOArray.test_simple_rectangular_integerc                 C   s"   |   ddgddgddggd¡ d S )Nr*   r+   ç      @r-   rO   rP   )r,   r+   rP   r   Úrealr0   ©r'   r   r   r   r   Útest_simple_rectangular_floatM   s    ÿz+TestMMIOArray.test_simple_rectangular_floatc                 C   s   |   ddgddggd¡ d S )Nr*   r+   r,   ç      @©r+   r+   r-   r   rS   r0   rT   r   r   r   r   Útest_simple_floatQ   s    ÿzTestMMIOArray.test_simple_floatc                 C   s   |   ddgddggd¡ d S )Nr*   r+   r,   ù              @)r+   r+   r-   r   Úcomplexr0   rT   r   r   r   r   Útest_simple_complexU   s    ÿz!TestMMIOArray.test_simple_complexc              	   C   s0   |   tddgddgg|d�dddd|df¡ d S )Nr*   r+   r-   r.   r   Ú	symmetricr1   r2   r   r   r   Útest_simple_symmetric_integerY   s    ÿz+TestMMIOArray.test_simple_symmetric_integerc                 C   s   |   ddgddggd¡ d S )Nr   r+   éþÿÿÿ)r+   r+   r-   r   r   úskew-symmetric)r(   r   r   r   r   Ú"test_simple_skew_symmetric_integer^   s    ÿz0TestMMIOArray.test_simple_skew_symmetric_integerc                 C   s"   |   tddgddggdƒd¡ d S )Nr   r+   ç       Àg        Úf)r+   r+   r-   r   rS   r_   )r'   r   r   r   r   r   Ú test_simple_skew_symmetric_floatb   s    ÿz.TestMMIOArray.test_simple_skew_symmetric_floatc                 C   s   |   ddgddggd¡ d S )Nr*   ù       @      @ù       @      Àr-   )r+   r+   r-   r   rZ   Ú	hermitianrT   r   r   r   r   Útest_simple_hermitian_complexf   s    ÿz+TestMMIOArray.test_simple_hermitian_complexc                 C   s,   d}t j |¡}|t|ƒ }|  |d¡ d S )N©é   ri   )ri   ri   i�  r   rS   r\   )r@   Úrandomr   r'   ©r   Úszr$   r   r   r   Útest_random_symmetric_floatj   s    z)TestMMIOArray.test_random_symmetric_floatc                 C   s    d}t j |¡}|  |d¡ d S )N©ri   é   )ri   ro   é,  r   rS   r0   )r@   rj   r'   rk   r   r   r   Útest_random_rectangular_floatp   s    z+TestMMIOArray.test_random_rectangular_floatc              	   C   sD   d}t  |¡ d¡}tjtdd�� tj t 	|¡¡ W 5 Q R X d S )Nzè            %%MatrixMarket matrix array real general
              3  3 999
            1.0
            2.0
            3.0
            4.0
            5.0
            6.0
            7.0
            8.0
            9.0
            Úasciiznot of length 2©Úmatch©
ÚtextwrapÚdedentÚencodeÚpytestr
   Ú
ValueErrorÚscipyÚior   ÚBytesIO©r   ÚsÚtextr   r   r   Ú&test_bad_number_of_array_header_fieldsu   s    z4TestMMIOArray.test_bad_number_of_array_header_fieldsc                 C   s&   |   tddgddggtjd�d¡ d S )Nr*   r+   r^   éc   r.   r?   )r(   r   r@   Úint32r   r   r   r   Ú#test_gh13634_non_skew_symmetric_int‡   s    ÿz1TestMMIOArray.test_gh13634_non_skew_symmetric_intc                 C   s&   |   tddgddggtjd�d¡ d S )Nr*   r+   r^   ç     ÀX@r.   rW   )r'   r   r@   Úfloat32r   r   r   r   Ú%test_gh13634_non_skew_symmetric_float‹   s    ÿz3TestMMIOArray.test_gh13634_non_skew_symmetric_floatN)Ú__name__Ú
__module__Ú__qualname__r   r"   r'   r(   ry   ÚmarkÚparametrizeÚparametrize_argsr4   r9   rG   rK   rM   rN   rQ   rU   rX   r[   r]   r`   rc   rg   rm   rq   r�   r„   r‡   r   r   r   r   r      s:   





r   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	e
¡d
d„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zej 	d	e
¡dd„ ƒZej 	d	e
¡dd„ ƒZej 	d	e
¡dd„ ƒZdd„ Zdd„ Zdd„ Zej 	d	e
¡d d!„ ƒZd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2S )3ÚTestMMIOSparseCSRc                 C   s   t ƒ | _tj | jd¡| _d S r   r   r   r   r   r   r   ‘   s    zTestMMIOSparseCSR.setup_methodc                 C   s   t  | j¡ d S r   r   r   r   r   r   r"   •   s    z!TestMMIOSparseCSR.teardown_methodc                 C   s<   t | j|ƒ tt| jƒ|ƒ t| jƒ}t| ¡ | ¡ ƒ d S r   )r   r   r   r   r   r	   Útoarrayr#   r   r   r   r'   ˜   s    
zTestMMIOSparseCSR.checkc                 C   s<   t | j|ƒ tt| jƒ|ƒ t| jƒ}t| ¡ | ¡ ƒ d S r   )r   r   r   r   r   r�   r#   r   r   r   r(   ž   s    
zTestMMIOSparseCSR.check_exactr)   c              	   C   s4   |   tjjddgddgg|d�dddd|df¡ d S )Nr*   r+   r,   r-   r.   Ú
coordinater0   ©r(   r{   ÚsparseÚ
csr_matrixr2   r   r   r   r4   ¤   s    ÿz%TestMMIOSparseCSR.test_simple_integerc                 C   s2   t j tddgddggtjd�¡}|  |d¡ d S )Nr5   i  €r7   r8   r.   ©r+   r+   r-   r�   r   r0   )r{   r’   r“   r   r@   rƒ   r(   rF   r   r   r   r9   ©   s    ÿþz$TestMMIOSparseCSR.test_32bit_integerc                 C   sT   t j tddgddggtjd�¡}t d¡jdk rDtt	t
| j|ƒ n|  |d¡ d S )Nì       ìûÿÿÿþÿÿÿ r<   r.   r   r>   r”   )r{   r’   r“   r   r@   rA   rB   rC   rD   rE   r   r   r(   rF   r   r   r   rG   ¯   s    ÿþz$TestMMIOSparseCSR.test_64bit_integerc                 C   s2   t j tddgddggtjd�¡}|  |d¡ d S )Nr5   r6   r7   r8   r.   ©r+   r+   r-   r�   r   r0   )r{   r’   r“   r   r@   Zuint32r(   rF   r   r   r   Útest_32bit_unsigned_integer¸   s    ÿþz-TestMMIOSparseCSR.test_32bit_unsigned_integerc                 C   s2   t j tddgddggtjd�¡}|  |d¡ d S )Nr•   rH   rI   r.   r—   )r{   r’   r“   r   r@   rJ   r(   rF   r   r   r   rK   ¾   s    ÿþz-TestMMIOSparseCSR.test_64bit_unsigned_integerc              	   C   s4   |   tjjddgddgg|d�dddd|df¡ d S ©Nr   r*   r.   r+   r�   r0   r‘   r2   r   r   r   rM   Ä   s    ÿz4TestMMIOSparseCSR.test_simple_upper_triangle_integerc              	   C   s4   |   tjjddgddgg|d�dddd|df¡ d S r™   r‘   r2   r   r   r   rN   É   s    ÿz4TestMMIOSparseCSR.test_simple_lower_triangle_integerc              	   C   s8   |   tjjdddgdddgg|d�dddd|d	f¡ d S )
Nr*   r+   r,   r-   rO   rP   r.   r�   r0   r‘   r2   r   r   r   rQ   Î   s    "ÿz1TestMMIOSparseCSR.test_simple_rectangular_integerc                 C   s*   |   tj ddgddgddgg¡d¡ d S )Nr*   r+   rR   r-   rO   rP   )r,   r+   rP   r�   rS   r0   ©r'   r{   r’   r“   r   r   r   r   rU   Ó   s     ÿz/TestMMIOSparseCSR.test_simple_rectangular_floatc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr*   r+   r,   rV   ©r+   r+   r-   r�   rS   r0   rš   r   r   r   r   rX   ×   s    ÿz#TestMMIOSparseCSR.test_simple_floatc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr*   r+   r,   rY   )r+   r+   r-   r�   rZ   r0   rš   r   r   r   r   r[   Û   s    ÿz%TestMMIOSparseCSR.test_simple_complexc              	   C   s4   |   tjjddgddgg|d�dddd|df¡ d S )Nr*   r+   r-   r.   r,   r�   r\   r‘   r2   r   r   r   r]   ß   s    ÿz/TestMMIOSparseCSR.test_simple_symmetric_integerc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr   r+   r^   )r+   r+   r*   r�   r   r_   r‘   r   r   r   r   r`   ä   s    ÿz4TestMMIOSparseCSR.test_simple_skew_symmetric_integerc                 C   s*   |   tj tddgddggdƒ¡d¡ d S )Nr   r+   ra   rb   )r+   r+   r*   r�   rS   r_   )r'   r{   r’   r“   r   r   r   r   r   rc   è   s     ÿz2TestMMIOSparseCSR.test_simple_skew_symmetric_floatc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr*   rd   re   r-   )r+   r+   r,   r�   rZ   rf   rš   r   r   r   r   rg   ì   s    ÿz/TestMMIOSparseCSR.test_simple_hermitian_complexc                 C   s8   d}t j |¡}|t|ƒ }tj |¡}|  |d¡ d S )Nrh   )ri   ri   éÒ   r�   rS   r\   )r@   rj   r   r{   r’   r“   r'   rk   r   r   r   rm   ð   s
    z-TestMMIOSparseCSR.test_random_symmetric_floatc                 C   s,   d}t j |¡}tj |¡}|  |d¡ d S )Nrn   )ri   ro   rp   r�   rS   r0   )r@   rj   r{   r’   r“   r'   rk   r   r   r   rq   ÷   s    z/TestMMIOSparseCSR.test_random_rectangular_floatc                 C   sv   t j ddgddgg¡}t | ¡ ¡}d|| ¡ dk< d}t| j|dd� tt	| jƒ|ƒ t
| jƒ}t|| ¡ ƒ d S )	Nr   g      ø?g      @g      @r*   )r+   r+   r,   r�   Úpatternr0   r�   )Úfield)r{   r’   r“   r@   Z
zeros_liker�   r   r   r   r   r   r	   )r   r$   Úpr%   r&   r   r   r   Útest_simple_patterný   s    
z%TestMMIOSparseCSR.test_simple_patternc                 C   s.   t jjddgddggtjd�}|  |d¡ d S )Nr*   r+   r^   r‚   r.   r”   )r{   r’   r“   r@   rƒ   r(   rF   r   r   r   r„     s    z5TestMMIOSparseCSR.test_gh13634_non_skew_symmetric_intc                 C   s.   t jjddgddggtjd�}|  |d¡ d S )Nr*   r+   r^   r…   r.   r›   )r{   r’   r“   r@   r†   r'   rF   r   r   r   r‡     s    z7TestMMIOSparseCSR.test_gh13634_non_skew_symmetric_floatN)rˆ   r‰   rŠ   r   r"   r'   r(   ry   r‹   rŒ   r�   r4   r9   rG   r˜   rK   rM   rN   rQ   rU   rX   r[   r]   r`   rc   rg   rm   rq   r    r„   r‡   r   r   r   r   rŽ   �   s:   
	




rŽ   z]%%MatrixMarket matrix array integer general
2  2
2147483647
2147483646
2147483647
2147483646
z]%%MatrixMarket matrix coordinate integer symmetric
2  2  2
1  1  2147483647
2  2  2147483646
z…%%MatrixMarket matrix array integer general
2  2
          2147483648
-9223372036854775806
         -2147483648
 9223372036854775807
z‡%%MatrixMarket matrix coordinate integer general
2  2  3
1  1           2147483648
1  2  9223372036854775807
2  2  9223372036854775807
zŒ%%MatrixMarket matrix coordinate integer symmetric
2  2  3
1  1            2147483648
1  2  -9223372036854775807
2  2   9223372036854775807
z‘%%MatrixMarket matrix coordinate integer skew-symmetric
2  2  3
1  1            2147483648
1  2  -9223372036854775807
2  2   9223372036854775807
z�%%MatrixMarket matrix array integer general
2  2
         2147483648
9223372036854775807
         2147483648
9223372036854775808
zq%%MatrixMarket matrix coordinate integer symmetric
2  2  2
1  1            2147483648
2  2  19223372036854775808
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 )ÚTestMMIOReadLargeIntegersc                 C   s   t ƒ | _tj | jd¡| _d S r   r   r   r   r   r   r   S  s    z&TestMMIOReadLargeIntegers.setup_methodc                 C   s   t  | j¡ d S r   r   r   r   r   r   r"   W  s    z)TestMMIOReadLargeIntegers.teardown_methodc           	   	   C   s~   t | jdƒ�}| |¡ W 5 Q R X tt| jƒ|ƒ |rFt d¡jdk sJ|rZtt	t
| jƒ n t
| jƒ}|sp| ¡ }t||ƒ d S )NÚwr   r>   )Úopenr   Úwriter   r   r@   rB   rC   rD   rE   r   r�   )	r   Úexampler$   r%   ÚdenseÚover32Úover64rb   r&   r   r   r   Ú
check_readZ  s    
z$TestMMIOReadLargeIntegers.check_readc                 C   s4   t ddgddggtjd�}| jt|ddddd� d S )Nr5   r6   r.   r?   TF©r¦   r§   r¨   )r   r@   rA   r©   Ú_32bit_integer_dense_examplerF   r   r   r   Útest_read_32bit_integer_densef  s    ÿÿûz7TestMMIOReadLargeIntegers.test_read_32bit_integer_densec                 C   s4   t ddgddggtjd�}| jt|ddddd� d S )Nr5   r   r6   r.   ©r+   r+   r+   r�   r   r\   Frª   )r   r@   rA   r©   Ú_32bit_integer_sparse_examplerF   r   r   r   Útest_read_32bit_integer_sparsep  s    ÿÿûz8TestMMIOReadLargeIntegers.test_read_32bit_integer_sparsec                 C   s4   t ddgddggtjd�}| jt|ddddd	� d S )
Nr:   i   €r–   r=   r.   r?   TFrª   )r   r@   rA   r©   Ú_64bit_integer_dense_examplerF   r   r   r   Útest_read_64bit_integer_densez  s    ÿÿûz7TestMMIOReadLargeIntegers.test_read_64bit_integer_densec                 C   s4   t ddgddggtjd�}| jt|ddddd� d S )	Nr:   r=   r   r.   )r+   r+   r,   r�   r   r0   FTrª   )r   r@   rA   r©   Ú%_64bit_integer_sparse_general_examplerF   r   r   r   Ú&test_read_64bit_integer_sparse_general„  s    ÿÿûz@TestMMIOReadLargeIntegers.test_read_64bit_integer_sparse_generalc                 C   s4   t ddgddggtjd�}| jt|ddddd� d S )	Nr:   ìûÿÿÿÿÿÿÿ r=   r.   )r+   r+   r,   r�   r   r\   FTrª   )r   r@   rA   r©   Ú'_64bit_integer_sparse_symmetric_examplerF   r   r   r   Ú(test_read_64bit_integer_sparse_symmetricŽ  s    ÿÿûzBTestMMIOReadLargeIntegers.test_read_64bit_integer_sparse_symmetricc                 C   s4   t ddgddggtjd�}| jt|ddddd� d S )	Nr:   r´   r=   r.   )r+   r+   r,   r�   r   r_   FTrª   )r   r@   rA   r©   Ú"_64bit_integer_sparse_skew_examplerF   r   r   r   Ú#test_read_64bit_integer_sparse_skew˜  s    ÿÿûz=TestMMIOReadLargeIntegers.test_read_64bit_integer_sparse_skewc                 C   s   | j td ddddd� d S )Nr?   Trª   )r©   Ú _over64bit_integer_dense_exampler   r   r   r   Ú!test_read_over64bit_integer_dense¢  s    ûz;TestMMIOReadLargeIntegers.test_read_over64bit_integer_densec                 C   s   | j td ddddd� d S )Nr­   FTrª   )r©   Ú!_over64bit_integer_sparse_exampler   r   r   r   Ú"test_read_over64bit_integer_sparseª  s    ûz<TestMMIOReadLargeIntegers.test_read_over64bit_integer_sparseN)rˆ   r‰   rŠ   r   r"   r©   r¬   r¯   r±   r³   r¶   r¸   rº   r¼   r   r   r   r   r¡   R  s   





r¡   a&  %%MatrixMarket matrix coordinate real general
%=================================================================================
%
% This ASCII file represents a sparse MxN matrix with L
% nonzeros in the following Matrix Market format:
%
% +----------------------------------------------+
% |%%MatrixMarket matrix coordinate real general | <--- header line
% |%                                             | <--+
% |% comments                                    |    |-- 0 or more comment lines
% |%                                             | <--+
% |    M  N  L                                   | <--- rows, columns, entries
% |    I1  J1  A(I1, J1)                         | <--+
% |    I2  J2  A(I2, J2)                         |    |
% |    I3  J3  A(I3, J3)                         |    |-- L lines
% |        . . .                                 |    |
% |    IL JL  A(IL, JL)                          | <--+
% +----------------------------------------------+
%
% Indices are 1-based, i.e. A(1,1) is the first element.
%
%=================================================================================
  5  5  8
    1     1   1.000e+00
    2     2   1.050e+01
    3     3   1.500e-02
    1     4   6.000e+00
    4     2   2.505e+02
    4     4  -2.800e+02
    4     5   3.332e+01
    5     5   1.200e+01
a   %%MatrixMarket matrix coordinate complex hermitian
  5  5  7
    1     1     1.0      0
    2     2    10.5      0
    4     2   250.5     22.22
    3     3     1.5e-2   0
    4     4    -2.8e2    0
    5     5    12.       0
    5     4     0       33.32
zÍ%%MatrixMarket matrix coordinate real skew-symmetric
  5  5  7
    1     1     1.0
    2     2    10.5
    4     2   250.5
    3     3     1.5e-2
    4     4    -2.8e2
    5     5    12.
    5     4     0
zÈ%%MatrixMarket matrix coordinate real symmetric
  5  5  7
    1     1     1.0
    2     2    10.5
    4     2   250.5
    3     3     1.5e-2
    4     4    -2.8e2
    5     5    12.
    5     4     8
z‘%%MatrixMarket matrix coordinate pattern symmetric
  5  5  7
    1     1
    2     2
    4     2
    3     3
    4     4
    5     5
    5     4
a  %%MatrixMarket  MATRIX    Coordinate    Real General

   5  5         8

1 1  1.0
2 2       10.5
3 3             1.5e-2
4 4                     -2.8E2
5 5                              12.
     1      4      6
     4      2      250.5
     4      5      33.32

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#S )$ÚTestMMIOCoordinatec                 C   s   t ƒ | _tj | jd¡| _d S r   r   r   r   r   r   r     s    zTestMMIOCoordinate.setup_methodc                 C   s   t  | j¡ d S r   r   r   r   r   r   r"     s    z"TestMMIOCoordinate.teardown_methodc                 C   sJ   t | jdƒ}| |¡ | ¡  tt| jƒ|ƒ t| jƒ ¡ }t||ƒ d S )Nr¢   )	r£   r   r¤   Úcloser   r   r   r�   r	   )r   r¥   r$   r%   rb   r&   r   r   r   r©      s    
zTestMMIOCoordinate.check_readc              	   C   sR   dddddgdddddgdddddgdddddgddddd	gg}|   t|d
¡ d S ©Nr*   r   rP   ç      %@ç¸…ëQ¸Ž?ç     Po@éèþÿÿç)\�Âõ¨@@é   ©rO   rO   r>   r�   rS   r0   )r©   Ú_general_examplerF   r   r   r   Útest_read_general(  s    üÿz$TestMMIOCoordinate.test_read_generalc              	   C   sR   dddddgdddddgdddddgdddddgdddd	d
gg}|   t|d¡ d S )Nr*   r   rÀ   y     Po@¸…ëQ86ÀrÁ   y     Po@¸…ëQ86@rÃ   y       €)\�Âõ¨@Ày        )\�Âõ¨@@rÅ   )rO   rO   é   r�   rZ   rf   )r©   Ú_hermitian_examplerF   r   r   r   Útest_read_hermitian1  s    üÿz&TestMMIOCoordinate.test_read_hermitianc              	   C   sR   dddddgdddddgdddddgdddddgdddddgg}|   t|d	¡ d S )
Nr*   r   rÀ   g     PoÀrÁ   rÂ   rÃ   rÅ   )rO   rO   rÉ   r�   rS   r_   )r©   Ú_skew_examplerF   r   r   r   Útest_read_skew:  s    üÿz!TestMMIOCoordinate.test_read_skewc              	   C   sR   dddddgdddddgdddddgdddddgdddddgg}|   t|d	¡ d S )
Nr*   r   rÀ   rÂ   rÁ   rÃ   r>   rÅ   )rO   rO   rÉ   r�   rS   r\   )r©   Ú_symmetric_examplerF   r   r   r   Útest_read_symmetricC  s    üÿz&TestMMIOCoordinate.test_read_symmetricc              	   C   sR   dddddgdddddgdddddgdddddgdddddgg}|   t|d¡ d S )Nr*   r   )rO   rO   rÉ   r�   r�   r\   )r©   Ú_symmetric_pattern_examplerF   r   r   r   Útest_read_symmetric_patternL  s    üÿz.TestMMIOCoordinate.test_read_symmetric_patternc              	   C   sR   dddddgdddddgdddddgdddddgddddd	gg}|   t|d
¡ d S r¿   )r©   Ú_empty_lines_examplerF   r   r   r   Útest_read_empty_linesU  s    üÿz(TestMMIOCoordinate.test_read_empty_linesc                 C   sL   t j d¡}t| j|ƒ tt| jƒdƒ | ¡ }t| jƒ ¡ }t	||ƒ d S )N)é
   rÔ   )rÔ   rÔ   r   r�   rS   r\   )
r{   r’   Ú
coo_matrixr   r   r   r   r�   r   r	   )r   r&   r$   r   r   r   Útest_empty_write_read^  s    
ÿz(TestMMIOCoordinate.test_empty_write_readc           
   	   C   sò   zdd l }W n tk
r"   Y d S X tddddddddgƒ}tddddddddgƒ}tdddd	d
dddgƒ}tjj|||ffdd�}t| j|ƒ d| j }t| jdƒ�(}| 	|d¡}| 
| ¡ ¡ | ¡  W 5 Q R X t|ƒ ¡ }	t|	| ¡ ƒ d S )Nr   r*   r+   r,   r-   ç      ð?ç      @rÀ   rÁ   rÂ   ç     €qÀrÄ   ç      (@©rO   rO   ©Úshapez%s.bz2ÚrbÚwb)Úbz2ÚImportErrorr   r{   r’   rÕ   r   r   r£   ÚBZ2Filer¤   Úreadr¾   r   r�   r	   )
r   rà   ÚIÚJÚVr&   Zfn_bzip2Úf_inÚf_outr$   r   r   r   Útest_bzip2_py3j  s     
z!TestMMIOCoordinate.test_bzip2_py3c           
   	   C   sò   zdd l }W n tk
r"   Y d S X tddddddddgƒ}tddddddddgƒ}tdddd	d
dddgƒ}tjj|||ffdd�}t| j|ƒ d| j }t| jdƒ�(}| |d¡}| 	| 
¡ ¡ | ¡  W 5 Q R X t|ƒ ¡ }	t|	| ¡ ƒ d S )Nr   r*   r+   r,   r-   r×   rØ   rÀ   rÁ   rÂ   rÙ   rÄ   rÚ   rÛ   rÜ   z%s.gzrÞ   rß   )Úgziprá   r   r{   r’   rÕ   r   r   r£   r¤   rã   r¾   r   r�   r	   )
r   rê   rä   rå   ræ   r&   Zfn_gziprç   rè   r$   r   r   r   Útest_gzip_py3‚  s     
z TestMMIOCoordinate.test_gzip_py3c              	   C   s    t ddddddddgƒ}t ddddddddgƒ}t dddd	d
dddgƒ}tjj|||ffdd�}t| j|ƒ tt| jƒdƒ | ¡ }t	| jƒ ¡ }t
||ƒ d S )Nr   r*   r+   r,   r-   r×   rØ   rÀ   rÁ   rÂ   rÙ   rÄ   rÚ   rÛ   rÜ   rÆ   ©r   r{   r’   rÕ   r   r   r   r   r�   r   r	   ©r   rä   rå   ræ   r&   r$   r   r   r   Útest_real_write_readš  s    
ÿz'TestMMIOCoordinate.test_real_write_readc              	   C   s    t ddddddddgƒ}t ddddddddgƒ}t dddd	d
dddgƒ}tjj|||ffdd�}t| j|ƒ tt| jƒdƒ | ¡ }t	| jƒ ¡ }t
||ƒ d S )Nr   r*   r+   r,   r-   ù      ð?      @ù      @       @ù      %@ÍÌÌÌÌÌì?ù¸…ëQ¸Ž?š™™™™™Àù     Po@        ù     €qÀ      @ù)\�Âõ¨@@š™™™™™@ù      (@š™™™™™é?rÛ   rÜ   )rO   rO   r>   r�   rZ   r0   rì   rí   r   r   r   Útest_complex_write_read©  s     
   ÿ
ÿz*TestMMIOCoordinate.test_complex_write_readc              	   C   s  |d }|  ¡  g }tddddddddgƒ}tddddddddgƒ}tddd	d
ddddgƒ}| tjj|||ffdd�¡ tddddddddgƒ}| tjj|||ffdd�¡ |D ]H}| ¡ }dD ]6}	||	d  }
t|
| |	¡ƒ t	|
ƒ ¡ }t
||ƒ qÄq´d S )NZsparse_formatsr   r*   r+   r,   r-   r×   rØ   rÀ   rÁ   rÂ   rÙ   rÄ   rÚ   rÛ   rÜ   rï   rð   rñ   rò   ró   rô   rõ   rö   )ZcsrZcscZcooz.mtx)Úmkdirr   Úappendr{   r’   rÕ   r�   r   Zasformatr   r	   )r   Ztmp_pathr   Zmatsrä   rå   ræ   ÚmatÚexpectedÚfmtÚfnameÚresultr   r   r   Útest_sparse_formats¹  s*    
   ÿz&TestMMIOCoordinate.test_sparse_formatsc                 C   sÊ   t gdd„ tdddƒD ƒ }tddƒ}|D ]š}|D ]�}d| d }tj ||f¡}|||d |d f< t| j||d� tj | j¡}t	|j
|d gƒ t	|j|d gƒ t|jtd	| | ƒgƒ q2q*d S )
Nc                 S   s   g | ]}d | ‘qS )rÔ   r   )Ú.0Úir   r   r   Ú
<listcomp>Ò  s     z5TestMMIOCoordinate.test_precision.<locals>.<listcomp>r   iöÿÿÿéÿÿÿÿr*   rÔ   )Ú	precisionz%%.%dg)r   Úranger{   r’   Z
dok_matrixr   r   r|   r   r   ÚrowÚcolr   ÚdataÚfloat)r   Ztest_valuesZtest_precisionsÚvaluer  ÚnÚAr   r   r   Útest_precisionÑ  s    
z!TestMMIOCoordinate.test_precisionc              	   C   sD   d}t  |¡ d¡}tjtdd�� tj t 	|¡¡ W 5 Q R X d S )Na€              %%MatrixMarket matrix coordinate real general
              5  5  8 999
                1     1   1.000e+00
                2     2   1.050e+01
                3     3   1.500e-02
                1     4   6.000e+00
                4     2   2.505e+02
                4     4  -2.800e+02
                4     5   3.332e+01
                5     5   1.200e+01
            rr   znot of length 3rs   ru   r~   r   r   r   Ú+test_bad_number_of_coordinate_header_fieldsâ  s    z>TestMMIOCoordinate.test_bad_number_of_coordinate_header_fieldsN)rˆ   r‰   rŠ   r   r"   r©   rÈ   rË   rÍ   rÏ   rÑ   rÓ   rÖ   ré   rë   rî   r÷   rÿ   r  r  r   r   r   r   r½     s"   						r½   c                   C   s   t t d¡ƒ d S )Nzg%%MatrixMarket matrix coordinate complex symmetric
 1 1 1
1 1 -2.1846000000000e+02  0.0000000000000e+00)r   r|   ÚStringIOr   r   r   r   Útest_gh11389ô  s    r  )-Útempfiler   r   r|   r    rv   Únumpyr@   r   r   r   Znumpy.testingr   r   r   r	   ry   r
   rD   Zscipy.sparser{   Zscipy.ior   r   r   r�   r   rŽ   r«   r®   r°   r²   rµ   r·   r¹   r»   r¡   rÇ   rÊ   rÌ   rÎ   rÐ   rÒ   r½   r  r   r   r   r   Ú<module>   sF   ÿ{ 			a" ]