
    doic,                     :   S r SSKrSSKrSSKrSSKJr  SSKJr  SSKrSSKrSSK	J
r
Jr  SSKrSSKrSSKJrJrJr  \R&                  " \R(                  " \5      S5      r\R.                  S 5       rS	 rS
 rS rS rS rS rS rS r S r!S r"S r#S r$S r%S r&g)z#Tests for fortran sequential files     N)path)iglob)assert_equalassert_allclose)FortranFileFortranEOFErrorFortranFormattingErrordatac                  ,    [         R                  " 5       $ )N)	threadingLock     W/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/io/tests/test_fortran.pyio_lockr      s    >>r   c                    [        [        R                  " [        S5      5       GHG  n[        R
                  " SU[        R                  5      nU(       d  [        SU S35      e[        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      4nUR                  S5      R                  S	S
5      nU    [        USS5      nUR                  US9R                  USS9nUR                  5         S S S 5        [        R                   " [        R"                  " U5      5      R                  U5      R%                  U5      n['        WU5        GMJ     g ! , (       d  f       Nh= f)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FII>"$$O
:LMNNAGGAJQWWQZ#aggaj/B
""3,Hc51A==u=-55d#5FDGGI 
 99RWWT]+33D9@@GT8$ G Ws   ;E22
F 	c                 v   [         R                  " [        S5      nU    [        USS5       nUR	                  S5      nS S S 5        S S S 5        [        WS   S   S5        [        US   S   S	5        [        US
   S   S5        [        US   S   SS/5        g ! , (       d  f       Na= f! , (       d  f       Nj= f)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@   /   s    yy$78H	3.!]]#56F / 
 a!$F4LOS)a!$F4LOc3Z0 /. 
s!   B*BB*
B'	#B**
B8c                     [        [        R                  " [        S5      5       GH  n [        R
                  " SU [        R                  5      nU(       d  [        SU  S35      e[        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      4nUR                  S5      R                  S	S
5      n[        R                  " [        R                  " U5      5      R                  U5      R                  U5      n[         R"                  " 5       n [        R                  " [%        [&        R(                  " 5       5      U[        R*                  " U 5      5      n[-        USS5      nUR/                  UR0                  5        UR3                  5         [5        U S5      n[5        US5      n	[7        UR9                  5       U	R9                  5       U S9  UR3                  5         U	R3                  5         [:        R<                  " U5        GM     g ! [:        R<                  " U5        f = f)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FII>"$$O
:LMNNAGGAJQWWQZ#aggaj/B
""3,yy'//5<<UC!!#	"yyY%<%<%>!?!'h(?AHHc%0ANN466"GGI$/L8T*G**,glln!)+ MMOMM&!/ G. MM&!s   1CH,,Ic                    [         R                  " [        S5      nU    [        USS5       nUR	                  SS5      nS S S 5        S S S 5        [
        R                  " S5      R                  SS5      R                  [
        R                  5      n[
        R                  " SS	/[
        R                  S
9n[        WS   UR                  5        [        US   UR                  5        g ! , (       d  f       N= f! , (       d  f       N= f)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   s     yy$9:H	3.!]]:v6F / 
 
3		1	%	,	,RZZ	8B	2r("((	+BBDD!BDD! /. 
s!   C;C*C;*
C8	4C;;
D	c                 ,   [         R                  " [        U 5      [        [        R                  " 5       5      S5      n[
        R                  " [         R                  " U5      SS9  S[        R                  " S5      [        R                  " S5      [        R                  " S5      44nS[        R                  R                  S	S
/S9R                  [        R                  5      [        R                  R                  S	SS/S9R                  [        R                  5      [        R                  R                  S	S/S9R                  [        R                  5      44nX#/nU H  u  pV[        US5       nUR                  " U6   S S S 5        [        US5       nUR                   " U6 nS S S 5        [#        [%        U5      [%        W5      5        ['        Xh5       H  u  p[#        X5        M     M     g ! , (       d  f       Nt= f! , (       d  f       Na= f)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$;$;$= >
	KBKKR 40
rzz!}bjjmRXXc]K	LB
#99Ss+222::>99S1v.55bjjA99Ss+22288<>
?B hGS!QNNA " S!Qu%A " 	SVSV$!iFB    !! "!s   6G4H4
H	
H	c                    [        UR                  5       S5       nUR                  S5        [        R                  " U[        R
                  X-  U-  S9nUR                  S5        SSS5        WR                  X-  U-  :w  a   [        SX-  U-   SUR                   35      eUR                  XU4SS9$ ! , (       d  f       NU= f)	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	{{1BJJaeai@	q	 
&
 yyAEAI9QSUG?499+FGG<<q	<-- 
&	%   AB66
Cc                 l   [        UR                  5       S5       nUR                  S5        [        R                  " U[        R
                  X-  S9n[        R                  " U[        R                  US9nUR                  S5        SSS5        WR                  X4SS9nUW4$ ! , (       d  f       N#= f)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	 Qbjj> KK3	q	 
& 	vS)Aa4K 
&	%s   A-B%%
B3c                    [        UR                  5       S5       nUR                  S5        [        R                  " U[        R
                  X-  U-  S9nUR                  S5        SSS5        WR                  X-  U-  :w  a   [        SX-  U-   SUR                   35      eUR                  XU4SS9$ ! , (       d  f       NU= f)	at  
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	 {{1BHHAEAI>	q	 
& yyAEAI9QSUG?499+FGG<<q	<-- 
&	%r   c                    [         R                  " [        U 5      [        [        R                  " 5       5      S5      n[
        R                  " [         R                  " U5      SS9  [        R                  R                  S5      nSu  pEnUR                  XEU5      n[        US5       nUR                  UR                  5        S S S 5        U   [        XEXb5      n	S S S 5        [        US5       nUR!                  S5      R                  n
S S S 5        [#        W	U5        [#        W
U5        Su  pEnUR                  XEU5      R%                  [        R&                  5      n[        US5       nUR                  UR                  5        S S S 5        U   [)        XEXb5      n	S S S 5        [        US5       nUR!                  S	5      R                  n
S S S 5        [#        X5        [#        X5        Su  pEnUR                  XE5      nUR                  U5      R%                  [        R*                  5      n[        US5       nUR                  UR                  UR                  5        S S S 5        U   [-        XEXb5      u  pS S S 5        [        US5       nUR!                  S
S5      u  pU
R                  n
S S S 5        [#        X5        [#        X5        [#        WU5        [#        WU5        g ! , (       d  f       GN+= f! , (       d  f       GN&= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN{= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)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{   yyVc)*A*A*C&D#%HKKX&6
))


"C GA!		!A	Xs	#q	qss 
$	$Q17 
 
Xs	#q]];')) 
$QQ GA!		!!!"((+A	Xs	#q	qss 
$	!!4 
	Xs	#q]];')) 
$ GA!		!A		!BGG$A	Xs	#q	qssACC  
$	'a: 
	Xs	#qy%0TT 
$ QQI 
$	#	 
$	# 
$	#		#	# 
$	#		#	#sl   )K)K;0L,LL13M='M.M&!M7)
K8;
L

L
L.1
M 
M
M#&
M47
Nc                 *   [         R                  " [        U 5      [        [        R                  " 5       5      S5      n[
        R                  " [         R                  " U5      SS9  [        R                  R                  S5      n[        US5       nUR                  UR                  S5      5        UR                  UR                  S5      5        S S S 5        [        US5       n[        UR                  5       5      S:X  d   e[        UR                  5       5      S:X  d   e[         R"                  " [$        5         UR                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)	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
   yyVc)*A*A*C&D"$HKKX&6
))


"C	Xs	#q	syy|$	syy|$ 
$ 
Xs	#q1<<>"a'''1<<>"a''']]?+LLN , 
$	# 
$	# ,+ 
$	#s2   AE"'AF E3F"
E03
F	=F
Fc                    [         R                  " [        U 5      [        [        R                  " 5       5      S5      n[
        R                  " [         R                  " U5      SS9  [        R                  R                  S5      n[        US5       nUR                  UR                  S5      5        UR                  UR                  S5      5        S S S 5        [        US5       nUR                  S	5        S S S 5        [        US
5       n[!        UR#                  5       5      S:X  d   e[!        UR#                  5       5      S:X  d   e[$        R&                  " [(        5         UR#                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g = f)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     s1   yyVc)*A*A*C&D"$HKKX&6
))


"C	Xs	#q	syy|$	syy|$ 
$ 
h		 
	Xs	#q1<<>"a'''1<<>"a''']]12LLN 3 
$	# 
$	# 
	
 32 
$	#s>   AF'FAF;&F*7F;
F
F'*
F8	4F;;
G	c                    [         R                  " [        U 5      [        [        R                  " 5       5      S5      n[
        R                  " [         R                  " U5      SS9  [        R                  R                  S5      n[        US5       nUR                  UR                  S5      5        UR                  UR                  S5      5        S S S 5        [        US5       nUR                  S	5        S S S 5        [        US
5       n[         R"                  " [$        5         UR'                  5         S S S 5        S S S 5        g ! , (       d  f       N}= f! , (       d  f       Nh= f! , (       d  f       N9= f! , (       d  f       g = f)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   (  s    yyVc)*A*A*C&D"$HKKX&6
))


"C	Xs	#q	syy|$	syy|$ 
$ 
h	!	 
	Xs	#q]]12LLN 3 
$	# 
$	# 
	 32 
$	#s=   AE
'EE=(E,9E=

E
E),
E:	6E==
Fc                    [         R                  " [        U 5      [        [        R                  " 5       5      S5      n[
        R                  " [         R                  " U5      SS9  [        R                  R                  S5      n[        US5       nUR                  UR                  S5      5        UR                  UR                  S5      5        S S S 5        [        US5       nUR                  [         R                   " U5      S	-
  5        S S S 5        [        US
5       n[#        UR%                  5       5      S:X  d   e[&        R(                  " [*        5         UR%                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g = f)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&   yyVc)*A*A*C&D"$HKKX&6
))


"C	Xs	#q	syy|$	syy|$ 
$ 
h		

4<<)",- 
	Xs	#q1<<>"a''']]12LLN 3 
$	# 
$	# 
	 32 
$	#s=   AF ')F$:F3F"/F3 
F
F"
F0	,F33
Gc                    [         R                  " [        U 5      [        [        R                  " 5       5      S5      n[
        R                  " [         R                  " U5      SS9  Su  p#n[        R                  " S[        R                  X#44/5      n[        R                  " XES9n[        US5       nUR                  US   5        UR                  U5        UR                  U5        S S S 5        [        US	5       nUR                  [         R                   " U5      S
-
  5        S S S 5        [        US5       n[#        UR%                  US95      S:X  d   e[#        UR%                  US95      U:X  d   e[&        R(                  " [*        5         UR%                  US9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g = f)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  so   yyVc)*A*A*C&D"$HKKX&6GA!	GRZZ!01	2B
A	Xs	#q	qt	q	q 
$ 
h		

4<<)",- 
	Xs	#q1==r=*+q0001==r=*+q000]]12MMM# 3 
$	# 
$	# 
	
 32 
$	#s=   57F5 )G=AG(G$G(5
G
G
G%	!G((
G6)'__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  . .
 IIdll8,f5	  %&	1"6"0!..,B.6.b" $r   