ó
    Ñ]jA(  ã                  óL  • % S r SSKJ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JrJr  \R                  " S\R                  5      r\R                  " S	\R                  5      rS
rS\S'   SrS\S'   SrS\S'   \r\r\r\rSS jrSS jrSS jrSS jr " S S5      r/ SQr g)zOA Python specification is an abstract requirement definition of an interpreter.é    )ÚannotationsN)ÚFinalé   )Únormalize_isa)ÚSimpleSpecifierÚSimpleSpecifierSetÚSimpleVersionaR  
    ^
    (?P<impl>[a-zA-Z]+)?            # implementation (e.g. cpython, pypy)
    (?P<version>[0-9.]+)?           # version (e.g. 3.12, 3.12.1)
    (?P<threaded>t)?                # free-threaded flag
    (?:-(?P<arch>32|64))?           # architecture bitness
    (?:-(?P<machine>[a-zA-Z0-9_]+))?  # ISA (e.g. arm64, x86_64)
    $
    zž
    ^
    (?:(?P<impl>[A-Za-z]+)\s*)?     # optional implementation prefix
    (?P<spec>(?:===|==|~=|!=|<=|>=|<|>).+)  # PEP 440 version specifier
    $
    é   z
Final[int]Ú_MAX_VERSION_PARTSé	   Ú_SINGLE_DIGIT_MAX)ÚpythonÚcpythonÚpypyÚgraalpyzFinal[tuple[str, ...]]ÚKNOWN_IMPLEMENTATIONSc                ó"   • U c  S $ [        U 5      $ ©N©Úint)Úvals    ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/python_discovery/_py_spec.pyÚ_int_or_noner   .   s   € Ø‘;ˆ4Ð,¤C¨£HÐ,ó    c                ó€  • [        S U R                  S5       5       5      n[        U5      [        :”  a  Sn[	        U5      e[        U5      [        :X  a  US   US   US   4$ [        U5      S:X  a  US   US   S 4$ US   n[        [        U5      S   5      nU[        :”  a  [        [        U5      SS  5      OS nXES 4$ )Nc              3  óH   #   • U  H  o(       d  M  [        U5      v •  M     g 7fr   r   ©Ú.0Úis     r   Ú	<genexpr>Ú'_parse_version_parts.<locals>.<genexpr>3   s   é € Ð=Ò%7 »1“V”S˜—V�VÒ%7ùs   ‚
"�"Ú.ztoo many version partsr   r   é   )ÚtupleÚsplitÚlenr   Ú
ValueErrorr   Ústrr   )ÚversionÚversionsÚmsgÚversion_dataÚmajorÚminors         r   Ú_parse_version_partsr/   2   sÇ   € ÜÑ= W§]¡]°3Ô%7Ó=Ó=€HÜ
ˆ8ƒ}Ô)Ó)Ø&ˆÜ˜‹oÐÜ
ˆ8ƒ}Ô*Ó*Ø˜‰{˜H Q™K¨°!©Ð4Ð4Ü
ˆ8ƒ}˜ÓØ˜‰{˜H Q™K¨Ð-Ð-Ø˜A‘;€LÜ”�LÓ! !Ñ$Ó%€EØ*6Ô9JÓ*JŒC”�LÓ! ! "Ð%Ô&ÐPT€EØ˜ÐÐr   c                ój  • [         R                  " [        U 5      =n(       d  g UR                  5       nUS   nSu  pEpgUb   [	        U5      u  pEn[        US   5      nUS   nUS;   a  S n[        US   5      n	UR                  S5      n
U
b  [        U
5      n
[        XXEXiS XzS9	$ ! [
         a     g f = f)	Nr)   )NNNNÚthreadedÚimpl>   Úpyr   ÚarchÚmachine)Úfree_threadedr5   )ÚreÚmatchÚPATTERNÚ	groupdictr/   r'   Úboolr   Úgetr   Ú
PythonSpec)Ústring_specr8   Úgroupsr)   r-   r.   Úmicror1   r2   r4   r5   s              r   Ú_parse_spec_patternrA   A   sÑ   € Ü—X’Xœg {Ó3Ð3ˆEÕ3ØØ�_‰_Ó€FØ�YÑ€GØ$:Ñ!€E�%ØÑð	Ü"6°wÓ"?ÑˆE˜%ô ˜˜zÑ*Ó+ˆØ�&‰>€DØÐÓØˆÜ˜˜v™Ó'€DØ�j‰j˜Ó#€GØÑÜ Ó(ˆÜ�k¨°uÀDÐX`ÑrÐrøô ó 	Ùð	ús   ÁB% Â%
B2Â1B2c                óB  • [         R                  U R                  5       5      =n(       d  g [        c  g UR	                  S5      nUR	                  S5      R                  5       n [        R                  U5      nUS;   a  S n[        XS S S S S US9$ ! [         a     g f = f)Nr2   Úspec>   r3   r   )Úversion_specifier)ÚSPECIFIER_PATTERNr8   ÚstripÚSpecifierSetÚgroupÚfrom_stringÚInvalidSpecifierr=   )r>   Úspecifier_matchr2   Ú	spec_textrD   s        r   Ú_parse_specifierrM   W   s¨   € Ü0×6Ñ6°{×7HÑ7HÓ7JÓKÐKˆOÕKØÜÑØØ× Ñ  Ó(€DØ×%Ñ% fÓ-×3Ñ3Ó5€IðÜ(×4Ñ4°YÓ?Ðð ÐÓØˆÜ�k¨¨t°T¸4ÀÐYjÑkÐkøô	 ó Ùðús   Á%B Â
BÂBc                  óÄ   • \ rS rSrSrSSSS.                     SS jjr\SS j5       rSS.SS	 jjr\	SS
 j5       r
SS jr\SS j5       rSS jrSS jrSrg)r=   ég   a  
Contains specification about a Python Interpreter.

:param str_spec: the raw specification string as provided by the caller.
:param implementation: interpreter implementation name (e.g. ``"cpython"``, ``"pypy"``), or ``None`` for any.
:param major: required major version, or ``None`` for any.
:param minor: required minor version, or ``None`` for any.
:param micro: required micro (patch) version, or ``None`` for any.
:param architecture: required pointer-size bitness (``32`` or ``64``), or ``None`` for any.
:param path: filesystem path to a specific interpreter, or ``None``.
:param free_threaded: whether a free-threaded build is required, or ``None`` for any.
:param machine: required ISA (e.g. ``"arm64"``), or ``None`` for any.
:param version_specifier:
    `version specifier <https://packaging.python.org/en/latest/specifications/version-specifiers/>`_
    constraints, or ``None``.
N)r6   r5   rD   c               ó|   • Xl         X l        X0l        X@l        XPl        X€l        X`l        X�l        Xpl        X l	        g r   )
Ústr_specÚimplementationr-   r.   r@   r6   Úarchitecturer5   ÚpathrD   )ÚselfrQ   rR   r-   r.   r@   rS   rT   r6   r5   rD   s              r   Ú__init__ÚPythonSpec.__init__y   s:   € ð !ŒØ,ÔØŒ
ØŒ
ØŒ
Ø*ÔØ(ÔØŒØŒ	Ø!2Õr   c           	     óÜ   • [         R                  " U5      R                  5       (       a  U " USSSSSU5      $ [        U5      =n(       a  U$ [	        U5      =n(       a  U$ U " USSSSSU5      $ )u  
Parse a string specification into a :class:`PythonSpec`.

:param string_spec: an interpreter spec â€” an absolute path, a version string, an implementation prefix,
    or a `version specifier <https://packaging.python.org/en/latest/specifications/version-specifiers/>`_.
N)ÚpathlibÚPathÚis_absoluterA   rM   )Úclsr>   Úresults      r   Úfrom_string_specÚPythonSpec.from_string_spec’   st   € ô �<Š<˜Ó$×0Ñ0×2Ñ2Ù�{ D¨$°°d¸DÀ+ÓNÐNÜ(¨Ó5Ð5ˆ6Õ5ØˆMÜ% kÓ2Ð2ˆ6Õ2ØˆMÙ�;  d¨D°$¸¸kÓJÐJr   F)Úall_implementationsc               óð  • SR                   " S U R                  U R                  U R                  4 5       6 nU R                  b$  S[
        R                  " U R                  5       3nO&U(       a  SR                  S [         5       5      nOSnU R                  (       a  SOSnU(       a  S	OSnU(       d  U R                  c  S
OSn[
        R                  " SU SU U SU U S3	[
        R                  S9$ )aJ  
Generate a regular expression for matching interpreter filenames.

:param windows: if ``True``, require a ``.exe`` suffix.
:param all_implementations: when ``True`` and the spec does not constrain the implementation, match every
    filename in :data:`KNOWN_IMPLEMENTATIONS` instead of only ``python``. Used by enumeration APIs.
z{}(\.{}(\.{})?)?c              3  ó.   #   • U  H  oc  SOUv •  M     g 7f)Nz\d+© )r   Úvs     r   r    Ú)PythonSpec.generate_re.<locals>.<genexpr>«   s   é € ÐWÒ2V¨Q™	‰f qÔ(Ò2Vùs   ‚zpython|Ú|c              3  óN   #   • U  H  n[         R                  " U5      v •  M     g 7fr   )r7   Úescaper   s     r   r    re   °   s   é € ÐHÒ2G¨QœBŸIšI aŸL˜LÒ2Gùs   ‚#%r   zt?Ú z\.exeÚ?z	(?P<impl>z)(?P<v>Ú)Ú$)Úflags)Úformatr-   r.   r@   rR   r7   rh   Újoinr   r6   ÚcompileÚ
IGNORECASE)rU   Úwindowsr`   r)   r2   ÚmodÚsuffixÚversion_conditionals           r   Úgenerate_reÚPythonSpec.generate_re¢   sÜ   € ð &×,Ò,ÙW°4·:±:¸t¿z¹zÈ4Ï:É:Ñ2VÓWð
ˆð ×ÑÑ*ØœRŸYšY t×':Ñ':Ó;Ð<Ð=‰DÞ Ø—8‘8ÑHÕ2GÓHÓH‰DàˆDØ×(×(‰d¨bˆÞ$‘¨"ˆÞ%,°·
±
Ñ0B™cÈÐÜ�zŠzØ˜˜˜g g Y¨s¨e°1Ð5HÐ4IÈ&ÈÐQRÐSÜ—-‘-ñ
ð 	
r   c                óˆ   • U R                   SL=(       a.    [        R                  " U R                   5      R                  5       $ )z;``True`` if the spec refers to an absolute filesystem path.N)rT   rY   rZ   r[   )rU   s    r   Úis_absÚPythonSpec.is_abs»   s.   € ð �y‰y Ð$×N¬¯ª°d·i±iÓ)@×)LÑ)LÓ)NÐNr   c                ó&  • / nU R                   U R                  U R                  4 H  nUc    OUR                  U5        M     U(       d  gSR	                  S U 5       5      nUR
                  c  g[        R                  " [        5         [        R                  U5        UR
                   HH  nU R                  U5      nUb  [        U5      U:  a  M(  UR                  U5      (       a  M@    SSS5        g   SSS5        g! , (       d  f       g= f)z(Check if version specifier is satisfied.NTr"   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr   )r(   )r   Úparts     r   r    Ú6PythonSpec._check_version_specifier.<locals>.<genexpr>Ê   s   é € Ð@²Z¨Tœs 4Ÿy˜y²Zùs   ‚F)r-   r.   r@   Úappendro   rD   Ú
contextlibÚsuppressÚInvalidVersionÚVersionrI   Ú_get_required_precisionr&   Úcontains)rU   rC   Ú
componentsr}   Úversion_strÚitemÚrequired_precisions          r   Ú_check_version_specifierÚ#PythonSpec._check_version_specifierÀ   sç   € à "ˆ
Ø—Z‘Z §¡¨T¯Z©ZÓ8ˆDØ‰|ÙØ×Ñ˜dÖ#ñ 9ö Øà—h‘hÑ@±ZÓ@Ó@ˆØ×!Ñ!Ñ)ØÜ× Ò ¤Õ0Ü×Ñ Ô,Ø×.Ô.�Ø%)×%AÑ%AÀ$Ó%GÐ"Ø%Ñ-´°Z³ÐCUÓ1UÙØ—}‘} [×1Ó1Ø ÷ 1Ð0á.÷ 1ð ÷ 1Ô0ð ús   ÂADÃ-DÃ7DÄ
Dc                óÐ   • U R                   c  g[        R                  " [        [        5         [        U R                   R                  5      sSSS5        $ ! , (       d  f       g= f)z0Get the required precision for a specifier item.N)r)   r€   r�   ÚAttributeErrorr'   r&   Úrelease)rˆ   s    r   r„   Ú"PythonSpec._get_required_precision×   sB   € ð �<‰<ÑØÜ× Ò ¤´Õ<Ü�t—|‘|×+Ñ+Ó,÷ =×<Ö<àús   ®AÁ
A%c           	     ó,  • UR                   (       a,  U R                   (       a  U R                  UR                  :w  a  gUR                  bD  U R                  b7  UR                  R                  5       U R                  R                  5       :w  a  gUR                  b  UR                  U R                  :w  a  gUR
                  b(  U R
                  b  UR
                  U R
                  :w  a  gUR                  b  UR                  U R                  :w  a  gUR                  b  U R                  U5      (       d  g[        S [        U R                  U R                  U R                  4UR                  UR                  UR                  45       5       5      $ )zƒ
Check if this spec is compatible with the given *spec* (e.g. PEP-514 on Windows).

:param spec: the requirement to check against.
Fc              3  óZ   #   • U  H!  u  pUS L =(       d    US L =(       d    X:H  v •  M#     g 7fr   rc   )r   ÚourÚreqs      r   r    Ú'PythonSpec.satisfies.<locals>.<genexpr>ö   s0   é € ð 
âk‘�ð �4ˆK×4˜3 $˜;×4¨#©*Ô4Úkùs   ‚)+)ry   rT   rR   ÚlowerrS   r5   r6   rD   rŠ   ÚallÚzipr-   r.   r@   )rU   rC   s     r   Ú	satisfiesÚPythonSpec.satisfiesà   s=  € ð �;�;˜4Ÿ;Ÿ;¨4¯9©9¸¿	¹	Ó+AØà×ÑÑ+Ø×#Ñ#Ñ/Ø×#Ñ#×)Ñ)Ó+¨t×/BÑ/B×/HÑ/HÓ/JÓJàØ×ÑÑ(¨T×->Ñ->À$×BSÑBSÓ-SØØ�<‰<Ñ#¨¯©Ñ(@ÀTÇ\Á\ÐUY×UaÑUaÓEaØØ×ÑÑ)¨d×.@Ñ.@ÀD×DVÑDVÓ.VØØ×!Ñ!Ñ-°d×6SÑ6SÐTX×6YÑ6YØÜñ 
ä §¡¨T¯Z©Z¸¿¹Ð DÀtÇzÁzÐSW×S]ÑS]Ð_c×_iÑ_iÐFjÔkó
ó 
ð 	
r   c                ót   ^ • [        T 5      R                  nSnU SSR                  U 4S jU 5       5       S3$ )N)	rR   r-   r.   r@   rS   r5   rT   r6   rD   Ú(z, c              3  ód   >#   • U  H%  n[        TU5      c  M  U S[        TU5       3v •  M'     g 7f)NÚ=)Úgetattr)r   ÚkrU   s     €r   r    Ú&PythonSpec.__repr__.<locals>.<genexpr>  s3   øé € Ð"mÂfÀÔPWÐX\Ð^_ÓP`Ó#< a S¨¬'°$¸Ó*:Ð);Õ#<Âfùs   ƒ0˜0rk   )ÚtypeÚ__name__ro   )rU   ÚnameÚparamss   `  r   Ú__repr__ÚPythonSpec.__repr__û   s?   ø€ Ü�D‹z×"Ñ"ˆð

ˆð ��q˜Ÿ™Ô"mÁfÓ"mÓmÐnÐnoÐpÐpr   )
rS   r6   rR   r5   r-   r@   r.   rT   rQ   rD   )rQ   r(   rR   ú
str | Noner-   ú
int | Noner.   r¨   r@   r¨   rS   r¨   rT   r§   r6   zbool | Noner5   r§   rD   zSpecifierSet | NoneÚreturnÚNone)r>   r(   r©   r=   )rr   r;   r`   r;   r©   z
re.Pattern)r©   r;   )rC   r=   r©   r;   )rˆ   r   r©   r¨   )r©   r(   )r¢   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rV   Úclassmethodr^   rv   Úpropertyry   rŠ   Ústaticmethodr„   r˜   r¥   Ú__static_attributes__rc   r   r   r=   r=   g   sß   † ñð6 &*Ø"Ø15ñ3àð3ð #ð3ð ð	3ð
 ð3ð ð3ð !ð3ð ð3ð #ð3ð ð3ð /ð3ð 
õ3ð2 óKó ðKð IN÷ 
ð2 óOó ðOôð. óó ðô
÷6qr   r=   )r   rJ   r‚   r=   rG   rƒ   )r   r§   r©   r¨   )r)   r(   r©   z)tuple[int | None, int | None, int | None])r>   r(   r©   zPythonSpec | None)!r®   Ú
__future__r   r€   rY   r7   Útypingr   Ú_py_infor   Ú
_specifierr   r   r	   rp   ÚVERBOSEr9   rE   r   Ú__annotations__r   r   rG   rƒ   r'   rJ   r‚   r   r/   rA   rM   r=   Ú__all__rc   r   r   Ú<module>rº      sÀ   ðÚ Uå "ã Û Û 	Ý å #ß JÑ Jà
�*Š*ðð ‡J�Jó€ð —J’Jðð ‡J�JóÐ ð "#Ð �JÓ "Ø !Ð �:Ó !à0XÐ Ð-Ó Xà!€Ø
€ØÐ Ø€ô-ôôsô,l÷ aqñ aqòH�r   