
    ix&                       d dl mZ d dlZd dlmZmZmZmZ ddlm	Z	m
Z
mZ ddlmZmZmZ g dZd+d
Zeed         eeef         f         Z ede          Z	  G d de          Z G d de          Z G d de          Z ej        dej        ej        z            Z ej        dej                  Z ej        dej                  Zddd,dZ d-dZ!ddd.d#Z"dd$d/d(Z#d0d*Z$dS )1    )annotationsN)NewTypeTupleUnioncast   )TagUnsortedTagsError	parse_tag)InvalidVersionVersion_TrimmedRelease)
BuildTagInvalidNameInvalidSdistFilenameInvalidWheelFilenameNormalizedNamecanonicalize_namecanonicalize_versionis_normalized_nameparse_sdist_filenameparse_wheel_filenamereturn	list[str]c                     t           S )N)__all__     V/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/packaging/utils.py__dir__r       s    Nr   r   r   c                      e Zd ZdZdS )r   zW
    An invalid distribution name; users should refer to the packaging user guide.
    N__name__
__module____qualname____doc__r   r   r   r   r   '              r   r   c                      e Zd ZdZdS )r   zM
    An invalid wheel filename was found, users should refer to PEP 427.
    Nr"   r   r   r   r   r   -   r'   r   r   c                      e Zd ZdZdS )r   z^
    An invalid sdist filename was found, users should refer to the packaging user guide.
    Nr"   r   r   r   r   r   3   r'   r   r   z%[a-z0-9]|[a-z0-9][a-z0-9._-]*[a-z0-9]z+[a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9]z	(\d+)(.*)F)validatenamestrr*   boolc               2   |r,t                               |           st          d|           |                                                     dd                              dd          }d|v r|                    dd          }d|v t          d|          S )a]  
    This function takes a valid Python package or extra name, and returns the
    normalized form of it.

    The return type is typed as :class:`NormalizedName`. This allows type
    checkers to help require that a string has passed through this function
    before use.

    If **validate** is true, then the function will check if **name** is a valid
    distribution name before normalizing.

    :param str name: The name to normalize.
    :param bool validate: Check whether the name is a valid distribution name.
    :raises InvalidName: If **validate** is true and the name is not an
        acceptable distribution name.

    >>> from packaging.utils import canonicalize_name
    >>> canonicalize_name("Django")
    'django'
    >>> canonicalize_name("oslo.concurrency")
    'oslo-concurrency'
    >>> canonicalize_name("requests")
    'requests'
    zname is invalid: _-.z--r   )_validate_regex	fullmatchr   lowerreplacer   )r+   r*   values      r   r   r   B   s    2  811$77 86d66777 JJLL  c**223<<E
%--dC(( %-- %(((r   c                :    t                               |           duS )a7  
    Check if a name is already normalized (i.e. :func:`canonicalize_name` would
    roundtrip to the same value).

    :param str name: The name to check.

    >>> from packaging.utils import is_normalized_name
    >>> is_normalized_name("requests")
    True
    >>> is_normalized_name("Django")
    False
    N)_normalized_regexr3   )r+   s    r   r   r   g   s     &&t,,D88r   T)strip_trailing_zeroversionVersion | strr9   c                   t          | t                    r0	 t          |           } n# t          $ r t          |           cY S w xY wt          |rt	          |           n|           S )a  Return a canonical form of a version as a string.

    This function takes a string representing a package version (or a
    :class:`~packaging.version.Version` instance), and returns the
    normalized form of it. By default, it strips trailing zeros from
    the release segment.

    >>> from packaging.utils import canonicalize_version
    >>> canonicalize_version('1.0.1')
    '1.0.1'

    Per PEP 625, versions may have multiple canonical forms, differing
    only by trailing zeros.

    >>> canonicalize_version('1.0.0')
    '1'
    >>> canonicalize_version('1.0.0', strip_trailing_zero=False)
    '1.0.0'

    Invalid versions are returned unaltered.

    >>> canonicalize_version('foo bar baz')
    'foo bar baz'

    >>> canonicalize_version('1.4.0.0.0')
    '1.4'
    )
isinstancer,   r   r   r   )r:   r9   s     r   r   r   w   sx    < '3  	 g&&GG 	  	  	 w<<	 +>Kw'''GLLLs   ' AAvalidate_orderfilenamer?   8tuple[NormalizedName, Version, BuildTag, frozenset[Tag]]c                  |                      d          st          d|           | dd         } |                     d          }|dvrt          d|           |                     d|dz
            }|d	         }d
