Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
odigos / etc / odigos-vmagent / instrumentations / python / packaging / __pycache__ / specifiers.cpython-311.pyc
Size: Mime:
§

Ög"›ãól—dZddlmZddlZddlZddlZddlmZmZm	Z	m
Z
mZddlm
Z
ddlmZeeefZe
de¬	¦«ZeeegefZd%d„ZGd„de¦«ZGd„dej¬¦«ZGd„de¦«Zejd¦«Zd&d„Zd'd„Zd(d„Zd)d"„Z Gd#„d$e¦«Z!dS)*zŠ
.. testsetup::

    from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from packaging.version import Version
é)ÚannotationsN)ÚCallableÚIterableÚIteratorÚTypeVarÚUnioné)Úcanonicalize_version)ÚVersionÚUnparsedVersionVar)ÚboundÚversionÚUnparsedVersionÚreturnrcóN—t|t¦«st|¦«}|S©N)Ú
isinstancer)rs ú;/tmp/pip-target-6culloxw/lib/python/packaging/specifiers.pyÚ_coerce_versionrs&€ÝgwÑ'Ô'ð#ݘ'Ñ"Ô"ˆØ€Nócó—eZdZdZdS)ÚInvalidSpecifiera
    Raised when attempting to create a :class:`Specifier` with a specifier
    string that is invalid.

    >>> Specifier("lolwat")
    Traceback (most recent call last):
        ...
    packaging.specifiers.InvalidSpecifier: Invalid specifier: 'lolwat'
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__©rrrr s€€€€€ððððrrcó—eZdZejdd„¦«Zejdd„¦«Zejdd	„¦«Zeejdd„¦«¦«Z	e	j
dd„¦«Z	ejddd„¦«Zej	ddd„¦«ZdS)Ú
BaseSpecifierrÚstrcó—dS)zŽ
        Returns the str representation of this Specifier-like object. This
        should be representative of the Specifier itself.
        Nr©Úselfs rÚ__str__zBaseSpecifier.__str__-ó€€€rÚintcó—dS)zF
        Returns a hash value for this Specifier-like object.
        Nrr"s rÚ__hash__zBaseSpecifier.__hash__4r%rÚotherÚobjectÚboolcó—dS)z«
        Returns a boolean representing whether or not the two Specifier-like
        objects are equal.

        :param other: The other object to check against.
        Nr©r#r)s  rÚ__eq__zBaseSpecifier.__eq__:r%rúbool | Nonecó—dS)zîWhether or not pre-releases as a whole are allowed.

        This can be set to either ``True`` or ``False`` to explicitly enable or disable
        prereleases or it can be set to ``None`` (the default) to use default semantics.
        Nrr"s rÚprereleaseszBaseSpecifier.prereleasesCr%rÚvalueÚNonecó—dS)zQSetter for :attr:`prereleases`.

        :param value: The value to set.
        Nr©r#r2s  rr1zBaseSpecifier.prereleasesLr%rNÚitemr1có—dS)zR
        Determines if the given item is contained within this specifier.
        Nr)r#r6r1s   rÚcontainszBaseSpecifier.containsSr%rÚiterableúIterable[UnparsedVersionVar]úIterator[UnparsedVersionVar]có—dS)z•
        Takes an iterable of items and filters them so that only items which
        are contained within this specifier are allowed in it.
        Nr)r#r9r1s   rÚfilterzBaseSpecifier.filterYr%r©rr ©rr&©r)r*rr+©rr/©r2r+rr3r)r6r r1r/rr+©r9r:r1r/rr;)
rrrÚabcÚabstractmethodr$r(r.Úpropertyr1Úsetterr8r=rrrrr,s%€€€€€ØÔðððñÔðð	ÔðððñÔðð
	ÔðððñÔððØÔðððñÔñ„XððÔðððñÔðð	ÔððððñÔðð
	ÔàQUððððñÔðððrr)Ú	metaclassc	ó—eZdZdZdZdZejdezezdzejej	z¦«Z
