
    yIf                    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.    )annotationsNz@^(?P<impl>[a-zA-Z]+)?(?P<version>[0-9.]+)?(?:-(?P<arch>32|64))?$c                  ^    e Zd ZdZ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.str_specstrimplementation
str | Nonemajor
int | NoneminormicroarchitecturepathreturnNonec                h    || _         || _        || _        || _        || _        || _        || _        d S N)r   r   r
   r   r   r   r   )selfr   r   r
   r   r   r   r   s           P/var/www/piapp/venv/lib/python3.11/site-packages/virtualenv/discovery/py_spec.py__init__zPythonSpec.__init__   s;     !,


(			    string_specc           	     *   d\  }}}}}}t           j                            |          r|}nWd}t          j        t
          |          }	|	r4d }
	 |	                                }|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                    }d}|d         }|dv rd } |
|d                   }n# t          $ r Y nw xY w|s|} | |||||||          S )N)NNNNNNFc                (    | 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>1   s-      (Q(QAq(QQ(Q(Q(Q(Q(Q(Qr   .         r   	   Timpl>   pypythonarch)osr   isabsrematchPATTERN	groupdicttuplesplitlen
ValueErrorr   r   )clsr   r)   r
   r   r   r,   r   okr0   r   groupsr   versionsversion_datas                  r   from_string_speczPythonSpec.from_string_spec    s   0R-eUE4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B "&>D///#'<v77DD "   D  #"s;eUE4FFFs   D E0 0
E=<E=windowsbool
re.Patternc          
         dj         d | j        | j        | j        fD              }| j        dndt          j        | j                   }|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>N   s*      WWQ	ffqWWWWWWr   Nr+   zpython|z\.exe ?z	(?P<impl>z)(?P<v>)$)flags)	formatr
   r   r   r   r/   escapecompile
IGNORECASE)r   r=   r   r)   suffixversion_conditionals         r   generate_rezPythonSpec.generate_reK   s    ,%,WW4:tz4:2VWWW
  .6xx<fbiPTPcFdFd<f<f$,"  z!	 C
  	 zNNNgNN0CNVNNN-
 
 
 	
r   c                \    | j         d uo#t          j                             | j                   S r   )r   r-   r.   )r   s    r   is_abszPythonSpec.is_abs`   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 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)	rQ   r   r   lowerr   zipr
   r   r   )r   specourreqs       r   	satisfieszPythonSpec.satisfiesd   s    ; 	4; 	49	+A+A5*t/B/H/H/J/JdNaNgNgNiNi/i/i5(T->$BS-S-S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   (z, c              3  b   K   | ])}t          |          | dt          |           V  *d S )N=)getattr)r!   kr   s     r   r#   z&PythonSpec.__repr__.<locals>.<genexpr>u   sM      "m"mPWX\^_P`P`Pla#<#<'$*:*:#<#<PlPlPlPl"m"mr   rF   )type__name__join)r   nameparamss   `  r   __repr__zPythonSpec.__repr__r   sN    Dzz"Tpp"m"m"m"mf"m"m"mmmppppr   N)r   r   r   r	   r
   r   r   r   r   r   r   r   r   r	   r   r   )r   r   )r=   r>   r   r?   )r   r   )r`   
__module____qualname____doc__r   classmethodr<   rO   propertyrQ   rX   rd   rB   r   r   r   r      s        <<   $ (G (G (G [(GT
 
 
 
* B B XB  q q q q q qr   r   )	rg   
__future__r   r-   r/   rK   r1   r   __all__rB   r   r   <module>rl      s    U U " " " " " " 				 				
"*X
Y
Yjq jq jq jq jq jq jq jq\ r   