
    Pic,                     0   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  ej         ej        e          d          Zej        d             Zd	 Zd
 Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&dS )z$ Tests for fortran sequential files     N)path)iglob)assert_equalassert_allclose)FortranFileFortranEOFErrorFortranFormattingErrordatac                  (    t          j                    S )N)	threadingLock     o/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/scipy/io/tests/test_fortran.pyio_lockr      s    >r   c                 p   t          t          j        t          d                    D ]}t	          j        d|t          j                  }|st          d| d          t          |	                    d                    t          |	                    d                    t          |	                    d                    f}|	                    d          
                    d	d
          }| 5  t          |dd          }|                    |                              |d          }|                                 d d d            n# 1 swxY w Y   t          j        t          j        |                                        |                              |          }t'          ||           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
   expecteds           r   test_fortranfiles_readr9      s   $)I/DEEFF % %I>"$OO 	OMMMMNNNAGGAJJQWWQZZ#aggajj//B

""3,, 	 	Hc511A==u=--55d#5FFDGGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 9RWT]]++33D99@@GGT8$$$$% %s   0AEE	E	c                    t          j        t          d          }| 5  t          |dd          5 }|                    d          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY 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   r4   r7   records       r   test_fortranfiles_mixed_recordr@   /   sQ   y$788H	 7 73.. 	7!]]#566F	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7 7 7 7 7 7 7 7 7 7 7 7 7 7 a!$$$F4LOS)))a!$$$F4LOc3Z00000s4   A(AA(A	A(A	A((A,/A,c                     t          t          j        t          d                    D ]V} t	          j        d| t          j                  }|st          d|  d          t          |	                    d                    t          |	                    d                    t          |	                    d                    f}|	                    d          
                    d	d
          }t          j        t          j        |                                        |                              |          }t!          j                    }	 t          j        t%          t'          j                              |t          j        |                     }t-          |dd          }|                    |j                   |                                 t5          | d          }t5          |d          }	t7          |                                |	                                |            |                                 |	                                 t;          j        |           ?# t;          j        |           w xY 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,   r0   r1   r2   r.   r3   tempfilemkdtempstrr   get_native_idbasenamer   write_recordTr/   openr   readshutilrmtree)
r4   r5   r6   r    r
   tmpdirtestFiler7   originalfilenewfiles
             r   test_fortranfiles_writerT   ;   s	   $)I/DEEFF " "I>"$OO 	OMMMMNNNAGGAJJQWWQZZ#aggajj//B

""3,,y''//55<<UCC!##	"yY%<%>%>!?!?!'h(?(?A AHHc%00ANN46"""GGIII$//L8T**G**,,gllnn!)+ + + +   MMOOOM&!!!!FM&!!!!/" "s   DI''I=c                 &   t          j        t          d          }| 5  t          |dd          5 }|                    dd          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        d                              dd                              t
          j	                  }t          j
        dd	gt
          j        
          }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-   r0   r1   r.   r3   float64arrayint32r   rK   )r   r4   r7   r?   axbxs         r   "test_fortranfile_read_mixed_recordr^   V   sc    y$9::H	 7 73.. 	7!]]:v66F	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7 7 7 7 7 7 7 7 7 7 7 7 7 7 
3		1	%	%	,	,RZ	8	8B	2r("(	+	+	+BBD!!!BD!!!!!s4   A)AA)A	A)A	A))A-0A-c                 P   t          j        t          |           t          t          j                              d          }t          j        t          j        |          d           dt          j	        d          t          j	        d          t          j
        d          ff}dt          j                            d	d
g                              t          j	                  t          j                            d	ddg                              t          j	                  t          j                            d	dg                              t          j
                  ff}||g}|D ]\  }}t          |d          5 } |j        |  d d d            n# 1 swxY w Y   t          |d          5 } |j        | }d d d            n# 1 swxY w Y   t#          t%          |          t%          |                     t'          ||          D ]\  }	}
