
    .Ph                    f    d Z ddlmZ ddlZddlZ ej        d          Z G d d          ZdgZdS )zOA Python specification is an abstract requirement definition of an interpreter.    )annotationsNzP^(?P<impl>[a-zA-Z]+)?(?P<version>[0-9.]+)?(?P<threaded>t)?(?:-(?P<arch>32|64))?$c                  d    e Zd ZdZddddZedd            ZddZed             Z	d Z
ddZdS ) 
PythonSpecz2Contains specification about a Python Interpreter.Nfree_threadedstr_specstrimplementation
str | Nonemajor
int | Noneminormicroarchitecturepathr   bool | NonereturnNonec               v    || _         || _        || _        || _        || _        || _        || _        || _        d S N)r   r
   r   r   r   r   r   r   )	selfr   r
   r   r   r   r   r   r   s	            \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/virtualenv/discovery/py_spec.py__init__zPythonSpec.__init__   sC     !,


*(			    string_specc           
     Z   d\  }}}}}}}t           j                            |          r|}nld}	t          j        t
          |          }
|
rId }	 |
                                }|d         }|t          d |                    d          D                       }t          |          dk    rt          t          |          dk    r|\  }}}nt          |          dk    r|\  }}ngt          |          d	k    rT|d
         }t          t          |          d
                   }|dk    r$t          t          |          d	d                    }t          |d                   }d}	|d         }|dv rd } ||d                   }n# t          $ r Y nw xY w|	s|} | ||||||||          S )N)NNNNNNNFc                (    | d nt          |           S r   int)vals    r   _int_or_nonez1PythonSpec.from_string_spec.<locals>._int_or_none-   s    #&;44CHH<r   versionc              3  8   K   | ]}|t          |          V  d S r   r   ).0is     r   	<genexpr>z.PythonSpec.from_string_spec.<locals>.<genexpr>4   s-      (Q(QAq(QQ(Q(Q(Q(Q(Q(Qr   .         r   	   threadedTimpl>   pypythonarchr   )osr   isabsrematchPATTERN	groupdicttuplesplitlen
ValueErrorr   r	   bool)clsr   r-   r   r   r   r,   r0   r   okr4   r!   groupsr"   versionsversion_datas                   r   from_string_speczPythonSpec.from_string_spec#   s   :b7eUE8T47==%% %	#DDBHWk22E 8= = =8"__..F$Y/G*#((Q(Qs9K9K(Q(Q(Q#Q#Qx==1,,",,x==A--2:/E5%% ]]a//+3LE55 ]]a//+3A;L$'L(9(9!(<$=$=E+a//(+C,=,=abb,A(B(B#'z(:#;#;B "&>D///#'<v77DD "   D  #"s;eUE4U]^^^^s   DF 
FFwindowsr;   
re.Patternc               0    dj         d | j        | j        | j        fD              }| j        dndt          j        | j                   }| j        rdnd}|rdnd}|s| j        d	nd}t          j        d
| d| | d| | d	t
          j	                  S )z>Generate a regular expression for matching against a filename.z{}(\.{}(\.{})?)?c              3  "   K   | ]
}|dn|V  d S )Nz\d+ )r$   vs     r   r&   z)PythonSpec.generate_re.<locals>.<genexpr>R   s*      WWQ	ffqWWWWWWr   Nr/   zpython|zt? z\.exe?z	(?P<impl>z)(?P<v>)$)flags)
formatr   r   r   r
   r3   escaper   compile
IGNORECASE)r   rB   r"   r-   modsuffixversion_conditionals          r   generate_rezPythonSpec.generate_reO   s    ,%,WW4:tz4:2VWWW
  .6xx<fbiPTPcFdFd<f<f(0ddb$,"  z!	 C
  	 zSSSgSsSS5HS&SSS-
 
 
 	
r   c                \    | j         d uo#t          j                             | j                   S r   )r   r1   r2   )r   s    r   is_abszPythonSpec.is_abse   s$    y$Aty)A)AAr   c                   |j         r| j         r| j        |j        k    rdS |j        6|j                                        | j                                        k    rdS |j        |j        | j        k    rdS |j        |j        | j        k    rdS t          | j        | j        | j	        f|j        |j        |j	        f          D ]\  }}||	||k    r dS dS )z]Called when there's a candidate metadata spec to see if compatible - e.g. PEP-514 on Windows.FNT)
rV   r   r
   lowerr   r   zipr   r   r   )r   specourreqs       r   	satisfieszPythonSpec.satisfiesi   s    ; 	4; 	49	+A+A5*t/B/H/H/J/JdNaNgNgNiNi/i/i5(T->$BS-S-S5)d.@DDV.V.V5TZTZ@4:tz[_[eBfgg 	 	HC3?sczzuutr   c                ~     t                     j        }d}| dd                     fd|D                        dS )N)r
   r   r   r   r   r   r   (z, c              3  b   K   | ])}t          |          | dt          |           V  *d S )N=)getattr)r$   kr   s     r   r&   z&PythonSpec.__repr__.<locals>.<genexpr>|   sM      "m"mPWX\^_P`P`Pla#<#<'$*:*:#<#<PlPlPlPl"m"mr   rJ   )type__name__join)r   nameparamss   `  r   __repr__zPythonSpec.__repr__y   sN    Dzz"epp"m"m"m"mf"m"m"mmmppppr   )r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r	   )rB   r;   r   rC   )r   r	   )re   
__module____qualname____doc__r   classmethodrA   rT   propertyrV   r]   ri   rF   r   r   r   r      s        << &*     * )_ )_ )_ [)_V
 
 
 
, B B XB   q q q q q qr   r   )	rl   
__future__r   r1   r3   rO   r5   r   __all__rF   r   r   <module>rq      s    U U " " " " " " 				 				
"*h
i
iqq qq qq qq qq qq qq qqj r   