o
    i!                     @   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   U/home/kim/smarthome/.venv/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<f8Zf0r   r   f1gffffff@f2r   Zf3gffffff@g333333@)r   r    r!   r   r)   r   r   )r   r0   r3   recordr   r   r   test_fortranfiles_mixed_record0   s   r9   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
   tmpdirZtestFiler3   Zoriginalfilenewfiler   r   r   test_fortranfiles_write<   s0   (



rJ   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   rC   )r   r0   r3   r8   axbxr   r   r   "test_fortranfile_read_mixed_recordW   s   rS   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)f4rW   i4r   r   d   )Z4f4z(3,3)f4Z8i4   r   )size   r:   r   )r   r    r?   r   r@   osmakedirsdirnamer,   Zfloat32rP   randomrandintr/   r   rB   r)   r   lenzip)rH   tfr1r2recordsr   ar3   bZaaZbbr   r   r   #test_fortranfile_write_mixed_recordo   s,    rj   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 )NrT   TrU   r   )   r   r   r:   r   z	(2,3,5)f8z	(2,3,5)i4z(3,5)f8Z2i4)r   r    r?   r   r@   r]   r^   r_   r,   r`   RandomStaterandnr   rB   rC   r   Zread_unformatted_doubler)   r   r/   rP   Zread_unformatted_intZintcZread_unformatted_mixed)rH   r   r0   rngr1   nkrh   r3   Za2a3ri   b2Zb3r   r   r   test_fortran_roundtrip   s`   









rs   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scratchTrU   r   r:   rk   r   r   )r   r    r?   r   r@   r]   r^   r_   r,   r`   rl   r   rB   rm   rb   
read_realspytestraisesr   rH   r0   rn   r3   r   r   r   test_fortran_eof_ok   s$   
"ry   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 )Nrt   TrU   r   r:   rk   r   ab   r   )r   r    r?   r   r@   r]   r^   r_   r,   r`   rl   r   rB   rm   rD   writerb   ru   rv   rw   r	   rx   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 )Nrt   TrU   r   r:   rk   r   zw+bs   r   )r   r    r?   r   r@   r]   r^   r_   r,   r`   rl   r   rB   rm   rD   r|   rv   rw   r	   ru   rx   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 )Nrt   TrU   r   r:   rk   r   rz      r   )r   r    r?   r   r@   r]   r^   r_   r,   r`   rl   r   rB   rm   rD   truncategetsizerb   ru   rv   rw   r	   rx   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 )Nrt   TrU   )r   rk      fieldr   r:   r   rz   r   r   r   )r   r    r?   r   r@   r]   r^   r_   r,   r   rN   Zzerosr   rB   rD   r   r   rb   r)   rv   rw   r	   )rH   r0   ro   r1   qdtrh   r3   r   r   r   !test_fortran_eof_multidimensional   s0   

"r   )%__doc__r=   rF   r]   r   globr   r   r"   Znumpy.testingr   r   numpyr,   rv   Zscipy.ior   r   r   r	   r    r_   __file__r!   Zfixturer   r5   r9   rJ   rS   rj   rs   ry   r}   r~   r   r   r   r   r   r   <module>   s4    
1