t#          |
|	           d S )Ntest.datTexist_ok)f4rc   i4r   r   d   )4f4z(3,3)f48i4   r   )size   rB   r   )r   r$   rG   r   rH   osmakedirsdirnamer0   float32r[   randomrandintr3   r   rJ   r-   r   lenzip)rP   tfr1r2recordsr    ar7   baabbs              r   #test_fortranfile_write_mixed_recordr{   n   s_   	3v;;I$;$=$= > >
	K	KBKR  40000
rz!}}bjmmRXc]]K	LB
#9Ss++222:>>9S1v..55bjAA9Ss++2228<<>
?B 2hG 
! 
!qS!! 	QANA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 S!! 	&Qu%A	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	SVVSVV$$$!Qii 	! 	!FBR    	!
! 
!s$   FF	F	3G

G	G	c                    t          |                                d          5 }|                    d           t          j        |t          j        | |z  |z            }|                    d           ddd           n# 1 swxY w Y   |j        | |z  |z  k    r t          d| |z  |z   d|j                   |                    | ||fd          S )	aj  
    Read a Fortran-style unformatted binary file written with a single write() call,
    assuming it wraps the data with 4-byte record markers.

    Returns:
        np.ndarray of shape (m, n, k) with dtype float64

    Reference:
        Fortran implementation:
        https://github.com/scipy/scipy/blob/maintenance/1.15.x/scipy/io/_test_fortran.f#L1-L9
    rC   r   r    countN	Expected  elements, got r!   r"   )	rL   striprM   r0   fromfilerY   ri   
ValueErrorr.   r5   nkr4   r7   r
   s         r   read_unformatted_doubler      s
    
hnn	%	% 	q			{1BJa!eai@@@	q			              
 yAEAIFQqSUFF49FFGGG<<Aq	<---   ABBBc                    t          |                                d          5 }|                    d           t          j        |t          j        | |z            }t          j        |t          j        |          }|                    d           ddd           n# 1 swxY w Y   |                    | |fd          }||fS )a  
    Read a Fortran unformatted binary file that contains a mix of:
    - a double precision array a(m, n)
    - an integer array b(k)

    Assumes a single write(10) a, b was used and file is wrapped
    with Fortran record markers.

    Returns:
        a: np.ndarray of shape (m, n) with dtype float64
        b: np.ndarray of shape (k,) with dtype int32

    Reference:
        Fortran implementation:
        https://github.com/scipy/scipy/blob/maintenance/1.15.x/scipy/io/_test_fortran.f#L21-L30
    rC   r   r}   Nr!   r"   )rL   r   rM   r0   r   rY   r[   r.   )r5   r   r   r4   r7   a_flatrx   rw   s           r   read_unformatted_mixedr      s    " 
hnn	%	% 		q			 QbjA>>> K333	q				 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	1vS))Aa4Ks   A0BB#&B#c                    t          |                                d          5 }|                    d           t          j        |t          j        | |z  |z            }|                    d           ddd           n# 1 swxY w Y   |j        | |z  |z  k    r t          d| |z  |z   d|j                   |                    | ||fd          S )	a  
    Read a Fortran unformatted binary file
    containing a 3D integer array (m, n, k).
    Assumes the array is written with a single
    write(10) a and wrapped with record markers.

    Returns:
        np.ndarray: 3D array of shape (m, n, k) with dtype int32

    Reference:
        Fortran implementation:
        https://github.com/scipy/scipy/blob/maintenance/1.15.x/scipy/io/_test_fortran.f#L11-L19
    rC   r   r}   Nr   r   r!   r"   )	rL   r   rM   r0   r   r[   ri   r   r.   r   s         r   read_unformatted_intr      s    
