U
    ‰dì  ã                   @   s(   d Z G dd„ deƒZG dd„ deƒZdS )ÚDEFAULTc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚModifierContextzI
    provide context to allow param_info to have different modifiers
    c                 C   s   i | _ g | _d S ©N)Ú
_modifiersÚ_modifiers_list©Úself© r   úB/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/modifier_context.pyÚ__init__   s    zModifierContext.__init__c                 C   s"   i | _ | jD ]}| j  |¡ qd S r   )r   r   Úupdate)r   Úmr   r   r	   Ú_rebuild_modifiers   s    
z"ModifierContext._rebuild_modifiersc                 C   s
   || j kS r   )r   ©r   Únamer   r   r	   Ú_has_modifier   s    zModifierContext._has_modifierc                 C   s   | j  |¡S r   )r   Úgetr   r   r   r	   Ú_get_modifier   s    zModifierContext._get_modifierc                 C   s   | j  |¡ | j |¡ d S r   )r   Úappendr   r   )r   Ú	modifiersr   r   r	   Úpush_modifiers    s    zModifierContext.push_modifiersc                 C   s(   t | jƒdkst‚| j ¡  |  ¡  d S )Né    )Úlenr   ÚAssertionErrorÚpopr   r   r   r   r	   Úpop_modifiers%   s    
zModifierContext.pop_modifiersN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r   r   r   r   r   r	   r      s   r   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚUseModifierBasea3  
    context class to allow setting the current context.
    Example usage with layer:
        modifiers = {'modifier1': modifier1, 'modifier2': modifier2}
        with Modifiers(modifiers):
            modifier = ModifierContext.current().get_modifier('modifier1')
            layer(modifier=modifier)
    c                 C   s    t |tƒr|| _n
t|i| _d S r   )Ú
isinstanceÚdictr   ÚDEFAULT_MODIFIER)r   Zmodifier_or_dictr   r   r	   r
   5   s    
zUseModifierBase.__init__c                 C   s   t ‚d S r   )ÚNotImplementedErrorr   r   r   r	   Ú_context_class;   s    zUseModifierBase._context_classc                 C   s   |   ¡  ¡  | j¡ | S r   )r$   Úcurrentr   r   r   r   r   r	   Ú	__enter__>   s    zUseModifierBase.__enter__c                 C   s   |   ¡  ¡  ¡  d S r   )r$   r%   r   )r   ÚtypeÚvalueÚ	tracebackr   r   r	   Ú__exit__B   s    zUseModifierBase.__exit__N)r   r   r   r   r
   r$   r&   r*   r   r   r   r	   r   +   s
   	r   N)r"   Úobjectr   r   r   r   r   r	   Ú<module>	   s   