+
    KV-jP/  ã                   ór  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHt ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHtHt R R ltRtR	t ! R
 R4      t]'       g   ]! 4       t]P;                  4        R tR tR t R t!Rs"Rs#]	PH                  R8X  d>   ]! ]%4      PL                  PL                  PL                  t'](! ]'P                  R4      4      t)R t*R t+R t,R t-]-. . . R3R l4       t.]-. . . RR3R l4       t/ ! R R]4      t0R R lt1 ! R R4      t2R t3]Ph                  R 4       t5R# )!z¥
Utility functions for

- building and importing modules on test time, using a temporary location
- detecting if compilers are present
- determining paths to tests

N)Úimport_module)ÚPath)Ú	asunicode)ÚMesonBackend)ÚIS_WASMÚtemppathc                 ó<  € \         P                  R 8X  d   \        P                  ! RRR7       \        P
                  ! 4       p \        P                  P                  VR4      p\        VR4      ;_uu_ 4       pVP                  R4       VP                  RV  R24       V'       dM   VP                  V  R	V  R24       VP                  V  R
V R24       VP                  RV  RV  RV  RV  R2	4       RRR4        \        P                  ! . RORVRR7      pXP                  ^ 8H  \        P                   ! V4       #   + '       g   i     LR; i  \        P                   d    \        P                  ! RRR7        Lgi ; i  \        P                   ! T4       i ; i)Úwin32z*No Fortran tests on Windows (Issue #25134)T)Úallow_module_levelzmeson.buildÚwzproject('check_compilers')
zadd_languages('z')
z _compiler = meson.get_compiler('z_code = '''z'''
Ú_have_z
_feature =z_compiler.compiles(z_code, name: 'z feature check')
NF)ÚcheckÚcwdÚcapture_outputz3meson not present, skipping compiler dependent test)ÚmesonÚsetupÚbtmp)ÚsysÚplatformÚpytestÚskipÚtempfileÚmkdtempÚosÚpathÚjoinÚopenÚwriteÚ
subprocessÚrunÚCalledProcessErrorÚ
returncodeÚshutilÚrmtree)ÚlangÚcode_snippetÚtmpdirÚ
meson_fileÚfÚrunmesons   &&    Úf/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/numpy/f2py/tests/util.pyÚcheck_languager+       s`  € Ü
‡|�|�wÔÜ�ŠÐ@ÐUYÕZÜ×ÒÓ€FðÜ—W‘W—\‘\ &¨-Ó8ˆ
Ü�*˜c×"Ô" aØ�G‰GÐ2Ô3Ø�G‰G�o d V¨4Ð0Ô1ßØ—‘˜4˜&Ð @ÀÀÀdÐKÔLØ—‘˜4˜& ¨L¨>¸Ð?Ô@Ø—‘Ø˜T˜F *Ø�fÐ/°¨vð 6Ø#˜fÐ$6ð8ô÷ #ð	hÜ!—~’~Ú*ØØØ#ô	ˆHð ×"Ñ" aÑ'ä�Š�fÕ÷- #×"ûô$ ×,Ñ,ô 	hÜ�KŠKÐMÐbf×gð	hûô 	�Š�fÕúsI   Á4F Á8A;D=Ã3F Ã<E ÄF Ä=E	ÅF Å-F Å=F Å?F Æ F ÆFz]
C Example Fortran 77 code
      PROGRAM HELLO
      PRINT *, 'Hello, Fortran 77!'
      END
zÙ
! Example Fortran 90 code
program hello90
  type :: greeting
    character(len=20) :: text
  end type greeting

  type(greeting) :: greet
  greet%text = 'hello, fortran 90!'
  print *, greet%text
end program hello90
c                   ó,   a € ] tR t^Tt o R tR tRtV tR# )ÚCompilerCheckerc                ó>   € R V n         R V n        R V n        R V n        R# )FN©Úcompilers_checkedÚhas_cÚhas_f77Úhas_f90©Úselfs   &r*   Ú__init__ÚCompilerChecker.__init__U   s   € Ø!&ˆÔØˆŒ
ØˆŒØˆŽó    c           	     ó,  € V P                   '       gï   \        P                  R 8X  gØ   \        P                  P                  4       ;_uu_ 4       pVP                  \        R4      VP                  \        R\        4      VP                  \        R\        4      .pV^ ,          P                  4       V n        V^,          P                  4       V n        V^,          P                  4       V n        RRR4       RV n         R# R# R#   + '       g   i     L; i)ÚcygwinÚcÚfortranNT)r0   r   r   Ú
concurrentÚfuturesÚThreadPoolExecutorÚsubmitr+   Úfortran77_codeÚfortran90_codeÚresultr1   r2   r3   )r5   Úexecutorr>   s   &  r*   Úcheck_compilersÚCompilerChecker.check_compilers[   sÂ   € Ø×&×&Ð&´·±ÀÔ1IÜ×#Ñ#×6Ñ6×8Ô8¸Hà—O‘O¤N°CÓ8Ø—O‘O¤N°I¼~ÓNØ—O‘O¤N°I¼~ÓNð�ð % Q�Z×.Ñ.Ó0�”
Ø& q�z×0Ñ0Ó2�”Ø& q�z×0Ñ0Ó2�”÷ 9ð &*ˆDÖ"ñ 2JÑ&ß8×8ús   ÁB DÄD	r/   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r6   rE   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r*   r-   r-   T   s   ø‡ € ò÷*ð *r8   r-   c                  ó"   € \         P                  # ©N)Úcheckerr1   © r8   r*   Úhas_c_compilerrS   o   s   € Ü�=‰=Ðr8   c                  ó"   € \         P                  # rP   )rQ   r2   rR   r8   r*   Úhas_f77_compilerrU   r   ó   € Ü�?‰?Ðr8   c                  ó"   € \         P                  # rP   )rQ   r3   rR   r8   r*   Úhas_f90_compilerrX   u   rV   r8   c                  óR   € \         P                  ;'       d    \         P                  # rP   )rQ   r3   r2   rR   r8   r*   Úhas_fortran_compilerrZ   x   s   € Ü�O‰O×/Ð/¤§¡Ð0r8   i  r:   z**/*.dllc                  óà   € \         eD    \        P                  P                  \         4        \
        P                  ! \         4       R s R # R #   \         d     L.i ; i  \         d     L$i ; irP   )Ú_module_dirr   r   ÚremoveÚ
ValueErrorr"   r#   ÚOSErrorrR   r8   r*   Ú_cleanupr`   ˆ   sa   € äÒð	Ü�H‰H�O‰OœKÔ(ð	Ü�MŠMœ+Ô&ð Šñ øô ô 	Ùð	ûô ô 	Ùð	ús"   Š#A ®A ÁAÁAÁA-Á,A-c                  óö   € \         fm   \        P                  ! 4       s \        P                  ! \
        4       \         \        P                  9  d%   \        P                  P                  ^ \         4       \         # rP   )	r\   r   r   ÚatexitÚregisterr`   r   r   ÚinsertrR   r8   r*   Úget_module_dirre   –   sF   € äÒÜ×&Ò&Ó(ˆÜ�ŠœÔ!ÜœcŸh™hÔ&Ü�H‰H�O‰O˜Aœ{Ô+ÜÐr8   c                  óŽ   € \        4        R \        ,          p \        ^,          sV \        P                  9   d   \	        R4      hV # )z_test_ext_module_%dz%Temporary module name already in use.)re   Ú_module_numr   ÚmodulesÚRuntimeError)Únames    r*   Úget_temp_module_namerk       s;   € ô ÔØ ¤;Õ.€DÜ�1Õ€KØŒs�{‰{ÔäÐBÓCÐCØ€Kr8   c                 ó>   a a€ / oV V3R  lpS P                   Vn         V# )c                  óº   <€ \        W34      pVS9  d    S! V / VB SV&   SV,          p\        V\        4      '       d   VhV#   \         d   pTST&   h R p?ii ; irP   )ÚreprÚ	ExceptionÚ
isinstance)ÚaÚkwÚkeyÚeÚretÚfuncÚmemos   *,   €€r*   ÚwrapperÚ_memoize.<locals>.wrapper¯   sk   ø€ Ü�A�7‹mˆØ�dŒ?ðÙ  !˜N r™N��S‘	ð �3�iˆÜ�cœ9×%Ò%ØˆIØˆ
øô ô Ø��S‘	Øûðús   –A ÁAÁAÁA)rG   )rv   rx   rw   s   f @r*   Ú_memoizerz   ¬   s    ù€ Ø€Döð —}‘}€GÔØ€Nr8   c           	     óÈ  € R\         P                  : R2p\        4       p\        4       '       g   \        P
                  ! R4       . p. pV  FÕ  p	\        P                  P                  V	4      '       g   \        V	 R24      h\        P                  P                  V\        P                  P                  V	4      4      p
\        P                  ! Wš4       VP                  V
4       \        P                  P                  V
4      w  r¼VR9   g   KÄ  VP                  V
4       K×  	  V'       g   Q hVf   \        4       p. pRV9  d   RV9  d   R.pRRV.V,           V,           V,           pVR	R
.,          pV'       d   VR.V,           ,          pV'       d   VR.V,           ,          p\        P                   ! 4       p \        P"                  ! V4       \         P$                  RV.V,           p\&        P(                  ! V\&        P*                  \&        P,                  R7      pVP/                  4       w  ppVP0                  ^ 8w  d"   \        RVR,           R\3        V4       24      h \        P"                  ! V4       V F  p	\        P4                  ! V	4       K  	  \         P6                  R8X  dn   \8        P;                  \<        P<                  ! \        P                  P                  WdR R24      4      4       \&        P>                  ! . RO\8        ,           4       \A        V4      #   \        P"                  ! T4       T F  p	\        P4                  ! T	4       K  	  i ; i)z@
Compile and import a f2py module, built from the given files.

zimport sys; sys.path = z&; import numpy.f2py; numpy.f2py.main()úNo Fortran compiler availablez is not a filez--freethreading-compatiblez--no-freethreading-compatiblez-cz-mz	--backendr   zskip:zonly:)ÚstdoutÚstderrzRunning f2py failed: :é   NNÚ
r:   ÚsÚ*)ú.f90z.f95ú.fz.cú.pyf)z/usr/bin/rebasez
--databasez--obliviousz	--verbose)!r   r   re   rZ   r   r   r   Úisfileri   r   Úbasenamer"   ÚcopyfileÚappendÚsplitextrk   ÚgetcwdÚchdirÚ
executabler   ÚPopenÚPIPEÚSTDOUTÚcommunicater!   r   Úunlinkr   Ú_module_listÚextendÚglobÚ
check_callr   )Úsource_filesÚoptionsr   ÚonlyÚmodule_nameÚcodeÚdÚdst_sourcesÚf2py_sourcesÚfnÚdstÚbaseÚextÚgil_optionsÚ	f2py_optsr   ÚcmdÚpÚoutÚerrs   &&&&&               r*   Úbuild_moduler©   Å   s®  € ð %¤S§X¡X¡LÐ0VÐW€DäÓ€Aä×!Ò!Ü�ŠÐ3Ô4ð €KØ€LÛˆÜ�w‰w�~‰~˜b×!Ò!Ü "  ^Ð4Ó5Ð5Ü�g‰g�l‰l˜1œbŸg™g×.Ñ.¨rÓ2Ó3ˆÜ�Š˜Ô Ø×Ñ˜3Ôä—G‘G×$Ñ$ SÓ)‰	ˆØÐ6Ö6Ø×Ñ Ö$ñ ÷ Ðˆ<ð ÒÜ*Ó,ˆØ€KØ#¨7Ô2Ð7VÐ^eÔ7eà3Ð4ˆØ�t˜[Ð)¨GÕ3°kÕAÀLÕP€IØ�+˜wÐ'Õ'€IßØ�g�Y Õ%Õ%ˆ	ßØ�g�Y Õ%Õ%ˆ	ô �)Š)‹+€CðÜ
�Š�ŒÜ�~‰~˜t TÐ*¨YÕ6ˆÜ×Ò˜SÜ$.§O¡OÜ$.×$5Ñ$5ô7ˆð —=‘=“?‰ˆˆSØ�<‰<˜1ÔÜÐ!6°s¸2µw°i¸rÄ)ÈCÃ.ÐAQÐRÓSÐSð ô 	�Š�Œó ˆBÜ�IŠI�bŽMñ ô ‡|�|�xÔô 	×ÑÜ�IŠI”b—g‘g—l‘l 1°Q¨°qÐ&9Ó:Ó;ô	
ô 	×ÒÚIÜõô	
ô ˜Ó%Ð%øô) 	�Š�Œó ˆBÜ�IŠI�bŽMò ús   Æ=B*L* Ì*7M!c           
     ó  € Vf   Rp\        VR7      ;_uu_ 4       p\        VR4      ;_uu_ 4       pVP                  V 4       RRR4       \        V.VVVVR7      uuRRR4       #   + '       g   i     L+; i  + '       g   i     R# ; i)z.
Compile and import Fortran code using f2py.

Nr„   )Úsuffixr   ©r˜   r   r™   rš   )r   r   r   r©   )Úsource_coder˜   r   r™   r«   rš   r   r(   s   &&&&&&  r*   Ú
build_coder®     sk   € ð ‚~ØˆÜ	˜×	 Õ	  DÜ�$˜�_Œ_ Ø�G‰G�KÔ ÷ ä˜T˜FØ$+Ø!%Ø!%Ø(3ô	5÷ 
!Ò	 ß�_ú÷ 
!×	 Ð	 ús"   ›A8°A%	ÁA8Á%A5Á0A8Á8B		c                   ó8   a a€ ] tR tRt oV 3R ltR tRtVtV ;t# )ÚSimplifiedMesonBackendi0  c                ó(   <€ \         SV `  ! V/ VB  R # rP   )Úsuperr6   )r5   ÚargsÚkwargsÚ	__class__s   &*,€r*   r6   ÚSimplifiedMesonBackend.__init__1  s   ø€ Ü‰Ò˜$Ð) &Ô)r8   c                ór   € V P                  V P                  4       V P                  V P                  4       R # rP   )Úwrite_meson_buildÚ	build_dirÚ	run_mesonr4   s   &r*   ÚcompileÚSimplifiedMesonBackend.compile4  s$   € Ø×Ñ˜tŸ~™~Ô.Ø�‰�t—~‘~Ö&r8   rR   )	rG   rH   rI   rJ   r6   r»   rK   rL   Ú__classcell__)rµ   rN   s   @@r*   r°   r°   0  s   ù‡ € õ*÷'ò 'r8   r°   c           	     ó$  € \        4       '       g   \        P                  ! R4       \        4       pVf   \	        4       p\        R/ RVbRV bRVP                  R. 4      bRVbRVP                  R. 4      bRVP                  R. 4      bRVP                  R. 4      bR	VP                  R	. 4      bR
VP                  R
. 4      bRVP                  R. 4      bRVP                  R. 4      bRVP                  R. 4      bRVP                  R. 4      bRVP                  R. 4      bRVP                  RR4      bRVP                  R/ 4      b pVP                  4        \        P                  P                  ^ V RVP                   24       \        V4      # )z)
Build a module via Meson and import it.
r|   Ú
modulenameÚsourcesÚextra_objectsr¹   Úinclude_dirsÚlibrary_dirsÚ	librariesÚdefine_macrosÚundef_macrosÚ
f2py_flagsÚsysinfo_flagsÚfc_flagsÚ
flib_flagsÚsetup_flagsÚremove_build_dirFÚ	extra_datÚ/rR   )rZ   r   r   re   rk   r°   Úgetr»   r   r   rd   Úmeson_build_dirr   )r—   rš   r´   r¹   Úbackends   &&,  r*   Úbuild_mesonrÒ   9  s¥  € ô  ×!Ò!Ü�ŠÐ3Ô4äÓ €IØÒÜ*Ó,ˆô %ò Ùðáðð —j‘j °"Ô5ðñ ð	ð
 —Z‘Z °Ô3ðð —Z‘Z °Ô3ðð —*‘*˜[¨"Ô-ðð —j‘j °"Ô5ðð —Z‘Z °Ô3ðð —:‘:˜l¨BÔ/ðð —j‘j °"Ô5ðð —‘˜J¨Ô+ðð —:‘:˜l¨BÔ/ðð —J‘J˜}¨bÔ1ðð  Ÿ™Ð$6¸Ô>ðð  —*‘*˜[¨"Ô-ð!€Gð& ‡O�OÔô ‡H�H‡O�O�A˜)˜ A g×&=Ñ&=Ð%>Ð?Ô@Ü˜Ó%Ð%r8   c                   ón   a € ] tR tRt o RtRt. t. t. tRt	Rt
RtRtRt]R 4       t]R 4       tR tRtV tR# )ÚF2PyTestif  Nr„   c                ó€   € \        V 4      pR VP                  P                  R^4      R,           R VP                   R2# )Ú_Ú.Ú_ext_moduleéÿÿÿÿ)ÚtyperH   ÚrsplitrG   )r5   Úclss   & r*   rš   ÚF2PyTest.module_namer  s;   € ä�4‹jˆØ�3—>‘>×(Ñ(¨¨aÓ0°Õ4Ð5°Q°s·|±|°nÀKÐPÐPr8   c                óô   € \         P                  R 8X  d   \        P                  ! R4       \	        4       \
        n        \        4       \
        n        \        4       \
        n
        \        4       \
        n        R# )r	   z)Fails with MinGW64 Gfortran (Issue #9673)N)r   r   r   r   rS   rÔ   Ú_has_c_compilerrU   Ú_has_f77_compilerrX   Ú_has_f90_compilerrZ   Ú_has_fortran_compiler)rÜ   s   &r*   Úsetup_classÚF2PyTest.setup_classw  sG   € ä�<‰<˜7Ô"Ü�KŠKÐCÔDÜ#1Ó#3ŒÔ Ü%5Ó%7ŒÔ"Ü%5Ó%7ŒÔ"Ü)=Ó)?ŒÖ&r8   c           	     ór  € V P                   e   R # V P                  ;'       g    . pV P                  '       d   VP                  V P                  4       \
        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      p\
        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      p\
        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      pV'       d)   V P                  '       g   \        P                  ! R4       V'       d)   V P                  '       g   \        P                  ! R4       V'       d)   V P                  '       g   \        P                  ! R4       V P                  eS   \        V P                  V P                  V P                  V P                  V P                  V P                  R	7      V n         V P                  eJ   \        V P                  V P                  V P                  V P                  V P                  R
7      V n         R # R # )Nc              3   óV   "  € T F  p\        V4      P                  R 4      x € K!  	  R# 5i)r„   N©ÚstrÚendswith©Ú.0rŸ   s   & r*   Ú	<genexpr>Ú(F2PyTest.setup_method.<locals>.<genexpr>ˆ  s"   é € Ð?¹°2œ˜B›×(Ñ(¨×.Ð.»ùó   ‚')TFc              3   óV   "  € T F  p\        V4      P                  R 4      x € K!  	  R# 5i)rƒ   Nrç   rê   s   & r*   rì   rí   ‰  ó"   é € ÐA¹5°Rœ˜B›×(Ñ(¨×0Ð0»5ùrî   c              3   óV   "  € T F  p\        V4      P                  R 4      x € K!  	  R# 5i)r…   Nrç   rê   s   & r*   rì   rí   Š  rð   rî   z No Fortran 77 compiler availablez No Fortran 90 compiler availabler|   )r˜   r   r™   r«   rš   r¬   )ÚmodulerÀ   r›   r‰   r«   Úanyrà   r   r   rá   râ   r®   r˜   r™   rš   r©   )r5   ÚcodesÚ	needs_f77Ú	needs_f90Ú	needs_pyfs   &    r*   Úsetup_methodÚF2PyTest.setup_method€  sp  € Ø�;‰;Ò"Ùà—‘×"Ð" ˆØ�9�9ˆ9Ø�L‰L˜Ÿ™Ô%ç“CÑ?¹Ó?—C—C’CÑ?¹Ó?Ó?ˆ	ß“CÑA¹5ÓA—C—C’CÑA¹5ÓAÓAˆ	ß“CÑA¹5ÓA—C—C’CÑA¹5ÓAÓAˆ	ç˜T×3×3Ð3Ü�KŠKÐ:Ô;ß˜T×3×3Ð3Ü�KŠKÐ:Ô;ß˜T×7×7Ð7Ü�KŠKÐ7Ô8ð �9‰9Ò Ü$Ø—	‘	ØŸ™Ø—Y‘YØ—Y‘YØ—{‘{Ø ×,Ñ,ôˆDŒKð �<‰<Ò#Ü&Ø—‘ØŸ™Ø—Y‘YØ—Y‘YØ ×,Ñ,ôˆDŽKñ $r8   )rò   )rG   rH   rI   rJ   r›   rÀ   r˜   r   r™   r«   rò   rß   rà   rá   Úpropertyrš   Úclassmethodrã   rø   rK   rL   rM   s   @r*   rÔ   rÔ   f  sm   ø‡ € Ø€DØ€GØ€GØ€DØ€DØ€FØ€FØ€OØÐØÐàñQó ðQð ñ@ó ð@÷%ð %r8   rÔ   c                  ó˜   € \        \        P                  P                  4      P                  P                  4       pVP                  ! V !  # rP   )r   ÚnumpyÚf2pyÚ__file__ÚparentÚresolveÚjoinpath)rq   rœ   s   * r*   Úgetpathr  ­  s3   € äŒU�Z‰Z× Ñ Ó!×(Ñ(×0Ñ0Ó2€AØ�:Š:�q‰>Ðr8   c              #   óÐ   "  € \         P                  ! 4       p\        P                  ! V 4        R x € \        P                  ! V4       R #   \        P                  ! T4       i ; i5irP   )r   r   r   rŒ   )r   Úcurpaths   & r*   Ú	switchdirr  ³  s;   é € ä�hŠh‹j€GÜ‡H‚HˆT„NðÛä
�Š�ÖøŒ�Š�Õüs   ‚,A&¯A ³A&ÁA#Á#A&rP   )6Ú__doc__rb   Úconcurrent.futuresr=   Ú
contextlibr•   r   r"   r   r   r   Ú	importlibr   Úpathlibr   r   rý   Únumpy._utilsr   Únumpy.f2py._backends._mesonr   Únumpy.testingr   r   r+   rA   rB   r-   rQ   rE   rS   rU   rX   rZ   r\   rg   r   rÿ   r   ÚNUMPY_INSTALL_ROOTÚlistr“   r`   re   rk   rz   r©   r®   r°   rÒ   rÔ   r  Úcontextmanagerr  rR   r8   r*   Ú<module>r     sc  ðñó Û Û Û Û 	Û Û Û 
Û Ý #Ý ã ã Ý "Ý 4ß +ôð>€ð€÷*ñ *÷. ÙÓ€GØ×ÑÔòòòò1ð €Ø€à‡<�<�8ÔÙ˜h›×.Ñ.×5Ñ5×<Ñ<ÐÙÐ*×/Ñ/°
Ó;Ó<€Lòòò	òð2 
Ø')°¸Èó K&ó 
ðK&ð\ 
àØØØØó5ó 
ð5ô6'˜\ô 'ô%&÷Z?ñ ?òNð ×Ññó òr8   