hnn	%	% 	q			 {1BHAEAI>>>	q			               yAEAIFQqSUFF49FFGGG<<Aq	<---r   c                    t          j        t          |           t          t          j                              d          }t          j        t          j        |          d           t          j	        
                    d          }d\  }}}|                    |||          }t          |d          5 }|                    |j                   d d d            n# 1 swxY w Y   |5  t          ||||          }	d d d            n# 1 swxY w Y   t          |d          5 }|                    d          j        }
d d d            n# 1 swxY w Y   t#          |	|           t#          |
|           d\  }}}|                    |||                              t          j                  }t          |d          5 }|                    |j                   d d d            n# 1 swxY w Y   |5  t)          ||||          }	d d d            n# 1 swxY w Y   t          |d          5 }|                    d	          j        }
d d d            n# 1 swxY w Y   t#          |	|           t#          |
|           d\  }}}|                    ||          }|                    |                              t          j                  }t          |d          5 }|                    |j        |j                   d d d            n# 1 swxY w Y   |5  t-          ||||          \  }	}d d d            n# 1 swxY w Y   t          |d          5 }|                    d
d          \  }
}|
j        }
d d d            n# 1 swxY w Y   t#          |	|           t#          |
|           t#          ||           t#          ||           d S )Nr`   Tra   r   )   r   r   rB   r   z	(2,3,5)f8z	(2,3,5)i4z(3,5)f82i4)r   r$   rG   r   rH   rk   rl   rm   r0   ro   RandomStaterandnr   rJ   rK   r   r-   r   r3   r[   r   intcr   )rP   r   r4   rngr5   r   r   rw   r7   a2a3rx   b2b3s                 r   test_fortran_roundtripr      s   yVc)*A*C*C&D&D#% %HKX&&6666
)


"
"C GAq!		!QA	Xs	#	# q	qs              	 8 8$Q1h778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 
Xs	#	# *q]];'')* * * * * * * * * * * * * * *QQ GAq!		!Q!!"(++A	Xs	#	# q	qs              	 5 5!!Q8445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	Xs	#	# *q]];'')* * * * * * * * * * * * * * *QQ GAq!		!QA		!BG$$A	Xs	#	# !q	qsAC   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	 ; ;'1a::B; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	Xs	#	# qy%00BT               QQQQs   6CC!$C!*D		DD$EEE G''G+.G+4HHH.III!LLLL::L>L>!NN	Nc                 ~   t          j        t          |           t          t          j                              d          }t          j        t          j        |          d           t          j	        
                    d          }t          |d          5 }|                    |                    d                     |                    |                    d                     d d d            n# 1 swxY w Y   t          |d          5 }t          |                                          dk    sJ t          |                                          dk    sJ t!          j        t$                    5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	NscratchTra   r   rB   r   r   r   )r   r$   rG   r   rH   rk   rl   rm   r0   ro   r   r   rJ   r   rq   
read_realspytestraisesr   rP   r4   r   r7   s       r   test_fortran_eof_okr     s&   yVc)*A*C*C&D&D"$ $HKX&&6666
)


"
"C	Xs	#	# %q	syy||$$$	syy||$$$% % % % % % % % % % % % % % % 
Xs	#	# q1<<>>""a''''1<<>>""a'''']?++ 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 sJ   AC66C:=C:A(F29FF2F	F2!F	"F22F69F6c                    t          j        t          |           t          t          j                              d          }t          j        t          j        |          d           t          j	        
                    d          }t          |d          5 }|                    |                    d                     |                    |                    d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    d	           d d d            n# 1 swxY w Y   t          |d
          5 }t!          |                                          dk    sJ t!          |                                          dk    sJ t%          j        t(                    5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tra   r   rB   r   r   ab   r   )r   r$   rG   r   rH   rk   rl   rm   r0   ro   r   r   rJ   r   rL   writerq   r   r   r   r	   r   s       r   test_fortran_eof_broken_sizer     s   yVc)*A*C*C&D&D"$ $HKX&&6666
)