dddd	d
ddd
dœZd>d?d„Ze
d@d„¦«ZejdAd„¦«Ze
dBd„¦«Ze
dBd„¦«ZdBd„ZdBd„Ze
dCd!„¦«ZdDd#„ZdEd&„ZdFd)„ZdGd,„ZdGd-„ZdGd.„ZdGd/„ZdGd0„ZdHd2„ZdHd3„ZdGd4„ZdId7„Z dJdKd9„Z!	dJdLd=„Z"dS)MÚ	Specifiera?This class abstracts handling of version specifiers.

    .. tip::

        It is generally not required to instantiate this manually. You should instead
        prefer to work with :class:`SpecifierSet` instead, which can parse
        comma-separated version specifiers (which is what package metadata contains).
    z8
        (?P<operator>(~=|==|!=|<=|>=|<|>|===))
        aÈ
        (?P<version>
            (?:
                # The identity operators allow for an escape hatch that will
                # do an exact string match of the version you wish to install.
                # This will not be parsed by PEP 440 and we cannot determine
                # any semantic meaning from it. This operator is discouraged
                # but included entirely as an escape hatch.
                (?<====)  # Only match for the identity operator
                \s*
                [^\s;)]*  # The arbitrary version can be just about anything,
                          # we match everything except for whitespace, a
                          # semi-colon for marker support, and a closing paren
                          # since versions can be enclosed in them.
            )
            |
            (?:
                # The (non)equality operators allow for wild card and local
                # versions to be specified so we have to define these two
                # operators separately to enable that.
                (?<===|!=)            # Only match for equals and not equals

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release

                # You cannot use a wild card and a pre-release, post-release, a dev or
                # local version together so group them with a | and make them optional.
                (?:
                    \.\*  # Wild card syntax of .*
                    |
                    (?:                                  # pre release
                        [-_\.]?
                        (alpha|beta|preview|pre|a|b|c|rc)
                        [-_\.]?
                        [0-9]*
                    )?
                    (?:                                  # post release
                        (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                    )?
                    (?:[-_\.]?dev[-_\.]?[0-9]*)?         # dev release
                    (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local
                )?
            )
            |
            (?:
                # The compatible operator requires at least two digits in the
                # release segment.
                (?<=~=)               # Only match for the compatible operator

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)+   # release  (We have a + instead of a *)
                (?:                   # pre release
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
            |
            (?:
                # All other operators only allow a sub set of what the
                # (non)equality operators do. Specifically they do not allow
                # local versions to be specified nor do they allow the prefix
                # matching wild cards.
                (?<!==|!=|~=)         # We have special cases for these
                                      # operators so we want to make sure they
                                      # don't match here.

                \s*
                v?
                (?:[0-9]+!)?          # epoch
                [0-9]+(?:\.[0-9]+)*   # release
                (?:                   # pre release
                    [-_\.]?
                    (alpha|beta|preview|pre|a|b|c|rc)
                    [-_\.]?
                    [0-9]*
                )?
                (?:                                   # post release
                    (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*)
                )?
                (?:[-_\.]?dev[-_\.]?[0-9]*)?          # dev release
            )
        )
        z^\s*z\s*$Ú
compatibleÚequalÚ	not_equalÚless_than_equalÚgreater_than_equalÚ	less_thanÚgreater_thanÚ	arbitrary)ú~=ú==z!=ú<=ú>=ú<ú>ú===ÚNÚspecr r1r/rr3có—|j |¦«}|std|›d¦«‚| d¦« ¦«| d¦« ¦«f|_||_dS)aðInitialize a Specifier instance.

        :param spec:
            The string representation of a specifier which will be parsed and
            normalized before use.
        :param prereleases:
            This tells the specifier if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.
        :raises InvalidSpecifier:
            If the given specifier is invalid (i.e. bad syntax).
        zInvalid specifier: 'ú'ÚoperatorrN)Ú_regexÚsearchrÚgroupÚstripÚ_specÚ_prereleases)r#r[r1Úmatchs    rÚ__init__zSpecifier.__init__Þs€ð”×"Ò" 4Ñ(Ô(ˆØð	CÝ"Ð#A¸$Ð#AÐ#AÐ#AÑBÔBÐBð
