U
    Hvf”  ã                   @   sÚ   d Z ddlZddlZddlmZ ddlmZ ddlZddlm	Z	m
Z
 ddlZddlZddlmZmZmZmZ e e e¡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 )z$ Tests for fortran sequential files é    N)Úpath)Úiglob)Úassert_equalÚassert_allclose)ÚFortranFileÚ_test_fortranÚFortranEOFErrorÚFortranFormattingErrorÚdatac                  C   sÄ   t t td¡ƒD ]®} t d| tj¡}|s4td|  ƒ‚t| 	d¡ƒt| 	d¡ƒt| 	d¡ƒf}| 	d¡ 
dd	¡}t| d
dƒ}|j|dj|dd}| ¡  t t |¡¡ |¡ |¡}t||ƒ qd S )Núfortran-*-*x*x*.datú%fortran-([^-]+)-(\d+)x(\d+)x(\d+).datú#Couldn't match %s filename to regexé   é   é   é   Úsú<Úrú<u4©ÚdtypeÚF)Úorder)r   r   ÚjoinÚ	DATA_PATHÚreÚsearchÚIÚRuntimeErrorÚintÚgroupÚreplacer   Úread_recordÚreshapeÚcloseÚnpÚarangeÚprodÚastyper   )ÚfilenameÚmÚdimsr   Úfr
   Úexpected© r/   ú?/tmp/pip-unpacked-wheel-96ln3f52/scipy/io/tests/test_fortran.pyÚtest_fortranfiles_read   s    (r1   c               	   C   s~   t  td¡} t| ddƒ}| d¡}W 5 Q R X t|d d dƒ t|d d d	ƒ t|d
 d dƒ t|d d ddgƒ d S )Nzfortran-mixed.datr   r   z<i4,<f4,<i8,(2)<f8Zf0r   r   Úf1gffffff@Úf2r   Zf3gffffff@g333333@)r   r   r   r   r#   r   r   )r*   r-   Úrecordr/   r/   r0   Útest_fortranfiles_mixed_record(   s    r5   c            
   
   C   s  t t td¡ƒD ] } t d| tj¡}|s6td|  ƒ‚t| 	d¡ƒt| 	d¡ƒt| 	d¡ƒf}| 	d¡ 
dd	¡}t t |¡¡ |¡ |¡}t ¡ }zpt |t | ¡¡}t|d
dƒ}| |j¡ | ¡  t| dƒ}t|dƒ}	t| ¡ |	 ¡ | d | ¡  |	 ¡  W 5 t |¡ X qd S )Nr   r   r   r   r   r   r   r   r   Úwr   Úrb)Úerr_msg)r   r   r   r   r   r   r   r   r    r!   r"   r&   r'   r(   r$   r)   ÚtempfileÚmkdtempÚshutilÚrmtreeÚbasenamer   Úwrite_recordÚTr%   Úopenr   Úread)
r*   r+   r,   r   r
   ÚtmpdirZtestFiler-   ZoriginalfileÚnewfiler/   r/   r0   Útest_fortranfiles_write3   s*    (

ÿrD   c               	   C   s‚   t  td¡} t| ddƒ}| dd¡}W 5 Q R X t d¡ dd¡ tj	¡}tj
dd	gtjd
}t|d |jƒ t|d |jƒ d S )Nzfortran-3x3d-2i.datr   r   z(3,3)<f8z2<i4é	   r   éÿÿÿÿéþÿÿÿr   r   r   )r   r   r   r   r#   r&   r'   r$   r)   ÚdoubleÚarrayÚint32r   r?   )r*   r-   r4   ZaxZbxr/   r/   r0   Ú"test_fortranfile_read_mixed_recordM   s    rK   c           	   
   C   s  t  t| ƒd¡}dt d¡t d¡t d¡ffdtjjddgd	 tj¡tjjdddgd	 tj¡tjjdd
gd	 tj¡ffg}|D ]x\}}t	|dƒ}|j
|Ž  W 5 Q R X t	|dƒ}|j|Ž }W 5 Q R X tt|ƒt|ƒƒ t||ƒD ]\}}t||ƒ qêq†d S )Nútest.dat)Úf4rM   Úi4r   r   éd   )Z4f4z(3,3)f4Z8i4éÿ   r   )Úsizeé   r6   r   )r   r   Ústrr&   Zfloat32rJ   ÚrandomÚrandintr)   r   r>   r#   r   ÚlenÚzip)	rB   ÚtfÚrecordsr   Úar-   ÚbZaaZbbr/   r/   r0   Ú#test_fortranfile_write_mixed_recordd   s    þþr\   c              	   C   sæ  t  t| ƒd¡}tj d¡ d\}}}tj |||¡}t|dƒ}| |j	¡ W 5 Q R X t
 ||||¡}t|dƒ}| d¡j	}W 5 Q R X t||ƒ t||ƒ d\}}}tj |||¡ tj¡}t|dƒ}| |j	¡ W 5 Q R X t
 ||||¡}t|dƒ}| d¡j	}W 5 Q R X t||ƒ t||ƒ d\}}}tj ||¡}tj |¡ tj¡}	t|dƒ}| |j	|	j	¡ W 5 Q R X t
 ||||¡\}}
