a
    ‡ù»jp  ã                   @   sL  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Zd dlm  mZ ddgZejdejjefd	d
�dd„ ƒ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%d&„ Z0d'd(„ Z1dS ))é    )ÚmkdtempN)ÚarrayÚ	transposeÚpi)Úassert_equalÚassert_allcloseÚassert_array_equalÚassert_array_almost_equal)Úraises)ÚintegerÚint)úunsigned-integerZuintÚmoduleT)ÚscopeÚparamsZautousec                 C   s   | j ja| j ja| j jad S ©N)ÚparamÚmminfoÚmmreadÚmmwrite)Úrequest© r   ú>E:\soccer\ml_env\Lib\site-packages\scipy/io/tests/test_mmio.pyÚimplementations   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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©Úselfr   r   r   Úsetup_method#   s    zTestMMIOArray.setup_methodc                 C   s   t  | j¡ d S r   ©Ú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_exact0   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#   Útypevalr5   r   r   r   Útest_simple_integer6   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éÿÿÿéþÿÿéýÿÿéüÿÿr4   r1   r3   r   r6   )r   r.   )r#   r9   r5   r*   r   r   r   Útest_32bit_integer;   s    z TestMMIOArray.test_32bit_integerc                 C   sZ   t ddgddggtjd�}t d¡jdk rJttjjjkrJt	t
t| j|ƒ n|  |d¡ d S )	Nì        ì        ì   þÿÿÿ ì   ÿÿÿÿ r4   r   é   ©r1   r1   r3   r   r   r6   )r   ÚnpÚint64ÚintpÚitemsizer   ÚscipyÚioÚ_mmioÚassert_raisesÚOverflowErrorr!   r.   ©r#   r*   r   r   r   Útest_64bit_integer@   s    z TestMMIOArray.test_64bit_integerc                 C   s*   t ddgddggtjd�}|  |d¡ d S )Nr@   rA   ì   þÿÿÿ ì   ÿÿÿÿ r4   )r1   r1   r3   r   r   r6   )r   rF   Úuint64r.   rO   r   r   r   Útest_64bit_unsigned_integerG   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   r0   r4   r1   r3   r   r6   r7   r8   r   r   r   Ú"test_simple_upper_triangle_integerK   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 rU   r7   r8   r   r   r   Ú"test_simple_lower_triangle_integerP   s    ÿz0TestMMIOArray.test_simple_lower_triangle_integerc              	   C   s0   |   tg d¢g d¢g|d�dddd|df¡ d S )	N©r0   r1   r2   ©r3   é   é   r4   r1   r2   r[   r   r6   r7   r8   r   r   r   Útest_simple_rectangular_integerU   s    ÿz-TestMMIOArray.test_simple_rectangular_integerc                 C   s"   |   ddgddgddggd¡ d S )Nr0   r1   ç      @r3   rZ   r[   )r2   r1   r[   r   Úrealr6   ©r-   r"   r   r   r   Útest_simple_rectangular_floatZ   s    ÿz+TestMMIOArray.test_simple_rectangular_floatc                 C   s   |   ddgddggd¡ d S )Nr0   r1   r2   ç      @©r1   r1   r3   r   r^   r6   r_   r"   r   r   r   Útest_simple_float^   s    ÿzTestMMIOArray.test_simple_floatc                 C   s   |   ddgddggd¡ d S )Nr0   r1   r2   ù              @)r1   r1   r3   r   Úcomplexr6   r_   r"   r   r   r   Útest_simple_complexb   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 )Nr0   r1   r3   r4   r   Ú	symmetricr7   r8   r   r   r   Útest_simple_symmetric_integerf   s    ÿz+TestMMIOArray.test_simple_symmetric_integerc                 C   s   |   ddgddggd¡ d S )Nr   r1   éþÿÿÿ)r1   r1   r3   r   r   úskew-symmetric)r.   r"   r   r   r   Ú"test_simple_skew_symmetric_integerk   s    ÿz0TestMMIOArray.test_simple_skew_symmetric_integerc                 C   s"   |   tddgddggdƒd¡ d S )Nr   r1   ç       Àg        Úf)r1   r1   r3   r   r^   rj   )r-   r   r"   r   r   r   Ú test_simple_skew_symmetric_floato   s    ÿz.TestMMIOArray.test_simple_skew_symmetric_floatc                 C   s   |   ddgddggd¡ d S )Nr0   ù       @      @ù       @      Àr3   )r1   r1   r3   r   re   Ú	hermitianr_   r"   r   r   r   Útest_simple_hermitian_complexs   s    ÿz+TestMMIOArray.test_simple_hermitian_complexc                 C   s,   d}t j |¡}|t|ƒ }|  |d¡ d S )N©é   rt   )rt   rt   i�  r   r^   rg   )rF   Úrandomr   r-   ©r#   Úszr*   r   r   r   Útest_random_symmetric_floatw   s    z)TestMMIOArray.test_random_symmetric_floatc                 C   s    d}t j |¡}|  |d¡ d S )N©rt   é   )rt   rz   é,  r   r^   r6   )rF   ru   r-   rv   r   r   r   Útest_random_rectangular_float}   s    z+TestMMIOArray.test_random_rectangular_floatc                 C   sX   d}t  |¡ d¡}tjtdd��" tj t 	|¡¡ W d   ƒ n1 sJ0    Y  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
   Ú
