o
    $x`§  ã                   @   s¬   d Z dZddlmZ ddlmZ ddlmZ G dd„ dej	ƒZ
G dd	„ d	eje
ƒZG d
d„ dejeƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZdS )a�  
Sequence Interfaces

Importing this module does *not* mark any standard classes as
implementing any of these interfaces.

While this module is not deprecated, new code should generally use
:mod:`zope.interface.common.collections`, specifically
:class:`~zope.interface.common.collections.ISequence` and
:class:`~zope.interface.common.collections.IMutableSequence`. This
module is occasionally useful for its fine-grained breakdown of interfaces.

The standard library :class:`list`, :class:`tuple` and
:class:`collections.UserList`, among others, implement ``ISequence``
or ``IMutableSequence`` but *do not* implement any of the interfaces
in this module.
Úrestructuredtexté    )Ú	Interface)Úcollections)ÚPYTHON2c                   @   ó   e Zd ZdZdd„ ZdS )ÚIMinimalSequencea×  Most basic sequence interface.

    All sequences are iterable.  This requires at least one of the
    following:

    - a `__getitem__()` method that takes a single argument; integer
      values starting at 0 must be supported, and `IndexError` should
      be raised for the first index for which there is no value, or

    - an `__iter__()` method that returns an iterator as defined in
      the Python documentation (http://docs.python.org/lib/typeiter.html).

    c                 C   ó   dS )z�``x.__getitem__(index) <==> x[index]``

        Declaring this interface does not specify whether `__getitem__`
        supports slice objects.N© ©Úindexr	   r	   ú@/usr/lib/python3/dist-packages/zope/interface/common/sequence.pyÚ__getitem__4   ó    zIMinimalSequence.__getitem__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r	   r	   r	   r   r   %   s    r   c                   @   ó   e Zd ZdZdS )ÚIFiniteSequencez[
    A sequence of bound size.

    .. versionchanged:: 5.0.0
       Extend ``ISized``
    N©r   r   r   r   r	   r	   r	   r   r   :   ó    r   c                   @   sp   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zer6dd„ ZdS dS )ÚIReadSequencea.  
    read interface shared by tuple and list

    This interface is similar to
    :class:`~zope.interface.common.collections.ISequence`, but
    requires that all instances be totally ordered. Most users
    should prefer ``ISequence``.

    .. versionchanged:: 5.0.0
       Extend ``IContainer``
    c                 C   r   )z'``x.__contains__(item) <==> item in x``Nr	   ©Úitemr	   r	   r   Ú__contains__O   r   zIReadSequence.__contains__c                 C   r   )z"``x.__lt__(other) <==> x < other``Nr	   ©Úotherr	   r	   r   Ú__lt__S   r   zIReadSequence.__lt__c                 C   r   )z#``x.__le__(other) <==> x <= other``Nr	   r   r	   r	   r   Ú__le__V   r   zIReadSequence.__le__c                 C   r   )z#``x.__eq__(other) <==> x == other``Nr	   r   r	   r	   r   Ú__eq__Y   r   zIReadSequence.__eq__c                 C   r   )z#``x.__ne__(other) <==> x != other``Nr	   r   r	   r	   r   Ú__ne__\   r   zIReadSequence.__ne__c                 C   r   )z"``x.__gt__(other) <==> x > other``Nr	   r   r	   r	   r   Ú__gt___   r   zIReadSequence.__gt__c                 C   r   )z#``x.__ge__(other) <==> x >= other``Nr	   r   r	   r	   r   Ú__ge__b   r   zIReadSequence.__ge__c                 C   r   )z#``x.__add__(other) <==> x + other``Nr	   r   r	   r	   r   Ú__add__e   r   zIReadSequence.__add__c                 C   r   )z``x.__mul__(n) <==> x * n``Nr	   ©Únr	   r	   r   Ú__mul__h   r   zIReadSequence.__mul__c                 C   r   )z``x.__rmul__(n) <==> n * x``Nr	   r$   r	   r	   r   Ú__rmul__k   r   zIReadSequence.__rmul__c                 C   r   )z±``x.__getslice__(i, j) <==> x[i:j]``

            Use of negative indices is not supported.

            Deprecated since Python 2.0 but still a part of `UserList`.
            Nr	   ©ÚiÚjr	   r	   r   Ú__getslice__o   r   zIReadSequence.__getslice__N)r   r   r   r   r   r   r   r   r    r!   r"   r#   r&   r'   ÚPY2r+   r	   r	   r	   r   r   B   s    ÿr   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚIExtendedReadSequencezFull read interface for listsc                 C   r   )z%Return number of occurrences of valueNr	   r   r	   r	   r   Úcountz   r   zIExtendedReadSequence.countc                 G   r   )zTindex(value, [start, [stop]]) -> int

        Return first index of *value*
        Nr	   )r   Úargsr	   r	   r   r   }   r   zIExtendedReadSequence.indexN)r   r   r   r   r.   r   r	   r	   r	   r   r-   w   s    r-   c                   @   sx   e Zd ZdZdd„ Zdd„ Zerdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zddd„Zdd„ Zdd„ Zddd„Zdd„ ZdS )ÚIUniqueMemberWriteSequencezAThe write contract for a sequence that may enforce unique membersc                 C   r   )z¥``x.__setitem__(index, item) <==> x[index] = item``

        Declaring this interface does not specify whether `__setitem__`
        supports slice objects.
        Nr	   ©r   r   r	   r	   r   Ú__setitem__†   r   z&IUniqueMemberWriteSequence.__setitem__c                 C   r   )zœ``x.__delitem__(index) <==> del x[index]``

        Declaring this interface does not specify whether `__delitem__`
        supports slice objects.
        Nr	   r
   r	   r	   r   Ú__delitem__�   r   z&IUniqueMemberWriteSequence.__delitem__c                 C   r   )zÀ``x.__setslice__(i, j, other) <==> x[i:j] = other``

            Use of negative indices is not supported.

            Deprecated since Python 2.0 but still a part of `UserList`.
            Nr	   )r)   r*   r   r	   r	   r   Ú__setslice__•   r   z'IUniqueMemberWriteSequence.__setslice__c                 C   r   )zµ``x.__delslice__(i, j) <==> del x[i:j]``

            Use of negative indices is not supported.

            Deprecated since Python 2.0 but still a part of `UserList`.
            Nr	   r(   r	   r	   r   Ú__delslice__�   r   z'IUniqueMemberWriteSequence.__delslice__c                 C   r   )z``x.__iadd__(y) <==> x += y``Nr	   )Úyr	   r	   r   Ú__iadd__¥   r   z#IUniqueMemberWriteSequence.__iadd__c                 C   r   )zAppend item to endNr	   r   r	   r	   r   Úappend¨   r   z!IUniqueMemberWriteSequence.appendc                 C   r   )zInsert item before indexNr	   r1   r	   r	   r   Úinsert«   r   z!IUniqueMemberWriteSequence.insertéÿÿÿÿc                 C   r   )z.Remove and return item at index (default last)Nr	   r
   r	   r	   r   Úpop®   r   zIUniqueMemberWriteSequence.popc                 C   r   )z Remove first occurrence of valueNr	   r   r	   r	   r   Úremove±   r   z!IUniqueMemberWriteSequence.removec                   C   r   )zReverse *IN PLACE*Nr	   r	   r	   r	   r   Úreverse´   r   z"IUniqueMemberWriteSequence.reverseNc                 C   r   )z3Stable sort *IN PLACE*; `cmpfunc(x, y)` -> -1, 0, 1Nr	   )Úcmpfuncr	   r	   r   Úsort·   r   zIUniqueMemberWriteSequence.sortc                 C   r   )z3Extend list by appending elements from the iterableNr	   )Úiterabler	   r	   r   Úextendº   r   z!IUniqueMemberWriteSequence.extend)r:   )N)r   r   r   r   r2   r3   r,   r4   r5   r7   r8   r9   r;   r<   r=   r?   rA   r	   r	   r	   r   r0   ƒ   s    

r0   c                   @   r   )ÚIWriteSequencez!Full write contract for sequencesc                 C   r   )z``x.__imul__(n) <==> x *= n``Nr	   r$   r	   r	   r   Ú__imul__À   r   zIWriteSequence.__imul__N)r   r   r   r   rC   r	   r	   r	   r   rB   ½   s    rB   c                   @   r   )Ú	ISequencea²  
    Full sequence contract.

    New code should prefer
    :class:`~zope.interface.common.collections.IMutableSequence`.

    Compared to that interface, which is implemented by :class:`list`
    (:class:`~zope.interface.common.builtins.IList`), among others,
    this interface is missing the following methods:

        - clear

        - count

        - index

    This interface adds the following methods:

        - sort
    Nr   r	   r	   r	   r   rD   Ã   r   rD   N)r   Ú__docformat__Úzope.interfacer   Úzope.interface.commonr   Úzope.interface._compatr   r,   Ú	IIterabler   ÚISizedr   Ú
IContainerr   r-   r0   rB   rD   r	   r	   r	   r   Ú<module>   s   5: