U
    d>D                     @   s  d dl Z d dlZd dlmZ d dlm  mZ ejjZ	d dl
m  mZ d dlm  m  mZ d dlm  m  mZ d dlm  m  m  mZ d dlm  m  mZ d dlm  mZ d dlm  mZ d dlm  m  mZ d dlmZ d dlm   m!  m"  m#Z# d dl$m   m!  m%Z% ddl&m'Z' d dl(m)Z)m*Z*m+Z+m,Z, e*e-e)e' f dddZ.e*e-e)e' f e'e,e- d	d
dZ/e*e-e)e' f e'e,e' ddddZ0e*e-e)e' f dddZ1e*e-e)e' f dddZ2dS )    N)get_native_backend_config_dict   )NSNodeTargetType)SetDictListOptional)returnc               D   C   sn  t tjgt tjgt tjgt tjgt tjgt tjgt tj	gt tj
gt tjtjgt tjtjjjgt tjtjjjgt tjtjgt tjtjgt tjtjgt tjgt tjtjgt tjgt tjtjgt tjtj ddtjgt tj!tj"gt tj#tj$gt tj%tj&gt tj'ddtj(tj'gt tj)gt tj*gt tj+gt tj,gt tj-gt tj.gt tj/gt tj0gt tj1gt tj2gt tj3gt tj4gt tj5gt tj6gt tj7gt tj8tj9gt tj:gt tj;gt tj<gt tj=gt tj>gt tj?tj@gt tjAtjBgt tjCtjDtjDddgt ddtjEtjFgt tjGtjHtjIgt tjJgt tjKgt tjLgt tjMgt tjNgt tjOgt tjPgt tjQgt tjRgt tjSgt tjTgt tjUgt tjVgt tjjWjXgt tjYgt tjZgt tj[gt tj\ggC} t] }tj	tj^j
j_fg}|d	 D ]}d
|krLq:|d
 }|}t`|tatbfrt|d }qXd|kr|c||d f d|kr|c||d f d|kr:|c||d f q:tdjetdjftdjgtdjhfD ](}|i D ]\}}|c||f qqtdjjtdjkfD ]:}	|	i D ]*\}\}
}|c||
f |c||f q"qtdjli D ]*\}\}
}|c||
f |c||f q\tdjmtdjntojpfD ](}|i D ]\}}|c||f qqtojqfD ](}|i D ]\}}|c||f q֐q|D ]D\}}| D ]4}||ks||kr|| ||  qqqi }d}| D ]}tr|}|d7 }|||< qJ|S )Nrelurelu_sigmoidsigmoid_tanh_tanhhardsigmoid_hardsigmoidZconfigspatternZfused_moduleZ
qat_moduleZ#reference_quantized_module_for_rootr   r   )ssetnnConv1dConv2dConv3dFconv1dconv2dconv3dLinearlinear	AvgPool1dtorch
avg_pool1d	AvgPool2d_C_nn
avg_pool2d	AvgPool3d
avg_pool3dAdaptiveAvgPool1dadaptive_avg_pool1dAdaptiveAvgPool2dadaptive_avg_pool2dAdaptiveAvgPool3dadaptive_avg_pool3dLSTMaddoperatorcatmulr
   ReLU	MaxPool1d
max_pool1d	MaxPool2d
max_pool2d	MaxPool3d
max_pool3dr   SigmoidBatchNorm2dBatchNorm3dConvTranspose1dConvTranspose2dConvTranspose3dELU	EmbeddingEmbeddingBag	GroupNorm	HardswishInstanceNorm1dInstanceNorm2dInstanceNorm3d	LayerNorm	LeakyReLUReLU6relu6elu	hardswishinstance_norm
layer_norm
leaky_reluSiLUsiluMishmishTanhr   r   HardsigmoidHardtanhhardtanh	hardtanh_floordiv	unsqueezestacksqueezesortrepeat_interleaveminmeanmax	transposeflattenclampchunk
functionalinterpolateDropoutdropoutmatmulSoftmaxr   modulesNonDynamicallyQuantizableLinear
isinstancelisttupleappend_lower_to_native_backendZSTATIC_LOWER_MODULE_MAPZDYNAMIC_LOWER_MODULE_MAPZWEIGHT_ONLY_LOWER_MODULE_MAPZ SPECIAL_PATTERN_LOWER_MODULE_MAPitemsZSTATIC_LOWER_FUSED_MODULE_MAPZDYNAMIC_LOWER_FUSED_MODULE_MAPZSTATIC_LOWER_FUNCTIONAL_MAPZQBIN_OP_MAPPINGZQBIN_RELU_OP_MAPPINGquantization_mappingsZ,DEFAULT_FLOAT_TO_QUANTIZED_OPERATOR_MAPPINGSZ%DEFAULT_DYNAMIC_QUANT_MODULE_MAPPINGSstr)Zsets_of_related_opsZbackend_config_dictZnew_connectionsconfigr   Zfirst_elementZsource_to_targetsourcetargetZsource_to_double_targetZtarget1Ztarget2Zitem1Zitem2set_of_related_ops base_name_to_sets_of_related_opscounter	base_name r~   ;/tmp/pip-unpacked-wheel-ua33x9lu/torch/ao/ns/fx/mappings.py$get_base_name_to_sets_of_related_ops   sN       #




	

r   )r{   opr	   c                 C   s&   |   D ]\}}||kr|  S qd S )N)rt   )r{   r   r}   rz   r~   r~   r   get_base_name_for_op  s    
r   )r{   r   
related_opr	   c                 C   sr   |d k	rB|   D ] \}}||kr||  d S qt| dn,d}t|| kr\|d7 }qFt|g| t|< d S )Nz was not foundr   r   )rt   r/   AssertionErrorrv   r   )r{   r   r   r}   rz   r|   r~   r~   r   add_op_to_sets_of_related_ops  s    

r   c               8   C   s
  t tjtjtjtjtjtjtj	tj
tjtjtjtjtjtjtjtjtjtjg} t  }t tjtjtjtjtjtjtjtjtjtjtj	tj
tjtjtjg}t tjtjtjtjtjtjtjtjtjtj tjtj!tj"tj#tj$tj%tj&tj'tj(tj)j*j+tj)j*j,tjtj-tj.tj/tj0tj1tj2tj3tj4tj5tj6tj7tj8tjg#}t t9j:t;j:t<j:t=j:tj9j>jj?t9j@t9jAt9jBt;j@t;jAt;jBt;jCt;jDt9jEt=jEt9jFt9jGt9jHt9jIt9jJt9jKt9jLt9jMt9jNt9jOt9jPt9jQt9jRt9jSt9jTt9jUt9jVt9jWtXjYtXjZtXj[tXj\tXj]tXj^tXj_tXj`tXjatXjbtcj`tcjatcjbtcjdtcjetcjftcj[tcj\tcj]tcj^tcj_tgj^g7}t thj:thj@thjAthjBthjFthjGthjHthjIthjJthjLthjNthjOthjPthjQthjRthjSthjCthjDthjHthjWtijYtijZtij[tij\tij]tij^g}t t9jjt9jkt9jlt9jmt9jnt9jot9jpt9jqt9jrt9jst9jHt9jtt9jut9jvt9jwt9jxt9jTg}t ddddddddg}| |||||||d	S )
Nr   r   r   r   r   r   r   r
   )Zfuns_io_type_fp32Zfuns_io_type_fp16Zfuns_io_type_int8Zfuns_io_type_fp32_or_int8Zmods_io_type_fp32Zmods_io_type_int8Zmods_io_type_fp32_or_int8Zmeths_io_type_fp32_or_int8)yr   r   r   r   r   r   r    r1   rL   rM   rN   rO   rP   rj   rR   rT   r0   r/   r2   sumtoqZlinear_reluZconv1d_reluZconv2d_reluZconv3d_relur
   r   r   r   rZ   r)   r+   r-   rX   rY   rh   r5   r7   r9   rK   r!   r#   r$   r%   r'   rf   re   rd   rc   rb   ra   r`   r_   r^   r]   r\   r[   r   r   nnqatnnqatdnnqdrm   rn   r   r   r   rA   rB   r.   r;   r<   ri   r=   r>   r?   r@   rC   rE   rF   rG   rH   rD   rI   rJ   rQ   rS   rl   nniZBNReLU2dZBNReLU3dZ
ConvReLU1dZ
ConvReLU2dZ
ConvReLU3dZ
LinearReLUZ
LinearBn1dZConvBn1dZConvBn2dZConvBn3dnniqatZConvBnReLU1dZConvBnReLU2dZConvBnReLU3dnniqdnnqnniqr3   rU   r:   rV   r(   r*   r,   r   r"   r&   rW   Identityr4   r6   r8   )ZFUNS_IO_TYPE_FP32ZFUNS_IO_TYPE_FP16ZFUNS_IO_TYPE_INT8ZFUNS_IO_TYPE_FP32_OR_INT8ZMODS_IO_TYPE_FP32ZMODS_IO_TYPE_INT8ZMODS_IO_TYPE_FP32_OR_INT8ZMETHS_IO_TYPE_FP32_OR_INT8r~   r~   r   get_node_type_to_io_type_map  s   &
<r   c                  C   s\   t tjtjg} t tjg}t ddddddddd	d
ddddddddddddg}| ||dS )NtoZ
dequantizeZreshapeviewZ
unsqueeze_r[   rc   Zsqueeze_r]   sizeshapeZresize_r_   repeatZpermuteZnumelra   Zdetach_detach
contiguousre   rf   )Zfuns_unmatchableZmods_unmatchableZmeths_unmatchable)r   r    Zquantize_per_tensorr0   getitemr   r   )ZFUNS_UNMATCHABLEZMODS_UNMATCHABLEZMETHS_UNMATCHABLEr~   r~   r   get_unmatchable_types_map  sF    r   )3r0   r    Ztorch.nnr   Ztorch.nn.functionalrg   r   opsZ	quantizedr   Ztorch.nn.quantizedr   Ztorch.nn.quantized.dynamicZdynamicr   Ztorch.nn.intrinsic.quantizedZ	intrinsicr   Z$torch.nn.intrinsic.quantized.dynamicr   Ztorch.nn.intrinsic.qatZqatr   Ztorch.nn.intrinsicr   Ztorch.nn.qatr   Ztorch.nn.qat.dynamicr   Z$torch.ao.quantization.backend_configr   Z1torch.ao.quantization.fx._lower_to_native_backendZaoZquantizationZfxrs   Z+torch.ao.quantization.quantization_mappingsru   Zns_typesr   typingr   r   r   r   rv   r   r   r   r   r   r~   r~   r~   r   <module>   sB       Y