o
    Ñ­jŸB  ã                	   @  sÐ  U d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ g d
¢ZdOdd„Zeeeeee f ge f Z!e	d Z"	 ddhZ#h d£Z$G dd„ de%ƒZ&G dd„ de%ƒZ'G dd„ de%ƒZ(G dd„ deƒZ)dPdd„Z*dQd!d"„Z+	#dRdSd)d*„Z,d+d,„ d-d,„ d.d,„ ej-ej-ej.ej-d/d,„ d0œZ/d1e0d2< dTd:d;„Z1dUd=d>„Z2dVdBdC„Z3dWdFdG„Z4dXdHdI„Z5G dJdK„ dKƒZ6dYdMdN„Z7dS )Zé    )ÚannotationsN)ÚAbstractSetÚCallableÚLiteralÚMappingÚ	TypedDictÚUnionÚcasté   )Ú
MarkerAtomÚ
MarkerListÚOpÚValueÚVariable)Úparse_marker)ÚParserSyntaxError)ÚInvalidSpecifierÚ	Specifier©Úcanonicalize_name)ÚEnvironmentÚEvaluateContextÚInvalidMarkerÚMarkerÚUndefinedComparisonÚUndefinedEnvironmentNameÚdefault_environmentÚreturnú	list[str]c                   C  s   t S ©N)Ú__all__© r!   r!   úN/var/www/html/CropPilot/venv/lib/python3.10/site-packages/packaging/markers.pyÚ__dir__   s   r#   )ÚmetadataÚ	lock_fileÚrequirementÚextrasÚdependency_groups>   Úpython_versionÚplatform_releaseÚpython_full_versionÚimplementation_versionc                   @  ó   e Zd ZdZdS )r   zëRaised when attempting to create a :class:`Marker` from invalid input.

    This error indicates that the given marker string does not conform to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r!   r!   r"   r   6   ó    r   c                   @  r-   )r   zçRaised when evaluating an unsupported marker comparison.

    This can happen when marker values are compared as versions but do not
    conform to the :ref:`specification of version specifiers
    <pypug:version-specifiers>`.
    Nr.   r!   r!   r!   r"   r   >   r3   r   c                   @  r-   )r   zJRaised when evaluating a marker that references a missing environment key.Nr.   r!   r!   r!   r"   r   G   r3   r   c                   @  s~   e Zd ZU dZded< 	 ded< 	 ded< 	 ded< 	 ded< 	 ded< 	 ded	< 	 ded
< 	 ded< 	 ded< 	 ded< dS )r   z„
    A dictionary that represents a Python environment as captured by
    :func:`default_environment`. All fields are required.
    ÚstrÚimplementation_namer,   Úos_nameÚplatform_machiner*   Úplatform_systemÚplatform_versionr+   Úplatform_python_implementationr)   Úsys_platformN)r/   r0   r1   r2   Ú__annotations__r!   r!   r!   r"   r   K   s0   
 r   ÚresultúMarkerList | MarkerAtom | strc                 C  sp   t | tƒs| S | \}}}t |tƒr |jdkr t|jƒ}t|ƒ}nt |tƒr3|jdkr3t|jƒ}t|ƒ}|||fS )NÚextra)Ú
isinstanceÚtupler   Úvaluer   r   )r=   ÚlhsÚopÚrhsÚnormalized_extrar!   r!   r"   Ú_normalize_extras˜   s   





rG   Úresultsr   c                 C  s   dd„ | D ƒS )z!
    Normalize extra values.
    c                 S  s   g | ]}t |ƒ‘qS r!   )rG   )Ú.0Úrr!   r!   r"   Ú
<listcomp>­   ó    z+_normalize_extra_values.<locals>.<listcomp>r!   )rH   r!   r!   r"   Ú_normalize_extra_values¨   s   rM   TÚmarkerúlist[str] | MarkerAtom | strÚfirstúbool | Noner4   c                 C  s¢   t | tttfƒs
J ‚t | tƒr$t| ƒdkr$t | d ttfƒr$t| d ƒS t | tƒr@dd„ | D ƒ}|r7d |¡S dd |¡ d S t | tƒrOd dd	„ | D ƒ¡S | S )
Nr
   r   c                 s  s   � | ]	}t |d d�V  qdS )F)rP   N)Ú_format_marker©rI   Úmr!   r!   r"   Ú	<genexpr>Á   s   € z!_format_marker.<locals>.<genexpr>ú ú(ú)c                 S  s   g | ]}|  ¡ ‘qS r!   )Ú	serializerS   r!   r!   r"   rK   Ç   rL   z"_format_marker.<locals>.<listcomp>)r@   ÚlistrA   r4   ÚlenrR   Újoin)rN   rP   Úinnerr!   r!   r"   rR   °   s   ÿÿ


