U
    ©Ê¹jTG  ã                   @   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  mZ d dlm  m  m  mZ d dlm  m  m  mZ d dlm  m  m  m  mZ d dlm  m  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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,m-Z-m.Z. e*e/e-e' f dœdd„Z0e*e/e-e' f e'e,e/ d	œd
d„Z1e*e/e-e' f e'e,e' ddœdd„Z2e*e/e-e' f dœdd„Z3e*e/e-e' f dœdd„Z4dS )é    N)Úget_native_backend_configé   )ÚNSNodeTargetType)ÚCallableÚDictÚListÚOptionalÚSetÚTuple)Úreturnc               N   C   s   t jht jht jhtjhtjhtjht jhtj	ht j
tjht jtjjjht jtjjjht jtjht jtjht jtjht jhtjtjhtjhtjtjhtjt jddtjht j tj!ht j"tj#ht j$tj%htj&ddt j'tj&ht j(ht j)ht j*ht j+ht j,htj-htj.htj/ht j0ht j1ht j2ht j3ht j4ht j5ht j6ht j7ht j8ht j9ht j:tj;htj<htj=htj>htj?htj@htjAht jBtjCht jDtjEht jFtjGtjGddhddtjHt jIht jJtjKtjLhtjMhtjNhtjOhtjPhtjQhtjRhtjShtjThtjUhtjVhtjWhtjXhtjYhtj jZj[ht j\htj]htj^ht j_ht j`taj`htjbtcjbht jdhtjeht jfhtjghtjhhgN} tiƒ }t jt jjj	jkfg}|jl m¡ D ]~\}}|}tn|totpfƒ�r¢|d	 }�q†|jqd k	�r¾| r||jqf¡ |jsd k	�rÚ| r||jsf¡ |jtd k	�rz| r||jtf¡ �qztujvtujwtujxtujyfD ](}| m¡ D ]\}}| r||f¡ �q�qtujztuj{tuj|fD ]:}	|	 m¡ D ]*\}\}
}| r||
f¡ | r||f¡ �qT�qHtuj} m¡ D ]*\}\}
}| r||
f¡ | r||f¡ �qŽtuj~tujt€j�fD ](}| m¡ D ]\}}| r||f¡ �qÖ�qÊt€j‚fD ](}| m¡ D ]\}}| r||f¡ �q�qü|D ]D\}}| D ]4}||k�sN||k�r6| |¡ | |¡  �q*�q6�q*i }d
}| D ]}tƒ|ƒ}|d7 }|||< �q||S )NÚreluÚrelu_ÚsigmoidÚsigmoid_Útanh_ÚtanhÚhardsigmoid_Úhardsigmoidéÿÿÿÿr   r   )„Ú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ÚConvTranspose3dZconv_transpose1dZconv_transpose2dZconv_transpose3dÚELUÚ	EmbeddingÚEmbeddingBagÚ	GroupNormÚ	HardswishÚInstanceNorm1dÚInstanceNorm2dÚInstanceNorm3dÚ	LayerNormÚ	LeakyReLUÚReLU6Úrelu6ÚeluÚ	hardswishZ
group_normÚ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ÚSoftmaxÚPReLUÚnnqÚpreluÚtoqÚPixelShuffleÚpixel_shuffleÚPixelUnshuffleÚpixel_unshuffleÚnarrowr   ÚmodulesÚNonDynamicallyQuantizableLinearZ!_pattern_complex_format_to_configÚitemsÚ
isinstanceÚlistÚtupleZfused_moduleÚappendZ
qat_moduleZreference_quantized_moduleÚ_lower_to_native_backendZSTATIC_LOWER_MODULE_MAPZDYNAMIC_LOWER_MODULE_MAPZWEIGHT_ONLY_LOWER_MODULE_MAPZ SPECIAL_PATTERN_LOWER_MODULE_MAPZSTATIC_LOWER_FUSED_MODULE_MAPZ(STATIC_LOWER_FUSED_MODULE_TWO_INPUTS_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_configZnew_connectionsÚpatternÚconfigZ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ˆ   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/ao/ns/fx/mappings.pyÚ$get_base_name_to_sets_of_related_ops   sð   ÿÿÿÿÿÿÿÿþþþþþþÿþÿþû	þþþû	ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþþû	üýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþÿÿÿÿÿ€ € ¼  Mþüýÿýÿ

rŠ   )r…   Úopr   c                 C   s&   |   ¡ D ]\}}||kr|  S qd S )N)rx   )r…   r‹   r‡   r„   rˆ   rˆ   r‰   Úget_base_name_for_opÊ  s    
rŒ   )r…   r‹   Ú
related_opr   c                 C   sj   |d k	r>|   ¡ D ]}||kr| |¡  d S qt|› d�ƒ‚n(d}t|ƒ| krX|d7 }qB|h| t|ƒ< d S )Nz was not foundr   r   )Úvaluesr/   ÚAssertionErrorr   )r…   r‹   r�   r„   r†   rˆ   rˆ   r‰   Úadd_op_to_sets_of_related_opsÔ  s    

