
    xfi                     2   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
      Z G d de      ZdZdZdZdZdZ dZ!dZ"dZ# G d d      Z$dZ%dZ&dZ'dZ(dZ)dZ* G d d      Z+d Z,d  Z-y)!    )mkdtempN)array	transposepi)assert_equalassert_allcloseassert_array_equalassert_array_almost_equal)raises)mminfommreadmmwrite)integerint)unsigned-integeruintc                   
   e Zd Zd Zd Zd Zd Zej                  j                  de
      d        Zej                  j                  de
      d        Zd Zd	 Zej                  j                  de
      d
        Zej                  j                  de
      d        Zej                  j                  de
      d        Zd Zd Zd Zej                  j                  de
      d        Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestMMIOArrayc                     t               | _        t        j                  j	                  | j                  d      | _        y Nztestfile.mtxr   tmpdirospathjoinfnselfs    :/usr/lib/python3/dist-packages/scipy/io/tests/test_mmio.pysetup_methodzTestMMIOArray.setup_method   %    i'',,t{{N;    c                 B    t        j                  | j                         y Nshutilrmtreer   r   s    r   teardown_methodzTestMMIOArray.teardown_method       dkk"r"   c                     t        | j                  |       t        t        | j                        |       t	        | j                        }t        ||       y r$   )r   r   r   r   r   r
   r   ainfobs       r   checkzTestMMIOArray.check   s9    VDGG_d+477O!!Q'r"   c                     t        | j                  |       t        t        | j                        |       t	        | j                        }t        ||       y r$   )r   r   r   r   r   r+   s       r   check_exactzTestMMIOArray.check_exact#   s9    VDGG_d+477OQr"   typeval, dtypec           	      V    | j                  t        ddgddgg|      dddd|df       y )N            dtyper   generalr1   r   r   typevalr9   s      r   test_simple_integerz!TestMMIOArray.test_simple_integer)   7    AA/u=Q7GY?	Ar"   c           	      Z    t        ddgddgg|      }| j                  |dddd|d	f       y )
Nr8   r5   r7   r   r:   )r   r1   )r   r=   r9   r,   s       r   test_32bit_integerz TestMMIOArray.test_32bit_integer.   s:    GW%'9:%HQ1gw	BCr"   c                     t        ddgddggt        j                        }t        j                  d      j                  dk  r!t        t        t        | j                  |       y | j                  |d       y )	N                        r8   r      r5   r5   r7   r   r   r:   )
r   npint64intpitemsizeassert_raisesOverflowErrorr   r   r1   r   r,   s     r   test_64bit_integerz TestMMIOArray.test_64bit_integer3   sY    E5>GW#56bhhGGGAJ!#-$''1=Q HIr"   c                 j    t        ddgddggt        j                        }| j                  |d       y )NrG   rH           r8   )r5   r5   r7   r   r   r:   )r   rM   uint64r1   rS   s     r   test_64bit_unsigned_integerz)TestMMIOArray.test_64bit_unsigned_integer:   s1    E5>GW#56biiHMNr"   c           	      V    | j                  t        ddgddgg|      dddd|df       y Nr   r4   r8   r5   r7   r   r:   r;   r<   s      r   "test_simple_upper_triangle_integerz0TestMMIOArray.test_simple_upper_triangle_integer>   r?   r"   c           	      V    | j                  t        ddgddgg|      dddd|df       y r[   r;   r<   s      r   "test_simple_lower_triangle_integerz0TestMMIOArray.test_simple_lower_triangle_integerC   r?   r"   c           	      V    | j                  t        g dg dg|      dddd|df       y )	Nr4   r5   r6   r7         r8   r5   r6   rc   r   r:   r;   r<   s      r   test_simple_rectangular_integerz-TestMMIOArray.test_simple_rectangular_integerH   s/    	95UCQ7GY?	Ar"   c                 :    | j                  ddgddgddggd       y )Nr4   r5         @r7   rb   rc   )r6   r5   rc   r   realr:   r/   r   s    r   test_simple_rectangular_floatz+TestMMIOArray.test_simple_rectangular_floatM   s&    

QFS!Hq!f-8	:r"   c                 4    | j                  ddgddggd       y )Nr4   r5   r6         @r5   r5   r7   r   rg   r:   rh   r   s    r   test_simple_floatzTestMMIOArray.test_simple_floatQ   s     

