ROOTPLOIT
Server: Apache
System: Linux info 3.0 #1337 SMP Tue Jan 01 00:00:00 CEST 2000 all GNU/Linux
User: ws67150586 (67150586)
PHP: 8.3.36
Disabled: NONE
Upload Files
File: //kunden/kunden/kunden/lib/python3/dist-packages/packaging/__pycache__/specifiers.cpython-313.pyc
�

��hw���L�SrSSKJr SSKrSSKrSSKrSSKJrJrJ	r	J
r
Jr SSKJ
r
 SSKJr \\\4r\
"S\S	9r\\\/\4rSS
jr"SS\5r"S
S\R0S9r"SS\5r\R6"S5rSSjrSSjrSSjrSSjr "SS\5r!g)z�
.. testsetup::

    from packaging.specifiers import Specifier, SpecifierSet, InvalidSpecifier
    from packaging.version import Version
�)�annotationsN)�Callable�Iterable�Iterator�TypeVar�Union�)�canonicalize_version)�Version�UnparsedVersionVar)�boundc�F�[U[5(d[U5nU$�N)�
isinstancer)�versions �6/usr/lib/python3/dist-packages/packaging/specifiers.py�_coerce_versionrs���g�w�'�'��'�"���N�c��\rSrSrSrSrg)�InvalidSpecifier� z�
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__�__firstlineno__�__doc__�__static_attributes__rrrrr s��rrc�J�\rSrSr\R
SSj5r\R
SSj5r\R
S
Sj5r\	\R
SSj55r
\
RSSj5r
\R
SSSjj5r\R
SSS	jj5r
S
rg)�
BaseSpecifier�,c��g)zv
Returns the str representation of this Specifier-like object. This
should be representative of the Specifier itself.
Nr��selfs r�__str__�BaseSpecifier.__str__-��rc��g)z6
Returns a hash value for this Specifier-like object.
Nrr#s r�__hash__�BaseSpecifier.__hash__4r'rc��g)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$�others  r�__eq__�BaseSpecifier.__eq__:r'rc��g)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�prereleases�BaseSpecifier.prereleasesCr'rc��g)zASetter for :attr:`prereleases`.

:param value: The value to set.
Nr�r$�values  rr1r2Lr'rNc��g)zB
Determines if the given item is contained within this specifier.
Nr)r$�itemr1s   r�contains�BaseSpecifier.containsSr'rc��g)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$�iterabler1s   r�filter�BaseSpecifier.filterYr'rr��return�str�r?�int�r-�objectr?�bool�r?�bool | None�r5rEr?�Noner)r7r@r1rGr?rE�r;zIterable[UnparsedVersionVar]r1rGr?zIterator[UnparsedVersionVar])rrrr�abc�abstractmethodr%r)r.�propertyr1�setterr8r<rrrrr r ,s���������	������
	��������������������	������
	���QU��4��CN��	%���rr )�	metaclassc	���\rSrSrSrSrSr\R"S\-\-S-\R\R-5rSSS	S
