o
    h!                     @   s   d Z ddl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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ej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 ) z$ Tests for fortran sequential files     N)path)iglob)assert_equalassert_allclose)FortranFile_test_fortranFortranEOFErrorFortranFormattingErrordatac                   C   s   t  S )N)	threadingLock r   r   O/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/io/tests/test_fortran.pyio_lock   s   r   c              	   C   s   t ttdD ]k}td|tj}|std| dt|	dt|	dt|	df}|	d
d	d
}|  t|dd}|j|dj|dd}|  W d    n1 s[w   Y  tt|||}t|| qd S )Nfortran-*-*x*x*.dat%fortran-([^-]+)-(\d+)x(\d+)x(\d+).datCouldn't match  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   )r   filenamemdimsr   fr
   expectedr   r   r   test_fortranfiles_read   s   (
r5   c              	   C   s   t td}| # t|dd}|d}W d    n1 sw   Y  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   r0   r3   recordr   r   r   test_fortranfiles_mixed_record0   s   r;   c            
   
   C   s,  t ttdD ]} td| tj}|std|  dt|	dt|	dt|	df}|	d
d	d
}tt|||}t }zBtt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   r   wr   rb)err_msg)r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r,   r-   r.   r*   r/   tempfilemkdtempstrr   get_native_idbasenamer   write_recordTr+   openr   readshutilrmtree)
r0   r1   r2   r   r
   tmpdirtestFiler3   originalfilenewfiler   r   r   test_fortranfiles_write<   s0   (



rN   c              	   C   s   t td}| $ t|dd}|dd}W d    n1 s w   Y  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/   float64arrayint32r   rE   )r   r0   r3   r:   axbxr   r   r   "test_fortranfile_read_mixed_recordW   s   rW   c              	   C   sR  t t| tt d}tjt |d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 sow   Y  t|d}|j| }W d    n1 sw   Y  tt|t| t||D ]	\}	}
t|
|	 qqVd S )Ntest.datTexist_ok)f4r[   i4r   r   d   )4f4z(3,3)f48i4   r   )size   r<   r   )r   r    rA   r   rB   osmakedirsdirnamer,   float32rT   randomrandintr/   r   rD   r)   r   lenzip)rJ   tfr1r2recordsr   ar3   baabbr   r   r   #test_fortranfile_write_mixed_recordo   s,    rs   c                 C   s  t t| tt d}tjt |dd tj	
d}d\}}}||||}t|d}||j W d    n1 s?w   Y  | t||||}	W d    n1 sYw   Y  t|d}|dj}
W d    n1 stw   Y  t|	| t|
| d\}}}||||tj}t|d}||j W d    n1 sw   Y  | t||||}	W d    n1 sw   Y  t|d}|d	j}
W d    n1 sw   Y  t|	| t|
| d\}}}|||}||tj}t|d}||j|j W d    n	1 sw   Y  | t||||\}	}W d    n	1 s7w   Y  t|d}|d
d\}
}|
j}
W d    n	1 sXw   Y  t|	| t|
| t|| t|| d S )NrX   TrY   r   )   r   r   r<   r   z	(2,3,5)f8z	(2,3,5)i4z(3,5)f82i4)r   r    rA   r   rB   rc   rd   re   r,   rg   RandomStaterandnr   rD   rE   r   read_unformatted_doubler)   r   r/   rT   read_unformatted_intintcread_unformatted_mixed)rJ   r   r0   rngr1   nkro   r3   a2a3rp   b2b3r   r   r   test_fortran_roundtrip   s`   









r   c              	   C   s  t t| tt d}tjt |dd tj	
d}t|d}||d ||d W d    n1 s=w   Y  t|d>}t| dksRJ t| dks\J tt |  W d    n1 spw   Y  W d    d S W d    d S 1 sw   Y  d S )	NscratchTrY   r   r<   rt   r   r   )r   r    rA   r   rB   rc   rd   re   r,   rg   rv   r   rD   rw   ri   
read_realspytestraisesr   rJ   r0   r|   r3   r   r   r   test_fortran_eof_ok   s$   
"r   c              	   C   sR  t t| tt d}tjt |dd tj	
d}t|d}||d ||d W d    n1 s=w   Y  t|d}|d	 W d    n1 sWw   Y  t|d
>}t| dkslJ t| dksvJ tt |  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   TrY   r   r<   rt   r   ab   r   )r   r    rA   r   rB   rc   rd   re   r,   rg   rv   r   rD   rw   rF   writeri   r   r   r   r	   r   r   r   r   test_fortran_eof_broken_size   s*   
"r   c              	   C   s*  t t| tt d}tjt |dd tj	
d}t|d}||d ||d W d    n1 s=w   Y  t|d}|d	 W d    n1 sWw   Y  t|d
*}tt |  W d    n1 svw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   TrY   r   r<   rt   r   zw+bs   r   )r   r    rA   r   rB   rc   rd   re   r,   rg   rv   r   rD   rw   rF   r   r   r   r	   r   r   r   r   r   test_fortran_bogus_size   s&   
"r   c              	   C   sH  t t| tt d}tjt |dd tj	
d}t|d}||d ||d W d    n1 s=w   Y  t|d}|t |d	  W d    n1 s\w   Y  t|d
4}t| dksqJ tt |  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   TrY   r   r<   rt   r   r      r   )r   r    rA   r   rB   rc   rd   re   r,   rg   rv   r   rD   rw   rF   truncategetsizeri   r   r   r   r	   r   r   r   r   test_fortran_eof_broken_record   s(   
"r   c              	   C   s  t t| tt d}tjt |dd d\}}}t	dtj
||ffg}tj||d}t|d}||d  || || W d    n1 sPw   Y  t|d	}|t |d
  W d    n1 sow   Y  t|dD}t|j|ddksJ 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 )Nr   TrY   )r   rt      fieldr   r<   r   r   r   r   r   )r   r    rA   r   rB   rc   rd   re   r,   r   rR   zerosr   rD   rF   r   r   ri   r)   r   r   r	   )rJ   r0   r}   r1   qdtro   r3   r   r   r   !test_fortran_eof_multidimensional   s0   

"r   )%__doc__r?   rH   rc   r   globr   r   r"   numpy.testingr   r   numpyr,   r   scipy.ior   r   r   r	   r    re   __file__r!   fixturer   r5   r;   rN   rW   rs   r   r   r   r   r   r   r   r   r   r   <module>   s4    
1