a
    h|G                     @   s  d dl Z d dlmZmZ d dl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Z d dlm  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  mZ d dlm  m  m Z  d dl!mZ d dl"m  m#Z$ d dl%m&Z& ddl'm(Z( ej)j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)CallableOptional)get_native_backend_config   )NSNodeTargetType)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}|jlm D ]~\}}|}tn|totpfr|d	 }q|jqd ur|r||jqf |jsd ur|r||jsf |jtd u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 qtuj~tujtjfD ](}|m D ]\}}|r||f q֐qtjfD ](}|m D ]\}}|r||f qq|D ]D\}}| D ]4}||v sN||v r6|| ||  q*q6q*i }t| D ]\}}t|}|||< q||S )
Nrelurelu_sigmoidsigmoid_tanh_tanhhardsigmoid_hardsigmoid)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	enumerate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   E/var/www/auris/lib/python3.9/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 ]\}}||v r|  S qd S )N)rt   )r   r   r   r   r   r   r   get_base_name_for_op  s    
r   )r   r   
related_opr   c                 C   sj   |d ur>|   D ]}||v r||  d S qt| dn(d}t|| v 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   s&  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=jt=jt=jt=jt=jXh}h d}| |||||||dS )N>   r   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   r-   rH   rI   rJ   rK   rL   rf   rN   rP   r,   r+   r.   sumrk   setrl   Zlinear_reluZconv1d_reluZconv2d_reluZconv3d_relur   r   r
   r   rV   r%   r'   r)   rT   rU   rd   r1   r3   r5   rG   rn   rp   r   r   r    r!   r#   rb   ra   r`   r_   r^   r]   r\   rq   r[   rZ   rY   rX   rW   r   r   nnqatnnqatdnnqdrr   rs   r   r   r   r=   r>   r*   r7   r8   re   r9   r:   r;   r<   r?   rA   rB   rC   rD   r@   rE   rF   rM   rO   rh   ri   nniZBNReLU2dZBNReLU3dZ
ConvReLU1dZ
ConvReLU2dZ
ConvReLU3dZ
LinearReLUZ
LinearBn1dZConvBn1dZConvBn2dZConvBn3dnniqatZConvBnReLU1dZConvBnReLU2dZConvBnReLU3dnniqdZLinearLeakyReLUZ
LinearTanhZ	ConvAdd2dZConvAddReLU2drj   nniqr/   rQ   r6   rR   r$   r&   r(   r   r   r"   rS   Identityr0   r2   r4   rm   ro   )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   s(   t jtjh} tjh}h d}| ||dS )N>   Znumelrb   r]   viewZpermutesizer_   Zresize_tor[   
contiguousZ
dequantizera   rY   ZreshapeZ
unsqueeze_repeatZsqueeze_shapeZdetach_detachrW   )Zfuns_unmatchableZmods_unmatchableZmeths_unmatchable)r   Zquantize_per_tensorr,   getitemr   r   )ZFUNS_UNMATCHABLEZMODS_UNMATCHABLEZMETHS_UNMATCHABLEr   r   r   get_unmatchable_types_map  s    r   )3r,   typingr   r   r   Ztorch.ao.nn.intrinsicZaor   Z	intrinsicr   Ztorch.ao.nn.intrinsic.qatZqatr   Ztorch.ao.nn.intrinsic.quantizedZ	quantizedr   Z'torch.ao.nn.intrinsic.quantized.dynamicZdynamicr   Ztorch.ao.nn.qatr   Ztorch.ao.nn.qat.dynamicr   Ztorch.ao.nn.quantizedrj   Ztorch.ao.nn.quantized.dynamicr   Z1torch.ao.quantization.fx._lower_to_native_backendZquantizationZfxry   Z+torch.ao.quantization.quantization_mappingsrz   Ztorch.nnZtorch.nn.functionalrc   r   Z$torch.ao.quantization.backend_configr   Zns_typesr   opsrl   dictr|   r   r   r   r   r   r   r   r   r   r   <module>   sB   $   2 j