
    Vh|G                     L   d dl Z d dlmZmZ d dlZd dlmc mc mZ	 d dl
mc mc mc mZ d dlmc mc mc mZ d dlmc mc mc mc mZ d dlmc mc mZ d dlmc mc mc mZ d dlmc mc mZ d dlmc mc mc mZ d dlmc mc mc mZ d dlmc mc m Z  d dl!mZ d dl"mc m#Z$ d dl%m&Z& ddl'm(Z( ejR                  j                  Z*de+e,e-e(   f   fdZ.de+e,e-e(   f   d	e(dee,   fd
Z/de+e,e-e(   f   d	e(dee(   ddfdZ0de+e,e-e(   f   fdZ1de+e,e-e(   f   fdZ2y)    N)CallableOptional)get_native_backend_config   )NSNodeTargetTypereturnc                  r   g 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        j0                  ht         j2                  ht        j4                  t6        j4                  ht        j8                  ht        j:                  t6        j:                  ht        j<                  t         j>                  ddt        j<                  ht         j@                  t        jB                  ht         jD                  t        jF                  ht         jH                  t        jJ                  ht        jL                  ddt         jN                  t        jL                  ht         jP                  ht         jR                  ht         jT                  ht         jV                  ht         jX                  ht        jZ                  ht        j\                  ht        j^                  ht         j`                  ht         jb                  ht         jd                  ht         jf                  ht         jh                  ht         jj                  ht         jl                  ht         jn                  ht         jp                  ht         jr                  ht         jt                  t        jv                  ht        jx                  ht        jz                  ht        j|                  ht        j~                  ht        j                  ht        j                  ht         j                  t        j                  ht         j                  t        j                  ht         j                  t        j                  t        j                  ddhddt        j                  t         j                  ht         j                  t        j                  t        j                  ht6        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        j                  ht        j                  ht        j                  ht        j                  ht        j                   j                  j                  ht         j                  ht        j                  ht        j                  ht         j                  ht         j                  t        j                  ht        j                  t        j                  ht         j                  ht        j                  ht         j                  ht        j                  ht        j                  h} t               }t         j                  t         j                  j                  j                  fg}|j                  j                         D ]  \  }}|}t        |t        t        f      r|d	   }t        |t        t        f      r|j                  |j                  ||j                  f       |j                  |j                  ||j                  f       |j                  |j                  ||j                  f        t        j                  t        j                  t        j                  t        j                  fD ]-  }|j                         D ]  \  }}|j                  ||f        / t        j                  t        j                  t        j                  fD ]C  }	|	j                         D ].  \  }\  }
}|j                  ||
f       |j                  ||f       0 E t        j                  j                         D ].  \  }\  }
}|j                  ||
f       |j                  ||f       0 t        j                  t        j                  t         j                  fD ]-  }|j                         D ]  \  }}|j                  ||f        / t         j                  fD ]-  }|j                         D ]  \  }}|j                  ||f        / |D ]8  \  }}| D ].  }||v s||v s|j5                  |       |j5                  |        8 : i }t        |       D ]  \  }}t	        |      }|||<    |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ConvTranspose3dconv_transpose1dconv_transpose2dconv_transpose3dELU	EmbeddingEmbeddingBag	GroupNorm	HardswishInstanceNorm1dInstanceNorm2dInstanceNorm3d	LayerNorm	LeakyReLUReLU6relu6elu	hardswish
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NonDynamicallyQuantizableLinear!_pattern_complex_format_to_configitems
isinstancelisttuplefused_moduleappend
qat_modulereference_quantized_module_lower_to_native_backendSTATIC_LOWER_MODULE_MAPDYNAMIC_LOWER_MODULE_MAPWEIGHT_ONLY_LOWER_MODULE_MAP SPECIAL_PATTERN_LOWER_MODULE_MAPSTATIC_LOWER_FUSED_MODULE_MAP(STATIC_LOWER_FUSED_MODULE_TWO_INPUTS_MAPDYNAMIC_LOWER_FUSED_MODULE_MAPSTATIC_LOWER_FUNCTIONAL_MAPQBIN_OP_MAPPINGQBIN_RELU_OP_MAPPINGquantization_mappings,DEFAULT_FLOAT_TO_QUANTIZED_OPERATOR_MAPPINGS%DEFAULT_DYNAMIC_QUANT_MODULE_MAPPINGS	enumeratestr)sets_of_related_opsbackend_confignew_connectionspatternconfigfirst_elementsource_to_targetsourcetargetsource_to_double_targettarget1target2item1item2set_of_related_ops base_name_to_sets_of_related_opscounter	base_names                     G/home/dcms/DCMS/lib/python3.12/site-packages/torch/ao/ns/fx/mappings.py$get_base_name_to_sets_of_related_opsr      s5   G8 II	
G8 II	
G8 II	
G8 HH	
G8  HH	
G8& HH	
%G8. II	
-G86 HH	
5G8> LL	
=G8F LLHHLL##	
EG8N LLHHLL##	
MG8X   !!	
WG8`   !!	
_G8h   !!	
gG8r GG	
qG8z IILL	
yG8D II	
CG8L IILL	
KG8V FFGGJJ	
UG8f LLLL	
eG8n LLLL	
mG8v LLLL	
uG8@ MMJJII	
G8P NN	
OG8V NN	
UG8^ 	
]G8d 	
cG8j 	
iG8r 	
qG8x 	
wG8~ 	
}G8F FF	
EG8N LL	
MG8V OO	
UG8^ LL	
]G8f LL	
eG8n 	
mG8t 	
sG8z 	
yG8B LL	
AG8J LL	
IG8R HHGG	
QG8\ EE	
[G8d KK	
cG8l LL	
kG8t OO	
sG8| LL	
{G8D LL	
CG8L GGFF	
KG8V GGFF	
UG8` GGFFJJ	
_G8p MMNN		
oG8~ KKJJKK	
}G8J 	
IG8R OO	
QG8Z KK	
YG8b MM	
aG8j JJ	
iG8r ##	
qG8z II	
yG8B JJ	
AG8J II	
IG8R OO	
QG8Z MM	
YG8b KK	
aG8j KK	
iG8r HH++	
qG8z JJ	
yG8B	 II	
A	G8J	 LL	
I	G8R	 JJ	
Q	G8Z	 HHII	
Y	G8d	 GGII	
c	G8n	 OO	
m	G8t	 OO	
s	G8|	 	
{	G8B
 	
A
G8J
 LL	
I
G8V
 /0N 
BJJ%%EEF8O
 *KKQQS Wu6)"-M u6 * ""M63F3F#GH( ""M63D3D#EF,,8 ""M63T3T#UV)W6 	!88 99 == AA	 5 /446 	5NFF""FF#34	55 	!>> II ??$ 6
 +B*G*G*I 	6&F&Wg""FG#45""FG#45	66  
"	=	=	C	C	E2 	 01012 	!00 55JJ 5
 /446 	5NFF""FF#34	55 	CC 5 /446 	5NFF""FF#34	55 ( u"5 	**e7I.I"&&u-"&&u-		 JL$'01D'E I##L	6H(3I ,+    r   opc                 D    | j                         D ]  \  }}||v s|c S  y )N)r{   )r   r   r   r   s       r   get_base_name_for_opr     s7     *J)O)O)Q %	%## r   
related_opc                     |:| j                         D ]  }||v s|j                  |        y  t        | d      d}t        |      | v r|dz  }t        |      | v r|h| t        |      <   y )Nz was not foundr   r   )valuesr-   AssertionErrorr   )r   r   r   r   r   s        r   add_op_to_sets_of_related_opsr     s    
 "B"I"I"K 	//"&&r*	
 
|>:;;'l>>qLG 'l>>:<(W6r   c                  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&                  h} t)               }t*        j                  t*        j,                  t*        j                  t*        j.                  t*        j                  t*        j0                  t*        j                  t*        j2                  t*        j                  t*        j                  t*        j                  t*        j                  t*        j                  t*        j                  t*        j                  t*        j&                  h}h t         j4                  t         j6                  t
        j6                  t         j8                  t
        j8                  t         j:                  t        j<                  t
        j>                  t         j@                  t         jB                  t         j                  t         jD                  t         jF                  t         jH                  t         jJ                  t         jL                  t         jN                  t         jP                  t         jR                  t         jT                  t
        jV                  t
        jX                  jZ                  j\                  t
        jX                  jZ                  j^                  t
        j                  t
        j`                  t
        jb                  t
        jd                  t
        jf                  t
        jh                  t
        jj                  t
        jl                  t
        jn                  t
        jp                  t
        jr                  t
        jt                  t
        jv                  t
        jx                  t        j                   }h tz        j|                  t~        j|                  t        j|                  t        j|                  t
        jz                  j                  j                  j                  tz        j                  tz        j                  tz        j                  t~        j                  t~        j                  t~        j                  t~        j                  t~        j                  tz        j                  t        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        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                  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                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  }tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                  tz        j                   tz        j                  tz        j                  tz        j                  tz        j                  h}h d}| |||||||dS )N>   r
   r   r   r   r   r   r   r   )funs_io_type_fp32funs_io_type_fp16funs_io_type_int8funs_io_type_fp32_or_int8mods_io_type_fp32mods_io_type_int8mods_io_type_fp32_or_int8meths_io_type_fp32_or_int8)r   r   r   r   r   r   r/   rM   rN   rP   rQ   rR   rl   rT   rV   r.   r-   r0   sumrq   setrr   linear_reluconv1d_reluconv2d_reluconv3d_relur
   r   r   r   r\   r'   r)   r+   rZ   r[   rj   r3   r5   r7   rL   rt   rv   r   r!   r"   r#   r%   rh   rg   rf   re   rd   rc   rb   rw   ra   r`   r_   r^   r]   r   r   nnqatnnqatdnnqdrx   ry   r   r   r   rB   rC   r,   r9   r:   rk   r;   r<   r=   rA   rD   rF   rG   rH   rI   rE   rJ   rK   rS   rU   rn   ro   nniBNReLU2dBNReLU3d