ValueErrorrJ   rK   r   ÚBytesIO©r#   ÚsÚtextr   r   r   Ú&test_bad_number_of_array_header_fields‚   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 )Nr0   r1   ri   éc   r4   rE   )r.   r   rF   Ú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 )Nr0   r1   ri   ç     ÀX@r4   rb   )r-   r   rF   Ú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.   r„   ÚmarkÚparametrizeÚparametrize_argsr:   r?   rP   rT   rV   rW   r\   r`   rc   rf   rh   rk   rn   rr   rx   r|   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 )Nr0   r1   r2   r3   r4   Ú
coordinater6   ©r.   rJ   ÚsparseÚ
csr_matrixr8   r   r   r   r:   ±   s    ÿz%TestMMIOSparseCSR.test_simple_integerc                 C   s2   t j tddgddggtjd�¡}|  |d¡ d S )Nr;   i  €r=   r>   r4   ©r1   r1   r3   r™   r   r6   )rJ   r›   rœ   r   rF   rŒ   r.   rO   r   r   r   r?   ¶   s    ÿþz$TestMMIOSparseCSR.test_32bit_integerc                 C   sb   t j tddgddggtjd�¡}t d¡jdk rRtt j	j
jkrRttt| j|ƒ n|  |d¡ d S )Nì       ìûÿÿÿþÿÿÿ rB   r4   r   rD   r�   )rJ   r›   rœ   r   rF   rG   rH   rI   r   rK   rL   rM   rN   r!   r.   rO   r   r   r   rP   ¼   s    ÿþz$TestMMIOSparseCSR.test_64bit_integerc                 C   s2   t j tddgddggtjd�¡}|  |d¡ d S )Nr;   r<   r=   r>   r4   ©r1   r1   r3   r™   r   r6   )rJ   r›   rœ   r   rF   Zuint32r.   rO   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ž   rQ   rR   r4   r    )rJ   r›   rœ   r   rF   rS   r.   rO   r   r   r   rT   Ë   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   r0   r4   r1   r™   r6   rš   r8   r   r   r   rV   Ñ   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š   r8   r   r   r   rW   Ö   s    ÿz4TestMMIOSparseCSR.test_simple_lower_triangle_integerc              	   C   s4   |   tjjg d¢g d¢g|d�dddd|df¡ d S )	NrX   rY   r4   r1   r2   r[   r™   r6   rš   r8   r   r   r   r\   Û   s    ÿz1TestMMIOSparseCSR.test_simple_rectangular_integerc                 C   s*   |   tj ddgddgddgg¡d¡ d S )Nr0   r1   r]   r3   rZ   r[   )r2   r1   r[   r™   r^   r6   ©r-   rJ   r›   rœ   r"   r   r   r   r`   à   s     ÿz/TestMMIOSparseCSR.test_simple_rectangular_floatc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr0   r1   r2   ra   ©r1   r1   r3   r™   r^   r6   r£   r"   r   r   r   rc   ä   s    ÿz#TestMMIOSparseCSR.test_simple_floatc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr0   r1   r2   rd   )r1   r1   r3   r™   re   r6   r£   r"   r   r   r   rf   è   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 )Nr0   r1   r3   r4   r2   r™   rg   rš   r8   r   r   r   rh   ì   s    ÿz/TestMMIOSparseCSR.test_simple_symmetric_integerc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr   r1   ri   )r1   r1   r0   r™   r   rj   rš   r"   r   r   r   rk   ñ   s    ÿz4TestMMIOSparseCSR.test_simple_skew_symmetric_integerc                 C   s*   |   tj tddgddggdƒ¡d¡ d S )Nr   r1   rl   rm   )r1   r1   r0   r™   r^   rj   )r-   rJ   r›   rœ   r   r"   r   r   r   rn   õ   s     ÿz2TestMMIOSparseCSR.test_simple_skew_symmetric_floatc                 C   s$   |   tj ddgddgg¡d¡ d S )Nr0   ro   rp   r3   )r1   r1   r2   r™   re   rq   r£   r"   r   r   r   rr   ù   s    ÿz/TestMMIOSparseCSR.test_simple_hermitian_complexc                 C   s8   d}t j |¡}|t|ƒ }tj |¡}|  |d¡ d S )Nrs   )rt   rt   éÒ   r™   r^   rg   )rF   ru   r   rJ   r›   rœ   r-   rv   r   r   r   rx   ý   s
    z-TestMMIOSparseCSR.test_random_symmetric_floatc                 C   s,   d}t j |¡}tj |¡}|  |d¡ d S )Nry   )rt   rz   r{   r™   r^   r6   )rF   ru   rJ   r›   rœ   r-   rv   r   r   r   r|     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      @r0   )r1   r1   r2   r™   Úpatternr6   r¦   )Úfield)rJ   r›   rœ   rF   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 )Nr0   r1   ri   r‹   r4   r�   )rJ   r›   rœ   rF   rŒ   r.   rO   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 )Nr0   r1   ri   rŽ   r4   r¤   )rJ   r›   rœ   rF   r�   r-   rO   r   r   r   r�     s    z7TestMMIOSparseCSR.test_gh13634_non_skew_symmetric_floatN)r‘   r’   r“   r$   r(   r-   r.   r„   r”   r•   r–   r:   r?   rP   r¡   rT   rV   rW   r\   r`   rc   rf   rh   rk   rn   rr   rx   r|   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    z&TestMMIOReadLargeIntegers.setup_methodc                 C   s   t  | j¡ d S r   r%   r"   r   r   r   r(   d  s    z)TestMMIOReadLargeIntegers.teardown_methodc           	      C   s    t | jdƒ�}| |¡ W d   ƒ n1 s,0    Y  tt| jƒ|ƒ |rht d¡jdk rhtt	j
jjksl|r|ttt| jƒ n t| jƒ}|s’| ¡ }t||ƒ d S )NÚwr   rD   )Úopenr!   Úwriter   r   rF   rH   rI   r   rJ   rK   rL   rM   rN   r   r˜   )	r#   Úexampler*   r+   ÚdenseÚover32Úover64rm   r,   r   r   r   Ú
check_readg  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 )Nr;   r<   r4   rE   TF©r¯   r°   r±   )r   rF   rG   r²   Ú_32bit_integer_dense_examplerO   r   r   r   Útest_read_32bit_integer_denset  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 )Nr;   r   r<   r4   ©r1   r1   r1   r™   r   rg   Fr³   )r   rF   rG   r²   Ú_32bit_integer_sparse_examplerO   r   r   r   Útest_read_32bit_integer_sparse~  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Ÿ   rC   r4   rE   TFr³   )r   rF   rG   r²   Ú_64bit_integer_dense_examplerO   r   r   r   Útest_read_64bit_integer_denseˆ  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@   rC   r   r4   )r1   r1   r2   r™   r   r6   FTr³   )r   rF   rG   r²   Ú%_64bit_integer_sparse_general_examplerO   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@   ìûÿÿÿÿÿÿÿ rC   r4   )r1   r1   r2   r™   r   rg   FTr³   )r   rF   rG   r²   Ú'_64bit_integer_sparse_symmetric_examplerO   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½   rC   r4   )r1   r1   r2   r™   r   rj   FTr³   )r   rF   rG   r²   Ú"_64bit_integer_sparse_skew_examplerO   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 )NrE   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ª   _  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+   rm   r,   r   r   r   r²   .  s    
zTestMMIOCoordinate.check_readc                 C   s4   g d¢g d¢g d¢g d¢g d¢g}|   t|d¡ d S ©N)r0   r   r   r[   r   )r   ç      %@r   r   r   ©r   r   ç¸…ëQ¸Ž?r   r   )r   ç     Po@r   éèþÿÿç)\�Âõ¨@@©r   r   r   r   é   ©rZ   rZ   rD   r™   r^   r6   )r²   Ú_general_examplerO   r   r   r   Útest_read_general6  s    üÿz$TestMMIOCoordinate.test_read_generalc                 C   s4   g d¢g d¢g d¢g d¢g d¢g}|   t|d¡ d S )N©r0   r   r   r   r   )r   rÉ   r   y     Po@¸…ëQ86Àr   rÊ   )r   y     Po@¸…ëQ86@r   rÍ   y       €)\�Âõ¨@À)r   r   r   y        )\�Âõ¨@@rÐ   )rZ   rZ   é   r™   re   rq   )r²   Ú_hermitian_examplerO   r   r   r   Útest_read_hermitian?  s    üÿz&TestMMIOCoordinate.test_read_hermitianc                 C   s4   g d¢g d¢g d¢g d¢g d¢g}|   t|d¡ d S )NrÔ   )r   rÉ   r   g     PoÀr   rÊ   )r   rÌ   r   rÍ   r   rÏ   )rZ   rZ   rÕ   r™   r^   rj   )r²   Ú_skew_examplerO   r   r   r   Útest_read_skewH  s    üÿz!TestMMIOCoordinate.test_read_skewc                 C   s4   g d¢g d¢g d¢g d¢g d¢g}|   t|d¡ d S )NrÔ   )r   rÉ   r   rÌ   r   rÊ   )r   rÌ   r   rÍ   rD   )r   r   r   rD   rÐ   )rZ   rZ   rÕ   r™   r^   rg   )r²   Ú_symmetric_examplerO   r   r   r   Útest_read_symmetricQ  s    üÿz&TestMMIOCoordinate.test_read_symmetricc                 C   s4   g d¢g d¢g d¢g d¢g d¢g}|   t|d¡ d S )NrÔ   )r   r0   r   r0   r   )r   r   r0   r   r   )r   r0   r   r0   r0   )r   r   r   r0   r0   )rZ   rZ   rÕ   r™   r¦   rg   )r²   Ú_symmetric_pattern_examplerO   r   r   r   Útest_read_symmetric_patternZ  s    üÿz.TestMMIOCoordinate.test_read_symmetric_patternc                 C   s4   g d¢g d¢g d¢g d¢g d¢g}|   t|d¡ d S rÈ   )r²   Ú_empty_lines_examplerO   r   r   r   Útest_read_empty_linesc  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™   r^   rg   )
rJ   r›   Ú
coo_matrixr   r!   r   r   r˜   r   r	   )r#   r,   r*   r   r   r   Útest_empty_write_readl  s    
ÿz(TestMMIOCoordinate.test_empty_write_readc           
      C   sà   zdd l }W n ty    Y d S 0 tg d¢ƒ}tg d¢ƒ}tg d¢ƒ}tjj|||ffdd�}t| j|ƒ d| j }t| jdƒ�2}| 	|d	¡}| 
| ¡ ¡ | ¡  W d   ƒ n1 s¸0    Y  t|ƒ ¡ }	t|	| ¡ ƒ d S )
Nr   ©r   r   r0   r1   r2   r2   r2   r3   ©r   r2   r0   r1   r0   r2   r3   r3   ©g      ð?g      @rÉ   rË   rÌ   g     €qÀrÎ   g      (@©rZ   rZ   ©Úshapez%s.bz2ÚrbÚwb)Úbz2ÚImportErrorr   rJ   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_py3x  s     
&z!TestMMIOCoordinate.test_bzip2_py3c           
      C   sà   zdd l }W n ty    Y d S 0 tg d¢ƒ}tg d¢ƒ}tg d¢ƒ}tjj|||ffdd�}t| j|ƒ d| j }t| jdƒ�2}| |d	¡}| 	| 
¡ ¡ | ¡  W d   ƒ n1 s¸0    Y  t|ƒ ¡ }	t|	| ¡ ƒ d S )
Nr   rã   rä   rå   ræ   rç   z%s.gzré   rê   )Úgziprì   r   rJ   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 g d¢ƒ}t g d¢ƒ}t g d¢ƒ}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   rJ   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 g d¢ƒ}t g d¢ƒ}t g d¢ƒ}tjj|||ffdd�}t| j|ƒ tt| jƒdƒ | ¡ }t	| jƒ ¡ }t
||ƒ d S )Nrã   rä   ©y      ð?      @y      @       @y      %@ÍÌÌÌÌÌì?y¸…ëQ¸Ž?š™™™™™Ày     Po@        y     €qÀ      @y)\�Âõ¨@@š™™™™™@y      (@š™™™™™é?ræ   rç   )rZ   rZ   rD   r™   re   r6   r÷   rø   r   r   r   Útest_complex_write_read·  s    
ÿz*TestMMIOCoordinate.test_complex_write_readc                 C   sÒ   |d }|  ¡  g }tg d¢ƒ}tg d¢ƒ}tg d¢ƒ}| tjj|||ffdd�¡ tg d¢ƒ}| 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ú   )ZcsrZcscZcooz.mtx)Úmkdirr   ÚappendrJ   r›   rá   r˜   r   Zasformatr   r	   )r#   Útmp_pathr   Zmatsrï   rð   rñ   Z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>à  ó    z5TestMMIOCoordinate.test_precision.<locals>.<listcomp>r   iöÿÿÿéÿÿÿÿr0   rà   )Ú	precisionz%%.%dg)r   ÚrangerJ   r›   Z
dok_matrixr   r!   rK   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   sX   d}t  |¡ d¡}tjtdd��" tj t 	|¡¡ W d   ƒ n1 sJ0    Y  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
            r}   znot of length 3r~   r€   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   rK   ÚStringIOr   r   r   r   Útest_gh11389  s    r  c                 C   sP   g d¢}| d }t |dƒ�}| |¡ W d   ƒ n1 s:0    Y  t|ƒ d S )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   )rþ   ÚlinesZ	test_filerm   r   r   r   Útest_gh18123  s
    (r  c                  C   s¼   z&dd l } t| dƒs$t d¡ W d S W n tyD   t d¡ Y d S 0 | jdd�� ttjdƒ W d   ƒ n1 st0    Y  | jddd	�� ttjdƒ W d   ƒ n1 s®0    Y  d S )
Nr   Úregisterzthreadpoolctl too oldzno threadpoolctlr3   )Úlimitsr1   rJ   )r  Zuser_api)	ÚthreadpoolctlÚhasattrr„   Úskiprì   Zthreadpool_limitsr   ÚfmmZPARALLELISM)r  r   r   r   Útest_threadpoolctl  s    



*r  )2Útempfiler   r   rK   r&   r�   ÚnumpyrF   r   r   r   Znumpy.testingr   r   r   r	   r„   r
   rM   Zscipy.sparserJ   Zscipy.io._mmioZscipy.io._fast_matrix_marketZ_fast_matrix_marketr  r–   ZfixturerL   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>   sP   ÿ
	{ 			b" ]