KŠK˜
Ñ#Ô#×)Ò)Ñ+Ô+ØKŠK˜	Ñ"Ô"×(Ò(Ñ*Ô*ð'
ˆŒ
ð(ˆÔÐÐrr+có´—|j|jS|j\}}|dvr;|dkr| d¦«r
|dd…}t|¦«jrdSdS)N)rTrVrUrSrYrTú.*éþÿÿÿTF)rdrcÚendswithrÚ
is_prerelease)r#r^rs   rr1zSpecifier.prereleasesøs|€ðÔÐ(ØÔ$Ð$ð
!œJш'ØÐ6Ð6Ð6ð˜4ÒРG×$4Ò$4°TÑ$:Ô$:ÐØ! # 2 #œ,õwÑÔÔ-ð
ؐtàˆurr2có—||_dSr©rdr5s  rr1zSpecifier.prereleasesó€à!ˆÔÐÐrcó—|jdS)z`The operator of this specifier.

        >>> Specifier("==1.2.3").operator
        '=='
        r©rcr"s rr^zSpecifier.operatoró€ðŒz˜!Œ}Ðrcó—|jdS)zaThe version of this specifier.

        >>> Specifier("==1.2.3").version
        '1.2.3'
        r	rpr"s rrzSpecifier.versionrqrcól—|j
d|j›nd}d|jj›dt	|¦«›|›dS)aTA representation of the Specifier that shows all internal state.

        >>> Specifier('>=1.0.0')
        <Specifier('>=1.0.0')>
        >>> Specifier('>=1.0.0', prereleases=False)
        <Specifier('>=1.0.0', prereleases=False)>
        >>> Specifier('>=1.0.0', prereleases=True)
        <Specifier('>=1.0.0', prereleases=True)>
        Nú, prereleases=rZrWú(ú)>)rdr1Ú	__class__rr ©r#Úpres  rÚ__repr__zSpecifier.__repr__&sT€ðÔ Ð,ð
2˜TÔ-Ð1Ð1Ð1àð	ðB4”>Ô*ÐAÐA­S°©Y¬YÐA¸#ÐAÐAÐAÐArcó —dj|jŽS)zÐA string representation of the Specifier that can be round-tripped.

        >>> str(Specifier('>=1.0.0'))
        '>=1.0.0'
        >>> str(Specifier('>=1.0.0', prereleases=False))
        '>=1.0.0'
        z{}{})Úformatrcr"s rr$zSpecifier.__str__8s€ðˆvŒ}˜dœjÐ)Ð)rútuple[str, str]cóv—t|jd|jddk¬¦«}|jd|fS)Nr	rrS©Ústrip_trailing_zero)r
rc)r#Úcanonical_versions  rÚ_canonical_speczSpecifier._canonical_specBsB€å0ØŒJqŒMØ!%¤¨A¤°$Ò!6ð
ñ
ô
ÐðŒz˜!Œ}Ð/Ð/Ð/rr&có*—t|j¦«Sr)Úhashr‚r"s rr(zSpecifier.__hash__Js€ÝDÔ(Ñ)Ô)Ð)rr)r*cóú—t|t¦«r;	| t|¦«¦«}n3#t$r
tcYSwxYwt||j¦«stS|j|jkS)a>Whether or not the two Specifier-like objects are equal.

        :param other: The other object to check against.

        The value of :attr:`prereleases` is ignored.

        >>> Specifier("==1.2.3") == Specifier("== 1.2.3.0")
        True
        >>> (Specifier("==1.2.3", prereleases=False) ==
        ...  Specifier("==1.2.3", prereleases=True))
        True
        >>> Specifier("==1.2.3") == "==1.2.3"
        True
        >>> Specifier("==1.2.3") == Specifier("==1.2.4")
        False
        >>> Specifier("==1.2.3") == Specifier("~=1.2.3")
        False
        )rr rwrÚNotImplementedr‚r-s  rr.zSpecifier.__eq__Ms†€õ&eSÑ!Ô!ð	"ð
&ØŸš¥s¨5¡z¤zÑ2Ô2øÝ#ð
&ð
&ð
&Ý%Ð%Ð%Ð%ð
&øøøå˜E 4¤>Ñ2Ô2ð	"Ý!Ð!àÔ# uÔ'<Ò<Ð<s—":ºAÁ
AÚopÚCallableOperatorcóB—t|d|j|›¦«}|S)NÚ	_compare_)ÚgetattrÚ
_operators)r#r‡Úoperator_callables   rÚ
_get_operatorzSpecifier._get_operatorjs/€Ý.5ØÐ3˜dœo¨bÔ1Ð3Ð3ñ/
ô/
Ðð!Ð rÚprospectiverc
ó—tttjtt|¦«¦«¦«dd…¦«}|dz
}| d¦«||¦«o| d¦«||¦«S)NéÿÿÿÿrhrVrT)Ú
_version_joinÚlistÚ	itertoolsÚ	takewhileÚ_is_not_suffixÚ_version_splitrŽ)r#rr[Úprefixs    rÚ_compare_compatiblezSpecifier._compare_compatibleps“€õÝ•Ô$¥^µ^ÀDÑ5IÔ5IÑJÔJÑKÔKÈCÈRÈCÔPñ
ô
ˆð
	$‰ˆà'ˆt×!Ò! $Ñ'Ô'¨°TÑ:Ô:ð
Ð?W¸t×?QÒ?QÐRVÑ?WÔ?WØ˜ñ@
ô@
ð	
rcó†—| d¦«r}t|jd¬¦«}t|dd…d¬¦«}t|¦«}t|¦«}t	||¦«\}}|dt|¦«…}	|	|kSt
|¦«}
|
jst
|j¦«}||
kS)NrhFrri)rjr
Úpublicr—Ú_pad_versionÚlenrÚlocal)r#rr[Únormalized_prospectiveÚnormalized_specÚ
split_specÚsplit_prospectiveÚpadded_prospectiveÚ_Úshortened_prospectiveÚspec_versions           rÚ_compare_equalzSpecifier._compare_equal„sá€à=Š=˜ÑÔð$	/å%9ØÔ"¸ð&ñ&ô&Ð"õ3°4¸¸¸´9ÐRWÐXÑXÔXˆOõ(¨Ñ8Ô8ˆJõ
!/Ð/EÑ FÔ FÐõ%1Ð1BÀJÑ$OÔ$OÑ!Ð ð
%7Ð7H½¸Z¹¼Ð7HÔ$IÐ!à(¨JÒ6Ð6õ# 4™=œ=ˆLð
 Ô%ð
:Ý% kÔ&8Ñ9Ô9à ,Ò.Ð.rcó0—| ||¦«Sr)r§©r#rr[s   rÚ_compare_not_equalzSpecifier._compare_not_equal¬s€Ø×&Ò& {°DÑ9Ô9Ð9Ð9rcóL—t|j¦«t|¦«kSr©rr›r©s   rÚ_compare_less_than_equalz"Specifier._compare_less_than_equal¯ó €õ{Ô)Ñ*Ô*­g°d©m¬mÒ;Ð;rcóL—t|j¦«t|¦«kSrr¬r©s   rÚ_compare_greater_than_equalz%Specifier._compare_greater_than_equalµr®rÚspec_strcó¨—t|¦«}||ksdS|js3|jr,t|j¦«t|j¦«krdSdS©NFT)rrkÚbase_version©r#rr±r[s    rÚ_compare_less_thanzSpecifier._compare_less_than»sg€õxÑ Ô ˆð
˜TÒ!Ð!ؐ5ðÔ!ð	 kÔ&?ð	ݐ{Ô/Ñ0Ô0µG¸DÔ<MÑ4NÔ4NÒNÐNؐuð
ˆtrcó—t|¦«}||ksdS|js3|jr,t|j¦«t|j¦«krdS|j,t|j¦«t|j¦«krdSdSr³)rÚis_postreleaser´ržrµs    rÚ_compare_greater_thanzSpecifier._compare_greater_thanÓs˜€õxÑ Ô ˆð
˜TÒ!Ð!ؐ5ðÔ"ð	 {Ô'Að	ݐ{Ô/Ñ0Ô0µG¸DÔ<MÑ4NÔ4NÒNÐNؐuðÔÐ(ݐ{Ô/Ñ0Ô0µG¸DÔ<MÑ4NÔ4NÒNÐNؐuð
ˆtrcóŠ—t|¦« ¦«t|¦« ¦«kSr)r Úlowerr©s   rÚ_compare_arbitraryzSpecifier._compare_arbitraryñs1€Ý;ÑÔ×%Ò%Ñ'Ô'­3¨t©9¬9¯?ª?Ñ+<Ô+<Ò<Ð<rr6ú
str | Versioncó,—| |¦«S)a;Return whether or not the item is contained in this specifier.

        :param item: The item to check for.

        This is used for the ``in`` operator and behaves the same as
        :meth:`contains` with no ``prereleases`` argument passed.

        >>> "1.2.3" in Specifier(">=1.2.3")
        True
        >>> Version("1.2.3") in Specifier(">=1.2.3")
        True
        >>> "1.0.0" in Specifier(">=1.2.3")
        False
        >>> "1.3.0a1" in Specifier(">=1.2.3")
        False
        >>> "1.3.0a1" in Specifier(">=1.2.3", prereleases=True)
        True
        ©r8©r#r6s  rÚ__contains__zSpecifier.__contains__ôó€ð&}Š}˜TÑ"Ô"Ð"rrcóž—|€|j}t|¦«}|jr|sdS| |j¦«}|||j¦«S)alReturn whether or not the item is contained in this specifier.

        :param item:
            The item to check for, which can be a version string or a
            :class:`Version` instance.
        :param prereleases:
            Whether or not to match prereleases with this Specifier. If set to
            ``None`` (the default), it uses :attr:`prereleases` to determine
            whether or not prereleases are allowed.

        >>> Specifier(">=1.2.3").contains("1.2.3")
        True
        >>> Specifier(">=1.2.3").contains(Version("1.2.3"))
        True
        >>> Specifier(">=1.2.3").contains("1.0.0")
        False
        >>> Specifier(">=1.2.3").contains("1.3.0a1")
        False
        >>> Specifier(">=1.2.3", prereleases=True).contains("1.3.0a1")
        True
        >>> Specifier(">=1.2.3").contains("1.3.0a1", prereleases=True)
        True
        NF)r1rrkrŽr^r)r#r6r1Únormalized_itemrs     rr8zSpecifier.contains	sg€ð4ÐØÔ*ˆKõ*¨$Ñ/Ô/ˆð
Ô(ð	°ð	ؐ5ð/3×.@Ò.@ÀÄÑ.OÔ.OÐØ Ð  °$´,Ñ?Ô?Ð?rr9r:r;c#óàK—d}g}d||ndi}|D]K}t|¦«}|j|fi|¤Žr,|jr|s|js| |¦«ŒEd}|V—ŒL|s|r|D]
}|V—ŒdSdSdS)aOFilter items in the given iterable, that match the specifier.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will be intelligently decide whether to allow
            prereleases or not (based on the :attr:`prereleases` attribute, and
            whether the only versions matching are prereleases).

        This method is smarter than just ``filter(Specifier().contains, [...])``
        because it implements the rule from :pep:`440` that a prerelease item
        SHOULD be accepted if no other versions match the given specifier.

        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
        ['1.3']
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.2.3", "1.3", Version("1.4")]))
        ['1.2.3', '1.3', <Version('1.4')>]
        >>> list(Specifier(">=1.2.3").filter(["1.2", "1.5a1"]))
        ['1.5a1']
        >>> list(Specifier(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        >>> list(Specifier(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        Fr1NT)rr8rkr1Úappend)r#r9r1ÚyieldedÚfound_prereleasesÚkwrÚparsed_versions        rr=zSpecifier.filter5sôèè€ð<ˆØÐà¨KÐ,C˜[˜[ÈÐ
Nˆð ð	"ð	"ˆGÝ,¨WÑ5Ô5ˆNàˆtŒ}˜^Ð2Ð2¨rÐ2Ð2ð
"ð"Ô/ð"Øð"Ø#'Ô#3ð"ð&×,Ò,¨WÑ5Ô5Ð5Ð5ð#GØ!MMMøð
ð	Ð,ð	Ø,ð
ð
Ø



ð	ð	ð	ð	ð
ð
r©rZN)r[r r1r/rr3)rr+rBr>)rr}r?r@)r‡r rrˆ)rrr[r rr+)rrr±r rr+)r6r½rr+r)r6rr1r/rr+rC)#rrrrÚ_operator_regex_strÚ_version_regex_strÚreÚcompileÚVERBOSEÚ
IGNORECASEr_rŒrfrFr1rGr^rrzr$r‚r(r.rŽr™r§rªr­r°r¶r¹r¼rÁr8r=rrrrJrJcs¤€€€€€ðððÐð\Ðð|ˆRŒZØÐ%Ñ%Ð(:Ñ:¸WÑDØ
Œ
R”]Ñ"ñô€FðØØØØ"Ø
Ø
Øð	ð	€Jð(ð(ð(ð(ð(ð4ðððñ„Xðð.Ôð"ð"ð"ñÔð"ððððñ„Xðððððñ„XððBðBðBðBð$*ð*ð*ð*ðð0ð0ð0ñ„Xð0ð*ð*ð*ð*ð=ð=ð=ð=ð:!ð!ð!ð!ð
ð
ð
ð
ð(&/ð&/ð&/ð&/ðP:ð:ð:ð:ð<ð<ð<ð<ð<ð<ð<ð<ððððð0ðððð<=ð=ð=ð=ð#ð#ð#ð#ð**@ð*@ð*@ð*@ð*@ðZRVð;ð;ð;ð;ð;ð;ð;rrJz^([0-9]+)((?:a|b|c|rc)[0-9]+)$r ú	list[str]cóL—g}| d¦«\}}}| |pd¦«| d¦«D][}t |¦«}|r(| | ¦«¦«ŒF| |¦«Œ\|S)aSplit version into components.

    The split components are intended for version comparison. The logic does
    not attempt to retain the original version string, so joining the
    components back with :func:`_version_join` may not produce the original
    version string.
    ú!Ú0ú.)Ú
rpartitionrÆÚsplitÚ
_prefix_regexr`ÚextendÚgroups)rÚresultÚepochr¤Úrestr6res       rr—r—vs£€ð€Fà×'Ò'¨Ñ,Ô,N€Eˆ1ˆdØ
‡M‚M%,˜3ÑÔÐà—
’
˜3‘”ð ð ˆÝ×$Ò$ TÑ*Ô*ˆØð	 ØMŠM˜%Ÿ,š,™.œ.Ñ)Ô)Ð)Ð)àMŠM˜$ÑÔÐÐØ€MrÚ
componentscó>—|^}}|›dd |¦«›S)zñJoin split version components into a version string.

    This function assumes the input came from :func:`_version_split`, where the
    first component must be the epoch (either empty or numeric), and all other
    components numeric.
    rÔrÖ)Újoin)rßrÝrÞs   rr’r’Œs+€ð€L€EˆDØÐ&Ð&c—h’h˜t‘n”nÐ&Ð&Ð&rÚsegmentr+có<‡—tˆfd„dD¦«¦«S)Nc3óB•K—|]}‰ |¦«V—ŒdSr)Ú
