U
    d                     @   s   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 d dlT G dd deZee je e je< dS )    N)
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(e)e*e+e,e-e.e/d-Z0dd Z1dd Z2dd Z3dd	 Z4d
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moments_with_running_statsreluprelutanhconcatdepth_concatsum
reduce_sumsubarg_min	transposeiteraccuracyconvconv_ndconv_transpose
group_convgroup_conv_deprecatedimage_inputvideo_inputadd_weight_decayelementwise_linear
layer_normmat_mulbatch_mat_mulcondloopdb_input%fused_8bit_rowwise_quantized_to_float&sparse_lengths_sum_4bit_rowwise_sparsec                 C   s
   || _ d S N)wrapped)selfr4    r6   6/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/brew.py__init__Q   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 r6   r6   ).0var_nameZ
new_kwargsr6   r7   
<dictcomp>k   s     zDHelperWrapper.__getattr__.<locals>.scope_wrapper.<locals>.<dictcomp>)len
isinstancer   RuntimeErrorcopydeepcopyr   	_registryinspect
getargspecZget_current_scopeupdateget)argskwargsr9   funcZ	var_names_varkwZ	cur_scopehelper_namer5   r<   r7   scope_wrapper[   s(    




z0HelperWrapper.__getattr__.<locals>.scope_wrapper)rC   AttributeErrorformat__name__)r5   rN   rO   r6   rM   r7   __getattr__T   s    
zHelperWrapper.__getattr__c                 C   s,   |j }|| jkrtd||| j|< d S )Nz9Helper {} already exists. Please change your helper name.)rR   rC   rP   rQ   )r5   helpernamer6   r6   r7   Registerx   s    
zHelperWrapper.Registerc                 C   s   t |tr|n|j}|| jkS r3   )r?   r   rR   rC   )r5   Zhelper_or_helper_namerN   r6   r6   r7   
has_helper   s
    zHelperWrapper.has_helperN)5rR   
__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,   r-   r.   r/   r0   r1   r2   rC   r8   rS   rV   rW   r6   r6   r6   r7   r       sd   0$	r   )sysrA   rD   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.quantizationZcaffe2.python.helpers.toolsZcaffe2.python.helpers.trainobjectr   modulesrR   r6   r6   r6   r7   <module>   s*   k