Ë
    6Š·j²!  ã                   ó    — 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 ddlmZ  G d„ d«      Z G d	„ d
e«      Zd„ Zd„ Zd„ Zy)é    N)Úchain)ÚPath)ÚTemplateé   )ÚBackendc                   ó¾   — e Zd ZdZdedee   dee   dee   dee   dee   dee   d	ee   d
ee   dedefd„Zdef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.Ú
modulenameÚsourcesÚdepsÚ	librariesÚlibrary_dirsÚinclude_dirsÚobject_filesÚlinker_argsÚfortran_argsÚ
build_typeÚ
python_exec                 ó<  — || _         t        t        «      j                  j	                  «       dz  | _        || _        || _        || _        || _	        |�|| _
        ng | _
        i | _        || _        |	D �cg c],  }|j                  d«      r|j                  d«      sd|› d�n|‘Œ. c}| _        | j                   | j"                  | j$                  | j&                  | j(                  | j*                  | j,                  g| _        |
| _        || _        d| _        y c c}w )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Úobjects_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                úQ/root/workspace/.venv/lib/python3.12/site-packages/numpy/f2py/_backends/_meson.pyÚ__init__zMesonTemplate.__init__   s  € ð %ˆŒä”‹N×!Ñ!×*Ñ*Ó,Ð/EÑEð 	Ô ð ˆŒØˆŒ	Ø"ˆŒØ(ˆÔØÐ#Ø ,ˆDÕà "ˆDÔØˆÔØ#ˆŒð "ö
àð Ÿ\™\¨#Ô.°1·:±:¸c´?ˆa�ˆs�!‰HÈÑJò
ˆÔð
 ×$Ñ$Ø×%Ñ%Ø×%Ñ%Ø×"Ñ"Ø×%Ñ%Ø×'Ñ'Ø×*Ñ*ð
ˆŒð %ˆŒØ$ˆŒØˆ�ùò
s   Á61DÚreturnc                 óÖ   — | 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Ð3ó    Nc                 óš   — | j                   | j                  d<   | j                  | j                  d<   | j                  | j                  d<   y )Nr
   Ú	buildtypeÚpython)r
   r   r   r   r3   s    r*   r   z!MesonTemplate.initialize_templateI   s>   € Ø+/¯?©?ˆ×Ñ˜<Ñ(Ø*.¯/©/ˆ×Ñ˜;Ñ'Ø'+§¡ˆ×Ñ˜8Ò$r5   c           	      óš   — dj                  | j                  D �cg c]  }| j                  › d|› d�‘Œ c}«      | j                  d<   y c c}w )Nú,
