Ë ‡úBõD›³ã ó–—dZddlZddlZddlZddlmZmZmZmZm Z m Z m Z m Z m Z ddlmZddlmZe eefZe de¬«ZeeegefZd ed efd „ZGd „d e«ZGd„dej4¬«ZGd„de«Zej:d«Zd ed eefd„Zded efd„Z deedeed e eeeeffd„Z!Gd„de«Z"y)zŠ .. testsetup:: from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier from packaging.version import Version éN) ÚCallableÚIterableÚIteratorÚListÚOptionalÚSetÚTupleÚTypeVarÚUnioné)Úcanonicalize_version)ÚVersionÚUnparsedVersionVar)ÚboundÚversionÚreturncó<—t|t«s t|«}|S©N)Ú isinstancer)rs ú9/usr/lib/python3.12/site-packages/packaging/specifiers.pyÚ_coerce_versionr"s€Ü �gœwÔ 'ܘ'Ó"ˆØ €Nócó—eZdZdZy)Ú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 óx—eZdZejdefd„«Zejdefd„«Zejde de fd„«Z e ejde e fd„««Zejde ddfd „«Zejdd ed e e de fd „«Zej dd eed e e deefd„«Zy)Ú BaseSpecifierrcó—y)zŽ Returns the str representation of this Specifier-like object. This should be representative of the Specifier itself. Nr©Úselfs rÚ__str__zBaseSpecifier.__str__5ó�rcó—y)zF Returns a hash value for this Specifier-like object. Nrr#s rÚ__hash__zBaseSpecifier.__hash__<r&rÚothercó—y)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__Br&rcó—y)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.prereleasesKr&rÚvalueNcó—y)zQSetter for :attr:`prereleases`. :param value: The value to set. Nr©r$r/s rr.zBaseSpecifier.prereleasesTr&rÚitemr.có—y)zR Determines if the given item is contained within this specifier. Nr)r$r2r.s rÚcontainszBaseSpecifier.contains[r&rÚiterablecó—y)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$r5r.s rÚfilterzBaseSpecifier.filterar&rr)rrrÚabcÚabstractmethodÚstrr%Úintr(ÚobjectÚboolr,Úpropertyrr.Úsetterr4rrrr7rrrr!r!4s7„Ø×Ñð ˜ò óð ð  ×Ñð ˜#ò óð ð  ×Ñð ˜Fð  tò óð ðØ×Ñð ˜X d™^ò óóð ð×Ñð  ð ¨$ò óð ð  ×Ññ ˜Sð ¨x¸©~ð Èò óð ð  ×ÑàTXñ Ø Ð!3Ñ4ð ØCKÈDÁ>ð à Ð$Ñ %ò óñ rr!)Ú metaclassc ó†—eZdZdZdZdZejdezezdzejejz«Z dddd d d d d dœZ d0de de eddfd„Zedefd„«Zej$deddfd„«Zede fd„«Zede fd„«Zde fd„Zde fd„Zedee e ffd„«Zdefd„Zdedefd„Zde defd „Zd!ede defd"„Z d!ede defd#„Z!d!ede defd$„Z"d!ede defd%„Z#d!ede defd&„Z$d!ed'e defd(„Z%d!ed'e defd)„Z&d!ede defd*„Z'd+e(e efdefd,„Z) d1d+e*de edefd-„Z+ d1d.e,e-de ede.e-fd/„Z/y)2Ú 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(~=|==|!=|<=|>=|<|>|===)) aÈ (?P (?: # 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. (?=Ú<Ú>ú===NÚspecr.rcóð—|jj|«}|std|›d�«‚|jd«j «|jd«j «f|_||_y)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$rRr.Úmatchs rÚ__init__zSpecifier.__init__æso€ð— ‘ ×"Ñ" 4Ó(ˆÙÜ"Ð%9¸$¸¸qÐ#AÓBÐ Bð �K‰K˜ Ó #× )Ñ )Ó +Ø �K‰K˜ Ó "× (Ñ (Ó *ð' ˆŒ ð (ˆÕrcó¼—|j� |jS|j\}}|dvr1|dk(r|jd«r|dd}t|«jryy)N)rLrNrMrKrQrLú.*éþÿÿÿTF)r[rZÚendswithrÚ is_prerelease)r$rUrs rr.zSpecifier.prereleasessm€ð × Ñ Ð (Ø×$Ñ$Ð $ð !ŸJ™Jш�'Ø Ð6Ñ 6ð˜4Ò G×$4Ñ$4°TÔ$:Ø! # 2˜,�ô�wÓ×-Ò-Øàrr/có—||_yr©r[r1s rr.zSpecifier.prereleasesó €à!ˆÕrcó —|jdS)z`The operator of this specifier. >>> Specifier("==1.2.3").operator '==' r©rZr#s rrUzSpecifier.operatoró€ð�z‰z˜!‰}Ðrcó —|jdS)zaThe version of this specifier. >>> Specifier("==1.2.3").version '1.2.3' r rgr#s rrzSpecifier.version%rhrcóŒ—|j�d|j›�nd}d|jj›dt |«›|›d�S)aTA representation of the Specifier that shows all internal state. >>> Specifier('>=1.0.0') =1.0.0')> >>> Specifier('>=1.0.0', prereleases=False) =1.0.0', prereleases=False)> >>> Specifier('>=1.0.0', prereleases=True) =1.0.0', prereleases=True)> ú, prereleases=ÚrOÚ(ú)>)r[r.Ú __class__rr:©r$Úpres rÚ__repr__zSpecifier.__repr__.sU€ð× Ñ Ð,ð˜T×-Ñ-Ð0Ñ 1àð ð �4—>‘>×*Ñ*Ð+¨1¬S°«Y¨M¸#¸¸bÐAÐArcó4—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{}{})ÚformatrZr#s rr%zSpecifier.__str__@s€ðˆv�}‰}˜dŸj™jÐ)Ð)rcóx—t|jd|jddk7¬«}|jd|fS)Nr rrK©Ústrip_trailing_zero)r rZ)r$Úcanonical_versions rÚ_canonical_speczSpecifier._canonical_specJs>€ä0Ø �J‰J�q‰MØ!%§¡¨A¡°$Ñ!6ô Ðð�z‰z˜!‰}Ð/Ð/Ð/rcó,—t|j«Sr)Úhashryr#s rr(zSpecifier.__hash__Rs€Ü�D×(Ñ(Ó)Ð)rr)cóî—t|t«r |jt|««}nt||j«stS|j |j k(S#t$r tcYSwxYw)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:rorÚNotImplementedryr+s rr,zSpecifier.__eq__Usi€ô& �eœSÔ !ð &ØŸ™¤s¨5£zÓ2‘ô˜E 4§>¡>Ô2Ü!Ð !à×#Ñ# u×'<Ñ'<Ñ<Ð<øô $ò &Ü%Ò%ð &ús’A"Á"A4Á3A4Úopcó>—t|d|j|›�«}|S)NÚ _compare_)ÚgetattrÚ _operators)r$r~Úoperator_callables rÚ _get_operatorzSpecifier._get_operatorrs+€Ü.5Ø �I˜dŸo™o¨bÑ1Ð2Ð3ó/ Ðð!Ð rÚ prospectivec óì—djttjtt |«««dd«}|dz }|j d«||«xr|j d«||«S)NÚ.éÿÿÿÿr_rNrL)ÚjoinÚlistÚ itertoolsÚ takewhileÚ_is_not_suffixÚ_version_splitr„)r$r…rRÚprefixs rÚ_compare_compatiblezSpecifier._compare_compatiblexs{€ð—‘Ü ”×$Ñ$¤^´^ÀDÓ5IÓJÓ KÈCÈRÐ Pó ˆð �$‰ˆà'ˆt×!Ñ! $Ó'¨ °TÓ:ò Ð?W¸t×?QÑ?QÐRVÓ?WØ ˜ó@ ð rcóD—|jd«r_t|jd¬«}t|ddd¬«}t|«}t|«}t ||«\}}|dt |«} | |k(St |«} | jst |j«}|| k(S)Nr_Frvr`)rar ÚpublicrŽÚ _pad_versionÚlenrÚlocal) r$r…rRÚ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ˆOô(¨Ó8ˆJô !/Ð/EÓ FÐ ô%1Ð1BÀJÓ$OÑ !Ð  ð %7Ð7H¼¸Z»Ð$IÐ !à(¨JÑ6Ð 6ô# 4›=ˆLð  ×%Ò%Ü% k×&8Ñ&8Ó9� à ,Ñ.Ð .rcó(—|j||« Sr)rž©r$r…rRs rÚ_compare_not_equalzSpecifier._compare_not_equal¶s€Ø×&Ñ& {°DÓ9Ð9Ð9rcóD—t|j«t|«kSr©rr’r s rÚ_compare_less_than_equalz"Specifier._compare_less_than_equal¹ó€ô �{×)Ñ)Ó*¬g°d«mÑ;Ð;rcóD—t|j«t|«k\Srr£r s rÚ_compare_greater_than_equalz%Specifier._compare_greater_than_equalÀr¥rÚspec_strcó®—t|«}||ksy|js8|jr,t|j«t|j«k(ryy©NFT)rrbÚ base_version©r$r…r¨rRs rÚ_compare_less_thanzSpecifier._compare_less_thanÇsT€ô�xÓ ˆð ˜TÒ!Øð ×!Ò! k×&?Ò&?Ü�{×/Ñ/Ó0´G¸D×>> "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 ©r4©r$r2s rÚ __contains__zSpecifier.__contains__ó€ð&�}‰}˜TÓ"Ð"rcó®—|€ |j}t|«}|jr|sy|j|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 F)r.rrbr„rUr)r$r2r.Únormalized_itemrƒs rr4zSpecifier.containssY€ð8 Ð Ø×*Ñ*ˆKô*¨$Ó/ˆð × (Ò (±Øð/3×.@Ñ.@ÀÇÁÓ.OÐÙ  °$·,±,Ó?Ð?rr5c#óöK—d}g}d|�|ndi}|D]S}t|«}|j|fi|¤ŽsŒ"|jr |s|js|j |«ŒNd}|–—ŒU|s|r |D]}|–—Œyyy­w)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', ] >>> 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'] Fr.NT)rr4rbr.Úappend)r$r5r.ÚyieldedÚfound_prereleasesÚkwrÚparsed_versions rr7zSpecifier.filterEs›èø€ð<ˆØÐà¨KÐ,C™[ÈÐ Nˆó ˆGÜ,¨WÓ5ˆNàˆt�}‰}˜^Ñ2¨rÓ2ð"×/Ò/Ù 4×#3Ò#3à%×,Ñ,¨WÕ5ð#�GØ!“Mð ñ(Ñ,Û,�Ø“ ñ-ð-ˆwùs ‚0A9³AA9©rlNr)0rrrrÚ_operator_regex_strÚ_version_regex_strÚreÚcompileÚVERBOSEÚ IGNORECASErVr‚r:rr=r]r>r.r?rUrrrr%r ryr;r(r<r,ÚCallableOperatorr„rr�ržr¡r¤r§r­r°r³r r·ÚUnparsedVersionr4rrrr7rrrrBrBksÅ„ñð Ðð\ Ðð|ˆR�Z‰ZØÐ%Ñ%Ð(:Ñ:¸WÑDØ � ‰ �R—]‘]Ñ"ó€Fð ØØØØ"Ø Ø Øñ €Jñ(˜Sð(°H¸T±Nð(Èdó(ð4ð˜Tòóðð.×Ñð" ð"¨$ò"óð"ðð˜#òóððð˜òóððB˜#óBð$*˜ó*ðð0  s¨C x¡ò0óð0ð*˜#ó*ð=˜Fð= tó=ð:! ð!Ð(8ó!ð  ¨wð ¸cð Àdó ð*'/¨'ð'/¸ð'/Àó'/ðR:¨gð:¸Sð:ÀTó:ð<°Gð<À3ð<È4ó<ð<°wð<Àcð<Èdó<ð¨gðÀðÈóð2°ðÀCðÈDóð>=¨gð=¸Sð=ÀTó=ð#  s¨G |Ñ!4ð#¸ó#ð,DHñ,@Ø#ð,@Ø2:¸4±.ð,@à ó,@ð^UYñ;Ø Ð!3Ñ4ð;ØCKÈDÁ>ð;à Ð$Ñ %ô;rrBz^([0-9]+)((?:a|b|c|rc)[0-9]+)$cóÆ—g}|jd«D]J}tj|«}|r |j|j ««Œ:|j |«ŒL|S)Nr‡)ÚsplitÚ _prefix_regexrWÚextendÚgroupsr¼)rÚresultr2r\s rrŽrކsR€Ø€FØ— ‘ ˜cÖ"ˆÜ×$Ñ$ TÓ*ˆÙ Ø �M‰M˜%Ÿ,™,›.Õ )à �M‰M˜$Õ ð #ð €MrÚsegmentcó.‡—tˆfd„dD«« S)Nc3ó@•K—|]}‰j|«–—Œy­wr)Ú startswith)Ú.0r�rÐs €rÚ z!_is_not_suffix..’s!øèø€ðÙ1P vˆ×ј6×"Ñ1Pùsƒ)ÚdevÚaÚbÚrcÚpost)Úany)rÐs`rr�r�‘s"ø€ÜóÙ1Póóð ðrÚleftÚrightc óž—gg}}|jttjd„|«««|jttjd„|«««|j|t |d«d«|j|t |d«d«|j ddgt dt |d«t |d«z «z«|j ddgt dt |d«t |d«z «z«ttj|Ž«ttj|Ž«fS)Ncó"—|j«Sr©Úisdigit©Úxs rÚz_pad_version..›s €¸¿¹¼rcó"—|j«Srràrâs rräz_pad_version..œs €¸!¿)¹)¼+rrr Ú0)r¼rŠr‹rŒr”ÚinsertÚmaxÚchain)rÜrÝÚ left_splitÚ right_splits rr“r“—s"€Ø  "� €Jð×Ñ”dœ9×.Ñ.Ñ/DÀdÓKÓLÔMØ×Ñ”tœI×/Ñ/Ñ0EÀuÓMÓNÔOð×Ñ�dœ3˜z¨!™}Ó-Ð/Ð0Ô1Ø×Ñ�uœS ¨Q¡Ó0Ð2Ð3Ô4ð×Ñ�a˜#˜¤ Q¬¨K¸©NÓ(;¼cÀ*ÈQÁ-Ó>PÑ(PÓ!QÑQÔRØ×Ñ�q˜3˜%¤# a¬¨Z¸©]Ó);¼cÀ+ÈaÁ.Ó>QÑ)QÓ"RÑRÔSä ”—‘ *Ð-Ó .´´Y·_±_ÀkÐ5RÓ0SÐ TÐTrc óH—eZdZdZ ddedeeddfd„Zedeefd„«Z e jdeddfd „«Z defd „Z defd „Z de fd „Zd edefddfd„Zd edefd„Zde fd„Zdeefd„Zdedefd„Z ddedeedeedefd„Z ddeedeedeefd„Zy)Ú 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. NÚ specifiersr.rcó —|jd«D�cgc]#}|j«sŒ|j«‘Œ%}}t«}|D]}|jt |««Œt |«|_||_ycc}w)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. Ú,N)rËrYÚsetÚaddrBÚ frozensetÚ_specsr[)r$rîr.ÚsÚsplit_specifiersÚparsedÚ specifiers rr]zSpecifierSet.__init__°sv€ð(0:×/?Ñ/?ÀÔ/DÓRÑ/D¨!ÈÏÉÍ ˜AŸG™G�IÐ/DÐÐRô"%£ˆÛ)ˆIØ �J‰J”y Ó+Õ ,ð*ô  Ó'ˆŒ ð(ˆÕùòSs ”BªBcó„—|j� |jS|jsytd„|jD««S)Nc3ó4K—|]}|j–—Œy­wr©r.©rÔrõs rrÕz+SpecifierSet.prereleases..âsèø€Ð6©+ Q�1—=•=©+ùs‚)r[rôrÛr#s rr.zSpecifierSet.prereleasesÓs?€ð × Ñ Ð (Ø×$Ñ$Ð $ð �{Š{ØôÑ6¨$¯+ª+Ó6Ó6Ð6rr/có—||_yrrdr1s rr.zSpecifierSet.prereleasesärercó^—|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') =1.0.0')> >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=False) =1.0.0', prereleases=False)> >>> SpecifierSet('>=1.0.0,!=2.0.0', prereleases=True) =1.0.0', prereleases=True)> rkrlz>> 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' rðc3ó2K—|]}t|«–—Œy­wr)r:rüs rrÕz'SpecifierSet.__str__..sèø€Ð;©{¨!œs 1Ÿv©{ùs‚)r‰Úsortedrôr#s rr%zSpecifierSet.__str__ýs"€ð�x‰xœÑ;¨t¯{ª{Ó;Ó;Ó<Ð>> SpecifierSet(">=1.0.0,!=1.0.1") & '<=2.0.0,!=2.0.1' =1.0.0')> >>> SpecifierSet(">=1.0.0,!=1.0.1") & SpecifierSet('<=2.0.0,!=2.0.1') =1.0.0')> zFCannot combine SpecifierSets with True and False prerelease overrides.)rr:rír}rórôr[Ú ValueError)r$r)røs rÚ__and__zSpecifierSet.__and__ så€ô �eœSÔ !Ü  Ó'‰EܘE¤<Ô0Ü!Ð !ä “Nˆ Ü$ T§[¡[°5·<±<Ñ%?Ó@ˆ Ôà × Ñ Ð $¨×);Ñ);Ð)GØ%*×%7Ñ%7ˆIÔ "ðÐð× Ñ Ð *¨u×/AÑ/AÐ/IØ%)×%6Ñ%6ˆIÔ "ðÐð× Ñ  %×"4Ñ"4Ò 4Ø%)×%6Ñ%6ˆIÔ "ðÐô ðóð rcó¶—t|ttf«rtt|««}nt|t«stS|j |j k(S)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:rBrír}rôr+s rr,zSpecifierSet.__eq__-sD€ô& �eœc¤9Ð-Ô .Ü ¤ U£Ó,‰EܘE¤<Ô0Ü!Ð !à�{‰{˜eŸl™lÑ*Ð*rcó,—t|j«S)z7Returns the number of specifiers in this specifier set.)r”rôr#s rÚ__len__zSpecifierSet.__len__Gs€ä�4—;‘;ÓÐrcó,—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) [, =1.0.0')>] )Úiterrôr#s rÚ__iter__zSpecifierSet.__iter__Ks€ô�D—K‘KÓ Ð rr2có$—|j|«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__Ur¸rÚ installedcóú‡‡—t‰t«s t‰«Š‰€ |jЉs ‰jry|r!‰jrt‰j«Št ˆˆfd„|j D««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 Fc3óD•K—|]}|j‰‰¬«–—Œy­w)rûNrµ)rÔrõr2r.s €€rrÕz(SpecifierSet.contains..¡søèø€ÐRÁkÀ�1—:‘:˜d° �:×<Ákùsƒ )rrr.rbr«Úallrô)r$r2r.r s `` rr4zSpecifierSet.containsjsmù€ô<˜$¤Ô(ܘ4“=ˆDð Ð Ø×*Ñ*ˆKñ˜t×1Ò1Øá ˜×+Ò+ܘ4×,Ñ,Ó-ˆDô ÔRÀdÇkÂkÓRÓRÐRrr5cór—|€ |j}|jr8|jD]}|j|t|«¬«}Œ t |«Sg}g}|D]A}t |«}|j r|s|rŒ|j|«Œ1|j|«ŒC|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', ] >>> 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'] rû)r.rôr7r=r rrbr¼)r$r5r.rRÚfilteredr¾r2rÀs rr7zSpecifierSet.filter£s¼€ðX Ð Ø×*Ñ*ˆKð �;Š;ØŸ œ �ØŸ;™; x¼TÀ+Ó=N˜;ÓO‘ð$䘓>Ð !ð 24ˆHØ:<Ð ã �Ü!0°Ó!6�ð"×/Ò/¹ Ú#Ø)×0Ñ0°Õ6à—O‘O DÕ)ð!ñÑ 1°kÐ6IÜÐ-Ó.Ð.䘓>Ð !rrÁ)NNr)rrrrr:rr=r]r>r.r?rrr%r;r(r rr<r,rrrBr rÉr·r4rrr7rrrrírí©su„ñðCGñ!(Øð!(Ø19¸$±ð!(à ó!(ðFð7˜X d™^ò7óð7ð ×Ñð" ð"¨$ò"óð"ð5˜#ó5ð* =˜ó =ð!˜#ó!ð˜U >°3Ð#6Ñ7ð¸Nóð@+˜Fð+ tó+ð4 ˜ó ð!˜( 9Ñ-ó!ð# ð#°Tó#ð0'+Ø$(ñ 7Sàð7Sð˜d‘^ð7Sð˜D‘>ð 7Sð ó 7SðtUYñM"Ø Ð!3Ñ4ðM"ØCKÈDÁ>ðM"à Ð$Ñ %ôM"rrí)#rr8r‹rÄÚtypingrrrrrrr r r Úutilsr rrr:rÉrr=rÈrrrÚABCMetar!rBrÅrÌrŽr�r“rírrrÚrsðñó ÛÛ ÷ ÷ õ õ(Ýà˜ ˜ Ñ%€ÙÐ1¸ÔIÐØ˜W c˜N¨DÐ0Ñ1Ðð˜_ð°óô �zô ô4 ˜cŸk™kõ4 ônU� ôUðp�— ‘ Ð<Ó=€ ð˜Cð D¨¡Ióð˜Cð Dóð U�t˜C‘yðU¨¨c©ðU°u¸TÀ#¹YÈÈSÉ Ð=QÑ7RóUô$G"�=õG"r