rR   c                 C  s   | |v S r   r!   ©rC   rE   r!   r!   r"   Ú<lambda>Í   ó    r_   c                 C  s   | |vS r   r!   r^   r!   r!   r"   r_   Î   r`   c                 C  ó   dS ©NFr!   ©Ú_lhsÚ_rhsr!   r!   r"   r_   Ï   ó    c                 C  ra   rb   r!   rc   r!   r!   r"   r_   Ô   rf   )Úinznot inú<z<=z==z!=z>=ú>zdict[str, Operator]Ú
_operatorsrC   rD   r   rE   ústr | AbstractSet[str]ÚkeyÚboolc                C  s~   |  ¡ }|tv r#z
t|› |› �ƒ}W n	 ty   Y nw |j| dd�S t |¡}|d u r:td|›d| ›d|›d�ƒ‚|| |ƒS )NT)Úprereleasesz
Undefined z on z and Ú.)rY   ÚMARKERS_REQUIRING_VERSIONr   r   Úcontainsrj   Úgetr   )rC   rD   rE   rl   Úop_strÚspecÚoperr!   r!   r"   Ú_eval_opØ   s   ÿ

rv   ú"tuple[str, str | AbstractSet[str]]c                 C  sb   |dkrt |tƒsJ dƒ‚| |fS |tv r-t |tƒr"t| ƒt|ƒfS t| ƒdd„ |D ƒfS | |fS )Nr?   zextra value must be a stringc                 S  s   h | ]}t |ƒ’qS r!   r   )rI   Úvr!   r!   r"   Ú	<setcomp>ø   rL   z_normalize.<locals>.<setcomp>)r@   r4   ÚMARKERS_ALLOWING_SETr   )rC   rE   rl   r!   r!   r"   Ú
_normalizeé   s   
r{   ÚmarkersÚenvironmentú!dict[str, str | AbstractSet[str]]c           
   	   C  sô   g g}| D ]k}t |tƒr|d  t||ƒ¡ qt |tƒr[|\}}}t |tƒr1|j}|| }|j}	n
|j}|j}|| }	t |tƒsDJ dƒ‚t||	|d�\}}	|d  t	|||	|d�¡ q|dkre| g ¡ q|dkrjqt
d|›�ƒ‚tdd„ |D ƒƒS )	Néÿÿÿÿzlhs must be a string)rl   ÚorÚandzUnexpected marker c                 s  s   � | ]}t |ƒV  qd S r   )Úall)rI   Úitemr!   r!   r"   rU     s   € z$_evaluate_markers.<locals>.<genexpr>)r@   rZ   ÚappendÚ_evaluate_markersrA   r   rB   r4   r{   rv   Ú	TypeErrorÚany)
r|   r}   ÚgroupsrN   rC   rD   rE   Úenvironment_keyÚ	lhs_valueÚ	rhs_valuer!   r!   r"   r…   þ   s,   



r…   Úinfoúsys._version_infoc                 C  sB   | j › d| j› d| j› �}| j}|dkr||d t| jƒ 7 }|S )Nro   Úfinalr   )ÚmajorÚminorÚmicroÚreleaselevelr4   Úserial)rŒ   ÚversionÚkindr!   r!   r"   Ú_format_full_version  s
   r–   c                  C  s^   t tjjƒ} tjj}|| tjt ¡ t ¡ t 	¡ t ¡ t 
¡ t ¡ d t ¡ dd… ¡tjdœS )z�Return the default marker environment for the current Python process.

    This is the base environment used by :meth:`Marker.evaluate`.
    ro   Né   )r5   r,   r6   r7   r*   r8   r9   r+   r:   r)   r;   )r–   ÚsysÚimplementationr”   ÚnameÚosÚplatformÚmachineÚreleaseÚsystemr)   Úpython_implementationr\   Úpython_version_tuple)Úiverr5   r!   r!   r"   r   '  s   õr   c                   @  sŒ   e Zd ZdZdZd*dd„Zed+dd„ƒZd,dd„Zd,dd„Z	d-dd„Z
d.dd„Zd,dd„Zd/dd„Zd0dd„Zd0d d!„Z	"	#d1d2d(d)„Zd"S )3r   aê  Represents a parsed dependency marker expression.

    Marker expressions are parsed according to the
    :ref:`specification of dependency specifiers <pypug:dependency-specifiers>`.

    :param marker: The string representation of a marker expression.
    :raises InvalidMarker: If ``marker`` cannot be parsed.

    Instances are safe to serialize with :mod:`pickle`. They use a stable
    format so the same pickle can be loaded in future packaging releases.

    .. versionchanged:: 26.2

        Added a stable pickle format. Pickles created with packaging 26.2+ can
        be unpickled with future releases.  Backward compatibility with pickles
        from packaging < 26.2 is supported but may be removed in a future
        release.
    )Ú_markersrN   r4   r   ÚNonec              
   C  sB   g | _ z
tt|ƒƒ| _ W d S  ty  } ztt|ƒƒ|‚d }~ww r   )r£   rM   Ú_parse_markerr   r   r4   )ÚselfrN   Úer!   r!   r"   Ú__init__S  s   €ÿzMarker.__init__r|   r   c                 C  s   |   | ¡}||_|S )z’Create a Marker instance from a pre-parsed marker tree.

        This avoids re-parsing serialised marker strings when combining markers.
        )Ú__new__r£   )Úclsr|   Únewr!   r!   r"   Ú_from_markersq  s   
zMarker._from_markersc                 C  s
   t | jƒS r   )rR   r£   ©r¦   r!   r!   r"   Ú__str__{  s   
zMarker.__str__c                 C  s   d| j j› dt| ƒ›d�S )Nrh   rW   z)>)Ú	__class__r/   r4   r­   r!   r!   r"   Ú__repr__~  s   zMarker.__repr__Úintc                 C  s   t t| ƒƒS r   )Úhashr4   r­   r!   r!   r"   Ú__hash__�  s   zMarker.__hash__ÚotherÚobjectrm   c                 C  s   t |tƒstS t| ƒt|ƒkS r   )r@   r   ÚNotImplementedr4   ©r¦   r´   r!   r!   r"   Ú__eq__„  s   
zMarker.__eq__c                 C  s   t | ƒS r   )r4   r­   r!   r!   r"   Ú__getstate__Š  s   zMarker.__getstate__Ústatec              
   C  sÐ   t |tƒr$z
tt|ƒƒ| _W d S  ty# } ztd|›�ƒ|‚d }~ww t |tƒr;d|v r;|d }t |tƒr;|| _d S t |t	ƒrat
|ƒdkra|\}}t |tƒrad|v ra|d }t |tƒra|| _d S td|›�ƒ‚)NzCannot restore Marker from r£   r—   )r@   r4   rM   r¥   r£   r   r†   ÚdictrZ   rA   r[   )r¦   rº   Úexcr|   Ú_Ú	slot_dictr!   r!   r"   Ú__setstate__�  s*   
þ€ÿ

zMarker.__setstate__c                 C  ó"   t |tƒstS |  | jd|jg¡S )Nr�   ©r@   r   r¶   r¬   r£   r·   r!   r!   r"   Ú__and__§  ó   
zMarker.__and__c                 C  rÀ   )Nr€   rÁ   r·   r!   r!   r"   Ú__or__¬  rÃ   zMarker.__or__Nr$   r}   ú+Mapping[str, str | AbstractSet[str]] | NoneÚcontextr   c                 C  s„   t dtƒ ƒ}|dkr|jtƒ tƒ d� n|dkrd|d< |dur:| |¡ d|v r:t d|d ƒ}|r6t|ƒnd|d< t| jt|ƒƒS )	a"  Evaluate a marker.

        Return the boolean from evaluating this marker against the environment.
        The environment is determined from the current Python process unless
        passed in explicitly.

        :param environment: Mapping containing keys and values to override the
           detected environment.
        :param EvaluateContext context: The context in which the marker is
            evaluated, which influences what marker names are considered valid.
            Accepted values are ``"metadata"`` (for core metadata; default),
            ``"lock_file"``, and ``"requirement"`` (i.e. all other situations).
        :raises UndefinedComparison: If the marker uses a comparison on values
            that are not valid versions per the :ref:`specification of version
            specifiers <pypug:version-specifiers>`.
        :raises UndefinedEnvironmentName: If the marker references a value that
            is missing from the evaluation environment.
        :returns: ``True`` if the marker matches, otherwise ``False``.

        r~   r%   )r'   r(   r$   Ú r?   Nz
str | None)r	   r   ÚupdateÚ	frozensetr   r…   r£   Ú_repair_python_full_version)r¦   r}   rÆ   Úcurrent_environmentr?   r!   r!   r"   Úevaluate±  s"   ÿÿ

ÿzMarker.evaluate)rN   r4   r   r¤   )r|   r   r   r   )r   r4   )r   r±   )r´   rµ   r   rm   )rº   rµ   r   r¤   )r´   r   r   r   )Nr$   )r}   rÅ   rÆ   r   r   rm   )r/   r0   r1   r2   Ú	__slots__r¨   Úclassmethodr¬   r®   r°   r³   r¸   r¹   r¿   rÂ   rÄ   rÌ   r!   r!   r!   r"   r   =  s"    

	






ýr   Úenvc                 C  s*   t d| d ƒ}| d¡r|› d�| d< | S )zƒ
    Work around platform.python_version() returning something that is not PEP 440
    compliant for non-tagged Python builds.
    r4   r+   ú+Úlocal)r	   Úendswith)rÏ   r+   r!   r!   r"   rÊ   â  s   
rÊ   )r   r   )r=   r>   r   r>   )rH   r   r   r   )T)rN   rO   rP   rQ   r   r4   )
rC   r4   rD   r   rE   rk   rl   r4   r   rm   )rC   r4   rE   rk   rl   r4   r   rw   )r|   r   r}   r~   r   rm   )rŒ   r�   r   r4   )r   r   )rÏ   r~   r   r~   )8Ú
__future__r   Úoperatorr›   rœ   r˜   Útypingr   r   r   r   r   r   r	   Ú_parserr   r   r   r   r   r   r¥   Ú
_tokenizerr   Ú
specifiersr   r   Úutilsr   r    r#   r4   rm   ÚOperatorr   rz   rp   Ú
ValueErrorr   r   r   r   rG   rM   rR   ÚeqÚnerj   r<   rv   r{   r…   r–   r   r   rÊ   r!   r!   r!   r"   Ú<module>   sV   $
		
M
	ÿø



!
 &