QFQH%8	:r"   c                 4    | j                  ddgddggd       y )Nr4   r5   r6                 @)r5   r5   r7   r   complexr:   rh   r   s    r   test_simple_complexz!TestMMIOArray.test_simple_complexU   s     

QFQG$;	=r"   c           	      V    | j                  t        ddgddgg|      dddd|df       y )Nr4   r5   r7   r8   r   	symmetricr;   r<   s      r   test_simple_symmetric_integerz+TestMMIOArray.test_simple_symmetric_integerY   s7    AA/u=Q7G[A	Cr"   c                 4    | j                  ddgddggd       y )Nr   r5   )r5   r5   r7   r   r   skew-symmetric)r1   r   s    r   "test_simple_skew_symmetric_integerz0TestMMIOArray.test_simple_skew_symmetric_integer^   s#    1a&2q'*H	Jr"   c                 H    | j                  t        ddgddggd      d       y )Nr   r5          g        f)r5   r5   r7   r   rg   rw   )r/   r   r   s    r    test_simple_skew_symmetric_floatz.TestMMIOArray.test_simple_skew_symmetric_floatb   s(    

51a&4+.4?	Ar"   c                 4    | j                  ddgddggd       y )Nr4          @      @       @      r7   )r5   r5   r7   r   rp   	hermitianrh   r   s    r   test_simple_hermitian_complexz+TestMMIOArray.test_simple_hermitian_complexf   s     

QIay)=	?r"   c                     d}t         j                  j                  |      }|t        |      z   }| j                  |d       y )N   r   )r   r   i  r   rg   rs   )rM   randomr   r/   r   szr,   s      r   test_random_symmetric_floatz)TestMMIOArray.test_random_symmetric_floatj   s8    IIR 	!

1ABr"   c                 j    d}t         j                  j                  |      }| j                  |d       y )Nr      )r   r   ,  r   rg   r:   )rM   r   r/   r   s      r   test_random_rectangular_floatz+TestMMIOArray.test_random_rectangular_floatp   s*    IIR 

1?@r"   c                    d}t        j                  |      j                  d      }t        j                  t
        d      5  t        j                  j                  t        j                  |             d d d        y # 1 sw Y   y xY w)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texts      r   &test_bad_number_of_array_header_fieldsz4TestMMIOArray.test_bad_number_of_array_header_fieldsu   sa     q!((1]]:->? 	.HHOOBJJt,-	. 	. 	.   3A>>Bc                 f    | j                  t        ddgddggt        j                        d       y )Nr4   r5   rv   c   r8   rL   )r1   r   rM   int32r   s    r   #test_gh13634_non_skew_symmetric_intz1TestMMIOArray.test_gh13634_non_skew_symmetric_int   s.    AR1BA	Cr"   c                 f    | j                  t        ddgddggt        j                        d       y )Nr4   r5   rv        X@r8   rl   )r/   r   rM   float32r   s    r   %test_gh13634_non_skew_symmetric_floatz3TestMMIOArray.test_gh13634_non_skew_symmetric_float   s+    

51a&2s),BJJ?8	:r"   N)__name__
__module____qualname__r    r(   r/   r1   r   markparametrizeparametrize_argsr>   rE   rT   rY   r\   r^   rd   ri   rm   rq   rt   rx   r|   r   r   r   r   r   r    r"   r   r   r      sZ   <#( [[-/?@A AA [[-/?@D ADJO [[-/?@A AA [[-/?@A AA [[-/?@A AA::= [[-/?@C ACJA?CA
.$C:r"   r   c                      e Zd Zd Zd Zd Zd Zej                  j                  de
      d        Zd Zd Zd	 Zd
 Zej                  j                  de
      d        Zej                  j                  de
      d        Zej                  j                  de
      d        Zd Zd Zd Zej                  j                  de
      d        Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestMMIOSparseCSRc                     t               | _        t        j                  j	                  | j                  d      | _        y r   r   r   s    r   r    zTestMMIOSparseCSR.setup_method   r!   r"   c                 B    t        j                  | j                         y r$   r%   r   s    r   r(   z!TestMMIOSparseCSR.teardown_method   r)   r"   c                     t        | j                  |       t        t        | j                        |       t	        | j                        }t        |j                         |j                                y r$   )r   r   r   r   r   r
   toarrayr+   s       r   r/   zTestMMIOSparseCSR.check   sE    VDGG_d+477O!!))+qyy{;r"   c                     t        | j                  |       t        t        | j                        |       t	        | j                        }t        |j                         |j                                y r$   )r   r   r   r   r   r   r+   s       r   r1   zTestMMIOSparseCSR.check_exact   sE    VDGG_d+477OQYY[!))+.r"   r2   c           	      ~    | j                  t        j                  j                  ddgddgg|      dddd|df       y )Nr4   r5   r6   r7   r8   