startswith)Ú.0r˜râs  €rú	<genexpr>z!_is_not_suffix.<locals>.<genexpr>˜sBøèè€ððØ'-ˆ×Ò˜6Ñ"Ô"ððððððr)ÚdevÚaÚbÚrcÚpost)Úany)râs`rr–r–—s@ø€ÝððððØ1PðñôñôððrÚleftÚrightútuple[list[str], list[str]]có–—gg}}| ttjd„|¦«¦«¦«| ttjd„|¦«¦«¦«| |t	|d¦«d…¦«| |t	|d¦«d…¦«| ddgt
dt	|d¦«t	|d¦«z
¦«z¦«| ddgt
dt	|d¦«t	|d¦«z
¦«z¦«ttj |¦«¦«ttj |¦«¦«fS)Ncó*—| ¦«Sr©Úisdigit©Úxs rú<lambda>z_pad_version.<locals>.<lambda>¡s€¸¿º¹¼€rcó*—| ¦«Srrórõs rr÷z_pad_version.<locals>.<lambda>¢s€¸!¿)º)¹+¼+€rrr	rÕ)	rÆr“r”r•rÚinsertÚmaxÚchainÚ
from_iterable)rîrïÚ
left_splitÚright_splits    rrœrœs‹€Ø  "€Jð×Ò•d9Ô.Ð/DÐ/DÀdÑKÔKÑLÔLÑMÔMÐMØ×Ò•tIÔ/Ð0EÐ0EÀuÑMÔMÑNÔNÑOÔOÐOð×Ґd3˜z¨!œ}Ñ-Ô-Ð/Ð/Ô0Ñ1Ô1Ð1Ø×ҐuS ¨Q¤Ñ0Ô0Ð2Ð2Ô3Ñ4Ô4Ð4ð×Ґa˜#˜¥ Q­¨K¸¬NÑ(;Ô(;½cÀ*ÈQÄ-Ñ>PÔ>PÑ(PÑ!QÔ!QÑQÑRÔRÐRØ×Ґq˜3˜%¥# a­¨Z¸¬]Ñ);Ô);½cÀ+ÈaÄ.Ñ>QÔ>QÑ)QÑ"RÔ"RÑRÑSÔSÐSõ	
YŒ_×
*Ò
*¨:Ñ
6Ô
6Ñ7Ô7ÝYŒ_×
*Ò
*¨;Ñ
7Ô
7Ñ8Ô8ððrcó°—eZdZdZd$d%d
„Zed&d„¦«Zejd'd„¦«Zd(d„Zd(d„Z	d)d„Z
d*d„Zd+d„Zd)d„Z
d,d„Zd-d„Z		d.d/d„Z	d0d1d#„ZdS)2ÚSpecifierSetzÌThis class abstracts handling of a set of version specifiers.

    It can be passed a single specifier (``>=3.0``), a comma-separated list of
    specifiers (``>=3.0,!=3.1``), or no specifier at all.
    rZNÚ
