HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/sphinx/ext/napoleon/__pycache__/iterators.cpython-310.pyc
o

�$�a��@sBdZddlZddlmZmZmZGdd�d�ZGdd�de�ZdS)z�
    sphinx.ext.napoleon.iterators
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    A collection of helpful iterators.


    :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
    :license: BSD, see LICENSE for details.
�N)�Any�Iterable�Optionalc@s�eZdZdZdeddfdd�Zddd�Zdd	edefd
d�Zd	e	eddfdd
�Z
defdd�Zdd	edefdd�Z
dd	e	edefdd�ZdS)�	peek_iteralAn iterator object that supports peeking ahead.

    Parameters
    ----------
    o : iterable or callable
        `o` is interpreted very differently depending on the presence of
        `sentinel`.

        If `sentinel` is not given, then `o` must be a collection object
        which supports either the iteration protocol or the sequence protocol.

        If `sentinel` is given, then `o` must be a callable object.

    sentinel : any value, optional
        If given, the iterator will call `o` with no arguments for each
        call to its `next` method; if the value returned is equal to
        `sentinel`, :exc:`StopIteration` will be raised, otherwise the
        value will be returned.

    See Also
    --------
    `peek_iter` can operate as a drop in replacement for the built-in
    `iter <https://docs.python.org/3/library/functions.html#iter>`_ function.

    Attributes
    ----------
    sentinel
        The value used to indicate the iterator is exhausted. If `sentinel`
        was not given when the `peek_iter` was instantiated, then it will
        be set to a new object instance: ``object()``.

    �args�returnNcGs:t|�|_t��|_t|�dkr|d|_dSt�|_dS)z__init__(o, sentinel=None)��N)�iter�	_iterable�collections�deque�_cache�len�sentinel�object)�selfr�r�?/usr/lib/python3/dist-packages/sphinx/ext/napoleon/iterators.py�__init__2s


zpeek_iter.__init__cC�|S�Nr�rrrr�__iter__;szpeek_iter.__iter__�ncCs
|�|�Sr)�next�rrrrr�__next__>s
zpeek_iter.__next__cCs�|sd}zt|j�|kr|j�t|j��t|j�|ksWdSWdStyCt|j�|kr@|j�|j�t|j�|ks/YdSYdSw)z<Cache `n` items. If `n` is 0 or None, then 1 item is cached.r	N)rr�appendrr�
StopIterationrrrrr�
_fillcacheAs���zpeek_iter._fillcachecCs|��|jkS)z�Determine if iterator is exhausted.

        Returns
        -------
        bool
            True if iterator has more items, False otherwise.

        Note
        ----
        Will never raise :exc:`StopIteration`.

        )�peekrrrrr�has_nextLs
zpeek_iter.has_nextcsr��|�|s �jd�jkrt�|dur�j��}|Sg}|S�j|d�jkr,t��fdd�t|�D�}|S)aKGet the next item or `n` items of the iterator.

        Parameters
        ----------
        n : int or None
            The number of items to retrieve. Defaults to None.

        Returns
        -------
        item or list of items
            The next item or `n` items of the iterator. If `n` is None, the
            item itself is returned. If `n` is an int, the items will be
            returned in a list. If `n` is 0, an empty list is returned.

        Raises
        ------
        StopIteration
            Raised if the iterator is exhausted, even if `n` is 0.

        rNr	csg|]}�j���qSr)r�popleft��.0�irrr�
<listcomp>{�z"peek_iter.next.<locals>.<listcomp>)r rrrr#�range�rr�resultrrrr

��zpeek_iter.nextcs:��|�|dur�jd}|S�fdd�t|�D�}|S)ahPreview the next item or `n` items of the iterator.

        The iterator is not advanced when peek is called.

        Returns
        -------
        item or list of items
            The next item or `n` items of the iterator. If `n` is None, the
            item itself is returned. If `n` is an int, the items will be
            returned in a list. If `n` is 0, an empty list is returned.

            If the iterator is exhausted, `peek_iter.sentinel` is returned,
            or placed as the last item in the returned list.

        Note
        ----
        Will never raise :exc:`StopIteration`.

        Nrcsg|]}�j|�qSr)rr$rrrr'�r(z"peek_iter.peek.<locals>.<listcomp>)r rr)r*rrrr!~s

�zpeek_iter.peek)rrr)�__name__�
__module__�__qualname__�__doc__rrr�intrrr �boolr"rr!rrrrrs 
	#rcsDeZdZdZdededdf�fdd�Zdeeddfd	d
�Z�Z	S)�modify_iteraTAn iterator object that supports modifying items as they are returned.

    Parameters
    ----------
    o : iterable or callable
        `o` is interpreted very differently depending on the presence of
        `sentinel`.

        If `sentinel` is not given, then `o` must be a collection object
        which supports either the iteration protocol or the sequence protocol.

        If `sentinel` is given, then `o` must be a callable object.

    sentinel : any value, optional
        If given, the iterator will call `o` with no arguments for each
        call to its `next` method; if the value returned is equal to
        `sentinel`, :exc:`StopIteration` will be raised, otherwise the
        value will be returned.

    modifier : callable, optional
        The function that will be used to modify each item returned by the
        iterator. `modifier` should take a single argument and return a
        single value. Defaults to ``lambda x: x``.

        If `sentinel` is not given, `modifier` must be passed as a keyword
        argument.

    Attributes
    ----------
    modifier : callable
        `modifier` is called with each item in `o` as it is iterated. The
        return value of `modifier` is returned in lieu of the item.

        Values returned by `peek` as well as `next` are affected by
        `modifier`. However, `modify_iter.sentinel` is never passed through
        `modifier`; it will always be returned from `peek` unmodified.

    Example
    -------
    >>> a = ["     A list    ",
    ...      "   of strings  ",
    ...      "      with     ",
    ...      "      extra    ",
    ...      "   whitespace. "]
    >>> modifier = lambda s: s.strip().replace('with', 'without')
    >>> for s in modify_iter(a, modifier=modifier):
    ...   print('"%s"' % s)
    "A list"
    "of strings"
    "without"
    "extra"
    "whitespace."

    r�kwargsrNcsdd|vr
|d|_nt|�dkr|d|_|dd�}ndd�|_t|j�s*td��t�j|�dS)z0__init__(o, sentinel=None, modifier=lambda x: x)�modifierrNcSrrr)�xrrr�<lambda>�sz&modify_iter.__init__.<locals>.<lambda>z3modify_iter(o, modifier): modifier must be callable)r4r�callable�	TypeError�superr)rrr3��	__class__rrr�s


zmodify_iter.__init__rcCs�|sd}z t|j�|kr"|j�|�t|j���t|j�|ksWdSWdStyFt|j�|krC|j�|j�t|j�|ks2YdSYdSw)z�Cache `n` modified items. If `n` is 0 or None, 1 item is cached.

        Each item returned by the iterator is passed through the
        `modify_iter.modified` function before being cached.

        r	N)rrrr4rrrrrrrrr �s���zmodify_iter._fillcache)
r,r-r.r/rrrr0r �
__classcell__rrr:rr2�s6r2)r/r�typingrrrrr2rrrr�<module>s