coordinater:   r1   r   sparse
csr_matrixr<   s      r   r>   z%TestMMIOSparseCSR.test_simple_integer   D    001a&1a&1A0OQ<)D	Fr"   c                     t         j                  j                  t        ddgddggt        j
                              }| j                  |d       y )NrA   i  rC   rD   r8   r5   r5   r7   r   r   r:   )r   r   r   r   rM   r   r1   rS   s     r   rE   z$TestMMIOSparseCSR.test_32bit_integer   sK    LL##EGX+>,3W+=+?02%: ; 	IJr"   c                 *   t         j                  j                  t        ddgddggt        j
                              }t	        j                  d      j                  dk  r!t        t        t        | j                  |       y | j                  |d       y )N        rI   r8   r   rK   r   )r   r   r   r   rM   rN   rO   rP   rQ   rR   r   r   r1   rS   s     r   rT   z$TestMMIOSparseCSR.test_64bit_integer   st    LL##EGW+=,4g+>+@02%: ; GGAJ!#-$''1=Q MNr"   c                     t         j                  j                  t        ddgddggt        j
                              }| j                  |d       y )NrA   rB   rC   rD   r8   r5   r5   r7   r   r   r:   )r   r   r   r   rM   uint32r1   rS   s     r   test_32bit_unsigned_integerz-TestMMIOSparseCSR.test_32bit_unsigned_integer   K    LL##EGW+=,3W+=+?02		%; < 	RSr"   c                     t         j                  j                  t        ddgddggt        j
                              }| j                  |d       y )Nr   rV   rW   r8   r   )r   r   r   r   rM   rX   r1   rS   s     r   rY   z-TestMMIOSparseCSR.test_64bit_unsigned_integer   r   r"   c           	      ~    | j                  t        j                  j                  ddgddgg|      dddd|df       y Nr   r4   r8   r5   r   r:   r   r<   s      r   r\   z4TestMMIOSparseCSR.test_simple_upper_triangle_integer   r   r"   c           	      ~    | j                  t        j                  j                  ddgddgg|      dddd|df       y r   r   r<   s      r   r^   z4TestMMIOSparseCSR.test_simple_lower_triangle_integer   r   r"   c           	      ~    | j                  t        j                  j                  g dg dg|      dddd|df       y )	Nr`   ra   r8   r5   r6   rc   r   r:   r   r<   s      r   rd   z1TestMMIOSparseCSR.test_simple_rectangular_integer   s<    00)Y1Gu0UQ<)D	Fr"   c                 t    | j                  t        j                  j                  ddgddgddgg      d       y )Nr4   r5   rf   r7   rb   rc   )r6   r5   rc   r   rg   r:   r/   r   r   r   r   s    r   ri   z/TestMMIOSparseCSR.test_simple_rectangular_float   s5    

5<<**QFS!Hq!f+EF=	?r"   c                 n    | j                  t        j                  j                  ddgddgg      d       y )Nr4   r5   r6   rk   r5   r5   r7   r   rg   r:   r   r   s    r   rm   z#TestMMIOSparseCSR.test_simple_float   s/    

5<<**QFQH+=>=	?r"   c                 n    | j                  t        j                  j                  ddgddgg      d       y )Nr4   r5   r6   ro   )r5   r5   r7   r   rp   r:   r   r   s    r   rq   z%TestMMIOSparseCSR.test_simple_complex   s0    

5<<**QFQG+<=@	Br"   c           	      ~    | j                  t        j                  j                  ddgddgg|      dddd|df       y )Nr4   r5   r7   r8   r6   r   rs   r   r<   s      r   rt   z/TestMMIOSparseCSR.test_simple_symmetric_integer   sD    001a&1a&1A0OQ<+F	Hr"   c                 n    | j                  t        j                  j                  ddgddgg      d       y )Nr   r5   rv   )r5   r5   r4   r   r   rw   r   r   s    r   rx   z4TestMMIOSparseCSR.test_simple_skew_symmetric_integer   s2    001a&2q'1BCM	Or"   c           	          | j                  t        j                  j                  t	        ddgddggd            d       y )Nr   r5   rz   r{   )r5   r5   r4   r   rg   rw   )r/   r   r   r   r   r   s    r   r|   z2TestMMIOSparseCSR.test_simple_skew_symmetric_float   s7    