specifiersr r1r/rr3có —d„| d¦«D¦«}ttt|¦«¦«|_||_dS)aNInitialize a SpecifierSet instance.

        :param specifiers:
            The string representation of a specifier or a comma-separated list of
            specifiers which will be parsed and normalized before use.
        :param prereleases:
            This tells the SpecifierSet if it should accept prerelease versions if
            applicable or not. The default of ``None`` will autodetect it from the
            given specifiers.

        :raises InvalidSpecifier:
            If the given ``specifiers`` are not parseable than this exception will be
            raised.
        có^—g|]*}| ¦«¯| ¦«‘Œ+Sr)rb©ræÚss  rú
<listcomp>z)SpecifierSet.__init__.<locals>.<listcomp>Ës-€ÐRÐRÐR¨!ÈÏÊÉ	Ì	ÐR˜AŸGšG™IœIÐRÐRÐRrú,N)rØÚ	frozensetÚmaprJÚ_specsrd)r#rr1Úsplit_specifierss    rrfzSpecifierSet.__init__¹sS€ð$SÐR¨z×/?Ò/?ÀÑ/DÔ/DÐRÑRÔRÐõ ¥¥IÐ/?Ñ @Ô @ÑAÔAˆŒð(ˆÔÐÐrcól—|j|jS|jsdStd„|jD¦«¦«S)Nc3ó$K—|]}|jV—ŒdSr©r1rs  rrçz+SpecifierSet.prereleases.<locals>.<genexpr>ãs$èè€Ð6Ð6 Q1”=Ð6Ð6Ð6Ð6Ð6Ð6r)rdr
rír"s rr1zSpecifierSet.prereleasesÔsH€ðÔÐ(ØÔ$Ð$ð
Œ{ð	ؐ4õÐ6Ð6¨$¬+Ð6Ñ6Ô6Ñ6Ô6Ð6rr2r+có—||_dSrrmr5s  rr1zSpecifierSet.prereleasesårnrcóR—|j
d|j›nd}dt|¦«›|›dS)aA representation of the specifier set that shows all internal state.

        Note that the ordering of the individual specifiers within the set may not
        match the input string.

        >>> SpecifierSet('>=1.0.0,!=2.0.0')
        <SpecifierSet('!=2.0.0,>=1.0.0')>
        >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False)
        <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=False)>
        >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True)
        <SpecifierSet('!=2.0.0,>=1.0.0', prereleases=True)>
        NrtrZz<SpecifierSet(rv)rdr1r rxs  rrzzSpecifierSet.__repr__ésF€ðÔ Ð,ð
