§
    ÈÁ³g™  ã                  ó´   — 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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S )é    )ÚannotationsN)ÚPathé   )ÚBackend)ÚTemplate)Úchainc                  óX   — 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d„Zd„ ZdS )ÚMesonTemplatez+Template meson build file generation class.Ú
modulenameÚstrÚsourcesú
list[Path]Údepsú	list[str]Ú	librariesÚlibrary_dirsÚinclude_dirsÚobject_filesÚlinker_argsÚfortran_argsÚ
build_typeÚ
python_exec                ó’  — || _         t          t          ¦  «        j                             ¦   «         dz  | _        || _        || _        || _        || _	        |�|| _
        ng | _
        i | _        || _        d„ |	D ¦   «         | _        | j        | j        | j        | j        | j        | j        g| _        |
| _        || _        d| _        d S )Nzmeson.build.templatec                ór   — g | ]4}|                      d ¦  «        r|                     d ¦  «        sd |› d �n|‘Œ5S )ú')Ú
startswithÚendswith)Ú.0Úxs     úY/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/numpy/f2py/_backends/_meson.pyú
<listcomp>z*MesonTemplate.__init__.<locals>.<listcomp>1   sT   € ð 
ð 
ð 
àð Ÿ\š\¨#Ñ.Ô.ÐJ°1·:²:¸c±?´?ÐJˆH�ˆHˆHˆHˆHÈð
ð 
ð 
ó    z                     )r   r   Ú__file__ÚparentÚabsoluteÚbuild_template_pathr   r   r   r   r   ÚsubstitutionsÚobjectsr   Ú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   s               r    Ú__init__zMesonTemplate.__init__   sã   € ð %ˆŒå•‰NŒNÔ!×*Ò*Ñ,Ô,Ð/EÑEð 	Ô ð ˆŒØˆŒ	Ø"ˆŒØ(ˆÔØÐ#Ø ,ˆDÔÐà "ˆDÔØˆÔØ#ˆŒð
ð 
à!ð
ñ 
ô 
ˆÔð
 Ô$ØÔ%ØÔ"ØÔ%ØÔ'ØÔ*ð
