Your IP : 216.73.216.213


Current Path : /opt/alt/python36/lib64/python3.6/Tools/demo/__pycache__/
Upload File :
Current File : //opt/alt/python36/lib64/python3.6/Tools/demo/__pycache__/eiffel.cpython-36.opt-1.pyc

3

� fN�@s�dZddlZddlmZGdd�de�ZGdd�de�ZGdd	�d	�ZGd
d�d�Z	Gdd
�d
e�Z
Gdd�dej�Ze
dkr�ej�dS)zj
Support Eiffel-style preconditions and postconditions for functions.

An example for Python metaclasses.
�N)�FunctionTypecs(eZdZ�fdd�Zedd��Z�ZS)�EiffelBaseMetaClasscs |j|�tt|�j||||�S)N)�convert_methods�superr�__new__)�meta�name�bases�dict)�	__class__��6/opt/alt/python36/lib64/python3.6/Tools/demo/eiffel.pyrs

zEiffelBaseMetaClass.__new__cCs�g}x>|j�D]2\}}|jd�s@|jd�r,qt|t�r|j|�qWxF|D]>}|jd|�}|jd|�}|sr|rJ|j||||�||<qJWdS)z�Replace functions in dict with EiffelMethod wrappers.

        The dict is modified in place.

        If a method ends in _pre or _post, it is removed from the dict
        regardless of whether there is a corresponding method.
        �_pre�_postz%s_prez%s_postN)�items�endswith�
isinstance�function�append�get�make_eiffel_method)�clsr
�methods�k�v�m�pre�postrrr
rs


z#EiffelBaseMetaClass.convert_methods)�__name__�
__module__�__qualname__r�classmethodr�
__classcell__rr)rr
rsrc@seZdZedd��ZdS)�EiffelMetaClass1cs"���fdd�}�jr�j|_|S)Ncs>�r�|f|�|��|f|�|�}�r:�||f|�|�|S)Nr)�self�args�kwargs�rv)�funcrrrr
�method/sz3EiffelMetaClass1.make_eiffel_method.<locals>.method)�__doc__)r(rrr)r)r(rrr
r-sz#EiffelMetaClass1.make_eiffel_methodN)rrr �staticmethodrrrrr
r#*sr#c@seZdZdd�Zdd�ZdS)�EiffelMethodWrappercCs||_||_dS)N)�_inst�_descr)r$�instZdescrrrr
�__init__?szEiffelMethodWrapper.__init__cOs|jj|j||�S)N)r.�
callmethodr-)r$r%r&rrr
�__call__CszEiffelMethodWrapper.__call__N)rrr r0r2rrrr
r,=sr,c@s$eZdZdd�Zdd�Zdd�ZdS)�EiffelDescriptorcCs&||_||_||_|j|_|j|_dS)N)�_funcrrrr*)r$r(rrrrr
r0Is
zEiffelDescriptor.__init__cCs
t||�S)N)r,)r$�objrrrr
�__get__QszEiffelDescriptor.__get__cCsH|jr|j|f|�|�|j|f|�|�}|jrD|j||f|�|�|S)N)rr4r)r$r/r%r&�xrrr
r1TszEiffelDescriptor.callmethodN)rrr r0r6r1rrrr
r3Gsr3c@seZdZeZdS)�EiffelMetaClass2N)rrr r3rrrrr
r8]sr8c@s$eZdZdd�Zdd�Zdd�ZdS)�TestscCs|jt�dS)N)�_testr#)r$rrr
�testEiffelMetaClass1eszTests.testEiffelMetaClass1cCs|jt�dS)N)r:r8)r$rrr
�testEiffelMetaClass2hszTests.testEiffelMetaClass2cs�Gdd�d|d�}Gdd�d|�}G�fdd�d|��|�}|j|jd�d	�|j|jd�d	�|jt|jd
���}|jt|jd�|jt|jd�|j|jd�d
�dS)Nc@seZdZdS)zTests._test.<locals>.EiffelN)rrr rrrr
�Eiffellsr=)�	metaclassc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
zTests._test.<locals>.TestcSs|dS)zMake it a little larger�r)r$�argrrr
rpszTests._test.<locals>.Test.mcSs|dS)zMake it a little largerr?r)r$r@rrr
�m2tszTests._test.<locals>.Test.m2cSsdS)Nr)r$r@rrr
�m2_prexsz Tests._test.<locals>.Test.m2_precSsdS)Nr)r$�resultr@rrr
�m2_post{sz!Tests._test.<locals>.Test.m2_postN)rrr rrArBrDrrrr
�TestosrEcs&eZdZdd�Z��fdd�Z�ZS)zTests._test.<locals>.SubcSs|dS)N�r)r$r@rrr
rAszTests._test.<locals>.Sub.m2cst�|�j||�dS)N)rrD)r$ZResultr@)�Subrrr
rD�sz Tests._test.<locals>.Sub.m2_post)rrr rArDr"r)rG)rr
rG~srGr?rFr�
��)ZassertEqualrrAZassertRaises�AssertionError)r$r>r=rE�t�sr)rGr
r:kszTests._testN)rrr r;r<r:rrrr
r9csr9�__main__)r*Zunittest�typesrr�typerr#r,r3r8ZTestCaser9r�mainrrrr
�<module>s
.