Your IP : 216.73.216.196


Current Path : /opt/alt/python37/lib64/python3.7/Tools/demo/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/Tools/demo/__pycache__/eiffel.cpython-37.opt-1.pyc

B

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

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

zEiffelBaseMetaClass.__new__cCs�g}x>|��D]2\}}|�d�s@|�d�r,qt|t�r|�|�qWxF|D]>}|�d|�}|�d|�}|sr|rJ|�||||�||<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|j�|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|�t�dS)N)�_testr#)r$rrr
�testEiffelMetaClass1eszTests.testEiffelMetaClass1cCs|�t�dS)N)r:r8)r$rrr
�testEiffelMetaClass2hszTests.testEiffelMetaClass2cs�Gdd�d|d�}Gdd�d|�}G�fdd�d|��|�}|�|�d�d	�|�|�d�d	�|�t|jd
���}|�t|jd�|�t|jd�|�|�d�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�|��||�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
.