
    (ph4                     f   S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJ	r	  SSK
Jr  S SKJr  S SKrS SKrS SKr " S S\R"                  5      r " S S	5      r " S
 S5      r " S S\R"                  5      r " S S\R"                  5      r " S S5      r " S S\R"                  5      r " S S5      r " S S\R"                  5      r " S S\R"                  5      r " S S\R"                  5      r " S S5      r " S S\R"                  5      r " S  S!\R"                  5      r " S" S#5      r g)$    N)markinnerspacesnameargspattern   )util)crackfortranc                   F    \ rS rSr\R
                  " SSSS5      /rS rSrg)	TestNoSpace   testssrcr   z	gh15035.fc                    [         R                  " / SQ[         R                  S9n[         R                  " / SQ[         R                  S9nU R                  R	                  U5        [         R
                  " XS-   5      (       d   eU R                  R                  X!/5        [         R
                  " XS-   5      (       d   eU R                  R                  S5      S:X  d   eg )N)r         )dtyper   23   2)nparrayfloat64modulesubballclosesubct0)selfkws      U/var/www/html/venv/lib/python3.13/site-packages/numpy/f2py/tests/test_crackfortran.pytest_moduleTestNoSpace.test_module   s    HHYbjj1HHYbjj1{{1!e$$$$! {{1!e$$$${{~~d#t+++     N)	__name__
__module____qualname____firstlineno__r   getpathsourcesr   __static_attributes__r"   r!   r   r	   r	      s      ||GUNKHIG,r!   r	   c                   ,    \ rS rSrS rS rS rS rSrg)TestPublicPrivate   c                 n   [         R                  " SSSS5      n[        R                  " [        U5      /5      n[	        U5      S:X  d   eUS   nSUS   S	   S
   ;   d   eSUS   S	   S
   ;  d   eSUS   S   S
   ;   d   eSUS   S   S
   ;  d   eSUS   S   S
   ;  d   eSUS   S   S
   ;   d   eg )Nr   r   r   zprivatemod.f90r   r   privatevarsaattrspecpublicbsetar   r'   r   strlen)r   fpathmods      r   test_defaultPrivate%TestPublicPrivate.test_defaultPrivate   s    We^=MN''U53x1}}!fCK,Z8888s6{3/
;;;;CK,Z8888s6{3/
;;;;FF 3J ????3v;v.z::::r!   c                 *   [         R                  " SSSS5      n[        R                  " [        U5      /5      n[	        U5      S:X  d   eUS   nSUS   S	   S
   ;   d   eSUS   S	   S
   ;  d   eSUS   S   S
   ;  d   eSUS   S   S
   ;   d   eg )Nr   r   r   zpublicmod.f90r   r   r.   r/   r0   r1   r2   r4   r5   r   tmp_pathr8   r9   s       r   test_defaultPublic$TestPublicPrivate.test_defaultPublic+   s    We^_M''U53x1}}!fCK,Z8888s6{3/
;;;;FF 3J ????3v;v.z::::r!   c                 <   [         R                  " SSSS5      n[        R                  " [        U5      /5      n[	        U5      S:X  d   eUS   S   n[        US   S	   5      S
S1:X  d   e[        US   S	   5      SS1:X  d   e[        US   S	   5      S1:X  d   eg )Nr   r   r   zaccesstype.f90r   r   r/   r0   r1   r.   zbind(c)b_r2   c)r   r'   r   r6   r7   set)r   r>   r8   r9   tts        r   test_access_type"TestPublicPrivate.test_access_type5   s    We^=MN''U53x1}}VF^2c7:&'Iy+AAAA2d8J'(Xy,AAAA2c7:&'H:555r!   c                     [         R                  " SSSS5      n[        R                  " [        U5      /5      n[	        U5      S:X  d   e[        R
                  " U5      nSU;  d   eg )Nr   r   r   zgh23879.f90r   bar)r   r'   r   r6   r7   crack2fortran)r   r>   r8   r9   pyfs        r   test_nowrap_private_proceedures1TestPublicPrivate.test_nowrap_private_proceedures>   sZ    We^]K''U53x1}}((-Cr!   r"   N)	r#   r$   r%   r&   r:   r?   rF   rL   r)   r"   r!   r   r+   r+      s    
;;6 r!   r+   c                        \ rS rSrS rS rSrg)TestModuleProcedureE   c                     [         R                  " SSSS5      n[        R                  " [        U5      /5      n[	        U5      S:X  d   eUS   nSU;   a  [	        US   5      S:X  d   eUS   S   S	   S
:X  d   eSUS   S   ;   d   eUS   S   S   SS/:X  d   eUS   S   S	   S:X  d   eSUS   S   ;   d   eUS   S   S   S/:X  d   eUS   S   S	   S:X  d   eSUS   S   ;   d   eUS   S   S   SS/:X  d   eg )Nr   r   r   zoperators.f90r   r   body	   namezoperator(.item.)implementedbyitem_int	item_realr   zoperator(==)items_are_equalr   zassignment(=)get_intget_realr5   r=   s       r   test_moduleOperators(TestModuleProcedure.test_moduleOperatorsF   sc   We^_M''U53x1}}!f}S[!1Q!6666{1~f%);;;;#f+a.0006{1~o.%& 	& &6{1~f%777#f+a.0006{1~o.3D2EEEE6{1~f%888#f+a.0006{1~o.
#$ 	$ $r!   c                    [         R                  " SSSS5      n[        R                  " [        U5      /5      n[	        U5      S:X  d   eUS   nUS   S   S	   S
/:X  d   eUS   S   S	   S/:X  d   eUS   S   S	   S/:X  d   eg )Nr   r   r   zpubprivmod.f90r   r   r/   r0   r1   r.   r3   r2   r4   r5   r=   s       r   test_notPublicPrivate)TestModuleProcedure.test_notPublicPrivateX   s    We^=MN''U53x1}}!f6{3
+	}<<<6{3
+|;;;6{6":.8,>>>r!   r"   N)r#   r$   r%   r&   r[   r^   r)   r"   r!   r   rO   rO   E   s    $$?r!   rO   c                   L    \ rS rSr\R
                  " SSSS5      /rS rS rSr	g	)
TestExternalb   r   r   r   z	gh17859.fc                 P    S nU R                   R                  U5      nUS:X  d   eg )Nc                     U S-   $ N{   r"   xs    r   incr5TestExternal.test_external_as_statement.<locals>.incrg       s7Nr!   rf   )r   external_as_statementr   ri   rs      r   test_external_as_statement'TestExternal.test_external_as_statementf   (    	 KK--d3Cxxr!   c                 P    S nU R                   R                  U5      nUS:X  d   eg )Nc                     U S-   $ re   r"   rg   s    r   ri   5TestExternal.test_external_as_attribute.<locals>.incrn   rk   r!   rf   )r   external_as_attributerm   s      r   test_external_as_attribute'TestExternal.test_external_as_attributem   rq   r!   r"   N)
r#   r$   r%   r&   r   r'   r(   ro   rv   r)   r"   r!   r   ra   ra   b   s#    ||GUNKHIGr!   ra   c                   F    \ rS rSr\R
                  " SSSS5      /rS rSrg)	TestCrackFortranu   r   r   r   z
gh2848.f90c                 L    U R                   R                  SS5      nUS:X  d   eg )Nr   r   )r   r   )r   gh2848)r   rn   s     r   test_gh2848TestCrackFortran.test_gh2848y   s$    KKq!$F{{r!   r"   N)	r#   r$   r%   r&   r   r'   r(   r}   r)   r"   r!   r   ry   ry   u   s    ||GUNLIJGr!   ry   c                   ,    \ rS rSrS rS rS rS rSrg)TestMarkinnerspaces~   c                 @    / SQnU H  n[        U5      U:X  a  M   e   g )N)za z aza b cz'abcdefghij'r   )r   	test_listis      r   test_do_not_touch_normal_spaces3TestMarkinnerspaces.test_do_not_touch_normal_spaces   s$    9	A"1%*** r!   c                 H    [        S5      S:X  d   e[        S5      S:X  d   eg )Nza 'b c' \' \'za 'b@_@c' \' \'za "b c" \" \"za "b@_@c" \" \"r   r   s    r   test_one_relevant_space+TestMarkinnerspaces.test_one_relevant_space   s,    015HHHH/04FFFFr!   c                 H    [        S5      S:X  d   e[        S5      S:X  d   eg )Nza 'b c" " d' eza 'b@_@c"@_@"@_@d' eza "b c' ' d" eza "b@_@c'@_@'@_@d" er   r   s    r   test_ignore_inner_quotes,TestMarkinnerspaces.test_ignore_inner_quotes   s,    126NNNN126NNNNr!   c                 H    [        S5      S:X  d   e[        S5      S:X  d   eg )Nza 'b c' 'd e'za 'b@_@c' 'd@_@e'za "b c" "d e"za "b@_@c" "d@_@e"r   r   s    r   test_multiple_relevant_spaces1TestMarkinnerspaces.test_multiple_relevant_spaces   s+    /3FFFF/04HHHHr!   r"   N)	r#   r$   r%   r&   r   r   r   r   r)   r"   r!   r   r   r   ~   s    +
GOIr!   r   c            	          \ rS rSrSrSr\R                  " S5      r/ SQr	S/r
\	\
-   rSr\" \5       Hg  u  rr\R!                  S5       V Vs/ s H  nS	U;   a  UR!                  S	5      S
   OSPM!     snn r\\R%                  \\SR'                  \5      S9-  rMi     \R*                  R-                  S\5      S 5       r\R*                  R-                  S\5      S 5       rSrgs  snn f )TestDimSpec   an  This test suite tests various expressions that are used as dimension
specifications.

There exists two usage cases where analyzing dimensions
specifications are important.

In the first case, the size of output arrays must be defined based
on the inputs to a Fortran function. Because Fortran supports
arbitrary bases for indexing, for instance, `arr(lower:upper)`,
f2py has to evaluate an expression `upper - lower + 1` where
`lower` and `upper` are arbitrary expressions of input parameters.
The evaluation is performed in C, so f2py has to translate Fortran
expressions to valid C expressions (an alternative approach is
that a developer specifies the corresponding C expressions in a
.pyf file).

In the second case, when user provides an input array with a given
size but some hidden parameters used in dimensions specifications
need to be determined based on the input array size. This is a
harder problem because f2py has to solve the inverse problem: find
a parameter `p` such that `upper(p) - lower(p) + 1` equals to the
size of input array. In the case when this equation cannot be
solved (e.g. because the input array size is wrong), raise an
error before calling the Fortran function (that otherwise would
likely crash Python process when the size of input arrays is
wrong). f2py currently supports this case only when the equation
is linear with respect to unknown parameter.

z.f90a  
      function get_arr_size_{count}(a, n) result (length)
        integer, intent(in) :: n
        integer, dimension({dimspec}), intent(out) :: a
        integer length
        length = size(a)
      end function

      subroutine get_inv_arr_size_{count}(a, n)
        integer :: n
        ! the value of n is computed in f2py wrapper
        !f2py intent(out) n
        integer, dimension({dimspec}), intent(in) :: a
      end subroutine
    )nz2*nz2:nzn/2z5 - n/2z3*n:20zn*(n+1):n*(n+5)z2*n, nz2*n:3*n*n+2*n ,:r   1z, )countdimspecfirstr   c                     U R                   R                  U5      n[        U R                  SU 35      nS H  nU" U5      u  pVUR                  U:X  a  M   e   g )Nget_arr_size_r   r   r         )all_dimspecsindexgetattrr   size)r   r   r   get_arr_sizer   szr0   s          r   test_array_sizeTestDimSpec.test_array_size   sV     !!''0t{{mE7,CD A OEB66R<< !r!   c                 4   U R                   R                  U5      n[        U R                  SU 35      n[        U R                  SU 35      nS HE  nU" U5      u  pgXR                  ;   a	  U" Xu5      nOU" U5      nU" U5      u  pXi:X  a  M>   XXXi45       e   g )Nr   get_inv_arr_size_r   )r   r   r   r   nonlinear_dimspecs)r   r   r   r   get_inv_arr_sizer   r   r0   n1sz1_s              r   test_inv_array_sizeTestDimSpec.test_inv_array_size   s     !!''0t{{mE7,CD"4;;2CE70KL A OEB111 &a+ &a( ""%FC9.qb..9 !r!   r"   N)r#   r$   r%   r&   __doc__suffixtextwrapdedentcode_templatelinear_dimspecsr   r   code	enumerater   r   splitlstformatjoinpytestmarkparametrizer   r   r)   ).0ds   00r   r   r      s	   < FOO % 	M O **"%77LD#L1w?F}}S?QR?Q!3!8Q4?QR$$))C. % 
 	
 2 [[Y5  6  [[Y5/ 6/% Ss   &C%r   c                       \ rS rSrS rSrg)TestModuleDeclaration   c                     [         R                  " SSSS5      n[        R                  " [        U5      /5      n[	        U5      S:X  d   eUS   S   S   S	   S
:X  d   eg )Nr   r   r   zfoo_deps.f90r   r   r/   abar=zbar('abar')r5   r=   s       r   test_dependencies'TestModuleDeclaration.test_dependencies   s\    We^^L''U53x1}}1vf~f%c*m;;;r!   r"   N)r#   r$   r%   r&   r   r)   r"   r!   r   r   r      s    <r!   r   c                       \ rS rSrS rSrg)TestEval   c                     [         R                  nU" S0 5      S:X  d   eU" S0 5      S:X  d   eU" S[        SSS95      S:X  d   eU" S	0 5      S
:X  d   eg )N123z12 + 315za + br   r   )r0   r3   3z"123"z'123')r   _eval_scalardict)r   eval_scalars     r   test_eval_scalarTestEval.test_eval_scalar   sg    "//5"%...8R(D0007D1N3s:::7B'7222r!   r"   N)r#   r$   r%   r&   r   r)   r"   r!   r   r   r      s    3r!   r   c                   \    \ rS rSr\R
                  R                  S/ SQ5      S 5       rSrg)TestFortranReaderi  encoding)asciizutf-8zutf-16zutf-32c                     USU S3-  nUR                  SUS9 nUR                  S5        S S S 5        [        R                  " [        U5      /5      nUS   S   S:X  d   eg ! , (       d  f       N== f)	Ninput_with_z_encoding.f90r   )r   zd
                     subroutine foo()
                     end subroutine foo
                     r   rT   foo)openwriter   r6   )r   r>   r   f_pathffr9   s         r   test_input_encoding%TestFortranReader.test_input_encoding	  sv     k(=AA[[x[0BHH   1
 ''V61vf~&&& 10s   A##
A1r"   N)	r#   r$   r%   r&   r   r   r   r   r)   r"   r!   r   r   r     s*    [[ZCE	'E	'r!   r   c                       \ rS rSr\R
                  " SSSS5      /r\R                  R                  \
R                  R                  S5      SL SS	9S
 5       rSrg)TestUnicodeCommenti  r   r   r   zunicode_comment.f90charset_normalizerNz7test requires charset_normalizer which is not installed)reasonc                 :    U R                   R                  S5        g )Nr   )r   r   r   s    r   test_encoding_comment(TestUnicodeComment.test_encoding_comment  s    
 	r!   r"   )r#   r$   r%   r&   r   r'   r(   r   r   skipif	importlib	find_specr   r)   r"   r!   r   r   r     s[    ||GUN<QRSG[[		!	!"6	74	?H  	r!   r   c                   ^    \ rS rSr\R
                  R                  S// SQ5      S 5       rSrg)TestNameArgsPatternBacktrackingi"  	adversary))z
@)@bind@(@)z#@)@bind                         @(@)z@)@bind foo bar baz@(@c                    SnSnSu  pE[        XE5       H  nX-  n[        U5       H  n/ n	[        U5       HU  n[        R                  " 5       n
[        R                  " U5      nU	R                  [        R                  " 5       U
-
  5        MW     [        R                  " U	5      S:  a  M   e   W(       a   eUS-   n[        R                  " U5      (       a  M   e   g)zHaddress ReDOS vulnerability:
https://github.com/numpy/numpy/issues/23338   r   )r
      g?z@)@N)rangetimeperf_counterr   searchappendr   median)r   r   trials_per_batchbatches_per_regex
start_repsend_repsiirepeated_adversaryr   timesr   mtchgood_version_of_adversarys                r   !test_nameargspattern_backtrackingATestNameArgsPatternBacktracking.test_nameargspattern_backtracking#  s     %

-B!* ,-/0A**,B*112DEDLL!2!2!4r!9: 1 yy'#--- . O8 );U(B%"))*CDDDD' .r!   r"   N)	r#   r$   r%   r&   r   r   r   r  r)   r"   r!   r   r   r   "  s/    [[		
EEr!   r   c                   F    \ rS rSr\R
                  " SSSS5      /rS rSrg)	TestFunctionReturniG  r   r   r   zgh23598.f90c                 H    U R                   R                  SS5      S:X  d   eg )Nr   r   r   )r   
intproductr   s    r   test_function_rettype(TestFunctionReturn.test_function_rettypeJ  s!    {{%%a+r111r!   r"   N)	r#   r$   r%   r&   r   r'   r(   r
  r)   r"   r!   r   r  r  G  s    ||GUNMJKG2r!   r  c                       \ rS rSrS rSrg)TestFortranGroupCountersiO  c                     [         R                  " SSSS5      n [        R                  " [        U5      /5        g ! [         a  n SU 35       eS nAff = f)Nr   r   r   z	gh23533.fz0'crackfortran.crackfortran' raised an exception )r   r'   r   r6   	Exception)r   r8   excs      r   test_end_if_comment,TestFortranGroupCounters.test_end_if_commentP  sT    We^[I	S%%s5zl3 	SRLSERR5	Ss    < 
A
AAr"   N)r#   r$   r%   r&   r  r)   r"   r!   r   r  r  O  s    Sr!   r  c                       \ rS rSrS rSrg)TestF77CommonBlockReaderiY  c                 (   [         R                  " SSSS5      n[        R                  " [        R
                  " 5       5       n[        R                  " [        U5      /5      nS S S 5        SWR                  5       ;  d   eg ! , (       d  f       N%= f)Nr   r   r   zgh22648.pyfMismatch)	r   r'   
contextlibredirect_stdoutioStringIOr   r6   getvalue)r   r>   r8   stdout_f2pyr9   s        r   test_gh22648%TestF77CommonBlockReader.test_gh22648Z  sg    We^]K''6+++SZL9C 7!5!5!7777 76s   !B
Br"   N)r#   r$   r%   r&   r  r)   r"   r!   r   r  r  Y  s    8r!   r  )!r   codecsr   unicodedatar   numpyr   numpy.f2py.crackfortranr   r   r   r   
numpy.f2pyr   r   r  r  F2PyTestr	   r+   rO   ra   ry   r   r   r   r   r   r   r   r  r  r  r"   r!   r   <module>r%     s          D  #   	,$-- ,%  % N? ?:4== &t}} I I*`/$-- `/F< <3t}} 3' ' "E "EJ2 2St}} S8 8r!   