B
    #=6\A  ã               @   sø   d dl mZ d dl mZ d dl mZ d dl mZ d dlZd dlZd dlZd dlm	Z	 d dl
mZ d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT G d	d
„ d
eƒZeeje ƒeje< dS )é    )Úabsolute_import)Údivision)Úprint_function)Úunicode_literalsN)Ú
basestring)ÚModelHelper)Ú*c            '   @   s~   e Zd Zeeeeeee	e
eeeeeeeeeeeeeeeeeeeeee e!e"e#e$e%e&e'e(dœ&Z)dd„ Z*dd„ Z+dd„ Z,dd	„ Z-d
S )ÚHelperWrapper)&Ú	arg_scopeÚfcÚ	packed_fcÚ	fc_decompÚ	fc_sparseÚfc_pruneÚdropoutÚmax_poolÚaverage_poolÚmax_pool_with_indexÚlrnÚsoftmaxÚinstance_normÚ
spatial_bnÚ
spatial_gnÚreluÚpreluÚtanhÚconcatÚdepth_concatÚsumÚ	transposeÚiterÚaccuracyÚconvÚconv_ndÚconv_transposeÚ
group_convÚgroup_conv_deprecatedÚimage_inputÚvideo_inputÚadd_weight_decayÚelementwise_linearÚ
layer_normÚbatch_mat_mulÚcondÚloopÚdb_inputc             C   s
   || _ d S )N)Úwrapped)Úselfr0   © r2   ú5/tmp/pip-install-l3r2oljg/torch/caffe2/python/brew.pyÚ__init__I   s    zHelperWrapper.__init__c                s0   ˆ ˆj krtd ˆ ¡ƒ‚‡ ‡fdd„}ˆ |_|S )Nz"Helper function {} not registered.c                 s¸   i ‰ ˆdkrVt | ƒdkr0t| d tƒr0| d }nd|krB|d }ntdƒ‚t |j¡‰ ˆjˆ }t 	|¡\}}}}|d krŒ‡ fdd„|D ƒ‰ t
ƒ }ˆ  | ˆi ¡¡ ˆ  |¡ || ˆ ŽS )Nr
   r   ÚmodelzjThe first input of helper function should be model. Or you can provide it in kwargs as model=<your_model>.c                s   i | ]}|ˆ krˆ | |“qS r2   r2   )Ú.0Úvar_name)Ú
new_kwargsr2   r3   ú
<dictcomp>c   s   zDHelperWrapper.__getattr__.<locals>.scope_wrapper.<locals>.<dictcomp>)ÚlenÚ
isinstancer   ÚRuntimeErrorÚcopyÚdeepcopyr
   Ú	_registryÚinspectÚ
getargspecZget_current_scopeÚupdateÚget)ÚargsÚkwargsr5   ÚfuncZ	var_namesÚ_ÚvarkwZ	cur_scope)Úhelper_namer1   )r8   r3   Úscope_wrapperS   s$    




z0HelperWrapper.__getattr__.<locals>.scope_wrapper)r?   ÚAttributeErrorÚformatÚ__name__)r1   rI   rJ   r2   )rI   r1   r3   Ú__getattr__L   s    
zHelperWrapper.__getattr__c             C   s,   |j }|| jkrtd |¡ƒ‚|| j|< d S )Nz9Helper {} already exists. Please change your helper name.)rM   r?   rK   rL   )r1   ÚhelperÚnamer2   r2   r3   ÚRegisterp   s    
zHelperWrapper.Registerc             C   s   t |tƒr|n|j}|| jkS )N)r;   r   rM   r?   )r1   Zhelper_or_helper_namerI   r2   r2   r3   Ú
has_helpery   s    zHelperWrapper.has_helperN).rM   Ú
__module__Ú__qualname__r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r?   r4   rN   rQ   rR   r2   r2   r2   r3   r	      sT   $	r	   )Ú
__future__r   r   r   r   Úsysr=   r@   Zpast.builtinsr   Zcaffe2.python.model_helperr   Zcaffe2.python.helpers.algebraZcaffe2.python.helpers.arg_scopeZ#caffe2.python.helpers.array_helpersZ!caffe2.python.helpers.control_opsZcaffe2.python.helpers.convZcaffe2.python.helpers.db_inputZcaffe2.python.helpers.dropoutZ(caffe2.python.helpers.elementwise_linearZcaffe2.python.helpers.fcZ"caffe2.python.helpers.nonlinearityZ#caffe2.python.helpers.normalizationZcaffe2.python.helpers.poolingZcaffe2.python.helpers.toolsZcaffe2.python.helpers.trainÚobjectr	   ÚmodulesrM   r2   r2   r2   r3   Ú<module>   s0   c