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.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}xL|j�D]@\}}|jd�s*|jd�r:t|t�sNt�qt|t�r|j|�qWxF|D]>}|jd|�}|jd|�}|s�|rX|j||||�||<qXWdS)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�AssertionError�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)rr r!�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)rr r!r1r3rrrr
r-=sr-c@s$eZdZdd�Zdd�Zdd�ZdS)�EiffelDescriptorcCs&||_||_||_|j|_|j|_dS)N)�_funcrrrr+)r%r)rrrrr
r1Is
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)rr5r)r%r0r&r'�xrrr
r2TszEiffelDescriptor.callmethodN)rr r!r1r7r2rrrr
r4Gsr4c@seZdZeZdS)�EiffelMetaClass2N)rr r!r4rrrrr
r9]sr9c@s$eZdZdd�Zdd�Zdd�ZdS)�TestscCs|jt�dS)N)�_testr$)r%rrr
�testEiffelMetaClass1eszTests.testEiffelMetaClass1cCs|jt�dS)N)r;r9)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)rr r!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%rArrr
�m2tszTests._test.<locals>.Test.m2cSs|dkst�dS)Nr)r)r%rArrr
�m2_prexsz Tests._test.<locals>.Test.m2_precSs||kst�dS)N)r)r%�resultrArrr
�m2_post{sz!Tests._test.<locals>.Test.m2_postN)rr r!rrBrCrErrrr
�TestosrFcs&eZdZdd�Z��fdd�Z�ZS)zTests._test.<locals>.SubcSs|dS)N�r)r%rArrr
rBszTests._test.<locals>.Sub.m2cs"t�|�j||�|dkst�dS)N�d)rrEr)r%ZResultrA)�Subrrr
rE�sz Tests._test.<locals>.Sub.m2_post)rr r!rBrEr#r)rI)rr
rI~srIr@rGr�
��)ZassertEqualrrBZassertRaisesr)r%r?r>rF�t�sr)rIr
r;kszTests._testN)rr r!r<r=r;rrrr
r:csr:�__main__)r+Zunittest�typesrr�typerr$r-r4r9ZTestCaser:r�mainrrrr
�<module>s
.