ˆŒð %ˆŒØ$ˆŒØˆŒˆˆr"   Úreturnc                óÐ   — | j                              ¦   «         s5t          t          j        d| j                              ¦   «         › d�¦  «        ‚| j                              ¦   «         S )NzMeson build template z does not exist.)r&   Úis_fileÚFileNotFoundErrorÚerrnoÚENOENTr%   Ú	read_text©r1   s    r    Úmeson_build_templatez"MesonTemplate.meson_build_templateA   sm   € ØÔ'×/Ò/Ñ1Ô1ð 	Ý#Ý”ð#ØÔ,×5Ò5Ñ7Ô7ð#ð #ð #ñô ð ð Ô'×1Ò1Ñ3Ô3Ð3r"   ÚNonec                ó`   — | j         | j        d<   | j        | j        d<   | j        | j        d<   d S )Nr   Ú	buildtypeÚpython)r   r'   r   r   r:   s    r    r)   z!MesonTemplate.initialize_templateK   s5   € Ø+/¬?ˆÔ˜<Ñ(Ø*.¬/ˆÔ˜;Ñ'Ø'+¤ˆÔ˜8Ñ$Ð$Ð$r"   c                ód   ‡ — d                      ˆ fd„‰ j        D ¦   «         ¦  «        ‰ j        d<   d S )Nú,
c                ó*   •— g | ]}‰j         › d |› d�‘ŒS ©z'''z''',©r0   )r   Úsourcer1   s     €r    r!   z6MesonTemplate.sources_substitution.<locals>.<listcomp>R   s,   ø€ ÐHÐHÐH°�”Ð,Ð, Ð,Ð,Ð,ÐHÐHÐHr"   Úsource_list)Újoinr   r'   r:   s   `r    r*   z"MesonTemplate.sources_substitutionP   s=   ø€ Ø,1¯JªJØHÐHÐHÐH¸4¼<ÐHÑHÔHñ-
ô -
ˆÔ˜=Ñ)Ð)Ð)r"   c                ót   ‡ — d‰ j         › �                     ˆ fd„‰ j        D ¦   «         ¦  «        ‰ j        d<   d S )NrA   c                ó*   •— g | ]}‰j         › d |› d�‘ŒS )zdependency('z'),rD   )r   Údepr1   s     €r    r!   z3MesonTemplate.deps_substitution.<locals>.<listcomp>W   s,   ø€ ÐGÐGÐG°c�”Ð1Ð1¨Ð1Ð1Ð1ÐGÐGÐGr"   Údep_list)r0   rG   r   r'   r:   s   `r    r+   zMesonTemplate.deps_substitutionU   sI   ø€ Ø)<¨t¬{Ð)<Ð)<×)AÒ)AØGÐGÐGÐG¸T¼YÐGÑGÔGñ*
ô *
ˆÔ˜:Ñ&Ð&Ð&r"   c                óÞ  ‡ — d                      d„ t          ‰ j        ¦  «        D ¦   «         ¦  «        ‰ j        d<   d                      d„ ‰ j        D ¦   «         ¦  «        ‰ j        d<   d‰ j        › �                      ˆ fd„‰ j        D ¦   «         ¦  «        ‰ j        d<   d‰ j        › �                      ˆ fd„t          t          ‰ j        ¦  «        ¦  «        D ¦   «         ¦  «        ‰ j        d	<   d S )
Nú
c                ó&   — g | ]\  }}d |› d|› d�‘ŒS )Úlib_dir_z( = declare_dependency(link_args : ['''-Lz'''])© )r   ÚiÚlib_dirs      r    r!   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>\   s@   € ð ð ð á�A�wð U˜1ÐTÐTÀgÐTÐTÐTðð ð r"   Úlib_dir_declarationsc                óF   — g | ]}|                      d d¦  «        › d|› d�‘ŒS )ú.Ú_z& = declare_dependency(link_args : ['-lz']))Úreplace)r   Úlibs     r    r!   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>c   sG   € ð ð ð àð —;’;˜s 3Ñ'Ô'ÐWÐWÈsÐWÐWÐWðð ð r"   Úlib_declarationsc                óP   •— g | ]"}‰j         › |                     d d¦  «        › d�‘Œ#S )rU   rV   ú,)r0   rW   )r   rX   r1   s     €r    r!   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>j   s7   ø€ ÐOÐOÐO¸�”Ð4˜SŸ[š[¨¨SÑ1Ô1Ð4Ð4Ð4ÐOÐOÐOr"   Úlib_listc                ó*   •— g | ]}‰j         › d |› d�‘ŒS )rO   r[   rD   )r   rQ   r1   s     €r    r!   z8MesonTemplate.libraries_substitution.<locals>.<listcomp>m   s,   ø€ ÐQÐQÐQ¨a�”Ð)Ð) QÐ)Ð)Ð)ÐQÐQÐQr"   Úlib_dir_list)rG   Ú	enumerater   r'   r   r0   ÚrangeÚlenr:   s   `r    r-   z$MesonTemplate.libraries_substitutionZ   s  ø€ Ø59·Y²Yðð å"+¨DÔ,=Ñ">Ô">ðñ ô ñ6
ô 6
ˆÔÐ1Ñ2ð 26·²ðð àœ>ðñ ô ñ2
ô 2
ˆÔÐ-Ñ.ð *<¨d¬kÐ);Ð);×)@Ò)@ØOÐOÐOÐOÀÄÐOÑOÔOñ*
ô *
ˆÔ˜:Ñ&ð .@°$´+Ð-?Ð-?×-DÒ-DØQÐQÐQÐQµ5½¸TÔ=NÑ9OÔ9OÑ3PÔ3PÐQÑQÔQñ.
ô .
ˆÔ˜>Ñ*Ð*Ð*r"   c                ót   ‡ — d‰ j         › �                     ˆ fd„‰ j        D ¦   «         ¦  «        ‰ j        d<   d S )NrA   c                ó*   •— g | ]}‰j         › d |› d�‘ŒS rC   rD   )r   Úincr1   s     €r    r!   z6MesonTemplate.include_substitution.<locals>.<listcomp>r   s,   ø€ ÐGÐGÐG¨c�”Ð)Ð) Ð)Ð)Ð)ÐGÐGÐGr"   Úinc_list)r0   rG   r   r'   r:   s   `r    r,   z"MesonTemplate.include_substitutionp   sJ   ø€ Ø)<¨t¬{Ð)<Ð)<×)AÒ)AØGÐGÐGÐG°TÔ5FÐGÑGÔGñ*
ô *
ˆÔ˜:Ñ&Ð&Ð&r"   c                ó    — | j         r<| j        › dd                     t          | j         ¦  «        ¦  «        › d�| j        d<   d S d| j        d<   d S )Nzfortran_args: [z, z],r   Ú )r   r0   rG   Úlistr'   r:   s    r    r.   z'MesonTemplate.fortran_args_substitutionu   sb   € ØÔð 	4à”;ÐUÐU¨t¯yªy½¸dÔ>OÑ9PÔ9PÑ/QÔ/QÐUÐUÐUð Ô˜~Ñ.Ð.Ð.ð 24ˆDÔ˜~Ñ.Ð.Ð.r"   c                óÐ   — | j         D ]} |¦   «          Œt          |                      ¦   «         ¦  «        }|                     | j        ¦  «        }t          j        dd|¦  «        }|S )Nz,,r[   )r/   r   r;   Ú
substituter'   ÚreÚsub)r1   ÚnodeÚtemplateÚmeson_builds       r    Úgenerate_meson_buildz"MesonTemplate.generate_meson_build}   sh   € Ø”Mð 	ð 	ˆDØˆD‰FŒFˆFˆFÝ˜D×5Ò5Ñ7Ô7Ñ8Ô8ˆØ×)Ò)¨$Ô*<Ñ=Ô=ˆÝ”f˜U C¨Ñ5Ô5ˆØÐr"   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r3   r   ©r3   r<   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r2   r;   r)   r*   r+   r-   r,   r.   rp   rP   r"   r    r
   r
      sÊ   € € € € € Ø5Ð5ð+ð +ð +ð +ðZ4ð 4ð 4ð 4ð7ð 7ð 7ð 7ð

