K iP/XdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZddlZddlZddlmZddlmZddlmZmZd!dZd Zd ZGd d ZeseZej;d ZdZdZ dZ!da"da#e jHdk(r=ee%jLjLjLZ'e(e'j dZ)dZ*dZ+dZ,dZ-e-gggdfdZ.e-gggddfdZ/GddeZ0d!dZ1GddZ2dZ3ejhd 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) import_module)Path) asunicode) MesonBackend)IS_WASMtemppathc tjdk(rtjddt j } t jj|d}t|d5}|jd|jd|d |rL|j|d |d |j|d |d |jd |d|d|d|d ddd tjgdd|d}jdk(tj |S#1swYIxYw#tj$rtjddY\wxYw#tj |wxYw)Nwin32z*No Fortran tests on Windows (Issue #25134)T)allow_module_levelz meson.buildwzproject('check_compilers') zadd_languages('z') z _compiler = meson.get_compiler('z _code = '''z''' _have_z _feature =z_compiler.compiles(z_code, name: 'z feature check') )mesonsetupbtmpF)checkcwdcapture_outputz3meson not present, skipping compiler dependent testr)sysplatformpytestskiptempfilemkdtempospathjoinopenwrite subprocessrunCalledProcessError returncodeshutilrmtree)lang code_snippettmpdir meson_filefrunmesons [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/numpy/f2py/tests/util.pycheck_languager, sd ||w @UYZ    FWW\\&-8 *c " a GG2 3 GGodV40 14& @dKL4& L>?@TF*f/v6#f$68  h!~~*# H""a' f-  $,, h KKMbf g h  fsI,E%,A5D)!E%*D5E%)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 ceZdZdZdZy)CompilerCheckerc<d|_d|_d|_d|_y)NF)compilers_checkedhas_chas_f77has_f90selfs r+__init__zCompilerChecker.__init__Us!&   c|jstjdk(stjj 5}|j td|j tdt|j tdtg}|dj|_ |dj|_ |dj|_ dddd|_yyy#1swYxYw)NcygwincfortranrT)r0rr concurrentfuturesThreadPoolExecutorsubmitr,fortran77_codefortran90_coderesultr1r2r3)r5executorr?s r+check_compilerszCompilerChecker.check_compilers[s&&1I##668 3HOONC8OONI~NOONI~N %QZ..0 &qz002 &qz002  3&*D "2J& 3 3s BC$$C-N)__name__ __module__ __qualname__r6rFr7r+r.r.Ts  *r7r.c"tjSN)checkerr1rJr7r+has_c_compilerrNos ==r7c"tjSrL)rMr2rJr7r+has_f77_compilerrPr ??r7c"tjSrL)rMr3rJr7r+has_f90_compilerrSurQr7cFtjxrtjSrL)rMr3r2rJr7r+has_fortran_compilerrUxs OO /0r7ir9z**/*.dllctA tjjt t j tdayy#t$rY)wxYw#t$rYwxYwrL) _module_dirrrremove ValueErrorr#r$OSErrorrJr7r+_cleanupr[sa  HHOOK (  MM+ &       s"#A A AA A$#A$ctgtjatjt tt jvr$t jjdttS)Nr) rWrratexitregisterr[rrinsertrJr7r+get_module_dirr`sF&&( ! chh & HHOOA{ + r7cxtdtz}tdz a|tjvr t d|S)Nz_test_ext_module_%dr<z%Temporary module name already in use.)r` _module_numrmodules RuntimeError)names r+get_temp_module_namerfs; ; .D1K s{{BCC Kr7c<ifd}j|_|S)Nct||f}|vr |i||<|}t|tr||S#t$r }||<d}~wwxYwrL)repr Exception isinstance)akwkeyeretfuncmemos r+wrapperz_memoize..wrappersjAr7m d?  !NrNS 3i c9 %I  S  s 8 A AA )rG)rqrsrrs` @r+_memoizerts D }}G Nr7c dtjd}t}tst j dg}g}|D]} t jj| st| dt jj|t jj| } tj| | |j| t jj| \} } | dvs|j| |sJ| t}g} d|vrd|vrdg} d d |g|z| z|z}|d d gz }|r |d g|zz }|r |dg|zz }t j } t j"|tj$d |g|z}t'j(|t&j*t&j,}|j/\}}|j0dk7rtd|dddt3| t j"||D]} t j4|  tj6dk(rht8j;t=j<t jj||ddt'j>gdt8ztA|S#t j"||D]} t j4| wxYw)zH Compile and import a f2py module, built from the given files. zimport sys; sys.path = z&; import numpy.f2py; numpy.f2py.main()No Fortran compiler availablez is not a file).f90z.f95.fz.c.pyfNz--freethreading-compatiblez--no-freethreading-compatiblez-cz-mz --backendrzskip:zonly:)stdoutstderrrzRunning f2py failed:  r9s*)z/usr/bin/rebasez --databasez --obliviousz --verbose)!rrr`rUrrrisfilerdrbasenamer#copyfileappendsplitextrfgetcwdchdir executablerPopenPIPESTDOUT communicater"runlinkr _module_listextendglob check_callr) source_filesoptionsronly module_namecoded dst_sources f2py_sourcesfndstbaseext gil_options f2py_optsrcmdpouterrs r+ build_modulers%SXXL0V WDA  ! 34KL %ww~~b!"^45 5ggll1bgg..r23C 3GG$$S) c 6 6    $ % <*, K#727V^e7e34 t[)G3kALPI +w''I gY%%  gY%%  ))+C  ~~tT*Y6   S$.OO$.$5$5 7==?S <<1 !6s12wir)C.AQRS S    B IIbM  ||x  IIbggll1Qq&9: ;   I   %%)   B IIbM s /BK3K9c|d}t|5}t|d5}|j|dddt|g||||cdddS#1swY#xYw#1swYyxYw)z6 Compile and import Fortran code using f2py. Nrx)suffixr rrrr)rrrr) source_coderrrrrrr)s r+ build_codersv~  5D $_ ! GGK  !TF$+!%!%(3 555 ! !55s! AAAA AA'c$eZdZfdZdZxZS)SimplifiedMesonBackendc$t||i|yrL)superr6)r5argskwargs __class__s r+r6zSimplifiedMesonBackend.__init__1s $)&)r7cp|j|j|j|jyrL)write_meson_build build_dir run_mesonr4s r+compilezSimplifiedMesonBackend.compile4s$ t~~. t~~&r7)rGrHrIr6r __classcell__)rs@r+rr0s *'r7rc tstjdt}| t }t did|d|d|j dgd|d|j dgd|j dgd|j dgd |j d gd |j d gd |j d gd |j d gd |j d gd|j dgd|j dgd|j ddd|j di}|jtjjd|d|jt|S)z1 Build a module via Meson and import it. rv modulenamesources extra_objectsr include_dirs library_dirs libraries define_macros undef_macros f2py_flags sysinfo_flagsfc_flags flib_flags setup_flagsremove_build_dirF extra_datr/rJ) rUrrr`rfrgetrrrr_meson_build_dirr)rrrrbackends r+ build_mesonr9s ! 34 I*, %jj"5  ZZ3  ZZ3 **["-jj"5ZZ3::lB/jj"5J+::lB/JJ}b1 $6> **["-!G& OOHHOOA)Ag&=&=%>?@  %%r7cZeZdZdZdZgZgZgZdZdZ dZ dZ dZ e dZedZdZy)F2PyTestNrxcxt|}d|jjdddd|jdS)N_.r< _ext_module)typerHrsplitrG)r5clss r+rzF2PyTest.module_namers;4j3>>((a045Qs||nKPPr7ctjdk(rtjdt t _tt _tt _ tt _ y)Nr z)Fails with MinGW64 Gfortran (Issue #9673)) rrrrrNr_has_c_compilerrP_has_f77_compilerrS_has_f90_compilerrU_has_fortran_compiler)rs r+ setup_classzF2PyTest.setup_classwsG <<7 " KKC D#1#3 %5%7"%5%7")=)?&r7c.|jy|jxsg}|jr|j|jt d|D}t d|D}t d|D}|r!|j stjd|r!|jstjd|r!|jstjd|jRt|j|j|j|j|j|j|_|jHt|j|j|j|j|j|_yy) Nc3PK|]}t|jd yw)rxNstrendswith.0rs r+ z(F2PyTest.setup_method..s?2B((.?$&c3PK|]}t|jd yw)rwNrrs r+rz(F2PyTest.setup_method..ARB((0Arc3PK|]}t|jd yw)ryNrrs r+rz(F2PyTest.setup_method..rrz No Fortran 77 compiler availablez No Fortran 90 compiler availablerv)rrrrrr)modulerrrranyrrrrrrrrrr)r5codes needs_f77 needs_f90 needs_pyfs r+ setup_methodzF2PyTest.setup_methods2 ;; "  " 99 LL %??? A5AA A5AA T33 KK: ; T33 KK: ; T77 KK7 8 99 $  YYYY{{ ,, DK << #&  YYYY ,, DK $r7)rGrHrIrrrrrrrrrrpropertyr classmethodrrrJr7r+rrfse DGG D D F FO QQ@@%r7rcttjjjj }|j |SrL)rnumpyf2py__file__parentresolvejoinpath)rlrs r+getpathrs5 UZZ !((002A 1::q>r7c#Ktj}tj| dtj|y#tj|wxYwwrL)rrrr)rcurpaths r+ switchdirrs<hhjGHHTN  s*A!AA!AA!rL)6__doc__r]concurrent.futuresr> contextlibrrr#rrr importlibrpathlibrrr numpy._utilsrnumpy.f2py._backends._mesonr numpy.testingrrr,rBrCr.rMrFrNrPrSrUrWrbrrrNUMPY_INSTALL_ROOTlistrr[r`rfrtrrrrrrcontextmanagerrrJr7r+rsc  # "4+ > **.G 1  <<8h..55<<*// ;