Ë
    öU.jY1  ã                   óX  — d Z ddlZddlZddlZddlZddlZddlZddlZddl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mZmZ ddlmZ ddlmZ d!d„Zd	Zd
Z G d„ d«      Zes e«       Zej;                  «        d„ Zd„ Zd„ Z d„ Z!da"da#ejH                  dk(  r= ee%«      jL                  jL                  jL                  Z' e(e'j                  d«      «      Z)d„ Z*d„ Z+d„ Z,d„ Z-e-g g g dfd„«       Z.e-g g g ddfd„«       Z/ G d„ de«      Z0d!d„Z1 G d„ d«      Z2d„ Z3e	jh                  d „ «       Z5y)"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)ÚPath)Ú	asunicode)ÚtemppathÚIS_WASM)Úimport_module)ÚMesonBackendc                 óþ  — t         j                  dk(  rt        j                  dd¬«       t	        j
                  «       }	 t        j                  j                  |d«      }t        |d«      5 }|j                  d«       |j                  d| › d	�«       |rL|j                  | › d
| › d	�«       |j                  | › d|› d�«       |j                  d| › d| › d| › d| › d�	«       d d d «       	 t        j                  g d¢d|d¬«      }j                  dk(  t        j                   |«       S # 1 sw Y   ŒIxY w# t        j                  $ r t        j                  dd¬«       Y Œ\w xY w# t        j                   |«       w xY w)NÚ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')
)ÚmesonÚsetupÚbtmpF)ÚcheckÚcwdÚcapture_outputz3meson not present, skipping compiler dependent testr   )Ú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         úWC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\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   Á ,E% Á,A5D)Ã!E% Ã*D5 ÄE% Ä)D2Ä.E% Ä5*E"ÅE% Å!E"Å"E% Å%E<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                   ó   — e Zd Zd„ Zd„ Zy)ÚCompilerCheckerc                 ó<   — d| _         d| _        d| _        d| _        y )NF)Úcompilers_checkedÚhas_cÚhas_f77Úhas_f90©Úselfs    r+   Ú__init__zCompilerChecker.__init__U   s   € Ø!&ˆÔØˆŒ
ØˆŒØˆ�ó    c                 óà  — | j                   sÖt        j                  dk(  sÂt        j                  j                  «       5 }|j                  t        d«      |j                  t        dt        «      |j                  t        dt        «      g}|d   j                  «       | _        |d   j                  «       | _        |d   j                  «       | _        d d d «       d| _         y y y # 1 sw Y   ŒxY w)NÚcygwinÚcÚfortranr   é   é   T)r0   r   r   Ú
concurrentÚfuturesÚThreadPoolExecutorÚsubmitr,   Úfortran77_codeÚfortran90_codeÚresultr1   r2   r3   )r5   Úexecutorr?   s      r+   Úcheck_compilerszCompilerChecker.check_compilers[   s¼   € Ø×&Ò&´·±ÀÒ1IÜ×#Ñ#×6Ñ6Ô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C$Ã$C-N)Ú__name__Ú
__module__Ú__qualname__r6   rF   © r7   r+   r.   r.   T   s   „ òó*r7   r.   c                  ó"   — t         j                  S ©N)Úcheckerr1   rJ   r7   r+   Úhas_c_compilerrN   n   s   € Ü�=‰=Ðr7   c                  ó"   — t         j                  S rL   )rM   r2   rJ   r7   r+   Úhas_f77_compilerrP   q   ó   € Ü�?‰?Ðr7   c                  ó"   — t         j                  S rL   )rM   r3   rJ   r7   r+   Úhas_f90_compilerrS   t   rQ   r7   c                  óF   — t         j                  xr t         j                  S rL   )rM   r3   r2   rJ   r7   r+   Úhas_fortran_compilerrU   w   s   € Ü�O‰OÒ/¤§¡Ð0r7   i  r9   z**/*.dllc                  óÎ   — t         �A	 t        j                  j                  t         «       	 t        j                  t         «       d a y y # t        $ r Y Œ)w xY w# t        $ r Y Œw xY wrL   )Ú_module_dirr   r   ÚremoveÚ
ValueErrorr#   r$   ÚOSErrorrJ   r7   r+   Ú_cleanupr[   ‡   sa   € äÐð	Ü�H‰H�O‰OœKÔ(ð	Ü�M‰Mœ+Ô&ð ‰ð øô ò 	Ùð	ûô ò 	Ùð	ús"   ˆ#A	 ¬A Á		AÁAÁ	A$Á#A$c                  óè   — t         €gt        j                  «       a t        j                  t
        «       t         t        j                  vr$t        j                  j                  dt         «       t         S )Nr   )	rW   r   r   ÚatexitÚregisterr[   r   r   ÚinsertrJ   r7   r+   Úget_module_dirr`   •   sF   € äÐÜ×&Ñ&Ó(ˆÜ�‰œÔ!ÜœcŸh™hÑ&Ü�H‰H�O‰O˜Aœ{Ô+ÜÐr7   c                  óx   — t        «        dt        z  } t        dz  a| t        j                  v rt	        d«      ‚| S )Nz_test_ext_module_%dr<   z%Temporary module name already in use.)r`   Ú_module_numr   ÚmodulesÚRuntimeError)Únames    r+   Úget_temp_module_namerf   Ÿ   s;   € ô ÔØ ¤;Ñ.€DÜ�1Ñ€KØŒs�{‰{ÑäÐBÓCÐCØ€Kr7   c                 ó<   ‡ ‡— i Šˆ ˆfd„}‰ j                   |_         |S )Nc                  óž   •— t        | |f«      }|‰vr	  ‰| i |¤Ž‰|<   ‰|   }t        |t        «      r|‚|S # t        $ r}|‰|<   ‚ d }~ww xY wrL   )ÚreprÚ	ExceptionÚ
