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.opt-1.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}xW|j�D]I\}}|jd�s\|jd�r@qt|t�r|j|�qWx]|D]U}|jd|�}|jd|�}|s�|rg|j||||�||<qgWdS)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
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)rrrr.r0r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)rr2r)r"r-r#r$�xrrr
r/Ts		zEiffelDescriptor.callmethodN)rrrr.r4r/rrrr
r1Gsr1c@seZdZeZdS)�EiffelMetaClass2N)rrrr1rrrrr
r6]sr6c@s4eZdZdd�Zdd�Zdd�ZdS)�TestscCs|jt�dS)N)�_testr!)r"rrr
�testEiffelMetaClass1eszTests.testEiffelMetaClass1cCs|jt�dS)N)r8r6)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)rrrr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.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)rrrrr?r@rBrrrr
�TestosrCcs1eZdZdd�Z��fdd�Z�S)zTests._test.<locals>.SubcSs|dS)N�r)r"r>rrr
r?szTests._test.<locals>.Sub.m2cst�|�j||�dS)N)rrB)r"ZResultr>)�Subrrr
rB�sz Tests._test.<locals>.Sub.m2_post)rrrr?rBr)rE)rr
rE~srEr=rDr�
��)ZassertEqualrr?ZassertRaises�AssertionError)r"r<r;rC�t�sr)rEr
r8ks		zTests._testN)rrrr9r:r8rrrr
r7csr7�__main__)r(Zunittest�typesrr�typerr!r*r1r6ZTestCaser7r�mainrrrr
�<module>s
.