"
"C	Xs	#	# %q	syy||$$$	syy||$$$% % % % % % % % % % % % % % % 
h		 	              	Xs	#	# q1<<>>""a''''1<<>>""a'''']122 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s\   AC66C:=C:D33D7:D7A(G/6GG/G	G/G	G//G36G3c                 \   t          j        t          |           t          t          j                              d          }t          j        t          j        |          d           t          j	        
                    d          }t          |d          5 }|                    |                    d                     |                    |                    d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    d	           d d d            n# 1 swxY w Y   t          |d
          5 }t!          j        t$                    5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tra   r   rB   r   r   zw+bs   r   )r   r$   rG   r   rH   rk   rl   rm   r0   ro   r   r   rJ   r   rL   r   r   r   r	   r   r   s       r   test_fortran_bogus_sizer   (  sY   yVc)*A*C*C&D&D"$ $HKX&&6666
)


"
"C	Xs	#	# %q	syy||$$$	syy||$$$% % % % % % % % % % % % % % % 
h		 !	              	Xs	#	# q]122 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s[   AC66C:=C:D33D7:D7F!(F	=F!	F	F!F	F!!F%(F%c                    t          j        t          |           t          t          j                              d          }t          j        t          j        |          d           t          j	        
                    d          }t          |d          5 }|                    |                    d                     |                    |                    d                     d d d            n# 1 swxY w Y   t          |d          5 }|                    t          j        |          d	z
             d d d            n# 1 swxY w Y   t          |d
          5 }t#          |                                          dk    sJ t'          j        t*                    5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tra   r   rB   r   r   r      r   )r   r$   rG   r   rH   rk   rl   rm   r0   ro   r   r   rJ   r   rL   truncategetsizerq   r   r   r   r	   r   s       r   test_fortran_eof_broken_recordr   7  s   yVc)*A*C*C&D&D"$ $HKX&&6666
)


"
"C	Xs	#	# %q	syy||$$$	syy||$$$% % % % % % % % % % % % % % % 
h		 .	

4<))",---. . . . . . . . . . . . . . .	Xs	#	# q1<<>>""a'''']122 	 	LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s\   AC66C:=C:+EEE#AG$G9GG			GG		GG!$G!c                 Z   t          j        t          |           t          t          j                              d          }t          j        t          j        |          d           d\  }}}t          j	        dt          j
        ||ffg          }t          j        ||          }t          |d          5 }|                    |d                    |                    |           |                    |           d d d            n# 1 swxY w Y   t          |d	          5 }|                    t          j        |          d
z
             d d d            n# 1 swxY w Y   t          |d          5 }t#          |                    |                    dk    sJ t#          |                    |                    |k    sJ t'          j        t*                    5  |                    |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   Tra   )r   r      fieldr   rB   r   r   r   r   r   )r   r$   rG   r   rH   rk   rl   rm   r0   r    rY   zerosr   rJ   rL   r   r   rq   r-   r   r   r	   )rP   r4   r   r5   qdtrw   r7   s           r   !test_fortran_eof_multidimensionalr   G  s   yVc)*A*C*C&D&D"$ $HKX&&6666GAq!	GRZ!Q01	2	2B
"A	Xs	#	# q	qt	q	q               
h		 .	

4<))",---. . . . . . . . . . . . . . .	Xs	#	# $q1==r=**++q00001==r=**++q0000]122 	$ 	$MMM###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s\   :ADDD'+EE"%E"9A,H %H<H H	H H	H  H$'H$)'__doc__rE   rN   rk   r   globr   r   r&   numpy.testingr   r   numpyr0   r   scipy.ior   r   r	   r$   rm   __file__r%   fixturer   r9   r@   rT   r^   r{   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   * *   				                 				 7 7 7 7 7 7 7 7     . . . . . . . . . .
 DIldl8,,f55	   % % %&	1 	1 	1" " "6" " "0! ! !.. . .,  B. . .6. . .b    "     $ $ $ $ $r   