t|dƒ}| dd	¡\}}|j	}W 5 Q R X t||ƒ t||ƒ t|
|	ƒ t||	ƒ d S )
NrL   r   )é   r   r   r6   r   z	(2,3,5)f8z	(2,3,5)i4z(3,5)f8Z2i4)r   r   rS   r&   rT   ÚseedÚrandnr   r>   r?   r   Zread_unformatted_doubler#   r   r)   rJ   Zread_unformatted_intZintcZread_unformatted_mixed)rB   r*   r+   ÚnÚkrZ   r-   Za2Úa3r[   Zb2Zb3r/   r/   r0   Útest_fortran_roundtrip{   sB    









rc   c              
   C   s¶   t  t| ƒd¡}tj d¡ t|dƒ*}| tj d¡¡ | tj d¡¡ W 5 Q R X t|dƒL}t	| 
¡ ƒdksvt‚t	| 
¡ ƒdksŠt‚t t¡ | 
¡  W 5 Q R X W 5 Q R X d S )NÚscratchr   r6   r]   r   r   )r   r   rS   r&   rT   r^   r   r>   r_   rV   Ú
read_realsÚAssertionErrorÚpytestÚraisesr   ©rB   r*   r-   r/   r/   r0   Útest_fortran_eof_ok¦   s    rj   c              
   C   sÖ   t  t| ƒd¡}tj d¡ t|dƒ*}| tj d¡¡ | tj d¡¡ W 5 Q R X t	|dƒ}| 
d¡ W 5 Q R X t|dƒL}t| ¡ ƒdks–t‚t| ¡ ƒdksªt‚t t¡ | ¡  W 5 Q R X W 5 Q R X d S )	Nrd   r   r6   r]   r   Úabó   ÿr   )r   r   rS   r&   rT   r^   r   r>   r_   r@   ÚwriterV   re   rf   rg   rh   r	   ri   r/   r/   r0   Útest_fortran_eof_broken_size³   s    rn   c              
   C   s®   t  t| ƒd¡}tj d¡ t|dƒ*}| tj d¡¡ | tj d¡¡ W 5 Q R X t	|dƒ}| 
d¡ W 5 Q R X t|dƒ$}t t¡ | ¡  W 5 Q R X W 5 Q R X d S )	Nrd   r   r6   r]   r   zw+bs   ÿÿr   )r   r   rS   r&   rT   r^   r   r>   r_   r@   rm   rg   rh   r	   re   ri   r/   r/   r0   Útest_fortran_bogus_sizeÂ   s    ro   c              
   C   sÌ   t  t| ƒd¡}tj d¡ t|dƒ*}| tj d¡¡ | tj d¡¡ W 5 Q R X t	|dƒ}| 
t  |¡d ¡ W 5 Q R X t|dƒ8}t| ¡ ƒdks t‚t t¡ | ¡  W 5 Q R X W 5 Q R X d S )	Nrd   r   r6   r]   r   rk   é   r   )r   r   rS   r&   rT   r^   r   r>   r_   r@   ÚtruncateÚgetsizerV   re   rf   rg   rh   r	   ri   r/   r/   r0   Útest_fortran_eof_broken_recordÏ   s    rs   c              
   C   s  t  t| ƒd¡}d\}}}t dtj||ffg¡}tj||d}t|dƒ(}| |d ¡ | |¡ | |¡ W 5 Q R X t	|dƒ}| 
t  |¡d ¡ W 5 Q R X t|d	ƒX}t|j|dƒd
ksÆt‚t|j|dƒ|ksÞt‚t t¡ |j|d W 5 Q R X W 5 Q R X d S )Nrd   )r   r]   é   Úfieldr   r6   r   rk   rp   r   r   )r   r   rS   r&   r   Zfloat64Úzerosr   r>   r@   rq   rr   rV   r#   rf   rg   rh   r	   )rB   r*   r`   r+   ÚqÚdtrZ   r-   r/   r/   r0   Ú!test_fortran_eof_multidimensionalÝ   s    

ry   )"Ú__doc__r9   r;   Úosr   Úglobr   r   Znumpy.testingr   r   Znumpyr&   rg   Zscipy.ior   r   r   r	   r   ÚdirnameÚ__file__r   r1   r5   rD   rK   r\   rc   rj   rn   ro   rs   ry   r/   r/   r/   r0   Ú<module>   s*   +