o
    &&i                     @   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 ]W} td| tj}|st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/   FC:\wamp64\www\opt\env\Lib\site-packages\scipy/io/tests/test_fortran.pytest_fortranfiles_read   s   (r1   c                  C   s   t td} t| dd}|d}W d    n1 sw   Y  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}|std|  t|	dt|	dt|	df}|	d
dd	}tt|||}t }z=t|t| }t|d
d}||j |  t| d}t|d}	t| |	 | d |  |	  W t| qt| w 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basenamer   write_recordTr%   openr   readshutilrmtree)
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 d    n1 sw   Y  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   axbxr/   r/   r0   "test_fortranfile_read_mixed_recordM   s   rM   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 ]P\}}t	|d}|j
|  W d    n1 s\w   Y  t	|d}|j| }W d    n1 svw   Y  tt|t| t||D ]	\}}t|| qqCd S )Ntest.dat)f4rO   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 d    n1 s1w   Y  t
||||}t|d}|dj	}W d    n1 sTw   Y  t|| t|| d\}}}tj|||tj}t|d}||j	 W d    n1 sw   Y  t
||||}t|d}|dj	}W d    n1 sw   Y  t|| t|| d\}}}tj||}tj|tj}	t|d}||j	|	j	 W d    n1 sw   Y  t
||||\}}
t|d}|dd	\}}|j	}W d    n	1 sw   Y  t|| t|| t|
|	 t||	 d S )
NrN   r   )   r   r   r6   r   z	(2,3,5)f8z	(2,3,5)i4z(3,5)f8Z2i4)r   r   rU   r&   rV   seedrandnr   r<   r=   r   Zread_unformatted_doubler#   r   r)   rJ   Zread_unformatted_intZintcZread_unformatted_mixed)rB   r*   r+   nkr\   r-   Za2a3r]   b2Zb3r/   r/   r0   test_fortran_roundtrip{   sN   









rf   c              	   C   s  t t| d}tjd t|d}|tjd |tjd W d    n1 s0w   Y  t|d>}t	|
 dksEJ t	|
 dksOJ tt |
  W d    n1 scw   Y  W d    d S W d    d S 1 s{w   Y  d S )Nscratchr   r6   r_   r   r   )r   r   rU   r&   rV   r`   r   r<   ra   rX   
read_realspytestraisesr   rB   r*   r-   r/   r/   r0   test_fortran_eof_ok   s   
"rl   c              	   C   s8  t t| d}tjd t|d}|tjd |tjd W d    n1 s0w   Y  t	|d}|
d W d    n1 sJw   Y  t|d>}t| dks_J t| dksiJ tt |  W d    n1 s}w   Y  W d    d S W d    d S 1 sw   Y  d S )	Nrg   r   r6   r_   r   ab   r   )r   r   rU   r&   rV   r`   r   r<   ra   r>   writerX   rh   ri   rj   r	   rk   r/   r/   r0   test_fortran_eof_broken_size   s$   
"rp   c              	   C   s  t t| d}tjd t|d}|tjd |tjd W d    n1 s0w   Y  t	|d}|
d W d    n1 sJw   Y  t|d*}tt |  W d    n1 siw   Y  W d    d S W d    d S 1 sw   Y  d S )	Nrg   r   r6   r_   r   zw+bs   r   )r   r   rU   r&   rV   r`   r   r<   ra   r>   ro   ri   rj   r	   rh   rk   r/   r/   r0   test_fortran_bogus_size   s    
"rq   c              	   C   s.  t t| d}tjd t|d}|tjd |tjd W d    n1 s0w   Y  t	|d}|
t |d  W d    n1 sOw   Y  t|d4}t| dksdJ tt |  W d    n1 sxw   Y  W d    d S W d    d S 1 sw   Y  d S )	Nrg   r   r6   r_   r   rm      r   )r   r   rU   r&   rV   r`   r   r<   ra   r>   truncategetsizerX   rh   ri   rj   r	   rk   r/   r/   r0   test_fortran_eof_broken_record   s"   
"ru   c              	   C   sp  t t| d}d\}}}tdtj||ffg}tj||d}t|d}||d  || || W d    n1 sAw   Y  t	|d}|
t |d  W d    n1 s`w   Y  t|d	D}t|j|dd
kswJ t|j|d|ksJ tt |j|d W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nrg   )r   r_      fieldr   r6   r   rm   rr   r   r   )r   r   rU   r&   r   Zfloat64Zzerosr   r<   r>   rs   rt   rX   r#   ri   rj   r	   )rB   r*   rb   r+   qdtr\   r-   r/   r/   r0   !test_fortran_eof_multidimensional   s*   

"rz   )"__doc__r9   r@   osr   globr   r   Znumpy.testingr   r   numpyr&   ri   Zscipy.ior   r   r   r	   r   dirname__file__r   r1   r5   rD   rM   r^   rf   rl   rp   rq   ru   rz   r/   r/   r/   r0   <module>   s,    +