r�   c               <   C   s2  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h} 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h}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*tj+tj,j-j.tj,j-j/tjtj0tj1tj2tj3tj4tj5tj6tj7tj8tj9tj:tj;tj<tjh&}t=j>t?j>t@j>tAj>tj=jBjjCt=jDt=jEt=jFt?jDt?jEt?jFt?jGt?jHt=jItAjIt=jJt=jKt=jLt=jMt=jNt=jOt=jPt=jQt=jRt=jSt=jTt=jUt=jVt=jWt=jXt=jYt=jZt=j[t=j\t]j^t]j_t]j`t]jat]jbt]jct]jdt]jet]jft]jgthjethjfthjgthjithjjthjkthj`thjathjbthjcthjdtljct]jmt]jnt]jot]jph<}tqj>tqjDtqjEtqjFtqjJtqjKtqjLtqjMtqjNtqjPtqjRtqjStqjTtqjUtqjVtqjWtqjGtqjHtqjLtqj[tqj\trj^trj_trj`trjatrjbtrjctrjmtrjntrjotrjph}t=jst=jtt=jut=jvt=jwt=jxt=jyt=jzt=j{t=j|t=jLt=j}t=j~t=jt=j€t=j�t=j‚t=jƒt=jXh}ddddddddh}| |||||||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)„r   r   r   r   r   r    r1   rL   rM   rN   rO   rP   rj   rR   rT   r0   r/   r2   Úsumro   Úsetrp   Zlinear_reluZconv1d_reluZconv2d_reluZconv3d_relur   r   r   r   rZ   r)   r+   r-   rX   rY   rh   r5   r7   r9   rK   rr   rt   r!   r#   r$   r%   r'   rf   re   rd   rc   rb   ra   r`   ru   r_   r^   r]   r\   r[   r   r   ÚnnqatÚnnqatdÚnnqdrv   rw   r   r   r   rA   rB   r.   r;   r<   ri   r=   r>   r?   r@   rC   rE   rF   rG   rH   rD   rI   rJ   rQ   rS   rl   rm   ÚnniZBNReLU2dZBNReLU3dZ
ConvReLU1dZ
ConvReLU2dZ
ConvReLU3dZ
LinearReLUZ
LinearBn1dZConvBn1dZConvBn2dZConvBn3dÚnniqatZConvBnReLU1dZConvBnReLU2dZConvBnReLU3dÚnniqdZLinearLeakyReLUZ
LinearTanhZ	ConvAdd2dZConvAddReLU2drn   Únniqr3   rU   r:   rV   r(   r*   r,   r   r"   r&   rW   ÚIdentityr4   r6   r8   rq   rs   )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    íðÚ*
ÂBá#íøør›   c                  C   sP   t jtjh} tjh}ddddddddd	d
ddddddddddddh}| ||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    Zquantize_per_tensorr0   Úgetitemr   rš   )ZFUNS_UNMATCHABLEZMODS_UNMATCHABLEZMETHS_UNMATCHABLErˆ   rˆ   r‰   Úget_unmatchable_types_mapÑ  s@    þÿêýr¤   )5r0   r    Ztorch.nnr   Ztorch.nn.functionalrg   r   ZopsZ	quantizedrp   Ztorch.ao.nn.quantizedZaorn   Ztorch.ao.nn.quantized.dynamicZdynamicr•   Ztorch.ao.nn.intrinsic.quantizedZ	intrinsicr™   Z'torch.ao.nn.intrinsic.quantized.dynamicr˜   Ztorch.ao.nn.intrinsic.qatZqatr—   Ztorch.ao.nn.intrinsicr–   Ztorch.ao.nn.qatr“   Ztorch.ao.nn.qat.dynamicr”   Z$torch.ao.quantization.backend_configr   Z1torch.ao.quantization.fx._lower_to_native_backendZquantizationZfxr}   Z+torch.ao.quantization.quantization_mappingsr~   Zns_typesr   Útypingr   r   r   r   r	   r
   r   rŠ   rŒ   r�   r›   r¤   rˆ   rˆ   rˆ   r‰   Ú<module>   sB   $    4ýü j