U
    d                     @   sp   d dl mZmZmZmZ d dlmZ d dlm  m	Z	 d dl
Zd dlZeeZeej G dd deZdS )    )coreschemascope	workspace)
ModelLayerNc                       s&   e Zd Zd fdd	Zdd Z  ZS )
Functional
functionalNc              
      sV  t |}tt| j|||fd|i| || _|| _t|tpPt|t	oP|dk}	t
j| jdd t|t	rt |jt |}
nZt|t jr|jdd| _W 5 Q R  d S t|ts|g}dd |D }t |jt j| }
W 5 Q R X t|
 }|	r|
| _n
|
d | _|d k	rht|ts,|g| }t||ks>tt|| j D ]\}}|| qNd S d	}ztd
}t j||dd ||| j| jf| t|gi \}}t |D ]D}|	r| j| n| j}| }||ks||krd}q|| g krt! }nD|| d dkr4t!|| dd  }nt"#d$||  d}qd }|| t%j&j'krrt(j)|f}nv|| t%j&j*krt(j+|f}nX|| t%j&j,krt(j-|f}n:|| t%j&j.krt(j/|f}n|| t%j&j0krt(j1|f}|d k	r|| qW n6 t2k
r8 } zd}t"#t3| W 5 d }~X Y nX |rRt"#d$| j d S )Ntags   T)reset)Z
keep_blobsc                 S   s   g | ]}|t jfqS  )npvoid).0outr   r   C/tmp/pip-unpacked-wheel-ua33x9lu/caffe2/python/layers/functional.py
<listcomp>/   s     z'Functional.__init__.<locals>.<listcomp>r   FZ"_temp_type_and_shape_inference_net)Zenforce_typeszunexpected shape: {}z)Type inference had problems for layer: {})4r   Z	as_recordsuperr   __init__	_function_kwargs
isinstancelistintr   Z	NameScopenameZ	NewRecordnetZRawTupleZFieldcloneoutput_schemaStructlenZfield_blobsAssertionErrorzipZall_scalarsset_typer   ZNetZInitEmptyRecordinput_recordr   ZInferShapesAndTypesrangetupleloggerwarningformat
caffe2_pb2ZTensorProtoZDOUBLEr   Zfloat64FLOATZfloat32ZINT32Zint32ZINT64Zint64ZFLOAT16Zfloat16	TypeErrorstr)selfmodelr#   Zoutput_names_or_numfunctionr   Zoutput_dtypesr	   kwargsZreturn_structZstruct_output_schemaZ	out_tupleZnum_outputsZdtypeZscalarZ
had_issuesZtype_netZshapestypesiZscalar_schemaZblobshapeex	__class__r   r   r      s    
 


 
 





 
zFunctional.__init__c                 C   s   | j || j| jf| j d S )N)r   r#   r   r   )r-   r   r   r   r   add_opsy   s      zFunctional.add_ops)r   NN)__name__
__module____qualname__r   r7   __classcell__r   r   r5   r   r      s
        cr   )Zcaffe2.pythonr   r   r   r   Zcaffe2.python.layers.layersr   Zcaffe2.proto.caffe2_pb2protor)   Znumpyr   logging	getLoggerr8   r&   setLevelINFOr   r   r   r   r   <module>   s   