5<<**51a&4)1Dc+JKD	Fr"   c                 n    | j                  t        j                  j                  ddgddgg      d       y )Nr4   r~   r   r7   )r5   r5   r6   r   rp   r   r   r   s    r   r   z/TestMMIOSparseCSR.test_simple_hermitian_complex   s0    

5<<**QIay+ABB	Dr"   c                     d}t         j                  j                  |      }|t        |      z   }t        j                  j                  |      }| j                  |d       y )Nr   )r   r      r   rg   rs   )rM   r   r   r   r   r   r/   r   s      r   r   z-TestMMIOSparseCSR.test_random_symmetric_float   sL    IIR 	!LL##A&

1FGr"   c                     d}t         j                  j                  |      }t        j                  j	                  |      }| j                  |d       y )Nr   )r   r   r   r   rg   r:   )rM   r   r   r   r   r/   r   s      r   r   z/TestMMIOSparseCSR.test_random_rectangular_float   s>    IIR LL##A&

1DEr"   c                    t         j                  j                  ddgddgg      }t        j                  |j                               }d||j                         dkD  <   d}t        | j                  |d       t        t        | j                        |       t        | j                        }t        ||j                                y )	Nr   g      ?g      @g      @r4   )r5   r5   r6   r   patternr:   r   )field)r   r   r   rM   
zeros_liker   r   r   r   r   r   r
   )r   r,   pr-   r.   s        r   test_simple_patternz%TestMMIOSparseCSR.test_simple_pattern   s    LL##aXSz$:;MM!))+&!))+/<),VDGG_d+477O!!QYY[1r"   c                     t         j                  j                  ddgddggt        j                        }| j                  |d       y )Nr4   r5   rv   r   r8   r   )r   r   r   rM   r   r1   rS   s     r   r   z5TestMMIOSparseCSR.test_gh13634_non_skew_symmetric_int  s=    LL##aVb"X$6bhh#GIJr"   c                     t         j                  j                  ddgddggt        j                        }| j                  |d       y )Nr4   r5   rv   r   r8   r   )r   r   r   rM   r   r/   rS   s     r   r   z7TestMMIOSparseCSR.test_gh13634_non_skew_symmetric_float  s;    LL##aVb#Y$7rzz#J

1@Ar"   N)r   r   r   r    r(   r/   r1   r   r   r   r   r>   rE   rT   r   rY   r\   r^   rd   ri   rm   rq   rt   rx   r|   r   r   r   r   r   r   r   r"   r   r   r      s?   <#</ [[-/?@F AFKOTT [[-/?@F AF [[-/?@F AF [[-/?@F AF??B [[-/?@H AHOFDHF2KBr"   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                   N    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestMMIOReadLargeIntegersc                     t               | _        t        j                  j	                  | j                  d      | _        y r   r   r   s    r   r    z&TestMMIOReadLargeIntegers.setup_methodS  r!   r"   c                 B    t        j                  | j                         y r$   r%   r   s    r   r(   z)TestMMIOReadLargeIntegers.teardown_methodW  r)   r"   c                    t        | j                  d      5 }|j                  |       d d d        t        t	        | j                        |       |r"t        j                  d      j                  dk  s|r t        t        t        | j                         y t        | j                        }|s|j                         }t        ||       y # 1 sw Y   xY w)Nwr   rK   )openr   writer   r   rM   rO   rP   rQ   rR   r   r   )	r   exampler,   r-   denseover32over64r{   r.   s	            r   
check_readz$TestMMIOReadLargeIntegers.check_readZ  s    $''3 	1GGG	VDGG_d+
++a/V-9twwAIIKA	 	s   C