2˜TÔ-Ð1Ð1Ð1àð	ð5¥ D¡	¤	Ð4¨SÐ4Ð4Ð4Ð4rcód—d td„|jD¦«¦«¦«S)anA string representation of the specifier set that can be round-tripped.

        Note that the ordering of the individual specifiers within the set may not
        match the input string.

        >>> str(SpecifierSet(">=1.0.0,!=1.0.1"))
        '!=1.0.1,>=1.0.0'
        >>> str(SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False))
        '!=1.0.1,>=1.0.0'
        rc3ó4K—|]}t|¦«V—ŒdSr)r rs  rrçz'SpecifierSet.__str__.<locals>.<genexpr>	s(èè€Ð;Ð;¨!s 1™vœvÐ;Ð;Ð;Ð;Ð;Ð;r)ráÚsortedr
r"s rr$zSpecifierSet.__str__þs/€ðxŠxÐ;Ð;¨t¬{Ð;Ñ;Ô;Ñ;Ô;Ñ<Ô<Ð<rr&có*—t|j¦«Sr)r„r
r"s rr(zSpecifierSet.__hash__s€ÝD”KÑ Ô Ð rr)úSpecifierSet | strcóª—t|t¦«rt|¦«}nt|t¦«stSt¦«}t	|j|jz¦«|_|j€|j
|j|_nG|j|j€
|j|_n,|j|jkr
|j|_ntd¦«‚|S)a‚Return a SpecifierSet which is a combination of the two sets.

        :param other: The other object to combine with.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1'
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1')
        <SpecifierSet('!=1.0.1,!=2.0.1,<=2.0.0,>=1.0.0')>
        NzFCannot combine SpecifierSets with True and False prerelease overrides.)rr rr†rr