SSS
SS.rS(S)Sjjr
\S*Sj5r\R S+Sj5r\S,Sj5r\S,Sj5rS,SjrS,Sjr\S-Sj5rS.SjrS/SjrS0SjrS1SjrS1SjrS1SjrS1SjrS1S jrS2S!jrS2S"jrS1S#jr S3S$jr!S4S5S%jjr"S4S6S&jjr#S'r$g)7�	Specifier�ca+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!=�<=�>=�<�>�===Nc��URRU5nU(d[SU<35eURS5R	5URS5R	54UlX lg)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$�specr1�matchs    r�__init__�Specifier.__init__�sk�����"�"�4�(���"�%8���#A�B�B�
�K�K�
�#�)�)�+��K�K�	�"�(�(�*�'
��
�(�rc���URbUR$URupUS;a<US:XaURS5(aUSSn[U5R(agg)N)r\r^r]r[rar`r_r\�.*���TF)rirh�endswithr�
is_prerelease)r$rcrs   rr1�Specifier.prereleases�sn�����(��$�$�$�
!�J�J����@�@��4��G�$4�$4�T�$:�$:�!�#�2�,���w��-�-��rc��Xlgr�rir4s  rr1rs���!�rc� �URS$)zHThe operator of this specifier.

>>> Specifier("==1.2.3").operator
'=='
r�rhr#s rrc�Specifier.operator����z�z�!�}�rc� �URS$)zIThe version of this specifier.

>>> Specifier("==1.2.3").version
'1.2.3'
r	rxr#s rr�Specifier.versionrzrc��URbSUR<3OSnSURRS[	U5<US3$)aA 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)>
�, prereleases=�r_�(�)>)rir1�	__class__rr@�r$�pres  r�__repr__�Specifier.__repr__&sU��� � �,��T�-�-�0�1��	��4�>�>�*�*�+�1�S��Y�M�#��b�A�Arc�4�SR"UR6$)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{}{})�formatrhr#s rr%�Specifier.__str__8s���}�}�d�j�j�)�)rc�r�[URSURSS:gS9nURSU4$)Nr	rr[��strip_trailing_zero)r
rh)r$�canonical_versions  r�_canonical_spec�Specifier._canonical_specBs>��0��J�J�q�M�!%���A��$�!6�
���z�z�!�}�/�/�/rc�,�[UR5$r)�hashr�r#s rr)�Specifier.__hash__Js���D�(�(�)�)rc��[U[5(aUR[U55nO [XR5(d[$UR
UR
:H$![a	 [s$f=f)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@r�r�NotImplementedr�r,s  rr.�Specifier.__eq__Msm��&�e�S�!�!�
&����s�5�z�2���E�>�>�2�2�!�!��#�#�u�'<�'<�<�<��$�
&�%�%�
&�s�A+�+A>�=A>c�>�[USURU35nU$)N�	_compare_)�getattr�
_operators)r$�op�operator_callables   r�
_get_operator�Specifier._get_operatorjs+��.5��I�d�o�o�b�1�2�3�/
��!� rc
���[[[R"[[U555SS5nUS-
nUR
S5"X5=(a UR
S5"X5$)N���ror^r\)�
_version_join�list�	itertools�	takewhile�_is_not_suffix�_version_splitr�)r$�prospectiverj�prefixs    r�_compare_compatible�Specifier._compare_compatiblepsn�����$�$�^�^�D�5I�J�K�C�R�P�
��
	�$����!�!�$�'��:�
�t�?Q�?Q�RV�?W��@
�	
rc�D�URS5(aV[URSS9n[USSSS9n[U5n[U5n[	Xe5upxUS[U5n	X�:H$[
U5n
U
R(d[
UR5nX:H$)NroFr�rp)rqr
�publicr��_pad_version�lenr�local)r$r�rj�normalized_prospective�normalized_spec�
split_spec�split_prospective�padded_prospective�_�shortened_prospective�spec_versions           r�_compare_equal�Specifier._compare_equal�s����=�=����%9��"�"��&�"�3�4���9�RW�X�O�(��8�J�
!/�/E� F��%1�1B�$O�!��
%7�7H��Z��$I�!�(�6�6�#�4�=�L�
 �%�%�%�k�&8�&8�9���.�.rc�.�URX5(+$r)r��r$r�rjs   r�_compare_not_equal�Specifier._compare_not_equal�s���&�&�{�9�9�9rc�D�[UR5[U5:*$r�rr�r�s   r�_compare_less_than_equal�"Specifier._compare_less_than_equal�����{�)�)�*�g�d�m�;�;rc�D�[UR5[U5:�$rr�r�s   r�_compare_greater_than_equal�%Specifier._compare_greater_than_equal�r�rc���[U5nX:dgUR(d>UR(a-[UR5[UR5:Xagg�NFT)rrr�base_version�r$r��spec_strrjs    r�_compare_less_than�Specifier._compare_less_than�sR���x� ��
�!���!�!�k�&?�&?��{�/�/�0�G�D�<M�<M�4N�N��
rc�8�[U5nX:�dgUR(d>UR(a-[UR5[UR5:XagURb-[UR5[UR5:Xaggr�)r�is_postreleaser�r�r�s    r�_compare_greater_than�Specifier._compare_greater_than�s����x� ��
�!���"�"�{�'A�'A��{�/�/�0�G�D�<M�<M�4N�N�����(��{�/�/�0�G�D�<M�<M�4N�N��
rc�h�[U5R5[U5R5:H$r)r@�lowerr�s   r�_compare_arbitrary�Specifier._compare_arbitrary�s&���;��%�%�'�3�t�9�?�?�+<�<�<rc�$�URU5$)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$r7s  r�__contains__�Specifier.__contains__����&�}�}�T�"�"rc���UcURn[U5nUR(aU(dgURUR5nU"X0R
5$)a�Return 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)r1rrrr�rcr)r$r7r1�normalized_itemr�s     rr8�Specifier.contains	sW��4���*�*�K�*�$�/��
�(�(���/3�.@�.@����.O�� ��,�,�?�?rc#�@# �Sn/nSUbUOS0nUHjn[U5nUR"U40UD6(dM(UR(a+U(d$UR(dUR	U5 MdSnUv� Ml U(dU(aUHnUv� M	 ggg7f)a�Filter 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)rr8rrr1�append)r$r;r1�yielded�found_prereleases�kwr�parsed_versions        rr<�Specifier.filter5s����<�����K�,C�[��
N�� �G�,�W�5�N��}�}�^�2�r�2�2�"�/�/��4�#3�#3�%�,�,�W�5�#�G�!�M� �(�,�,���
�-�-�w�s�4B�A$B)rirh�rN)rjr@r1rGr?rI)r?rErHr>)r?ztuple[str, str]rArC)r�r@r?�CallableOperator)r�rrjr@r?rE)r�rr�r@r?rE)r7z
str | Versionr?rEr)r7�UnparsedVersionr1rGr?rErJ)%rrrrr�_operator_regex_str�_version_regex_str�re�compile�VERBOSE�
IGNORECASErdr�rlrMr1rNrcrr�r%r�r)r.r�r�r�r�r�r�r�r�r�r�r8r<rrrrrQrQcsU�����\��|�Z�Z��%�%�(:�:�W�D�
�
�
�R�]�]�"��F�����"�
�
��	�J�(�4����.���"��"���������B�$*��0��0�*�=�:!�
�(&/�P:�<�<��0�<=�#�**@�ZRV�;�4�;�CN�;�	%�;�;rrQz^([0-9]+)((?:a|b|c|rc)[0-9]+)$c�2�/nURS5up#nURU=(d S5 URS5HQn[R	U5nU(a!URUR
55 M@URU5 MS U$)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_regexre�extend�groups)r�result�epochr��restr7rks       rr�r�vsw���F��'�'��,�N�E�d�
�M�M�%�,�3���
�
�3����$�$�T�*����M�M�%�,�,�.�)��M�M�$�� ��Mrc�4�UtpUSSRU53$)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)�
componentsr�r�s   rr�r��s%���L�E��W�A�c�h�h�t�n�%�&�&rc�8^�[U4SjS55(+$)Nc3�F># �UHnTRU5v� M g7fr)�
startswith)�.0r��segments  �r�	<genexpr>�!_is_not_suffix.<locals>.<genexpr>�s#�����1P�v����6�"�"�1P�s�!)�dev�a�b�rc�post)�any)rs`rr�r��s"�����1P����rc���//p2UR[[R"SU555 UR[[R"SU555 URU[	US5S5 URU[	US5S5 URSS/[
S[	US5[	US5-
5-5 URSS/[
S[	US5[	US5-
5-5 [[RRU55[[RRU554$)Nc�"�UR5$r��isdigit��xs r�<lambda>�_pad_version.<locals>.<lambda>�s
�����rc�"�UR5$rrr
s rrr�s
��!�)�)�+rrr	r�)	r�r�r�r�r��insert�max�chain�
from_iterable)�left�right�
left_split�right_splits    rr�r��s3�� �"�����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�_�_�
*�
*�:�
6�7��Y�_�_�
*�
*�;�
7�8��rc��\rSrSrSrSSSjjr\SSj5r\RSSj5rSSjr	SSjr
SS	jrSS
jrSSjr
SSjrSS
jrSSjrSSSjjrSSSjjrSrg) �SpecifierSeti�z�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.
Nc�,�[U[5(adURS5Vs/sH)o3R5(dMUR5PM+ nn[	[[U55UlO[	U5UlX lgs snf)aLInitialize 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.
    May also be an iterable of ``Specifier`` instances, which will be used
    as is.
: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)	rr@r�rg�	frozenset�maprQ�_specsri)r$�
specifiersr1�s�split_specifierss     rrl�SpecifierSet.__init__�su��,�j�#�&�&�4>�3C�3C�C�3H�V�3H�a�G�G�I�	����	�3H��V�$�C�	�3C�$D�E�D�K�$�J�/�D�K�(��� Ws�B�Bc��URbUR$UR(dg[SUR55$)Nc3�8# �UHoRv� M g7fr�r1�r�r"s  rr�+SpecifierSet.prereleases.<locals>.<genexpr>�s���6�+�Q�=�=�+���)rir rr#s rr1�SpecifierSet.prereleases�s?�����(��$�$�$�
�{�{���6�$�+�+�6�6�6rc��Xlgrrur4s  rr1r+�rvrc�d�URbSUR<3OSnS[U5<US3$)a�A 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)>
r~rz<SpecifierSet(r�)rir1r@r�s  rr��SpecifierSet.__repr__�sD��� � �,��T�-�-�0�1��	� ��D�	�}�S�E��4�4rc�X�SR[SUR555$)a6A 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�8# �UHn[U5v� M g7fr)r@r(s  rr�'SpecifierSet.__str__.<locals>.<genexpr>s���;�{�!�s�1�v�v�{�r*)r��sortedr r#s rr%�SpecifierSet.__str__	s"���x�x��;�t�{�{�;�;�<�<rc�,�[UR5$r)r�r r#s rr)�SpecifierSet.__hash__s���D�K�K� � rc��[U[5(a[U5nO[U[5(d[$[5n[	UR
UR
-5UlURc URbURUlU$URb URcURUlU$URUR:XaURUlU$[S5e)aRReturn 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')>
zFCannot combine SpecifierSets with True and False prerelease overrides.)rr@rr�rr ri�
ValueError)r$r-�	specifiers   r�__and__�SpecifierSet.__and__s����e�S�!�!� ��'�E��E�<�0�0�!�!� �N�	�$�T�[�[�5�<�<�%?�@�	�����$��);�);�)G�%*�%7�%7�I�"����
�
�
*�u�/A�/A�/I�%)�%6�%6�I�"����
�
�%�"4�"4�
4�%)�%6�%6�I�"���	�X��
rc���[U[[45(a[[U55nO[U[5(d[$UR
UR
:H$)a1Whether 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@rQrr�r r,s  rr.�SpecifierSet.__eq__8sJ��&�e�c�9�-�.�.� ��U��,�E��E�<�0�0�!�!��{�{�e�l�l�*�*rc�,�[UR5$)z7Returns the number of specifiers in this specifier set.)r�r r#s r�__len__�SpecifierSet.__len__Rs���4�;�;��rc�,�[UR5$)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__�SpecifierSet.__iter__Vs���D�K�K� � rc�$�URU5$)aReturn 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��SpecifierSet.__contains__`r�rc�0^^�[T[5(d[T5mTcURmT(dTR(agU(a&TR(a[TR5m[UU4SjUR55$)aReturn 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�B># �UHoRTTS9v� M g7f)r'Nr�)r�r"r7r1s  ��rr�(SpecifierSet.contains.<locals>.<genexpr>�s����R�k��:�:�d��:�<�k�s�)rrr1rrr��allr )r$r7r1�	installeds `` rr8�SpecifierSet.containsusp���<�$��(�(��4�=�D�
���*�*�K��t�1�1����+�+��4�,�,�-�D��R�d�k�k�R�R�Rrc��UcURnUR(a7URHnURU[U5S9nM [	U5$/n/nUHSn[U5nUR(a#U(dU(dURU5 M@MBURU5 MU U(dU(aUc[	U5$[	U5$)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']
r')r1r r<rErArrrr�)r$r;r1rj�filteredr�r7r�s        rr<�SpecifierSet.filter�s���X���*�*�K�
�;�;������;�;�x�T�+�=N�;�O��$���>�!�
24�H�:<�� ��!0��!6��"�/�/��#�)�0�0��6�$��O�O�D�)�!�� 1�k�6I��-�.�.���>�!r)rir r�)r!zstr | Iterable[Specifier]r1rGr?rIrFrHr>rA)r-zSpecifierSet | strr?rrC)r?zIterator[Specifier])r7r�r?rE)NN)r7r�r1rGrJrGr?rErrJ)rrrrrrlrMr1rNr�r%r)r9r.r>rBr�r8r<rrrrrr�s����13�#'�$(�-�$(�!�$(�
�	$(�L�7��7� ���"��"�5�*=�!��>+�4 �!�#�0$(�!%�	7S��7S�!�7S��	7S�

�7S�tRV�M"�4�M"�CN�M"�	%�M"�M"rr)rr�r?r)rr@r?�	list[str])r�rOr?r@)rr@r?rE)rrOrrOr?ztuple[list[str], list[str]])"r�
__future__rrKr�r��typingrrrrr�utilsr
rrr@r�rrEr�rr7r�ABCMetar rQr�r�r�r�r�r�rrrr�<module>rTs����#�
��	�?�?�'������%���1��I���W�c�N�D�0�1���	�z�	�4�c�k�k�4�nM�
�M�`�
�
�<�=�
��,'���*I"�=�I"r