|v s t	          j        d|t          j                  t          d|           t          |          }	 t          |d                   }n%# t          $ r}t          d|           |d}~ww xY w|dk    r|d         }t                              |          }	|	t          d| d|           t          dt          |	                    d                    |	                    d          f          }
nd}
|d         }	 t          ||          }n!# t          $ r t          d|           dw xY w|||
|fS )a  
    This function takes the filename of a wheel file, and parses it,
    returning a tuple of name, version, build number, and tags.

    The name part of the tuple is normalized and typed as
    :class:`NormalizedName`. The version portion is an instance of
    :class:`~packaging.version.Version`. The build number is ``()`` if
    there is no build number in the wheel filename, otherwise a
    two-item tuple of an integer for the leading digits and
    a string for the rest of the build number. The tags portion is a
    frozen set of :class:`~packaging.tags.Tag` instances (as the tag
    string format allows multiple tags to be combined into a single
    string).

    If **validate_order** is true, compressed tag set components are
    checked to be in sorted order as required by PEP 425.

    :param str filename: The name of the wheel file.
    :param bool validate_order: Check whether compressed tag set components
        are in sorted order.
    :raises InvalidWheelFilename: If the filename in question
        does not follow the :ref:`wheel specification
        <pypug:binary-distribution-format>`.

    >>> from packaging.utils import parse_wheel_filename
    >>> from packaging.tags import Tag
    >>> from packaging.version import Version
    >>> name, ver, build, tags = parse_wheel_filename("foo-1.0-py3-none-any.whl")
    >>> name
    'foo'
    >>> ver == Version('1.0')
    True
    >>> tags == {Tag("py3", "none", "any")}
    True
    >>> not build
    True

    .. versionadded:: 26.1
       The *validate_order* parameter.
    z.whlz3Invalid wheel filename (extension must be '.whl'): Nr0   )      z0Invalid wheel filename (wrong number of parts):    r   __z^[\w\d._]*$zInvalid project name: r   z*Invalid wheel filename (invalid version): rE   zInvalid build number: z in r   r   r>   z\Invalid wheel filename (compressed tag set components must be in sorted order per PEP 425): )endswithr   countsplitrematchUNICODEr   r   r   _build_tag_regexr   intgroupr   r
   )r@   r?   dashesparts	name_partr+   r:   e
build_partbuild_matchbuildtag_strtagss                r   r   r      sG   Z V$$ 
"N(NN
 
 	
 }H^^C  FV"KxKK
 
 	
 NN3
++EaIyBH^Y
KKS"#HH#H#HIIIY''D%(##   "EEE
 
	
 {{1X
&,,Z88&EEEEE   Z#k&7&7&:&:";";[=N=Nq=Q=Q!RSSBiG@@@   "7*27 7
 
 	
 '5$''s$   C 
C<$C77C<F! !F?tuple[NormalizedName, Version]c                   |                      d          r| dt          d                    }n@|                      d          r| dt          d                    }nt          d|           |                    d          \  }}}|st          d|           t	          |          }	 t          |          }n%# t          $ r}t          d|           |d}~ww xY w||fS )a  
    This function takes the filename of a sdist file (as specified
    in the `Source distribution format`_ documentation), and parses
    it, returning a tuple of the normalized name and version as
    represented by an instance of :class:`~packaging.version.Version`.

    :param str filename: The name of the sdist file.
    :raises InvalidSdistFilename: If the filename does not end
        with an sdist extension (``.zip`` or ``.tar.gz``), or if it does not
        contain a dash separating the name and the version of the distribution.

    >>> from packaging.utils import parse_sdist_filename
    >>> from packaging.version import Version
    >>> name, ver = parse_sdist_filename("foo-1.0.tar.gz")
    >>> name
    'foo'
    >>> ver == Version('1.0')
    True

    .. _Source distribution format: https://packaging.python.org/specifications/source-distribution-format/#source-distribution-file-name
    z.tar.gzNz.zipz@Invalid sdist filename (extension must be '.tar.gz' or '.zip'): r0   zInvalid sdist filename: z*Invalid sdist filename (invalid version): )rI   lenr   
rpartitionr   r   r   )r@   	file_stemrT   sepversion_partr+   r:   rU   s           r   r   r      s.   , ## 
.I./					6	"	" 
^F|^,		" 
 
 	
 $-#7#7#<#< IsL L"#Jh#J#JKKKY''D,''   "EEE
 
	
 '?s   ,B< <
CCC)r   r   )r+   r,   r*   r-   r   r   )r+   r,   r   r-   )r:   r;   r9   r-   r   r,   )r@   r,   r?   r-   r   rA   )r@   r,   r   r[   )%
__future__r   rL   typingr   r   r   r   rZ   r	   r
   r   r:   r   r   r   r   r    rP   r,   r   r   
ValueErrorr   r   r   compile
IGNORECASEASCIIr2   r8   rO   r   r   r   r   r   r   r   r   <module>rh      sV  
 # " " " " " 				 . . . . . . . . . . . . 3 3 3 3 3 3 3 3 3 3 = = = = = = = = = =      rE#s(O+,)3//
    *       :       :    "*,bmbh.F  BJMrxXX 2:lBH55  6; ") ") ") ") ") ")J9 9 9 9" <@#M #M #M #M #M #MR !Y( Y( Y( Y( Y( Y(x/ / / / / /r   