rdÚ
ValueError)r#r)Ú	specifiers   rÚ__and__zSpecifierSet.__and__sۀõeSÑ!Ô!ð	"Ý  Ñ'Ô'ˆEˆEݘE¥<Ñ0Ô0ð	"Ý!Ð!å ‘N”Nˆ	Ý$ T¤[°5´<Ñ%?Ñ@Ô@ˆ	ÔàÔÐ$¨Ô);Ð)GØ%*Ô%7ˆIÔ"Ð"Ø
Ô
Ð
*¨uÔ/AÐ/IØ%)Ô%6ˆIÔ"Ð"Ø
Ô
 %Ô"4Ò
4Ð
4Ø%)Ô%6ˆIÔ"Ð"åðñôð
ð
Ðrr*có̗t|ttf¦«rtt|¦«¦«}nt|t¦«stS|j|jkS)a¡Whether or not the two SpecifierSet-like objects are equal.

        :param other: The other object to check against.

        The value of :attr:`prereleases` is ignored.

        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> (SpecifierSet(">=1.0.0,!=1.0.1", prereleases=False) ==
        ...  SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True))
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == ">=1.0.0,!=1.0.1"
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1") == SpecifierSet(">=1.0.0,!=1.0.2")
        False
        )rr rJrr†r
r-s  rr.zSpecifierSet.__eq__.sW€õ&ec¥9Ð-Ñ.Ô.ð	"Ý ¥ U¡¤Ñ,Ô,ˆEˆEݘE¥<Ñ0Ô0ð	"Ý!Ð!àŒ{˜eœlÒ*Ð*rcó*—t|j¦«S)z7Returns the number of specifiers in this specifier set.)rr
r"s rÚ__len__zSpecifierSet.__len__Hs€å4”;ÑÔÐrúIterator[Specifier]có*—t|j¦«S)zð
        Returns an iterator over all the underlying :class:`Specifier` instances
        in this specifier set.

        >>> sorted(SpecifierSet(">=1.0.0,!=1.0.1"), key=str)
        [<Specifier('!=1.0.1')>, <Specifier('>=1.0.0')>]
        )Úiterr
