| Server IP : 186.64.123.29 / Your IP : 216.73.217.94 Web Server : LiteSpeed System : Linux house.hostinglat.cl 5.15.0-185-generic #195-Ubuntu SMP Fri Jun 19 17:11:50 UTC 2026 x86_64 User : tuemp9827 ( 1016) PHP Version : 8.1.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/python3/dist-packages/pyrsistent/__pycache__/ |
Upload File : |
o
���a�/ � @ sr d dl mZmZ d dlmZmZ d dlmZ d dlm Z G dd� de
�Ze�e� e�e� d
d d
�Z
dd� ZdS )� )�Sequence�Hashable)�islice�chain)�Integral)�plistc s( e Zd ZdZdZd=� fdd� Zedd� �Zedd � �Ze d
d� �Z
dd
� Zdd� ZeZ
edd� �Zd>dd�Zd>dd�Ze dd� �Zdd� Zdd� Zdd� Zdd � Zd!d"� Zd#d$� Zd%d&� Zd'd(� Ze d)d*� �Zd+d,� Zd-d.� Zd/d0� Zd1d2� Zd3d4� Zd5d6� Z e Z!d7d8� Z"d9d:� Z#d;d<� Z$e%j&Z&� Z'S )?�PDequea�
Persistent double ended queue (deque). Allows quick appends and pops in both ends. Implemented
using two persistent lists.
A maximum length can be specified to create a bounded queue.
Fully supports the Sequence and Hashable protocols including indexing and slicing but
if you need fast random access go for the PVector instead.
Do not instantiate directly, instead use the factory functions :py:func:`dq` or :py:func:`pdeque` to
create an instance.
Some examples:
>>> x = pdeque([1, 2, 3])
>>> x.left
1
>>> x.right
3
>>> x[0] == x.left
True
>>> x[-1] == x.right
True
>>> x.pop()
pdeque([1, 2])
>>> x.pop() == x[:-1]
True
>>> x.popleft()
pdeque([2, 3])
>>> x.append(4)
pdeque([1, 2, 3, 4])
>>> x.appendleft(4)
pdeque([4, 1, 2, 3])
>>> y = pdeque([1, 2, 3], maxlen=3)
>>> y.append(4)
pdeque([2, 3, 4], maxlen=3)
>>> y.appendleft(4)
pdeque([4, 1, 2], maxlen=3)
)�
_left_list�_right_list�_length�_maxlen�__weakref__Nc sV t t| ��| �}||_||_||_|d ur&t|t�std��|dk r&t d��||_
|S )Nz An integer is required as maxlenr zmaxlen must be non-negative)�superr �__new__r r
r �
isinstancer � TypeError�
ValueErrorr )�clsZ left_listZ
right_list�length�maxlen�instance�� __class__� �4/usr/lib/python3/dist-packages/pyrsistent/_pdeque.pyr 2 s
zPDeque.__new__c C � t �| j| j�S )z.
Rightmost element in dqueue.
)r �_tip_from_listsr
r ��selfr r r �rightB � zPDeque.rightc C r )z-
Leftmost element in dqueue.
)r r r r
r r r r �leftI r zPDeque.leftc C s | r| j S |r|d S td��)N���zNo elements in empty deque)�first�
IndexError)�primary_list�secondary_listr r r r P s
zPDeque._tip_from_listsc C s t | j| j�� �S �N)r r r
�reverser r r r �__iter__Z s zPDeque.__iter__c C s( d� t| �| jd urd� | j��S d�S )Nzpdeque({0}{1})z, maxlen={0}� )�format�listr r r r r �__repr__] s
��zPDeque.__repr__c C � | j S )z.
Maximum length of the queue.
)r r r r r r b s z
PDeque.maxlen� c C sF |dk r
| � | �S t�| j| j|�\}}t||t| j| d�| j�S )a�
Return new deque with rightmost element removed. Popping the empty queue
will return the empty queue. A optional count can be given to indicate the
number of elements to pop. Popping with a negative index is the same as
popleft. Executes in amortized O(k) where k is the number of elements to pop.
>>> pdeque([1, 2]).pop()
pdeque([1])
>>> pdeque([1, 2]).pop(2)
pdeque([])
>>> pdeque([1, 2]).pop(-1)
pdeque([2])
r )�popleftr �
_pop_listsr
r �maxr r )r �count�new_right_list�
new_left_listr r r �popi s z
PDeque.popc C sF |dk r
| � | �S t�| j| j|�\}}t||t| j| d�| j�S )z�
Return new deque with leftmost element removed. Otherwise functionally
equivalent to pop().
>>> pdeque([1, 2]).popleft()
pdeque([2])
r )r6 r r1 r r
r2 r r )r r3 r5 r4 r r r r0 } s zPDeque.popleftc C sj | }|}|dkr1|s|r1|d8 }|j r|j }n|r!|�� }t� }n|�� j }t� }|dkr1|s|s||fS �Nr r/ )�restr( r )r% r&