o
    h                     @   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/   V/var/www/html/scripts/venv/lib/python3.10/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)<f8f0r   r   f1gffffff@f2r   f3gffffff@g333333@)r   r   r   r   r#   r   r   )r*   r-   recordr/   r/   r0   test_fortranfiles_mixed_record(   s   r7   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
   tmpdirtestFiler-   originalfilenewfiler/   r/   r0   test_fortranfiles_write3   s,   (


rH   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-   r6   axbxr/   r/   r0   "test_fortranfile_read_mixed_recordM   s   rQ   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)f4rS   i4r   r   d   )4f4z(3,3)f48i4   r   )size   r8   r   )r   r   strr&   float32rN   randomrandintr)   r   r>   r#   r   lenzip)	rD   tfrecordsr   ar-   baabbr/   r/   r0   #test_fortranfile_write_mixed_recordd   s&   rg   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 )
NrR   r   )   r   r   r8   r   z	(2,3,5)f8z	(2,3,5)i4z(3,5)f82i4)r   r   r[   r&   r]   seedrandnr   r>   r?   r   read_unformatted_doubler#   r   r)   rN   read_unformatted_intintcread_unformatted_mixed)rD   r*   r+   nkrc   r-   a2a3rd   b2b3r/   r/   r0   test_fortran_roundtrip{   sN   









rv   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   r8   rh   r   r   )r   r   r[   r&   r]   rj   r   r>   rk   r_   
read_realspytestraisesr   rD   r*   r-   r/   r/   r0   test_fortran_eof_ok   s   
"r|   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 )	Nrw   r   r8   rh   r   ab   r   )r   r   r[   r&   r]   rj   r   r>   rk   r@   writer_   rx   ry   rz   r	   r{   r/   r/   r0   test_fortran_eof_broken_size   s$   
"r   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 )	Nrw   r   r8   rh   r   zw+bs   r   )r   r   r[   r&   r]   rj   r   r>   rk   r@   r   ry   rz   r	   rx   r{   r/   r/   r0   test_fortran_bogus_size   s    
"r   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 )	Nrw   r   r8   rh   r   r}      r   )r   r   r[   r&   r]   rj   r   r>   rk   r@   truncategetsizer_   rx   ry   rz   r	   r{   r/   r/   r0   test_fortran_eof_broken_record   s"   
"r   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 )Nrw   )r   rh      fieldr   r8   r   r}   r   r   r   )r   r   r[   r&   r   float64zerosr   r>   r@   r   r   r_   r#   ry   rz   r	   )rD   r*   rp   r+   qdtrc   r-   r/   r/   r0   !test_fortran_eof_multidimensional   s*   

"r   )"__doc__r;   rB   osr   globr   r   numpy.testingr   r   numpyr&   ry   scipy.ior   r   r   r	   r   dirname__file__r   r1   r7   rH   rQ   rg   rv   r|   r   r   r   r   r/   r/   r/   r0   <module>   s,    +