ú'''ú''',Úsource_list)Újoinr   r'   r   )r(   Úsources     r*   r    z"MesonTemplate.sources_substitutionN   sA   € Ø,1¯J©JØ;?¿<¹<ÖH°�—‘ˆ}˜C ˜x tÒ,ÒHó-
ˆ×Ñ˜=Ò)ùÚHó   šAc           	      óš   — dj                  | j                  D �cg c]  }| j                  › d|› d�‘Œ c}«      | j                  d<   y c c}w )Nr:   r;   r<   Úobj_list)r>   r   r'   r   )r(   Úobjs     r*   r!   z"MesonTemplate.objects_substitutionS   sA   € Ø).¯©Ø59·\±\ÖB¨c�—‘ˆ}˜C ˜u DÒ)ÒBó*
ˆ×Ñ˜:Ò&ùÚBr@   c           	      ó´   — d| j                   › �j                  | j                  D �cg c]  }| j                   › d|› d�‘Œ c}«      | j                  d<   y c c}w )Nr:   zdependency('z'),Údep_list)r'   r>   r   r   )r(   Údeps     r*   r"   zMesonTemplate.deps_substitutionX   sN   € Ø+.¨t¯{©{¨mÐ)<×)AÑ)AØ=A¿Y¹YÖG°c�—‘ˆ}˜L¨¨¨SÒ1ÒGó*
ˆ×Ñ˜:Ò&ùÚGó   §Ac                 óê  — dj                  t        | j                  «      D ��cg c]  \  }}d|› d|› d�‘Œ c}}«      | j                  d<   dj                  | j                  D �cg c]  }|j                  dd«      › d|› d	�‘Œ c}«      | j                  d
<   d| j                  › �j                  | j                  D �cg c]#  }| j                  › |j                  dd«      › d�‘Œ% c}«      | j                  d<   d| j                  › �j                  t        t        | j                  «      «      D �cg c]  }| j                  › 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_declarationsú.Ú_z& = declare_dependency(link_args : ['-lz'])Úlib_declarationsú,Úlib_listÚlib_dir_list)	r>   Ú	enumerater   r   r   Úreplacer'   ÚrangeÚlen)r(   ÚiÚlib_dirÚlibs       r*   r$   z$MesonTemplate.libraries_substitution]   si  € Ø59·Y±Yô #,¨D×,=Ñ,=Ó">÷á�A�wð ˜1˜#ÐEÀgÀYÈeÒTóó6
ˆ×ÑÐ1Ñ2ð 26·±ð  Ÿ>™>öàð —;‘;˜s CÓ(Ð)Ð)OÐPSÈuÐTWÒXòó2
ˆ×ÑÐ-Ñ.ð ,.¨d¯k©k¨]Ð);×)@Ñ)@ØAEÇÁÖP¸#�—‘ˆ}˜SŸ[™[¨¨cÓ2Ð3°1Ò5ÒPó*
ˆ×Ñ˜:Ñ&ð 02°$·+±+°Ð-?×-DÑ-DÜ38¼¸T×=NÑ=NÓ9OÓ3PÖQ¨a�—‘ˆ}˜H Q C qÒ)ÒQó.
ˆ×Ñ˜>Ò*ùó!ùòùò Qùò Rs   ¤E 
Á%E&Â>(E+Ä2E0c           	      ó´   — d| j                   › �j                  | j                  D �cg c]  }| j                   › d|› d�‘Œ c}«      | j                  d<   y c c}w )Nr:   r;   r<   Úinc_list)r'   r>   r   r   )r(   Úincs     r*   r#   z"MesonTemplate.include_substitutions   sP   € Ø+.¨t¯{©{¨mÐ)<×)AÑ)AØ59×5FÑ5FÖG¨c�—‘ˆ}˜C ˜u DÒ)ÒGó*
ˆ×Ñ˜:Ò&ùÚGrG   c                 ó¾   — | j                   rB| j                  › ddj                  t        | j                   «      «      › d�| j                  d<   y d| j                  d<   y )Nzfortran_args: [z, z],r   Ú )r   r'   r>   Úlistr   r3   s    r*   r%   z'MesonTemplate.fortran_args_substitutionx   sW   € Ø×Òà—;‘;�-˜¨t¯y©y¼¸d×>OÑ>OÓ9PÓ/QÐ.RÐRTÐUð ×Ñ˜~Ò.ð 24ˆD×Ñ˜~Ò.r5   c                 óÂ   — | j                   D ]	  } |«        Œ t        | j                  «       «      }|j                  | j                  «      }|j                  dd«      }|S )Nz,,rO   )r&   r   r4   Ú
substituter   rS   )r(   ÚnodeÚtemplateÚmeson_builds       r*   Úgenerate_meson_buildz"MesonTemplate.generate_meson_build€   s[   € Ø—M‘Mò 	ˆDÙ�Fð	ä˜D×5Ñ5Ó7Ó8ˆØ×)Ñ)¨$×*<Ñ*<Ó=ˆØ!×)Ñ)¨$°Ó4ˆØÐr5   ©r,   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr^   r   r+   r4   r   r    r!   r"   r$   r#   r%   rd   © r5   r*   r	   r	      sË   „ Ù5ð,àð,ð �d‘ð,ð �3‰ið	,ð
 ˜‘9ð,ð ˜4‘jð,ð ˜4‘jð,ð ˜4‘jð,ð ˜#‘Yð,ð ˜3‘ið,ð ð,ð ó,ð\4 có 4ó7ó

ó

ó

ó

ó,
ó
4ór5   r	   c                   óT   ‡ — e Zd Zˆ fd„Zdefd„Zdeddfd„Zd„ Zdefd„Zd
d	„Z	ˆ xZ
S )ÚMesonBackendc                 óò   •— t        ‰| �  |i |¤Ž | j                  j                  dg «      | _        d| _        t        d„ | j                  D «       «      rdnd| _        t        | j                  «      | _        y )NÚdependenciesÚbbdirc              3   ó$   K  — | ]  }d |v –— Œ
 y­w)ÚdebugNrk   )Ú.0Úflags     r*   ú	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>�   s   è ø€ ÒE¨t˜7 dœ?ÑEùs   ‚rr   Úrelease)
