
    {h-i                        d dl m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 d dlmZ d dlZ G d d	      Z G d
 de
      Zd Zy)    )annotationsN)Path   )Backend)Template)chainc                  z    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZddZddZ	ddZ
d	 Zy
)MesonTemplatez+Template meson build file generation class.c                ~   || _         t        t              j                  j	                         dz  | _        || _        || _        || _        || _	        ||| _
        ng | _
        i | _        || _        | j                  | j                  | j                  | j                   | j"                  g| _        |
| _        || _        y )Nzmeson.build.template)
modulenamer   __file__parentabsolutebuild_template_pathsourcesdeps	librarieslibrary_dirsinclude_dirssubstitutionsobjectsinitialize_templatesources_substitutiondeps_substitutioninclude_substitutionlibraries_substitutionpipeline
build_type
python_exe)selfr   r   r   r   r   r   object_fileslinker_argsc_argsr   r   s               ZD:\DhanshreeandTeamAI\Github\ai_code\venv\Lib\site-packages\numpy/f2py/_backends/_meson.py__init__zMesonTemplate.__init__   s     %N!!**,/EE 	  	"(# ,D "D#$$%%""%%''
 %$    c                    | j                   j                         s6t        t        j                  d| j                   j                          d      | j                   j                         S )NzMeson build template z does not exist.)r   is_fileFileNotFoundErrorerrnoENOENTr   	read_textr    s    r$   meson_build_templatez"MesonTemplate.meson_build_template:   sa    ''//1#,,5578"#  ''1133r&   c                    | j                   | j                  d<   | j                  | j                  d<   | j                  | j                  d<   y )Nr   	buildtypepython)r   r   r   r   r-   s    r$   r   z!MesonTemplate.initialize_templateD   s>    +/??<(*.//;''+8$r&   c           	         d}d| j                  | j                  D cg c]
  }| d| d c}      | j                  d<   y c c}w )N                     ,
'source_list)joinr   r   )r    indentsources      r$   r   z"MesonTemplate.sources_substitutionI   sN    .1&N,?,?15>vxq">-
=)>   Ac           	         d}d| j                  | j                  D cg c]
  }| d| d c}      | j                  d<   y c c}w )Nr3   r4   zdependency('z')dep_list)r7   r   r   )r    r8   deps      r$   r   zMesonTemplate.deps_substitutionO   sN    +.vh)<)<7;yyAyx|C5+yA*
:&Ar:   c                ^   dj                  t        | j                        D cg c]  \  }}d| d| d c}}      | j                  d<   dj                  | j                  D cg c]
  }| d| d c}      | j                  d<   d}d| j                  | j                  D cg c]	  }| | d	 c}      | j                  d
<   d| j                  t        t        | j                              D cg c]
  }| d| d	 c}      | j                  d<   y c c}}w c c}w c c}w c c}w )N
lib_dir_z& = declare_dependency(link_args : ['-Lz'])lib_dir_declarationsz& = declare_dependency(link_args : ['-llib_declarationsr3   ,lib_listlib_dir_list)r7   	enumerater   r   r   rangelen)r    ilib_dirlibr8   s        r$   r   z$MesonTemplate.libraries_substitutionU   sU   59YY #,D,=,=">">JAw 1#CG9CP">6
12 26  >>)C %=cU#F)2
-. +-fX););*...9.3xuA.9*
:& 02&]-?-?.3C8I8I4J.KL.Kxxs!$.KL.
>*# : Ms   D
%D &D%6D*c           	         d}d| j                  | j                  D cg c]
  }| d| d c}      | j                  d<   y c c}w )Nr3   r4   r5   inc_list)r7   r   r   )r    r8   incs      r$   r   z"MesonTemplate.include_substitutionl   sR    +.vh)<)<+/+<+<=+<CxqQ+<=*
:&=r:   c                    | j                   D ]	  } |         t        | j                               }|j                  | j                        S N)r   r   r.   
substituter   )r    nodetemplates      r$   generate_meson_buildz"MesonTemplate.generate_meson_buildr   s?    MMDF "D5578""4#5#566r&   N)r   strr   
list[Path]r   	list[str]r   rW   r   rV   r   rV   r!   rV   r"   rW   r#   rW   r   rU   r   rU   )returnrU   rX   None)__name__
__module____qualname____doc__r%   r.   r   r   r   r   r   rT    r&   r$   r
   r
      s    5$%$% $% 	$%
 $% !$% !$% !$% $% $% $% $%L47