r"s rÚ__iter__zSpecifierSet.__iter__Ls€õD”KÑ Ô Ð rr6rcó,—| |¦«S)arReturn whether or not the item is contained in this specifier.

        :param item: The item to check for.

        This is used for the ``in`` operator and behaves the same as
        :meth:`contains` with no ``prereleases`` argument passed.

        >>> "1.2.3" in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> Version("1.2.3") in SpecifierSet(">=1.0.0,!=1.0.1")
        True
        >>> "1.0.1" in SpecifierSet(">=1.0.0,!=1.0.1")
        False
        >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1")
        False
        >>> "1.3.0a1" in SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True)
        True
        r¿rÀs  rrÁzSpecifierSet.__contains__VrÂrÚ	installedcóò‡‡—t‰t¦«st‰¦«Š‰€|jЉs	‰jrdS|r‰jrt‰j¦«Štˆˆfd„|jD¦«¦«S)a´Return whether or not the item is contained in this SpecifierSet.

        :param item:
            The item to check for, which can be a version string or a
            :class:`Version` instance.
        :param prereleases:
            Whether or not to match prereleases with this SpecifierSet. If set to
            ``None`` (the default), it uses :attr:`prereleases` to determine
            whether or not prereleases are allowed.

        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.2.3")
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains(Version("1.2.3"))
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.0.1")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1")
        False
        >>> SpecifierSet(">=1.0.0,!=1.0.1", prereleases=True).contains("1.3.0a1")
        True
        >>> SpecifierSet(">=1.0.0,!=1.0.1").contains("1.3.0a1", prereleases=True)
        True
        NFc3óF•K—|]}| ‰‰¬¦«V—ŒdS)rNr¿)rærr6r1s  €€rrçz(SpecifierSet.contains.<locals>.<genexpr>¢s3øèè€ÐRÐRÀ1—:’:˜d°:Ñ<Ô<ÐRÐRÐRÐRÐRÐRr)rrr1rkr´Úallr
)r#r6r1r"s `` rr8zSpecifierSet.containsks˜øø€õ<˜$¥Ñ(Ô(ð	!ݘ4‘=”=ˆDð
ÐØÔ*ˆKðð	˜tÔ1ð	ؐ5àð	.˜Ô+ð	.ݘ4Ô,Ñ-Ô-ˆDõÐRÐRÐRÐRÐRÀdÄkÐRÑRÔRÑRÔRÐRrr9r:r;có€—|€|j}|jr=|jD]&}| |t|¦«¬¦«}Œ't	|¦«Sg}g}|D]G}t|¦«}|jr|s|s| |¦«Œ2| |¦«ŒH|s|r|€t	|¦«St	|¦«S)a.Filter items in the given iterable, that match the specifiers in this set.

        :param iterable:
            An iterable that can contain version strings and :class:`Version` instances.
            The items in the iterable will be filtered according to the specifier.
        :param prereleases:
            Whether or not to allow prereleases in the returned iterator. If set to
            ``None`` (the default), it will be intelligently decide whether to allow
            prereleases or not (based on the :attr:`prereleases` attribute, and
            whether the only versions matching are prereleases).

        This method is smarter than just ``filter(SpecifierSet(...).contains, [...])``
        because it implements the rule from :pep:`440` that a prerelease item
        SHOULD be accepted if no other versions match the given specifier.

        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", "1.5a1"]))
        ['1.3']
        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.3", Version("1.4")]))
        ['1.3', <Version('1.4')>]
        >>> list(SpecifierSet(">=1.2.3").filter(["1.2", "1.5a1"]))
        []
        >>> list(SpecifierSet(">=1.2.3").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet(">=1.2.3", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']

        An "empty" SpecifierSet will filter items based on the presence of prerelease
        versions in the set.

        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"]))
        ['1.3']
        >>> list(SpecifierSet("").filter(["1.5a1"]))
        ['1.5a1']
        >>> list(SpecifierSet("", prereleases=True).filter(["1.3", "1.5a1"]))
        ['1.3', '1.5a1']
        >>> list(SpecifierSet("").filter(["1.3", "1.5a1"], prereleases=True))
        ['1.3', '1.5a1']
        Nr)r1r
r=r+rrrkrÆ)r#r9r1r[ÚfilteredrÈr6rÊs        rr=zSpecifierSet.filter¤sþ€ðXÐØÔ*ˆKð
Œ;ð	"Øœð
Pð
PØŸ;š; x½TÀ+Ñ=NÔ=N˜;ÑOÔOÝ˜‘>”>Ð!ð
24ˆHØ:<Ðà ð	
*ð	
*Ý!0°Ñ!6Ô!6ð"Ô/ð*¸ð*Ø#ð7Ø)×0Ò0°Ñ6Ô6Ð6øà—O’O DÑ)Ô)Ð)Ð)ðð
/Ð 1ð
/°kÐ6IÝÐ-Ñ.Ô.Ð.嘑>”>Ð!rrË)rr r1r/rr3rArBr>r?)r)rrrr@)rr)r6rrr+)NN)r6rr1r/r"r/rr+rrC)rrrrrfrFr1rGrzr$r(rr.rr rÁr8r=rrrrr²sj€€€€€ððð(ð(ð(ð(ð(ð6ð7ð7ð7ñ„Xð7ð Ôð"ð"ð"ñÔð"ð5ð5ð5ð5ð*=ð=ð=ð=ð!ð!ð!ð!ððððð@+ð+ð+ð+ð4 ð ð ð ð!ð!ð!ð!ð#ð#ð#ð#ð0$(Ø!%ð	7Sð7Sð7Sð7Sð7SðtRVðM"ðM"ðM"ðM"ðM"ðM"ðM"rr)rrrr)rr rrÒ)rßrÒrr )râr rr+)rîrÒrïrÒrrð)"rÚ
__future__rrDr”rÎÚtypingrrrrrÚutilsr
rrr rrr+rˆrrrÚABCMetarrJrÏrÙr—r’r–rœrrrrú<module>r,sðððð#Ð"Ð"Ð"Ð"Ð"à
€
€
€
ØÐÐÐØ	€	€	€	Ø?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?à'Ð'Ð'Ð'Ð'Ð'ØÐÐÐÐÐà˜ ˜Ô%€ØWÐ1¸ÐIÑIÔIÐØ˜W c˜N¨DÐ0Ô1Ðððððð	ð	ð	ð	ð	zñ	ô	ð	ð4ð4ð4ð4ð4˜cœkð4ñ4ô4ð4ðnMðMðMðMðM
ñMôMðMð`”
Ð<Ñ=Ô=€
ððððð,'ð'ð'ð'ððððððððð*"ð"ð"ð"ð"=ñ"ô"ð"ð"ð"r