ConvReLU1d
ConvReLU2d
ConvReLU3d
LinearReLU
LinearBn1dConvBn1dConvBn2dConvBn3dnniqatConvBnReLU1dConvBnReLU2dConvBnReLU3dnniqdLinearLeakyReLU
LinearTanh	ConvAdd2dConvAddReLU2drp   nniqr1   rW   r8   rX   r&   r(   r*   r   r    r$   rY   Identityr2   r4   r6   rs   ru   )FUNS_IO_TYPE_FP32FUNS_IO_TYPE_FP16FUNS_IO_TYPE_INT8FUNS_IO_TYPE_FP32_OR_INT8MODS_IO_TYPE_FP32MODS_IO_TYPE_INT8MODS_IO_TYPE_FP32_OR_INT8METHS_IO_TYPE_FP32_OR_INT8s           r   get_node_type_to_io_type_mapr     s	   																							'0, 03u 	







		!0.'8	'8	'8 	

'8 	
			'8
 	'8 	
'8 	'8 	!!'8 	
'8 	
'8 	
		'8 	


'8 	
'8 	
'8 	
'8  	
!'8" 	
#'8$ 	
%'8& 	
''8( 	
)'8* 	+'8, 	-'8. 	/'80 			1'82 	3'84 	5'86 	7'88 	9'8: 			;'8< 	

