3
\" � @ sr d dl mZ dd� ZG dd� de�ZG dd� de�ZG dd � d e�ZG d
d� de �Z
G dd
� d
e
d�Zdd� ZdS )� )�WeakSetc C s
d| _ | S )NT)�__isabstractmethod__)�funcobj� r �/usr/lib64/python3.6/abc.py�abstractmethod s r c s e Zd ZdZ� fdd�Z� ZS )�abstractclassmethodTc s d|_ t� j|� d S )NT)r �super�__init__)�self�callable)� __class__r r r
0 s zabstractclassmethod.__init__)�__name__�
__module__�__qualname__r r
�
__classcell__r r )r
r r s r c s e Zd ZdZ� fdd�Z� ZS )�abstractstaticmethodTc s d|_ t� j|� d S )NT)r r r
)r r )r
r r r
H s zabstractstaticmethod.__init__)r r r r r
r r r )r
r r 5 s r c @ s e Zd ZdZdS )�abstractpropertyTN)r r r r r r r r r M s r c sB e Zd ZdZ� fdd�Zdd� Zd
dd�Zd d
� Zdd� Z� Z S )�ABCMetar c s� t � j| |||f|�}dd� |j� D �}xF|D ]>}x8t|dt� �D ]&}t||d �}t|dd�rB|j|� qBW q.W t|�|_t� |_ t� |_
t� |_tj
|_|S )Nc S s h | ]\}}t |d d�r|�qS )r F)�getattr)�.0�name�valuer r r � � s z"ABCMeta.__new__..�__abstractmethods__r F)r �__new__�itemsr �set�add� frozensetr r �
_abc_registry�
_abc_cache�_abc_negative_cacher �_abc_invalidation_counter�_abc_negative_cache_version) �mclsr �bases� namespace�kwargs�cls� abstracts�baser )r
r r r � s
zABCMeta.__new__c C sP t |t�std��t|| �r |S t| |�r2td��| jj|� t jd7 _|S )NzCan only register classesz'Refusing to create an inheritance cycle� ) �
isinstance�type� TypeError�
issubclass�RuntimeErrorr r r r# )r) �subclassr r r �register� s
zABCMeta.registerNc C s| t d| j| jf |d� t dtj |d� xLt| j�D ]>}|jd�r6t| |�}t |t
�r`t|�}t d||f |d� q6W d S )NzClass: %s.%s)�filezInv.counter: %s�_abc_z%s: %r)�printr r r r# �sorted�__dict__�
startswithr r- r r )r) r4 r r r r r �_dump_registry� s
zABCMeta._dump_registryc sb |j }|� jkrdS t|�}||krH� jtjkr>|� jkr>dS � j|�S t� fdd�||hD ��S )NTFc 3 s | ]}� j |�V qd S )N)�__subclasscheck__)r �c)r) r r � � s z,ABCMeta.__instancecheck__..) r
r! r. r$ r r# r" r; �any)r) �instancer2 �subtyper )r) r �__instancecheck__� s
zABCMeta.__instancecheck__c C s� || j krdS | jtjk r,t� | _tj| _n|| jkr:dS | j|�}|tk rn|r^| j j|� n| jj|� |S | t |df �kr�| j j|� dS x(| j
D ]}t||�r�| j j|� dS q�W x*| j� D ]}t||�r�| j j|� dS q�W | jj|� dS )NTF�__mro__)
r! r$ r r# r r" �__subclasshook__�NotImplementedr r r r0 �__subclasses__)r) r2 �ok�rcls�sclsr r r r; � s4
zABCMeta.__subclasscheck__)N)
r r r r# r r3 r: rA r; r r r )r
r r m s
r c @ s e Zd ZdS )�ABCN)r r r r r r r rI � s rI )� metaclassc C s t jS )N)r r# r r r r �get_cache_token� s rK N)
�_weakrefsetr r �classmethodr �staticmethodr �propertyr r. r rI rK r r r r � s