isinstance)ÚaÚkwÚkeyÚeÚretÚfuncÚmemos        €€r+   Úwrapperz_memoize.<locals>.wrapper®   sj   ø€ Ü�A�r�7‹mˆØ�d‰?ðÙ  !˜N r™N��S‘	ð �3‰iˆÜ�cœ9Ô%ØˆIØˆ
øô ò Ø��S‘	Øûðús   ”8 ¸	AÁAÁA)rG   )rq   rs   rr   s   ` @r+   Ú_memoizert   «   s    ù€ Ø€Dõð —}‘}€GÔØ€Nr7   c           
      ó  — dt         j                  ›d�}t        «       }t        «       st	        j
                  d«       g }g }| D ]Ë  }	t        j                  j                  |	«      st        d|	z  «      ‚t        j                  j                  |t        j                  j                  |	«      «      }
t        j                  |	|
«       |j                  |
«       t        j                  j                  |
«      \  }}|dv sŒ»|j                  |
«       ŒÍ |sJ ‚|€
t        «       }g }d|vrd|vrdg}d	d
|g|z   |z   |z   }|ddgz  }|r	|dg|z   z  }|r	|dg|z   z  }t        j                   «       }	 t        j"                  |«       t         j$                  d	|g|z   }t'        j(                  |t&        j*                  t&        j,                  ¬«      }|j/                  «       \  }}|j0                  dk7  rt        d|dd ›dt3        |«      ›�«      ‚	 t        j"                  |«       |D ]  }	t        j4                  |	«       Œ 	 t         j6                  dk(  rst8        j;                  t=        j<                  t        j                  j                  |dj?                  |«      «      «      «       t'        j@                  g d¢t8        z   «       tC        |«      S # t        j"                  |«       |D ]  }	t        j4                  |	«       Œ w xY w)zH
    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%s is not a file)ú.f90z.f95ú.fz.cú.pyfNz--freethreading-compatiblez--no-freethreading-compatiblez-cz-mz	--backendr   zskip:zonly:)ÚstdoutÚstderrr   zRunning f2py failed: é   Ú
r9   z{:s}*)z/usr/bin/rebasez
--databasez--obliviousz	--verbose)"r   r   r`   rU   r   r   r   Úisfilerd   r   Úbasenamer#   ÚcopyfileÚappendÚsplitextrf   ÚgetcwdÚchdirÚ
executabler   ÚPopenÚPIPEÚSTDOUTÚcommunicater"   r   Úunlinkr   Ú_module_listÚextendÚglobÚformatÚ
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Ô!ÜÐ1°BÑ6Ó7Ð7Ü�g‰g�l‰l˜1œbŸg™g×.Ñ.¨rÓ2Ó3ˆÜ�‰˜˜CÔ Ø×Ñ˜3Ôä—G‘G×$Ñ$ SÓ)‰	ˆˆcØÐ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ÒÝØ # A B¢¬°3¬ð 9ó :ð :ð ô 	�‰�Œó ˆBÜ�I‰I�b�Mñ ô ‡|�|�xÒô 	×ÑÜ�I‰I”b—g‘g—l‘l 1 g§n¡n°[Ó&AÓBÓCô	
ô 	×ÑÚIÜñô	
ô ˜Ó%Ð%øô) 	�‰�Œó ˆBÜ�I‰I�b�Mñ ús   Å/BK Ë3Lc                 óÔ   — |€d}t        |¬«      5 }t        |d«      5 }|j                  | «       ddd«       t        |g||||¬«      cddd«       S # 1 sw Y   Œ#xY w# 1 sw Y   yxY w)z6
    Compile and import Fortran code using f2py.

    Nrx   )Úsuffixr   ©r‘   r   r’   r“   )r   r   r   r¢   )Úsource_coder‘   r   r’   r¤   r“   r   r)   s           r+   Ú
