§
    .çiç  ã                   óR   — d dl mZmZ d dlmZ dd„Zeeffd„Z G d„ d¦  «        Z	dS )	é    )ÚdefaultdictÚdeque)ÚfilterfalseNc              #   óÐ   K  — t          ¦   «         }|j        }|€)t          |j        | ¦  «        D ]} ||¦  «         |V — ŒdS | D ] } ||¦  «        }||vr ||¦  «         |V — Œ!dS )zHList unique elements, preserving order. Remember all elements ever seen.N)ÚsetÚaddr   Ú__contains__)ÚiterableÚkeyÚseenÚseen_addÚelementÚks         úb/home/mmwave/public_html/mmwave/venv/lib/python3.11/site-packages/importlib_metadata/_itertools.pyÚunique_everseenr      s¦   è è € õ ‰5Œ5€DØŒx€HØ
€{Ý" 4Ô#4°hÑ?Ô?ð 	ð 	ˆGØˆH�WÑÔÐØˆMˆMˆMˆMð	ð 	ð  ð 	ð 	ˆGØ��G‘”ˆAØ˜ˆ}ˆ}Ø�˜‘”�Ø���øð		ð 	ó    c                 óÈ   — | €t          d¦  «        S |� t          | |¦  «        rt          | f¦  «        S 	 t          | ¦  «        S # t          $ r t          | f¦  «        cY S w xY w)ax  If *obj* is iterable, return an iterator over its items::

        >>> obj = (1, 2, 3)
        >>> list(always_iterable(obj))
        [1, 2, 3]

    If *obj* is not iterable, return a one-item iterable containing *obj*::

        >>> obj = 1
        >>> list(always_iterable(obj))
        [1]

    If *obj* is ``None``, return an empty iterable:

        >>> obj = None
        >>> list(always_iterable(None))
        []

    By default, binary and text strings are not considered iterable::

        >>> obj = 'foo'
        >>> list(always_iterable(obj))
        ['foo']

    If *base_type* is set, objects for which ``isinstance(obj, base_type)``
    returns ``True`` won't be considered iterable.

        >>> obj = {'a': 1}
        >>> list(always_iterable(obj))  # Iterate over the dict's keys
        ['a']
        >>> list(always_iterable(obj, base_type=dict))  # Treat dicts as a unit
        [{'a': 1}]

    Set *base_type* to ``None`` to avoid any special handling and treat objects
    Python considers iterable as iterable:

        >>> obj = 'foo'
        >>> list(always_iterable(obj, base_type=None))
        ['f', 'o', 'o']
    N© )ÚiterÚ
isinstanceÚ	TypeError)ÚobjÚ	base_types     r   Úalways_iterabler      sx   € ðR €{Ý�B‰xŒxˆàÐ¥:¨c°9Ñ#=Ô#=ÐÝ�S�F‰|Œ|ÐðÝ�C‰yŒyÐøÝð ð ð Ý�S�F‰|Œ|ÐÐÐðøøøs   µA ÁA!Á A!c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ ZdS )	Úbucketaâ  Wrap *iterable* and return an object that buckets the iterable into
    child iterables based on a *key* function.

        >>> iterable = ['a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'b3']
        >>> s = bucket(iterable, key=lambda x: x[0])  # Bucket by 1st character
        >>> sorted(list(s))  # Get the keys
        ['a', 'b', 'c']
        >>> a_iterable = s['a']
        >>> next(a_iterable)
        'a1'
        >>> next(a_iterable)
        'a2'
        >>> list(s['b'])
        ['b1', 'b2', 'b3']

    The original iterable will be advanced and its items will be cached until
    they are used by the child iterables. This may require significant storage.

    By default, attempting to select a bucket to which no items belong  will
    exhaust the iterable and cache all values.
    If you specify a *validator* function, selected buckets will instead be
    checked against it.

        >>> from itertools import count
        >>> it = count(1, 2)  # Infinite sequence of odd numbers
        >>> key = lambda x: x % 10  # Bucket by last digit
        >>> validator = lambda x: x in {1, 3, 5, 7, 9}  # Odd digits only
        >>> s = bucket(it, key=key, validator=validator)
        >>> 2 in s
        False
        >>> list(s[2])
        []

    Nc                 ó‚   — t          |¦  «        | _        || _        t          t          ¦  «        | _        |pd„ | _        d S )Nc                 ó   — dS )NTr   )Úxs    r   ú<lambda>z!bucket.__init__.<locals>.<lambda>v   s   € °$€ r   )r   Ú_itÚ_keyr   r   Ú_cacheÚ
