Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/Tools/demo/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/Tools/demo/__pycache__/eiffel.cpython-35.pyc



��YfN�@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)�FunctionTypecs4eZdZ�fdd�Zedd��Z�S)�EiffelBaseMetaClasscs,|j|�tt|�j||||�S)N)�convert_methods�superr�__new__)�meta�name�bases�dict)�	__class__��6/opt/alt/python35/lib64/python3.5/Tools/demo/eiffel.pyrs
zEiffelBaseMetaClass.__new__cCs�g}xl|j�D]^\}}|jd�s=|jd�rUt|t�sqt�qt|t�r|j|�qWx]|D]U}|jd|�}|jd|�}|s�|r||j||||�||<q|WdS)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
Zmethods�k�v�m�pre�postrrr
rs

z#EiffelBaseMetaClass.convert_methods)�__name__�
__module__�__qualname__r�classmethodrrr)rr
rsrc@s"eZdZedd��ZdS)�EiffelMetaClass1cs1���fdd�}�jr-�j|_|S)NcsE�r�|||��|||�}�rA�||||�|S)Nr)�self�args�kwargs�rv)�funcrrrr
�method/sz3EiffelMetaClass1.make_eiffel_method.<locals>.method)�__doc__)r'rrr(r)r'rrr
r-s	z#EiffelMetaClass1.make_eiffel_methodN)rrr �staticmethodrrrrr
r"*sr"c@s(eZdZdd�Zdd�ZdS)�EiffelMethodWrappercCs||_||_dS)N)�_inst�_descr)r#�instZdescrrrr
�__init__?s	zEiffelMethodWrapper.__init__cOs|jj|j||�S)N)r-�
callmethodr,)r#r$r%rrr
�__call__CszEiffelMethodWrapper.__call__N)rrr r/r1rrrr
r+=sr+c@s4eZdZdd�Zdd�Zdd�ZdS)�EiffelDescriptorcCs7||_||_||_|j|_|j|_dS)N)�_funcrrrr))r#r'rrrrr
r/Is
			zEiffelDescriptor.__init__cCs
t||�S)N)r+)r#�objrrrr
�__get__QszEiffelDescriptor.__get__cCsT|jr|j|||�|j|||�}|jrP|j||||�|S)N)rr3r)r#r.r$r%�xrrr
r0Ts		zEiffelDescriptor.callmethodN)rrr r/r5r0rrrr
r2Gsr2c@seZdZeZdS)�EiffelMetaClass2N)rrr r2rrrrr
r7]sr7c@s4eZdZdd�Zdd�Zdd�ZdS)�TestscCs|jt�dS)N)�_testr")r#rrr
�testEiffelMetaClass1eszTests.testEiffelMetaClass1cCs|jt�dS)N)r9r7)r#rrr
�testEiffelMetaClass2hszTests.testEiffelMetaClass2cs�Gdd�dd|�}Gdd�d|�}G�fdd�d|��|�}|j|jd�d	�|j|jd�d	�|jt|jd
���}|jt|jd�|jt|jd�|j|jd�d
�dS)Nc@seZdZdS)zTests._test.<locals>.EiffelN)rrr rrrr
�Eiffellsr<�	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.m2cSs|dkst�dS)Nr)r)r#r?rrr
�m2_prexsz Tests._test.<locals>.Test.m2_precSs||kst�dS)N)r)r#�resultr?rrr
�m2_post{sz!Tests._test.<locals>.Test.m2_postN)rrr rr@rArCrrrr
�TestosrDcs1eZdZdd�Z��fdd�Z�S)zTests._test.<locals>.SubcSs|dS)N�r)r#r?rrr
r@szTests._test.<locals>.Sub.m2cs/t�|�j||�|dks+t�dS)N�d)rrCr)r#ZResultr?)�Subrrr
rC�sz Tests._test.<locals>.Sub.m2_post)rrr r@rCr)rG)rr
rG~srGr>rEr�
��)ZassertEqualrr@ZassertRaisesr)r#r=r<rD�t�sr)rGr
r9ks		zTests._testN)rrr r:r;r9rrrr
r8csr8�__main__)r)Zunittest�typesrr�typerr"r+r2r7ZTestCaser8r�mainrrrr
�<module>s
.