Úsuperr+   Ú	extra_datÚgetro   Úmeson_build_dirÚanyÚfc_flagsr   Ú
_get_flags)r(   ÚargsÚkwargsÚ	__class__s      €r*   r+   zMesonBackend.__init__Š   se   ø€ Ü‰Ñ˜$Ð) &Ò)Ø ŸN™N×.Ñ.¨~¸rÓBˆÔØ&ˆÔäÑE°t·}±}ÔEÔE‰GÈ9ð 	Œô # 4§=¡=Ó1ˆ�r5   Ú	build_dirc                 óÜ  — t        |«      | j                  z  }t        |j                  | j                  › d�«      |j                  | j                  › d�«      |j                  | j                  › d�«      «      }|D ]n  }t        j
                  «       |j                  z  }|j                  «       r|j                  «        t        j                  ||«       t        j                  |«       Œp y )Nz*.soz*.pydz*.dll)r   rz   r   Úglobr
   ÚcwdÚnameÚexistsÚunlinkÚshutilÚcopy2ÚosÚremove)r(   r�   Úwalk_dirÚpath_objectsÚpath_objectÚ	dest_paths         r*   Ú_move_exec_to_rootzMesonBackend._move_exec_to_root“   sÁ   € Ü˜	“? T×%9Ñ%9Ñ9ˆÜØ�M‰M˜TŸ_™_Ð-¨TÐ2Ó3Ø�M‰M˜TŸ_™_Ð-¨UÐ3Ó4Ø�M‰M˜TŸ_™_Ð-¨UÐ3Ó4ó
ˆð (ò 	#ˆKÜŸ™›
 [×%5Ñ%5Ñ5ˆIØ×ÑÔ!Ø× Ñ Ô"Ü�L‰L˜ iÔ0Ü�I‰I�kÕ"ñ	#r5   r,   Nc                 óª  — 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   ro   r   r   r   Úextra_objectsÚ
flib_flagsr|   r   ÚsysÚ
executablerd   r   ÚmkdirÚ
write_text)r(   r�   Úmeson_templateÚsrcÚmeson_build_files        r*   Úwrite_meson_buildzMesonBackend.write_meson_build£   s«   € ä&Ø�O‰OØ�L‰LØ×ÑØ�N‰NØ×ÑØ×ÑØ×ÑØ�O‰OØ�M‰MØ�O‰OÜ�N‰Nó
ˆð ×1Ñ1Ó3ˆÜˆY‹×Ñ d°TÐÔ:Ü 	›?¨]Ñ:ÐØ×#Ñ# CÔ(ØÐr5   c                 ó4   — t        j                  ||d¬«       y )NT)r„   Úcheck)Ú
subprocessÚrun)r(   Úcommandr„   s      r*   Ú_run_subprocess_commandz$MesonBackend._run_subprocess_command¸   s   € Ü�‰�w C¨tÖ4r5   c                 óŠ   — dd| j                   g}| j                  ||«       ddd| j                   g}| j                  ||«       y )NÚmesonÚsetupÚcompilez-C)rz   r¤   )r(   r�   Úsetup_commandÚcompile_commands       r*   Ú	run_mesonzMesonBackend.run_meson»   sH   € Ø  '¨4×+?Ñ+?Ð@ˆØ×$Ñ$ ]°IÔ>Ø" I¨t°T×5IÑ5IÐJˆØ×$Ñ$ _°iÕ@r5   c                 ó\  — t        | j                  | j                  | j                  «      | _        t	        | j                  | j
                  | j                  «       | j                  | j                  «       | j                  | j                  «       | j                  | j                  «       y )N)	Ú_prepare_sourcesr
   r   r�   Ú_prepare_objectsr•   rž   r«   r�   r3   s    r*   r¨   zMesonBackend.compileÁ   sl   € Ü'¨¯©¸¿¹ÀtÇ~Á~ÓVˆŒÜ˜Ÿ™¨$×*<Ñ*<¸d¿n¹nÔMØ×Ñ˜tŸ~™~Ô.Ø�‰�t—~‘~Ô&Ø×Ñ §¡Õ/r5   re   )rf   rg   rh   r+   r   r�   rž   r¤   r«   r¨   Ú__classcell__)r€   s   @r*   rm   rm   ‰   s?   ø„ ô2ð#¨Dó #ð  ¨4ð  °Dó  ò*5ðA 4ó A÷0r5   rm   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™   r†   r.   rˆ   r…   Úappendr‡   Úsuffix)Úmnamer   ÚbdirÚextended_sourcesr?   Úgenerated_sourcesÚgenerated_sources          r*   r­   r­   É   sE  € Ø—|‘|“~ÐÜˆƒJ×Ñ˜T¨DÐÔ1àò &ˆÜ�‹<×ÑÕ ¤T¨&£\×%9Ñ%9Õ%;Ü�K‰K˜ Õ%ð&ô 	�ˆw�hÐÓ Ü�ˆwÐ(Ð)Ó*Ü�ˆw�oÐ&Ó'ðÐô
 �‹:€DØ-ò &ÐØ×"Ñ"Õ$Ü�K‰KÐ(¨$Ð1A×1FÑ1FÑ*FÔGØ×#Ñ#Ð$4×$9Ñ$9Ô:Ø×#Ñ#Õ%ð	&ð 'öàÜ�F‹|×"Ñ" fÒ,ô 	ˆV‹×ÓðÐð ð
 Ðùòs   Ä4Ec                 óÞ   — t        |«      j                  dd¬«       |D ]L  }t        |«      j                  «       sŒt        |«      j                  «       sŒ7t	        j
                  ||«       ŒN y )NTr’   )r   r™   r†   r.   rˆ   r±   )r´   r   rµ   rC   s       r*   r®   r®   â   sU   € ÜˆƒJ×Ñ˜T¨DÐÔ1àò #ˆÜ�‹9×ÑÕ¤$ s£)×"3Ñ"3Õ"5Ü�K‰K˜˜TÕ"ñ#r5   c                 óh  — g }t        j                  d«      }| D ]r  }|j                  |«      }|sŒ|j                  d«      j	                  «       j                  «       }|D �cg c]  }|j	                  d«      ‘Œ }}|j                  |«       Œt t        t        j                  |«      «      }|S c c}w )Nz--f(77|90)flags=(.*)é   z'")
Úrer¨   ÚmatchÚgroupÚstripÚsplitÚextendr^   ÚdictÚfromkeys)r|   Úflag_valuesÚflag_patternrt   Úmatch_resultÚvaluesÚvalÚunique_flagss           r*   r}   r}   é   s¤   € Ø€KÜ—:‘:Ð5Ó6€LØò 'ˆØ#×)Ñ)¨$Ó/ˆÚØ!×'Ñ'¨Ó*×0Ñ0Ó2×8Ñ8Ó:ˆFØ28Ö9¨3�c—i‘i Õ&Ð9ˆFÐ9Ø×Ñ˜vÕ&ð'ô œŸ™ kÓ2Ó3€LØÐùò	 :s   Á"B/)r0   rŠ   r¼   rˆ   r¡   r—   Ú	itertoolsr   Úpathlibr   Ústringr   Ú_backendr   r	   rm   r­   r®   r}   rk   r5   r*   ú<module>rÎ      sL   ðÛ Û 	Û 	Û Û Û 
Ý Ý Ý å ÷xñ xôv=0�7ô =0ò@ò2#ór5   