.
7r&   r
   c                  D     e Zd Z fdZddZddZd ZddZd	dZ xZ	S )
MesonBackendc                    t        |   |i | | j                  j                  dg       | _        d| _        t        d | j                  D              rd| _        y d| _        y )Ndependenciesbbdirc              3  $   K   | ]  }d |v  
 yw)debugNr_   ).0flags     r$   	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>   s     E}t7d?}s   rf   release)	superr%   	extra_datgetrc   meson_build_diranyfc_flagsr   )r    argskwargs	__class__s      r$   r%   zMesonBackend.__init__z   s[    $)&) NN..~rB&Et}}EEG 	KT 	r&   c                   t        |      | j                  z  }t        |j                  | j                   d      |j                  | j                   d            }|D ]n  }t        j
                         |j                  z  }|j                         r|j                          t        j                  ||       t        j                  |       p y )Nz*.soz*.pyd)r   rn   r   globr   cwdnameexistsunlinkshutilcopy2osremove)r    	build_dirwalk_dirpath_objectspath_object	dest_paths         r$   _move_exec_to_rootzMesonBackend._move_exec_to_root   s    	?T%9%99MMT__-T23MMT__-U34
 (K
[%5%55I!  "LLi0IIk" (r&   c                   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  t        j                        }|j                         }t        |      j                  dd       t        |      dz  }|j!                  |       |S )z1Writes the meson build file at specified locationTparentsexist_okzmeson.build)r
   r   r   rc   r   r   r   extra_objects
flib_flagsrp   r   sys
executablerT   r   mkdir
write_text)r    r~   meson_templatesrcmeson_build_files        r$   write_meson_buildzMesonBackend.write_meson_build   s    &OOLLNNOOMMOONN
 113YdT:	?]:##C(r&   c                4    t        j                  ||d       y )NT)rv   check)
subprocessrun)r    commandrv   s      r$   _run_subprocess_commandz$MesonBackend._run_subprocess_command   s    wCt4r&   c                    dd| j                   g}| j                  ||       ddd| j                   g}| j                  ||       y )Nmesonsetupcompilez-C)rn   r   )r    r~   setup_commandcompile_commands       r$   	run_mesonzMesonBackend.run_meson   sH     '4+?+?@$$]I>"ItT5I5IJ$$_i@r&   c                   t        | j                  | j                  | j                        | _        | j	                  | j                         | j                  | j                         | j                  | j                         y rP   )_prepare_sourcesr   r   r~   r   r   r   r-   s    r$   r   zMesonBackend.compile   sR    't~~Vt~~.t~~&/r&   )r~   r   )r~   r   rX   rZ   rY   )
r[   r\   r]   r%   r   r   r   r   r   __classcell__)rs   s   @r$   ra   ra   y   s"    
# *5A0r&   ra   c                   |j                         }t        |      j                  dd       |D ]L  }t        |      j                         st        |      j	                         s7t        j                   ||       N t        |  d      t        |  d      t        |  d      g}t        |      }|D ]a  }|j                         st        j                   |||j                  z         |j                  |j                         |j                          c |D cg c]/  }t        |      j                  dk(  st        |      j                  1 }}|S c c}w )NTr   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fz.pyf)
copyr   r   rx   r(   rz   rw   appendry   suffix)mnamer   bdirextended_sourcesr9   generated_sourcesgenerated_sources          r$   r   r      s=   ||~JTD1< T&\%9%9%;KK%  	wh w()*wo&'
 :D-""$KK($1A1F1F*FG##$4$9$9:##%	 . '&FF|""f, 	V&  
 s   4E)
__future__r   r|   r*   rz   r   r   pathlibr   _backendr   stringr   	itertoolsr   warningsr
   ra   r   r_   r&   r$   <module>r      sE    " 	    
     e7 e7P:07 :0zr&   