ð 
ð 
ð 
ð

ð 
ð 
ð 
ð

ð 
ð 
ð 
ð,
ð 
ð 
ð 
ð
4ð 4ð 4ð 4ðð ð ð ð r"   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          ¦   «         j        |i |¤Ž | j                             dg ¦  «        | _        d| _        t          d„ | j        D ¦   «         ¦  «        rdnd| _        t          | j        ¦  «        | _        d S )NÚdependenciesÚbbdirc              3  ó   K  — | ]}d |v V — Œ	dS )ÚdebugNrP   )r   Úflags     r    ú	<genexpr>z(MesonBackend.__init__.<locals>.<genexpr>Œ   s&   è è € ÐEÐE¨t˜7 d˜?ÐEÐEÐEÐEÐEÐEr"   r|   Úrelease)
Úsuperr2   Ú	extra_datÚgetry   Úmeson_build_dirÚanyÚfc_flagsr   Ú
_get_flags)r1   ÚargsÚkwargsÚ	__class__s      €r    r2   zMesonBackend.__init__‡   s„   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ø œN×.Ò.¨~¸rÑBÔBˆÔØ&ˆÔåÐEÐE°t´}ÐEÑEÔEÑEÔEÐTˆGˆGÈ9ð 	Œõ # 4¤=Ñ1Ô1ˆŒˆˆr"   Ú	build_dirr   c                ó¢  — t          |¦  «        | j        z  }t          |                     | j        › d�¦  «        |                     | j        › d�¦  «        ¦  «        }|D ]n}t          j        ¦   «         |j        z  }|                     ¦   «         r|                     ¦   «          t          j
        ||¦  «         t          j        |¦  «         Œod S )Nz*.soz*.pyd)r   rƒ   r   Úglobr   ÚcwdÚnameÚexistsÚunlinkÚshutilÚcopy2ÚosÚremove)r1   rŠ   Úwalk_dirÚpath_objectsÚpath_objectÚ	dest_paths         r    Ú_move_exec_to_rootzMesonBackend._move_exec_to_root�   sÑ   € Ý˜	‘?”? TÔ%9Ñ9ˆÝØ�MŠM˜Tœ_Ð2Ð2Ð2Ñ3Ô3Ø�MŠM˜Tœ_Ð3Ð3Ð3Ñ4Ô4ñ