='8> 			?'8@ 	A'8B 	C'8D 	

E'8F 	G'8H 	I'8J 	K'8L 	M'8R?0
		?0?0 	?0 		?0
 	???0 			?0 			?0 			?0 	?0 	?0 	?0 	?0 	?0 	?0" 			#?0$ 	%?0& 	'?0( 	

)?0* 	+?0, 	-?0. 	/?00 	1?02 	3?04 	5?06 	7?08 	9?0: 	;?0< 	=?0> 	??0@ 	A?0B 	C?0D 	E?0F 	

G?0H 	I?0J 	K?0L 	M?0N 	O?0P 	Q?0R 	S?0T 	U?0V 	W?0X 	Y?0Z 	[?0\ 	]?0^ 	_?0` 	a?0b 	c?0d 	e?0f 	g?0h 	i?0j 	k?0l 	m?0n 	o?0p 	q?0r 	s?0t 	u?0v 	w?0x 	y?0z 	{?0| 	}?0B 0

 0

 0 	

 0 	

	 0
 	 0 	 0 	 0 	 0 	 0 	 0 	 0 	 0 	 0 	 0 	 0  	! 0" 	# 0$ 	% 0& 	' 0( 	) 0* 			+ 0, 	- 0. 	/ 00 	1 02 	3 04 	5 06 	7 08 	9 0: 	; 0< 	= 0> 	? 0F 	





















'8,	9 /..%>..%>&@	 	r   c                  x    t         j                  t        j                  h} t        j
                  h}h d}| ||dS )N>   torc   sizeviewrh   rg   numelshapedetachrepeatdetach_permutereshaperesize_r_   squeeze_re   r]   
contiguous
dequantize
unsqueeze_ra   )funs_unmatchablemods_unmatchablemeths_unmatchable)r   quantize_per_tensorr.   getitemr   r   )FUNS_UNMATCHABLEMODS_UNMATCHABLEMETHS_UNMATCHABLEs      r   get_unmatchable_types_mapr     sJ    !!/ 	/04 -,. r   )3r.   typingr   r   r   torch.ao.nn.intrinsicaor   	intrinsicr   torch.ao.nn.intrinsic.qatqatr   torch.ao.nn.intrinsic.quantized	quantizedr   'torch.ao.nn.intrinsic.quantized.dynamicdynamicr   torch.ao.nn.qatr   torch.ao.nn.qat.dynamicr   torch.ao.nn.quantizedrp   torch.ao.nn.quantized.dynamicr   1torch.ao.quantization.fx._lower_to_native_backendquantizationfxr   +torch.ao.quantization.quantization_mappingsr   torch.nntorch.nn.functionalri   r   $torch.ao.quantization.backend_configr   ns_typesr   opsrr   dictr   r   r   r   r   r   r    r   r   <module>r     s9    %  # # * * . . 7 7 7   ( ( # # , , T T K K    J & iik,d3<L8M3M.N k,\&*34D0E+E&F c]>&*34D0E+E&F>> )*> 
	>(fd34D0E+E&F fR'4S1A-B(B#C 'r   