build_coder§     sc   € ð €~ØˆÜ	˜Õ	  DÜ�$˜Œ_ Ø�G‰G�KÔ ÷ ä˜T˜FØ$+Ø!%Ø!%Ø(3ô	5÷ 
!Ñ	 ßˆ_ú÷ 
!Ð	 ús!   ‘AžA°AÁA	ÁAÁA'c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚSimplifiedMesonBackendc                 ó$   •— t        ‰| �  |i |¤Ž y rL   )Úsuperr6   )r5   ÚargsÚkwargsÚ	__class__s      €r+   r6   zSimplifiedMesonBackend.__init__1  s   ø€ Ü‰Ñ˜$Ð) &Ó)r7   c                 óp   — | j                  | j                  «       | j                  | j                  «       y rL   )Úwrite_meson_buildÚ	build_dirÚ	run_mesonr4   s    r+   ÚcompilezSimplifiedMesonBackend.compile4  s$   € Ø×Ñ˜tŸ~™~Ô.Ø�‰�t—~‘~Õ&r7   )rG   rH   rI   r6   r³   Ú__classcell__)r®   s   @r+   r©   r©   0  s   ø„ ô*ö'r7   r©   c           	      ó  — t        «       st        j                  d«       t        «       }|€
t	        «       }t        di d|“d| “d|j                  dg «      “d|“d|j                  dg «      “d|j                  dg «      “d|j                  dg «      “d	|j                  d	g «      “d
|j                  d
g «      “d|j                  dg «      “d|j                  dg «      “d|j                  dg «      “d|j                  dg «      “d|j                  dg «      “d|j                  dd«      “d|j                  di «      “Ž}|j                  «        t        j                  j                  d|› d|j                  › �«       t        |«      S )z1
    Build a module via Meson and import it.
    rv   Ú
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_datr   Ú/rJ   )rU   r   r   r`   rf   r©   Úgetr³   r   r   r_   Ú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×&=Ñ&=Ð%>Ð?Ô@Ü˜Ó%Ð%r7   c                   óZ   — e Zd ZdZdZg Zg Zg ZdZdZ	dZ
dZdZed„ «       Zed„ «       Zd„ Zy)ÚF2PyTestNrx   c                 óx   — t        | «      }d|j                  j                  dd«      d   › d|j                  › d�S )NÚ_Ú.r<   éÿÿÿÿÚ_ext_module)ÚtyperH   ÚrsplitrG   )r5   Úclss     r+   r“   zF2PyTest.module_namer  s;   € ä�4‹jˆØ�3—>‘>×(Ñ(¨¨QÓ/°Ñ3Ð4°A°c·l±l°^À;ÐOÐOr7   c                 óì   — t         j                  dk(  rt        j                  d«       t	        «       t
        _        t        «       t
        _        t        «       t
        _
        t        «       t
        _        y )Nr
   z)Fails with MinGW64 Gfortran (Issue #9673))r   r   r   r   rN   rË   Ú_has_c_compilerrP   Ú_has_f77_compilerrS   Ú_has_f90_compilerrU   Ú_has_fortran_compiler)rÓ   s    r+   Úsetup_classzF2PyTest.setup_classw  sG   € ä�<‰<˜7Ò"Ü�K‰KÐCÔDÜ#1Ó#3ŒÔ Ü%5Ó%7ŒÔ"Ü%5Ó%7ŒÔ"Ü)=Ó)?ŒÕ&r7   c                 óB  — | j                   �y | j                  r| j                  ng }| j                  r|j                  | j                  «       t        d„ |D «       «      }t        d„ |D «       «      }t        d„ |D «       «      }|r!| j                  st        j                  d«       |r!| j                  st        j                  d«       |r!| j                  st        j                  d«       | j                  �Rt        | j                  | j                  | j                  | j                  | j                  | j                  ¬«      | _         | j                  �Ht        | j                  | j                  | j                  | j                  | j                  ¬«      | _         y y )	Nc              3   óP   K  — | ]  }t        |«      j                  d «      –— Œ  y­w)rx   N©ÚstrÚendswith©Ú.0r˜   s     r+   Ú	<genexpr>z(F2PyTest.setup_method.<locals>.<genexpr>ˆ  s    è ø€ Ð?¹°2œ˜B›×(Ñ(¨×.¹ùó   ‚$&c              3   óP   K  — | ]  }t        |«      j                  d «      –— Œ  y­w)rw   NrÜ   rß   s     r+   rá   z(F2PyTest.setup_method.<locals>.<genexpr>‰  ó    è ø€ ÐA¹5°Rœ˜B›×(Ñ(¨×0¹5ùrâ   c              3   óP   K  — | ]  }t        |«      j                  d «      –— Œ  y­w)ry   NrÜ   rß   s     r+   rá   z(F2PyTest.setup_method.<locals>.<genexpr>Š  rä   râ   z No Fortran 77 compiler availablez No Fortran 90 compiler availablerv   )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_methodzF2PyTest.setup_method€  s5  € Ø�;‰;Ð"Øà $§¢�—’°"ˆØ�9Š9Ø�L‰L˜Ÿ™Ô%äÑ?¹Ó?Ó?ˆ	ÜÑA¹5ÓAÓAˆ	ÜÑA¹5ÓAÓAˆ	á˜T×3Ò3Ü�K‰KÐ:Ô;Ù˜T×3Ò3Ü�K‰KÐ:Ô;Ù˜T×7Ò7Ü�K‰KÐ7Ô8ð �9‰9Ð Ü$Ø—	‘	ØŸ™Ø—Y‘YØ—Y‘YØ—{‘{Ø ×,Ñ,ôˆDŒKð �<‰<Ð#Ü&Ø—‘ØŸ™Ø—Y‘YØ—Y‘YØ ×,Ñ,ôˆD�Kð $r7   )rG   rH   rI   r”   r·   r‘   r   r’   r¤   ræ   rÕ   rÖ   r×   Úpropertyr“   ÚclassmethodrÙ   rì   rJ   r7   r+   rË   rË   f  se   „ Ø€DØ€GØ€GØ€DØ€DØ€FØ€FØ€OØÐØÐàñPó ðPð ñ@ó ð@ó%r7   rË   c                  ó–   — t        t        j                  j                  «      j                  j                  «       } |j                  | Ž S rL   )r   ÚnumpyÚf2pyÚ__file__ÚparentÚresolveÚjoinpath)rl   r•   s     r+   Úgetpathrö   ­  s5   € äŒU�Z‰Z× Ñ Ó!×(Ñ(×0Ñ0Ó2€AØˆ1�:‰:�qˆ>Ðr7   c              #   óÆ   K  — t        j                  «       }t        j                  | «       	 d –— t        j                  |«       y # t        j                  |«       w xY w­wrL   )r   r   r   r„   )r   Úcurpaths     r+   Ú	switchdirrù   ³  s<   è ø€ ä�h‰h‹j€GÜ‡H�HˆT„NðÛä
�‰�ÕøŒ�‰�Õüs   ‚*A!­A ±A!ÁAÁA!rL   )6Ú__doc__r�   r   r   r   r   r#   r]   r   Ú
contextlibrð   Úconcurrent.futuresr>   Úpathlibr   Únumpy._utilsr   Únumpy.testingr   r   Ú	importlibr   Únumpy.f2py._backends._mesonr   r,   rB   rC   r.   rM   rF   rN   rP   rS   rU   rW   rb   r   rò   ró   ÚNUMPY_INSTALL_ROOTÚlistr‹   r[   r`   rf   rt   r¢   r§   r©   rÉ   rË   rö   Úcontextmanagerrù   rJ   r7   r+   Ú<module>r     sd  ðñó Û 	Û 
Û Û Û Û Û Û Û Û å Ý "ß +Ý #Ý 4óð@€ð€÷*ñ *ñ, ÙÓ€GØ×ÑÔòòòò1ð €Ø€à‡<�<�8ÒÙ˜h›×.Ñ.×5Ñ5×<Ñ<ÐÙÐ*×/Ñ/°
Ó;Ó<€Lòòò	òð2 
Ø')°¸Èò L&ó 
ðL&ð^ 
àØØØØò5ó 
ð5ô6'˜\ô 'ó%&÷Z?ñ ?òNð ×Ññó ñr7   