ô 
ˆð (ð 	#ð 	#ˆKÝœ™
œ
 [Ô%5Ñ5ˆIØ×ÒÑ!Ô!ð #Ø× Ò Ñ"Ô"Ð"ÝŒL˜ iÑ0Ô0Ð0ÝŒI�kÑ"Ô"Ð"Ð"ð	#ð 	#r"   r3   r<   c                ón  — t          | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        t          j        ¦  «        }|                     ¦   «         }t          |¦  «                             dd¬¦  «         t          |¦  «        dz  }|                     |¦  «         |S )z1Writes the meson build file at specified locationT©ÚparentsÚexist_okzmeson.build)r
   r   r   ry   r   r   r   Úextra_objectsÚ
flib_flagsr…   r   ÚsysÚ
executablerp   r   ÚmkdirÚ
write_text)r1   rŠ   Úmeson_templateÚsrcÚmeson_build_files        r    Úwrite_meson_buildzMesonBackend.write_meson_buildŸ   s©   € å&ØŒOØŒLØÔØŒNØÔØÔØÔØŒOØŒMØŒOÝŒNñ
ô 
ˆð ×1Ò1Ñ3Ô3ˆÝˆY‰Œ×Ò d°TÐÑ:Ô:Ð:Ý 	™?œ?¨]Ñ:ÐØ×#Ò# CÑ(Ô(Ð(ØÐr"   c                ó4   — t          j        ||d¬¦  «         d S )NT)r�   Úcheck)Ú
subprocessÚrun)r1   Úcommandr�   s      r    Ú_run_subprocess_commandz$MesonBackend._run_subprocess_command´   s   € ÝŒ�w C¨tÐ4Ñ4Ô4Ð4Ð4Ð4r"   c                óˆ   — dd| j         g}|                      ||¦  «         ddd| j         g}|                      ||¦  «         d S )NÚmesonÚsetupÚcompilez-C)rƒ   r­   )r1   rŠ   Úsetup_commandÚcompile_commands       r    Ú	run_mesonzMesonBackend.run_meson·   sT   € Ø  '¨4Ô+?Ð@ˆØ×$Ò$ ]°IÑ>Ô>Ð>Ø" I¨t°TÔ5IÐJˆØ×$Ò$ _°iÑ@Ô@Ð@Ð@Ð@r"   c                óì   — t          | j        | j        | j        ¦  «        | _        |                      | j        ¦  «         |                      | j        ¦  «         |                      | j        ¦  «         d S )N)Ú_prepare_sourcesr   r   rŠ   r§   r´   r™   r:   s    r    r±   zMesonBackend.compile½   sa   € Ý'¨¬¸¼ÀtÄ~ÑVÔVˆŒØ×Ò˜tœ~Ñ.Ô.Ð.Ø�Š�t”~Ñ&Ô&Ð&Ø×Ò ¤Ñ/Ô/Ð/Ð/Ð/r"   )rŠ   r   )rŠ   r   r3   r<   rq   )
rr   rs   rt   r2   r™   r§   r­   r´   r±   Ú__classcell__)r‰   s   @r    rw   rw   †   s›   ø€ € € € € ð2ð 2ð 2ð 2ð 2ð#ð #ð #ð #ð ð  ð  ð  ð*5ð 5ð 5ðAð Að Að Að0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r"   rw   c                ó–  — |                      ¦   «         }t          |¦  «                             dd¬¦  «         |D ]Y}t          |¦  «                             ¦   «         r6t          |¦  «                             ¦   «         rt          j         ||¦  «         ŒZt          | › d�¦  «        t          | › d�¦  «        t          | › d�¦  «        g}t          |¦  «        }|D ]a}|                     ¦   «         rKt          j         |||j        z  ¦  «         |                     |j        ¦  «         |                     ¦   «          Œbd„ |D ¦   «         }|S )NTr›   zmodule.cz-f2pywrappers2.f90z-f2pywrappers.fc                óf   — g | ].}t          |¦  «        j        d k    °t          |¦  «        j        ‘Œ/S )z.pyf)r   ÚsuffixrŽ   )r   rE   s     r    r!   z$_prepare_sources.<locals>.<listcomp>Ö   s?   € ð ð ð àÝ�F‰|Œ|Ô" fÒ,Ð,õ 	ˆV‰ŒÔà,Ð,Ð,r"   )	Úcopyr   r¢   r�   r5   r‘   rŽ   Úappendr�   )Úmnamer   ÚbdirÚextended_sourcesrE   Úgenerated_sourcesÚgenerated_sources          r    r¶   r¶   Ä   sg  € Ø—|’|‘~”~ÐÝˆ�J„J×Ò˜T¨DÐÑ1Ô1Ð1àð &ð &ˆÝ�‰<Œ<×ÒÑ Ô ð 	&¥T¨&¡\¤\×%9Ò%9Ñ%;Ô%;ð 	&ÝŒK˜ Ñ%Ô%Ð%øå�ÐÐÐÑ Ô Ý�Ð)Ð)Ð)Ñ*Ô*Ý�Ð&Ð&Ð&Ñ'Ô'ðÐõ
 �‰:Œ:€DØ-ð &ð &ÐØ×"Ò"Ñ$Ô$ð 	&ÝŒKÐ(¨$Ð1AÔ1FÑ*FÑGÔGÐGØ×#Ò#Ð$4Ô$9Ñ:Ô:Ð:Ø×#Ò#Ñ%Ô%Ð%øðð à&ðñ ô Ðð
 Ðr"   c                ól  — g }t          j        d¦  «        }| D ]s}|                     |¦  «        }|rZ|                     d¦  «                             ¦   «                              ¦   «         }d„ |D ¦   «         }|                     |¦  «         Œtt          t           	                    |¦  «        ¦  «        }|S )Nz--f(77|90)flags=(.*)é   c                ó8   — g | ]}|                      d ¦  «        ‘ŒS )z'")Ústrip)r   Úvals     r    r!   z_get_flags.<locals>.<listcomp>å   s$   € Ð9Ð9Ð9¨3�c—i’i Ñ&Ô&Ð9Ð9Ð9r"   )
rk   r±   ÚmatchÚgrouprÅ   ÚsplitÚextendrh   ÚdictÚfromkeys)r…   Úflag_valuesÚflag_patternr}   Úmatch_resultÚvaluesÚunique_flagss          r    r†   r†   Þ   s³   € Ø€KÝ”:Ð5Ñ6Ô6€LØð 'ð 'ˆØ#×)Ò)¨$Ñ/Ô/ˆØð 	'Ø!×'Ò'¨Ñ*Ô*×0Ò0Ñ2Ô2×8Ò8Ñ:Ô:ˆFØ9Ð9°&Ð9Ñ9Ô9ˆFØ×Ò˜vÑ&Ô&Ð&øå�Ÿš kÑ2Ô2Ñ3Ô3€LØÐr"   )Ú
__future__r   r“   r7   r‘   rª   r    rk   Úpathlibr   Ú_backendr   Ústringr   Ú	itertoolsr   r
   rw   r¶   r†   rP   r"   r    ú<module>r×      s  ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðrð rð rð rð rñ rô rð rðj;0ð ;0ð ;0ð ;0ð ;0�7ñ ;0ô ;0ð ;0ð|ð ð ð4ð ð ð ð r"   