B +�[�X � @ s6 d dl mZmZ ddlmZmZ d dlmZ d dlZd dl Z d dl mZ dd� Zd Z e d Zee�Zd d� Zdd � ZG dd� de�Ze �e�G dd� de��Zed eg g �Ze�e� e�e� e�e� ddd�Zy:d dlZej�d�r�eZnd dlmZ e�ee� �� W n ek �r( eZY nX dd� Z dS )� )�abstractmethod�ABCMeta� )�Sequence�Hashable)�IntegralN)� transformc C s t | ��d�S )N�1)�bin�count)�val� r �F/opt/alt/python37/lib64/python3.7/site-packages/pyrsistent/_pvector.py� _bitcount s r � c C s || � � t|t�r|� � n|�S )N)�tolist� isinstance�PVector)�v�other�operatorr r r �compare_pvector s r c C s |d kr| S t | |�S )N)�slice)�index�stopr r r �_index_or_slice s r c s^ e Zd ZdZdZ� fdd�Zdd� Zdd� Zd d � Zdd� Z d d� Z dd� Zdd� Zdd� Z dd� Zdd� Zdd� Zdd� Zdd� ZeZdd � Zd!d"� Zd#d$� Zd%d&� Zd'd(� Zd)d*� Zd+d,� ZG d-d.� d.e�Zd/d0� Zd1d2� Zd3d4� Ze d5d6� �Z!d7d8� Z"d9d:� Z#d;d<� Z$d=d>� Z%d?d@� Z&dAdB� Z'dCdD� Z(dEdF� Z)dGdH� Z*dIdJ� Z+dPdLdM�Z,dNdO� Z-� Z.S )Q� PythonPVectorzd Support structure for PVector that implements structural sharing for vectors using a trie. )�_count�_shift�_root�_tail�_tail_offset�__weakref__c s> t t| ��| �}||_||_||_||_|jt|j� |_|S )N) �superr �__new__r r r r �lenr! )�clsr �shift�root�tail�self)� __class__r r r$ " s zPythonPVector.__new__c C s | j S )N)r )r* r r r �__len__- s zPythonPVector.__len__c C sd t |t�r>|jd kr,|jd kr,|jd kr,| S t�| �� | �S |dk rP|| j7 }t � | |�|t@ S )Nr )r r �startr �step�_EMPTY_PVECTOR�extendr r r � _node_for�BIT_MASK)r* r r r r �__getitem__0 s zPythonPVector.__getitem__c C s | � |�S )N)r0 )r* r r r r �__add__@ s zPythonPVector.__add__c C s d� t| �� ��S )Nzpvector({0}))�format�strr )r* r r r �__repr__C s zPythonPVector.__repr__c C s | � � S )N)r7 )r* r r r �__str__F s zPythonPVector.__str__c C s t | �� �S )N)�iterr )r* r r r �__iter__I s zPythonPVector.__iter__c C s | j t|�kpt| |tj�S )N)r r% r r �ne)r* r r r r �__ne__N s zPythonPVector.__ne__c C s$ | |kp"| j t|�ko"t| |tj�S )N)r r% r r �eq)r* r r r r �__eq__Q s zPythonPVector.__eq__c C s t | |tj�S )N)r r �gt)r* r r r r �__gt__T s zPythonPVector.__gt__c C s t | |tj�S )N)r r �lt)r* r r r r �__lt__W s zPythonPVector.__lt__c C s t | |tj�S )N)r r �ge)r* r r r r �__ge__Z s zPythonPVector.__ge__c C s t | |tj�S )N)r r �le)r* r r r r �__le__] s zPythonPVector.__le__c C s2 |dks| t krt S |dkr | S t �|| �� �S )Nr r )r/ r0 r )r* �timesr r r �__mul__` s zPythonPVector.__mul__c C s8 |r*|t 8 }x&|D ]}| �|||� qW n |�|� d S )N)�SHIFT� _fill_listr0 )r* �noder' �the_list�nr r r rJ k s zPythonPVector._fill_listc C s&