3
d                 @   s*  d Z ddlmZ ddlmZmZmZmZmZ dZd)a	dd Z
G d	d
 d
ZG dd deZG dd deZG dd deZG dd deeZG dd deZG dd deZG dd deZG dd deZG dd deeZG dd deZG dd  d eZd!d" Zd#d$ Zd%d& Zed'kr&e  d(S )*zd
Perform timing tests on various trait styles to determine the amount of
overhead that traits add.

    )time   )AnyDelegatesTo	HasTraitsIntRangei@B g      ?c             C   s   t  }|   t  | S )N)r   )funcnow r   ;/tmp/pip-build-7vycvbft/traits/traits/tests/check_timing.pymeasure   s    r   c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )old_style_value      ?c             C   sb   | j   tdk rt| jat| j}t| j}dt }t|t d| }t|t d| }||fS )Ng        g    .A)initt0r   nulldo_getdo_setnmax)selfZreference_getZreference_sett1t2scaleget_timeset_timer   r   r   r   $   s    


zold_style_value.measurec             C   s   xt tD ]}q
W d S )N)ranger   )r   ir   r   r   r   3   s    zold_style_value.nullc             C   s
   d| _ d S )N   )value)r   r   r   r   r   7   s    zold_style_value.initc             C   s   xt tD ]
}|| _q
W d S )N)r   r   r!   )r   r   r   r   r   r   :   s    zold_style_value.do_setc             C   s   xt tD ]
}| j q
W d S )N)r   r   r!   )r   r   r   r   r   r   >   s    zold_style_value.do_getN)r   r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   #   s
   
r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )new_style_valuec             C   sb   | j   tdk rt| jat| j}t| j}dt }t|t d| }t|t d| }||fS )Ng        g    .A)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   E   s    


znew_style_value.measurec             C   s   xt tD ]}q
W d S )N)r   r   )r   r   r   r   r   r   T   s    znew_style_value.nullc             C   s
   d| _ d S )Nr   r    )r!   )r   r   r   r   r   X   s    znew_style_value.initc             C   s   xt tD ]
}|| _q
W d S )N)r   r   r!   )r   r   r   r   r   r   [   s    znew_style_value.do_setc             C   s   xt tD ]
}| j q
W d S )N)r   r   r!   )r   r   r   r   r   r   _   s    znew_style_value.do_getN)r"   r#   r$   r   r   r   r   r   r   r   r   r   r%   D   s
   r%   c               @   s&   e Zd Zdd Zdd ZeeeZdS )property_valuec             C   s   | j S )N)_value)r   r   r   r   	get_valuef   s    zproperty_value.get_valuec             C   s
   || _ d S )N)r'   )r   r!   r   r   r   	set_valuei   s    zproperty_value.set_valueN)r"   r#   r$   r(   r)   propertyr!   r   r   r   r   r&   e   s   r&   c               @   s$   e Zd Zdd Zdd Zdd ZdS )global_valuec             C   s   da d S )Nr   r    )gvalue)r   r   r   r   r   q   s    zglobal_value.initc             C   s   xt tD ]}|aq
W d S )N)r   r   r,   )r   r   r   r   r   r   u   s    zglobal_value.do_setc             C   s   xt tD ]}t q
W d S )N)r   r   r,   )r   r   r   r   r   r   z   s    zglobal_value.do_getN)r"   r#   r$   r   r   r   r   r   r   r   r+   p   s   r+   c               @   s   e Zd ZeZdS )	any_valueN)r"   r#   r$   r   r!   r   r   r   r   r-      s   r-   c               @   s   e Zd ZeZdS )	int_valueN)r"   r#   r$   r   r!   r   r   r   r   r.      s   r.   c               @   s   e Zd ZeddZdS )range_valuer   i 5wNr    )r"   r#   r$   r   r!   r   r   r   r   r/      s   r/   c               @   s   e Zd Zdd ZdS )change_valuec             C   s   d S )Nr   )r   oldnewr   r   r   _value_changed   s    zchange_value._value_changedN)r"   r#   r$   r3   r   r   r   r   r0      s   r0   c               @   s   e Zd Zdd Zdd ZdS )monitor_valuec             C   s   | j | jd d S )Nr!   )Zon_trait_changeon_value_change)r   r   r   r   r      s    zmonitor_value.initc             C   s   d S )Nr   )r   objectZ
trait_namer1   r2   r   r   r   r5      s    zmonitor_value.on_value_changeN)r"   r#   r$   r   r5   r   r   r   r   r4      s   r4   c               @   s    e Zd ZedZeZdd ZdS )delegate_valuedelegatec             C   s   t  | _d S )N)r.   r8   )r   r   r   r   r      s    zdelegate_value.initN)r"   r#   r$   r   r!   r   r8   r   r   r   r   r   r7      s   r7   c               @   s   e Zd Zdd ZdS )delegate_2_valuec             C   s   t  }|j  || _d S )N)r7   r   r8   )r   r8   r   r   r   r      s    zdelegate_2_value.initN)r"   r#   r$   r   r   r   r   r   r9      s   r9   c               @   s   e Zd Zdd ZdS )delegate_3_valuec             C   s   t  }|j  || _d S )N)r9   r   r8   )r   r8   r   r   r   r      s    zdelegate_3_value.initN)r"   r#   r$   r   r   r   r   r   r:      s   r:   c             C   s$   d}|j | ||| ||| d}|S )a:   Return string containing a benchmark report.

    The arguments are the name of the benchmark case, the times to do a 'get'
    or a 'set' operation for that benchmark case in usec, and the
    corresponding times for a reference operation (e.g., getting and
    setting an attribute on a new-style instance.
    zn{name:^30}: Get {get_time:02.3f} us (x {get_speed_up:02.3f}), Set {set_time:02.3f} us (x {set_speed_up:02.3f}))namer   Zget_speed_upr   Zset_speed_up)format)r;   r   r   ref_get_timeref_set_timetemplatereportr   r   r   r@      s    
r@   c             C   s,   | j }|  j \}}tt||||| d S )N)r"   r   printr@   )klassr=   r>   Zbenchmark_namer   r   r   r   r   run_benchmark   s    rC   c              C   sH   t  j \} }ttt tttttt	t
ttg}x|D ]}t|| | q0W d S )N)r%   r   r+   r   r&   r-   r.   r/   r0   r4   r7   r9   r:   rC   )r=   r>   Z
benchmarksZ	benchmarkr   r   r   main   s    
rD   __main__Ng      )__doc__r   apir   r   r   r   r   r   r   r   r   r6   r%   r&   r+   r-   r.   r/   r0   r4   r7   r9   r:   r@   rC   rD   r"   r   r   r   r   <module>   s,   !!	

