U
    Hvfg                     @   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   </tmp/pip-unpacked-wheel-96ln3f52/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@Q86r   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     Por   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        qr         (@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
|| qqd 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   ir*   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   Z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" ]