_validator)Úselfr
   r   Ú	validators       r   Ú__init__zbucket.__init__r   s7   € Ý˜‘>”>ˆŒØˆŒ	Ý!¥%Ñ(Ô(ˆŒØ#Ð7¨¨ˆŒˆˆr   c                 óÄ   — |                       |¦  «        sdS 	 t          | |         ¦  «        }| j        |                              |¦  «         n# t          $ r Y dS w xY wdS )NFT)r$   Únextr#   Ú
appendleftÚStopIteration)r%   ÚvalueÚitems      r   r	   zbucket.__contains__x   s|   € Ø�Š˜uÑ%Ô%ð 	Ø�5ð	0Ý˜˜UœÑ$Ô$ˆDð ŒK˜Ô×)Ò)¨$Ñ/Ô/Ð/Ð/øõ ð 	ð 	ð 	Ø�5�5ð	øøøð
 ˆts   ™A Á
AÁAc              #   ód  K  — 	 | j         |         r"| j         |                              ¦   «         V — n~	 	 t          | j        ¦  «        }n# t          $ r Y dS w xY w|                      |¦  «        }||k    r|V — n6|                      |¦  «        r | j         |                              |¦  «         Œ}Œ®)z²
        Helper to yield items from the parent iterator that match *value*.
        Items that don't match are stored in the local cache as they
        are encountered.
        TN)r#   Úpopleftr)   r!   r+   r"   r$   Úappend)r%   r,   r-   Ú
item_values       r   Ú_get_valueszbucket._get_values…   sØ   è è € ð	=ð Œ{˜5Ô!ð =Ø”k %Ô(×0Ò0Ñ2Ô2Ð2Ð2Ð2Ð2ð
=ðÝ# D¤H™~œ~˜˜øÝ(ð ð ð Ø˜˜ðøøøà!%§¢¨4¡¤�JØ! UÒ*Ð*Ø"˜
˜
˜
ØØŸš¨Ñ4Ô4ð =Øœ JÔ/×6Ò6°tÑ<Ô<Ð<ð
=ð	=s   µA
 Á

AÁAc              #   óð   K  — | j         D ]L}|                      |¦  «        }|                      |¦  «        r | j        |                              |¦  «         ŒM| j                             ¦   «         E d {V —† d S ©N)r!   r"   r$   r#   r0   Úkeys)r%   r-   r1   s      r   Ú__iter__zbucket.__iter__Ÿ   s‚   è è € Ø”Hð 	5ð 	5ˆDØŸš 4™œˆJØ�Š˜zÑ*Ô*ð 5Ø”˜JÔ'×.Ò.¨tÑ4Ô4Ð4øà”;×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%r   c                 ót   — |                       |¦  «        st          d¦  «        S |                      |¦  «        S )Nr   )r$   r   r2   )r%   r,   s     r   Ú__getitem__zbucket.__getitem__§   s5   € Ø�Š˜uÑ%Ô%ð 	Ý˜‘8”8ˆOà×Ò Ñ&Ô&Ð&r   r4   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r	   r2   r6   r8   r   r   r   r   r   N   so   € € € € € ð!ð !ðF8ð 8ð 8ð 8ðð ð ð=ð =ð =ð4&ð &ð &ð'ð 'ð 'ð 'ð 'r   r   r4   )
Úcollectionsr   r   Ú	itertoolsr   r   ÚstrÚbytesr   r   r   r   r   ú<module>rA      s�   ðØ *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð& %(¨ <ð 2ð 2ð 2ð 2ðl]'ð ]'ð ]'ð ]'ð ]'ñ ]'ô ]'ð ]'ð ]'ð ]'r   