Cc                 |    t        ddgddggt        j                        }| j                  t        |dddd       y )NrA   rB   r8   rL   TFr   r   r   )r   rM   rN   r   _32bit_integer_dense_examplerS   s     r   test_read_32bit_integer_densez7TestMMIOReadLargeIntegers.test_read_32bit_integer_densef  sJ    GW%W%'.0hh84@"$$ 	 	&r"   c                 |    t        ddgddggt        j                        }| j                  t        |dddd       y )NrA   r   rB   r8   r5   r5   r5   r   r   rs   Fr   )r   rM   rN   r   _32bit_integer_sparse_examplerS   s     r   test_read_32bit_integer_sparsez8TestMMIOReadLargeIntegers.test_read_32bit_integer_sparsep  sH    GQ<w<!(*25G#$$ 	 	&r"   c                 |    t        ddgddggt        j                        }| j                  t        |dddd	       y )
NrG   i   r   rJ   r8   rL   TFr   )r   rM   rN   r   _64bit_integer_dense_examplerS   s     r   test_read_64bit_integer_densez7TestMMIOReadLargeIntegers.test_read_64bit_integer_densez  sI    E6?g&(/1xx94@"#$ 	 	&r"   c                 |    t        ddgddggt        j                        }| j                  t        |dddd       y )	NrG   rJ   r   r8   )r5   r5   r6   r   r   r:   FTr   )r   rM   rN   r   %_64bit_integer_sparse_general_examplerS   s     r   &test_read_64bit_integer_sparse_generalz@TestMMIOReadLargeIntegers.test_read_64bit_integer_sparse_general  sI    E7#w<!(*2=E##$ 	 	&r"   c                 |    t        ddgddggt        j                        }| j                  t        |dddd       y )	NrG    rJ   r8   )r5   r5   r6   r   r   rs   FTr   )r   rM   rN   r   '_64bit_integer_sparse_symmetric_examplerS   s     r   (test_read_64bit_integer_sparse_symmetriczBTestMMIOReadLargeIntegers.test_read_64bit_integer_sparse_symmetric  sJ    E8$g&(/1xx9?G##$ 	 	&r"   c                 |    t        ddgddggt        j                        }| j                  t        |dddd       y )	NrG   r   rJ   r8   )r5   r5   r6   r   r   rw   FTr   )r   rM   rN   r   "_64bit_integer_sparse_skew_examplerS   s     r   #test_read_64bit_integer_sparse_skewz=TestMMIOReadLargeIntegers.test_read_64bit_integer_sparse_skew  sJ    E8$W%'.0hh8:L##$ 	 	&r"   c                 :    | j                  t        d dddd       y )NrL   Tr   )r    _over64bit_integer_dense_exampler   s    r   !test_read_over64bit_integer_densez;TestMMIOReadLargeIntegers.test_read_over64bit_integer_dense  s%    8@"## 	 	%r"   c                 :    | j                  t        d dddd       y )Nr   FTr   )r   !_over64bit_integer_sparse_exampler   s    r   "test_read_over64bit_integer_sparsez<TestMMIOReadLargeIntegers.test_read_over64bit_integer_sparse  s%    9G### 	 	%r"   N)r   r   r   r    r(   r   r   r   r   r   r   r   r  r  r   r"   r   r   r   R  s9    <#
&&&&&&%%r"   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                   r    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestMMIOCoordinatec                     t               | _        t        j                  j	                  | j                  d      | _        y r   r   r   s    r   r    zTestMMIOCoordinate.setup_method  r!   r"   c                 B    t        j                  | j                         y r$   r%   r   s    r   r(   z"TestMMIOCoordinate.teardown_method  r)   r"   c                    t        | j                  d      }|j                  |       |j                          t	        t        | j                        |       t        | j                        j                         }t        ||       y )Nr   )	r   r   r   closer   r   r   r   r
   )r   r   r,   r-   r{   r.   s         r   r   zTestMMIOCoordinate.check_read   sY    #			VDGG_d+477O##%!!Q'r"   c                 T    g dg dg dg dg dg}| j                  t        |d       y N)r4   r   r   rc   r   )r         %@r   r   r   r   r   Q?r   r   )r        Po@r   )\@@r   r   r   r      rb   rb   rK   r   rg   r:   )r   _general_examplerS   s     r   test_read_generalz$TestMMIOCoordinate.test_read_general(  s/    '	
 	(!B	Dr"   c                 T    g dg dg dg dg dg}| j                  t        |d       y )Nr4   r   r   r   r   )r   r  r   y     Po@Q86r   r  )r   y     Po@Q86@r   r  y       )\@)r   r   r   y        )\@@r  )rb   rb      r   rp   r   )r   _hermitian_examplerS   s     r   test_read_hermitianz&TestMMIOCoordinate.test_read_hermitian1  s/    ,2"	$
 	*AG	Ir"   c                 T    g dg dg dg dg dg}| j                  t        |d       y )Nr  )r   r  r   g     Por   r  )r   r  r   r  r   r  )rb   rb   r  r   rg   rw   )r   _skew_examplerS   s     r   test_read_skewz!TestMMIOCoordinate.test_read_skew:  s.    $#	
 	qI	Kr"   c                 T    g dg dg dg dg dg}| j                  t        |d       y )Nr  )r   r  r   r  r   r  )r   r  r   r  rK   )r   r   r   rK   r  )rb   rb   r  r   rg   rs   )r   _symmetric_examplerS   s     r   test_read_symmetricz&TestMMIOCoordinate.test_read_symmetricC  s/    ##	
 	*AD	Fr"   c                 T    g dg dg dg dg dg}| j                  t        |d       y )Nr  )r   r4   r   r4   r   )r   r   r4   r   r   )r   r4   r   r4   r4   )r   r   r   r4   r4   )rb   rb   r  r   r   rs   )r   _symmetric_pattern_examplerS   s     r   test_read_symmetric_patternz.TestMMIOCoordinate.test_read_symmetric_patternL  s/    	
 	2AG	Ir"   c                 T    g dg dg dg dg dg}| j                  t        |d       y r  )r   _empty_lines_examplerS   s     r   test_read_empty_linesz(TestMMIOCoordinate.test_read_empty_linesU  s/    '	
 	,aB	Dr"   c                 *   t         j                  j                  d      }t        | j                  |       t        t        | j                        d       |j                         }t        | j                        j                         }t        ||       y )N)
   r,  )r,  r,  r   r   rg   rs   )
