
    *i                         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  S SKJ	r	  S SK
Jr  SSKJr   " S S5      r " S	 S
\5      rS rS rg)    N)chain)Path)Template   )Backendc                       \ rS rSrSrS\S\\   S\\   S\\   S\\   S\\   S	\\   S
\\   S\\   S\S\4S jrS\4S jr	SS jr
SS jrSS jrSS jrSS jrSS jrS rSrg)MesonTemplate   z+Template meson build file generation class.
modulenamesourcesdeps	librarieslibrary_dirsinclude_dirsobject_fileslinker_argsfortran_args
build_type
python_exec                 0   Xl         [        [        5      R                  R	                  5       S-  U l        X l        X0l        X@l        XPl	        Ub  X`l
        O/ U l
        0 U l        Xpl        U	 Vs/ s H7  nUR                  S5      (       a  UR                  S5      (       d  SU S3OUPM9     snU l        U R                   U R"                  U R$                  U R&                  U R(                  U R*                  /U l        Xl        Xl        SU l        g s  snf )Nzmeson.build.template'z                     )r   r   __file__parentabsolutebuild_template_pathr   r   r   r   r   substitutionsobjects
startswithendswithr   initialize_templatesources_substitutiondeps_substitutioninclude_substitutionlibraries_substitutionfortran_args_substitutionpipeliner   r   indent)selfr   r   r   r   r   r   r   r   r   r   r   xs                Y/var/www/html/ai-backend/venv/lib/python3.13/site-packages/numpy/f2py/_backends/_meson.py__init__MesonTemplate.__init__   s    %N!!**,/EE 	  	"(# , "D# "
! \\#..1::c??as!HJ!

 $$%%""%%''**
 %$
s   0>Dreturnc                     U R                   R                  5       (       d6  [        [        R                  SU R                   R                  5        S35      eU R                   R                  5       $ )NzMeson build template z does not exist.)r   is_fileFileNotFoundErrorerrnoENOENTr   	read_textr(   s    r*   meson_build_template"MesonTemplate.meson_build_template>   sd    ''//11#,,5578"#  ''1133    Nc                     U R                   U R                  S'   U R                  U R                  S'   U R                  U R                  S'   g )Nr   	buildtypepython)r   r   r   r   r4   s    r*   r    !MesonTemplate.initialize_templateH   s>    +/??<(*.//;''+8$r7   c           	          SR                  U R                   Vs/ s H  oR                   SU S3PM     sn5      U R                  S'   g s  snf )N,
'''''',source_list)joinr   r'   r   )r(   sources     r*   r!   "MesonTemplate.sources_substitutionM   sC    ,1JJ;?<<H<}Cxt,<H-
=)Hs   A
c           	          SU R                    3R                  U R                   Vs/ s H  oR                    SU S3PM     sn5      U R                  S'   g s  snf )Nr=   zdependency('z'),dep_list)r'   rA   r   r   )r(   deps     r*   r"   MesonTemplate.deps_substitutionR   sP    +.t{{m)<)A)A=AYYGYc}LS1YG*
:&G   Ac                    SR                  [        U R                  5       VVs/ s H  u  pSU SU S3PM     snn5      U R                  S'   SR                  U R                   Vs/ s H  nUR                  SS5       SU S	3PM     sn5      U R                  S
'   SU R                   3R                  U R                   Vs/ s H#  o0R                   UR                  SS5       S3PM%     sn5      U R                  S'   SU R                   3R                  [        [        U R                  5      5       Vs/ s H  oR                   SU S3PM     sn5      U R                  S'   g s  snnf s  snf s  snf s  snf )N
lib_dir_z( = declare_dependency(link_args : ['''-Lz'''])lib_dir_declarations._z& = declare_dependency(link_args : ['-lz'])lib_declarations,lib_listlib_dir_list)	rA   	enumerater   r   r   replacer'   rangelen)r(   ilib_dirlibs       r*   r$   $MesonTemplate.libraries_substitutionW   sw   59YY #,D,=,=">">JA 1#EgYeT">6
12 26  >>)C ;;sC())OPSuTWX)2
-. ,.dkk]);)@)@AEP#}S[[c2315P*
:& 02$++-?-D-D38T=N=N9O3PQ3Pa}HQCq)3PQ.
>*! Q Rs   E)
'"E/*E49E9c           	          SU R                    3R                  U R                   Vs/ s H  oR                    SU S3PM     sn5      U R                  S'   g s  snf )Nr=   r>   r?   inc_list)r'   rA   r   r   )r(   incs     r*   r#   "MesonTemplate.include_substitutionm   sT    +.t{{m)<)A)A595F5FG5Fc}CuD)5FG*
:&GrH   c                     U R                   (       aB  U R                   SSR                  [        U R                   5      5       S3U R                  S'   g SU R                  S'   g )Nzfortran_args: [z, z],r    )r   r'   rA   listr   r4   s    r*   r%   'MesonTemplate.fortran_args_substitutionr   sW    ;;-tyyd>O>O9P/Q.RRTU ~. 24D~.r7   c                     U R                    H
  nU" 5         M     [        U R                  5       5      nUR                  U R                  5      nUR                  SS5      nU$ )Nz,,rP   )r&   r   r5   
substituter   rT   )r(   nodetemplatemeson_builds       r*   generate_meson_build"MesonTemplate.generate_meson_buildz   sV    MMDF "D5578))$*<*<=!))$4r7   )r   r   r   r   r   r'   r   r   r   r   r&   r   r   r   r-   N)__name__
__module____qualname____firstlineno____doc__strra   r   r+   r5   r    r!   r"   r$   r#   r%   rh   __static_attributes__ r7   r*   r	   r	      s    5++ d+ 3i	+
 9+ 4j+ 4j+ 4j+ #Y+ 3i+ + +Z4c 47





,

4r7   r	   c                   f   ^  \ rS rSrU 4S jrS\4S jrS\SS4S jrS rS\4S	 jr	SS
 jr
SrU =r$ )MesonBackend   c                    > [         TU ]  " U0 UD6  U R                  R                  S/ 5      U l        SU l        [        S U R                   5       5      (       a  SOSU l        [        U R                  5      U l        g )Ndependenciesbbdirc              3   ,   #    U  H
  nS U;   v   M     g7f)debugNrr   ).0flags     r*   	<genexpr>(MesonBackend.__init__.<locals>.<genexpr>   s     E}t7d?}s   rz   release)
superr+   	extra_datgetrw   meson_build_diranyfc_flagsr   
_get_flags)r(   argskwargs	__class__s      r*   r+   MesonBackend.__init__   sh    $)&) NN..~rB&Et}}EEEG9 	 #4==1r7   	build_dirc                    [        U5      U R                  -  n[        UR                  U R                   S35      UR                  U R                   S35      UR                  U R                   S35      5      nU Hv  n[         R
                  " 5       UR                  -  nUR                  5       (       a  UR                  5         [        R                  " XE5        [        R                  " U5        Mx     g )Nz*.soz*.pydz*.dll)r   r   r   globr   cwdnameexistsunlinkshutilcopy2osremove)r(   r   walk_dirpath_objectspath_object	dest_paths         r*   _move_exec_to_rootMesonBackend._move_exec_to_root   s    	?T%9%99MMT__-T23MMT__-U34MMT__-U34
 (K
[%5%55I!!  "LL0IIk" (r7   r-   Nc                    [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  [        R                  5      nUR                  5       n[        U5      R                  SSS9  [        U5      S-  nUR!                  U5        U$ )z1Writes the meson build file at specified locationTparentsexist_okzmeson.build)r	   r   r   rw   r   r   r   extra_objects
flib_flagsr   r   sys
executablerh   r   mkdir
write_text)r(   r   meson_templatesrcmeson_build_files        r*   write_meson_buildMesonBackend.write_meson_build   s    &OOLLNNOOMMOONN
 113YdT:	?]:##C(r7   c                 .    [         R                  " XSS9  g )NT)r   check)
subprocessrun)r(   commandr   s      r*   _run_subprocess_command$MesonBackend._run_subprocess_command   s    wt4r7   c                     SSU R                   /nU R                  X!5        SSSU R                   /nU R                  X15        g )Nmesonsetupcompilez-C)r   r   )r(   r   setup_commandcompile_commands       r*   	run_mesonMesonBackend.run_meson   sD     '4+?+?@$$]>"ItT5I5IJ$$_@r7   c                    [        U R                  U R                  U R                  5      U l        U R	                  U R                  5        U R                  U R                  5        U R                  U R                  5        g )N)_prepare_sourcesr   r   r   r   r   r   r4   s    r*   r   MesonBackend.compile   sR    't~~Vt~~.t~~&/r7   )r   rw   r   r   r   rj   )rk   rl   rm   rn   r+   r   r   r   r   r   r   rq   __classcell__)r   s   @r*   rt   rt      sD    2#D #  4  D  *5A4 A0 0r7   rt   c                    UR                  5       n[        U5      R                  SSS9  U HY  n[        U5      R                  5       (       d  M#  [        U5      R	                  5       (       d  MC  [
        R                   " XB5        M[     [        U  S35      [        U  S35      [        U  S35      /n[        U5      nU Hh  nUR                  5       (       d  M  [
        R                   " XbUR                  -  5        UR                  UR                  5        UR                  5         Mj     U Vs/ s H3  n[        U5      R                  S:X  a  M  [        U5      R                  PM5     nnU$ s  snf )NTr   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fz.pyf)
copyr   r   r   r/   r   r   appendr   suffix)mnamer   bdirextended_sourcesrB   generated_sourcesgenerated_sources          r*   r   r      sD   ||~JTD1<  T&\%9%9%;%;KK%  	wh w()*wo&'
 :D-""$$KK(1A1F1F*FG##$4$9$9:##%	 . '&FF|""f, 	V&  
 s   /E-E-c                 ~   / n[         R                  " S5      nU  H{  nUR                  U5      nU(       d  M  UR                  S5      R	                  5       R                  5       nU Vs/ s H  ofR	                  S5      PM     nnUR                  U5        M}     [        [        R                  U5      5      nU$ s  snf )Nz--f(77|90)flags=(.*)   z'")
rer   matchgroupstripsplitextendra   dictfromkeys)r   flag_valuesflag_patternr|   match_resultvaluesvalunique_flagss           r*   r   r      s    K::56L#))$/<!''*00288:F289&3ii&&F9v&  k23L	 :s   )B:)r1   r   r   r   r   r   	itertoolsr   pathlibr   stringr   _backendr   r	   rt   r   r   rr   r7   r*   <module>r      sG     	 	   
    r rj<07 <0~4r7   