r   r   
coo_matrixr   r   r   r   r   r   r
   )r   r.   r,   s      r   test_empty_write_readz(TestMMIOCoordinate.test_empty_write_read^  sg     LL##H-VDGG_C	EIIK477O##%!!Q'r"   c                 L   	 dd l }t        g d      }t        g d      }t        g d      }t        j                  j                  |||ffd      }t        | j                  |       d| j                  z  }t        | j                  d      5 }|j                  |d	      }|j                  |j                                |j                          d d d        t        |      j                         }	t        |	|j                                y # t        $ r Y y w xY w# 1 sw Y   LxY w)
Nr   r   r   r4   r5   r6   r6   r6   r7   r   r6   r4   r5   r4   r6   r7   r7   g      ?g      @r  r  r  g     qr  g      (@rb   rb   shapez%s.bz2rbwb)bz2ImportErrorr   r   r   r-  r   r   r   BZ2Filer   readr  r   r   r
   )
r   r8  IJVr.   fn_bzip2f_inf_outr,   s
             r   test_bzip2_py3z!TestMMIOCoordinate.test_bzip2_py3j  s    	 *+*+EFLL##QAKv#>dgg%$''4  	DKK$/EKK		$KKM	
 8$$&!!QYY[1#  			 	   D AD	DDD#c                 L   	 dd l }t        g d      }t        g d      }t        g d      }t        j                  j                  |||ffd      }t        | j                  |       d| j                  z  }t        | j                  d      5 }|j                  |d	      }|j                  |j                                |j                          d d d        t        |      j                         }	t        |	|j                                y # t        $ r Y y w xY w# 1 sw Y   LxY w)
Nr   r0  r1  r2  r3  r4  z%s.gzr6  r7  )gzipr9  r   r   r   r-  r   r   r   r   r;  r  r   r   r
   )
r   rE  r<  r=  r>  r.   fn_gzipr@  rA  r,   s
             r   test_gzip_py3z TestMMIOCoordinate.test_gzip_py3  s    	 *+*+EFLL##QAKv#>DGG#$''4  	DIIgt,EKK		$KKM	
 7O##%!!QYY[1#  			 	rC  c                    t        g d      }t        g d      }t        g d      }t        j                  j                  |||ffd      }t	        | j
                  |       t        t        | j
                        d       |j                         }t        | j
                        j                         }t        ||       y )Nr0  r1  r2  r3  r4  r  r   r   r   r-  r   r   r   r   r   r   r
   r   r<  r=  r>  r.   r,   s         r   test_real_write_readz'TestMMIOCoordinate.test_real_write_read  s    *+*+EFLL##QAKv#>VDGG_?	AIIK477O##%!!Q'r"   c                    t        g d      }t        g d      }t        g d      }t        j                  j                  |||ffd      }t	        | j
                  |       t        t        | j
                        d       |j                         }t        | j
                        j                         }t        ||       y )Nr0  r1  y      ?      @y      @       @y      %@?yQ?y     Po@        y     q      @y)\@@@y      (@?r3  r4  )rb   rb   rK   r   rp   r:   rI  rJ  s         r   test_complex_write_readz*TestMMIOCoordinate.test_complex_write_read  s    *+*+ H I LL##QAKv#>VDGG_B	DIIK477O##%!!Q'r"   c                 6   |dz  }|j                          g }t        g d      }t        g d      }t        g d      }|j                  t        j                  j                  |||ffd             t        g d      }|j                  t        j                  j                  |||ffd             |D ]a  }|j                         }dD ]J  }	||	d	z   z  }
t        |
|j                  |	             t        |
      j                         }t        ||       L c y )
Nsparse_formatsr0  r1  r2  r3  r4  rM  )csrcsccooz.mtx)mkdirr   appendr   r   r-  r   r   asformatr   r
   )r   tmp_pathr   matsr<  r=  r>  matexpectedfmtfnameresults               r   test_sparse_formatsz&TestMMIOCoordinate.test_sparse_formats  s   ,,*+*+EFELL++QAKv+FG H IELL++QAKv+FG 	<C{{}H, <#,/s||C01..0)&(;	<	<r"   c           	      0   t         gt        ddd      D cg c]  }d|z  	 c}z   }t        dd      }|D ]  }|D ]  }d|z  dz   }t        j                  j	                  ||f      }|||dz
  |dz
  f<   t        | j                  ||       t        j                  j                  | j                        }t        |j                  |dz
  g       t        |j                  |dz
  g       t        |j                  t        d|z  |z        g         y c c}w )Nr   ir,  r4   )	precisionz%%.%dg)r   ranger   r   
dok_matrixr   r   r   r   r	   rowcolr   datafloat)r   itest_valuestest_precisionsvaluera  nAs           r   test_precisionz!TestMMIOCoordinate.test_precision  s   duQR/@A!b1gAA2,  	OE, O		MA%LL++QF3#!A#qs(i8HHOODGG,"1551Q3%0"1551Q3%0x)/Ce/K)L(MNO	O Bs   Dc                    d}t        j                  |      j                  d      }t        j                  t
        d      5  t        j                  j                  t        j                  |             d d d        y # 1 sw Y   y xY w)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
            r   znot of length 3r   r   r   s      r   +test_bad_number_of_coordinate_header_fieldsz>TestMMIOCoordinate.test_bad_number_of_coordinate_header_fields  sa     q!((1]]:->? 	.HHOOBJJt,-	. 	. 	.r   N)r   r   r   r    r(   r   r  r  r!  r$  r'  r*  r.  rB  rG  rK  rN  r^  rn  rp  r   r"   r   r  r    s^    <#(DIKFID
(2020(( <0O".r"   r  c                  @    t        t        j                  d             y )Nzg%%MatrixMarket matrix coordinate complex symmetric
 1 1 1
1 1 -2.1846000000000e+02  0.0000000000000e+00)r   r   StringIOr   r"   r   test_gh11389rs    s    
2;; G H Ir"   c                     g d}| dz  }t        |d      5 }|j                  |       d d d        t        |       y # 1 sw Y   xY w)N)z/ %%MatrixMarket matrix coordinate real general
z5 5 3
z2 3 1.0
z3 4 2.0
z3 5 3.0
ztest.mtxr   )r   
writelinesr   )rW  lines	test_filer{   s       r   test_gh18123rx    sJ    E
 :%I	i	 	U
9 s	   <A).tempfiler   r   r   r&   r   numpyrM   r   r   r   numpy.testingr   r   r	   r
   r   r   rQ   scipy.sparser   scipy.ior   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r  r   r#  r&  r)  r  rs  rx  r   r"   r   <module>r~     s     	 	    & &J J  *  , ,&02 x: x:v}B }B@  !   ) %+ '& "$  % !^% ^%B  D
 

 
  "Y. Y.xI	r"   