
    Vh6                        U d dl Z d dlmZmZmZmZ d dlZd dl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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"Zd dl#m	c m$Z% d dlm	Z	 d dl&m'Z'm(Z( d dl)m*Z*m+Z+ d dl,m-Z- d dl.m/Z/ g dZ0e+ejb                  e*ejd                  e	jf                  e!jf                  e	jh                  e!jh                  e	jj                  e!jj                  e	jl                  e!jl                  e	jn                  e!jn                  e	jp                  e!jp                  e	jr                  e!jr                  e	jt                  e!jt                  e	jv                  e!jv                  e	jx                  e!jx                  e	jz                  e!jz                  e	j|                  e!j|                  e	j~                  e!j~                  iZ@eAeef   eBd	<   i e+ejb                  e*ejd                  e	j                  ej                  e	j                  ej                  e	j                  ej                  e	jh                  ejh                  e	jj                  ejj                  e	jl                  ejl                  e	jn                  ejn                  e	jp                  ejp                  e	jr                  ejr                  e	j                  ej                  e	jt                  ejt                  e	jv                  ejv                  e	j                  ej                  e	j                  ej                  e	j                  ej                  i e	j                  ej                  e	j                  ej                  e	j                  ej                  e	j                  ej                  e	j                  j                  j                  ejf                  e	jf                  ejf                  e	j                  ej                  e	j                  ej                  e	j                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  i ej                  ej                  ej                  ej                  ej                  ej                  ej                  ejh                  ej                  ejj                  ej                  ejl                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ejf                  ejf                  ejf                  ejj                  ejj                  ejl                  ejl                  ZfeAeef   eBd
<   e	jj                  ejj                  e	jl                  ejl                  e	jf                  ejf                  e	j                  j                  j                  ejf                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  ej                  iZgeAeef   eBd<   e	jx                  ejx                  e	jf                  ejf                  ejf                  ejf                  e	j                  j                  j                  ejf                  e	j~                  ej~                  e	j                  ej                  e	jz                  ejz                  e	j|                  ej|                  ej                  ej                  e	jv                  ejv                  e	jt                  ejt                  iZieAeef   eBd<   e	j                  hZkele   eBd<   e%j                  ej                  j$                  j                  e%j                  ej                  j$                  j                  e%j                  ej                  j$                  j                  e%j                  ej                  j$                  j                  e%j                  ej                  j$                  j                  e%j                  ej                  j$                  j                  iZteAeeeuf   ef   eBd<   e	j                  e'e	j                  e'e	j                  e'e	j                  e(iZzeAeef   eBd<   e	jf                  e
j                  j$                  jf                  iZ|eAeef   eBd<   e	jf                  e
j                  j$                  j*                  jf                  iZ}eAeef   eBd<   dele   fdZ~deAeef   fdZdeAeef   fdZdeAeef   fdZdeAeef   fdZ	 	 d*dedeeAeef      dedefdZ	 d+dedeeAeef      defdZdeAeef   fdZdeAeef   fdZdeAeef   fd ZdeAeef   fd!Zdele   fd"Zdele   fd#ZdeAeeeuf   ef   fd$Zd%eeeuf   defd&Zd'ej                  j                  dee   fd(Zd'ej                  j                  defd)Zy),    N)AnyCallableOptionalUnion)nn)+default_fixed_qparams_range_0to1_fake_quant.default_fixed_qparams_range_neg1to1_fake_quant)DeQuantStub	QuantStub)get_combined_dict)type_before_parametrizations).DEFAULT_REFERENCE_STATIC_QUANT_MODULE_MAPPINGS$DEFAULT_STATIC_QUANT_MODULE_MAPPINGSDEFAULT_QAT_MODULE_MAPPINGS%DEFAULT_DYNAMIC_QUANT_MODULE_MAPPINGS,DEFAULT_FLOAT_TO_QUANTIZED_OPERATOR_MAPPINGS"DEFAULT_MODULE_TO_ACT_POST_PROCESS+DEFAULT_STATIC_SPARSE_QUANT_MODULE_MAPPINGS,DEFAULT_DYNAMIC_SPARSE_QUANT_MODULE_MAPPINGSno_observer_set(get_default_static_quant_module_mappings2get_default_static_quant_reference_module_mappings*get_embedding_static_quant_module_mappings/get_default_static_sparse_quant_module_mappingsget_static_quant_module_classget_dynamic_quant_module_classget_default_qat_module_mappings!get_embedding_qat_module_mappings)get_default_dynamic_quant_module_mappings0get_default_dynamic_sparse_quant_module_mappings$get_default_qconfig_propagation_list&get_default_compare_output_module_list0get_default_float_to_quantized_operator_mappingsget_quantized_operatorr   r   r   r   _INCLUDE_QCONFIG_PROPAGATE_LISTr   r   r   r   returnc                  n    t         j                  j                  t         j                  j                  h} | S )z8These modules cannot have observers inserted by default.)r   quantizableLSTMMultiheadAttention)no_observerss    [/home/dcms/DCMS/lib/python3.12/site-packages/torch/ao/quantization/quantization_mappings.pyr   r      s&    NN'')J)JKL    c                  4    t        j                  t              S )z8Get module mapping for post training static quantization)copydeepcopyr    r-   r,   r   r      s    ===>>r-   c                  4    t        j                  t              S )zBGet reference module mapping for post training static quantization)r/   r0   r   r1   r-   r,   r   r      s    ==GHHr-   c                      t        j                  t              } t        j                  | t
        j                  <   t        j                  | t
        j                  <   | S )z7Get module mapping, including mapping for embedding QAT)r/   r0   r   nnqEmbeddingBagnnqat	Embeddingmappings    r,   r   r      s>    mm@AG"%"2"2GE"}}GEOONr-   c                  4    t        j                  t              S )z?Get module mapping for post training static sparse quantization)r/   r0   r   r1   r-   r,   r   r      s    ==DEEr-   float_module_classadditional_static_quant_mappingis_referencec                     |i }t        |rt        nt        |      }|j                  | d      }|J dt	        |        dz          t        j                  |      S )zen Get the statically quantized module class corresponding to
    the floating point module class
    NFloating point module class 5 does not have a corresponding quantized module class)r   r   r   getstrr/   r0   )r;   r<   r=   all_mappingsstatic_quant_module_classs        r,   r   r      s}     '.*,'$ 	71'	L !- 0 01CT J$0 
&s+='>&?@
A	B0 ==233r-    additional_dynamic_quant_mappingc                     |i }t        t        |      }|j                  | d      }|J dt        |        dz          t	        j
                  |      S )zfn Get the dynamically quantized module class corresponding to
    the floating point module class
    Nr?   r@   )r   r   rA   rB   r/   r0   )r;   rE   rC   dynamic_quant_module_classs       r,   r   r     su     (/+-($-/OL ".!1!12Dd!K%1 
&s+='>&?@
A	B1 ==344r-   c                  4    t        j                  t              S )z:Get default module mapping for quantization aware training)r/   r0   r   r1   r-   r,   r   r     s    ==455r-   c                      t        j                  t              } t        j                  | t
        j                  <   t        j                  | t
        j                  <   | S )zGet module mapping for quantization aware training
    This is includes default values in addition to
    enabling qat for embeddings.
    )r/   r0   r   r6   r5   r   r7   r8   s    r,   r   r     s>    
 mm78G$11GBOO!OOGBLLNr-   c                      t         S )z9Get module mapping for post training dynamic quantization)r   r1   r-   r,   r   r   *  s    00r-   c                      t         S )z@Get module mapping for post training dynamic sparse quantization)r   r1   r-   r,   r    r    /  s    77r-   c                      t        t        j                               t        t        j                               z  t        t        j                               z  t
        z  } t        j                  |       S )z_Get the default list of module types that we'll attach qconfig
    attribute to in prepare
    )setr   keysr   r   r%   r/   r0   )#QCONFIG_PROPAGATE_MODULE_CLASS_LISTs    r,   r!   r!   4  se    
 	05578
)..0
1	2
388:
;	< *	* ( ==<==r-   c                     t        t        j                               t        t        j                               z  t        t        j                               z  t        t        j                               z  t        t        j                               z  t        t        j                               z  t        z  } t        j                  |       S )zSGet list of module class types that we will record output
    in numeric suite
    )	rM   r   valuesr   r   rN   r%   r/   r0   ).NUMERIC_SUITE_COMPARE_MODEL_OUTPUT_MODULE_LISTs    r,   r"   r"   A  s    
 	0779:
)002
3	4
3::<
=	> 2779
:	; )..0
1		2
 388:
;	< *	* 3 ==GHHr-   c                  4    t        j                  t              S N)r/   r0   r   r1   r-   r,   r#   r#   Q  s     ==EFFr-   float_opc                 ^    t         j                  | d      }|J dt        |        d       |S )z>Get the quantized operator corresponding to the float operatorNz	Operator z) does not have corresponding quantized op)r   rA   rB   )rU   quantized_ops     r,   r$   r$   X  s@    ?CCHdSL L	3x=/!JKL r-   modulec                 @    t         j                  t        |       d      S )zGet the special activation post process for `module`, this has
    higher priority than the activation post process in `qconfig`
    e.g.
    input: torch.nn.Sigmoid
    output: default_affine_fixed_qparam_fake_quant
    N)r   rA   r   rX   s    r,   _get_special_act_post_processr[   a  s!     .11$V,d r-   c                 @    | j                   xr t        |       t        v S rT   )trainingtyper   rZ   s    r,   _has_special_act_post_processr_   m  s    ??QtF|/QQQr-   )NFrT   )r/   typingr   r   r   r   torchtorch.ao.nnaor   ao_nntorch.ao.nn.intrinsic	intrinsicnnitorch.ao.nn.intrinsic.qatqatnniqattorch.ao.nn.intrinsic.quantized	quantizednniq'torch.ao.nn.intrinsic.quantized.dynamicdynamicnniqdtorch.ao.nn.qatr6   torch.ao.nn.qat.dynamicnnqatdtorch.ao.nn.quantizedr4   torch.ao.nn.quantized.dynamicnnqdtorch.ao.nn.quantized.reference	referencennqrtorch.ao.nn.sparsetorch.nn.functional
functionalF#torch.ao.quantization.fake_quantizer   r	   torch.ao.quantization.stubsr
   r   torch.ao.quantization.utilsr   torch.nn.utils.parametrizer   __all__Quantize
DeQuantizeLinearConv1dConv2dConv3dConvTranspose1dConvTranspose2dConvTranspose3dr7   r5   GRUCellLSTMCellRNNCellr)   r   dict__annotations__BatchNorm2dBatchNorm3dDropoutELU	GroupNorm	HardswishInstanceNorm1dInstanceNorm2dInstanceNorm3d	LayerNorm	LeakyReLUmoduleslinearNonDynamicallyQuantizableLinearReLU6PReLUFloatFunctionalQFunctionalBNReLU2dBNReLU3d
ConvReLU1d
ConvReLU2d
ConvReLU3d	ConvAdd2dConvAddReLU2d
LinearReLULinearLeakyReLU
LinearTanhConvBn1dConvBn2dConvBn3dConvBnReLU1dConvBnReLU2dConvBnReLU3d
LinearBn1dr   r   GRUr   
Sequentialr%   rM   eluops	hardswishinstance_norm
layer_norm
leaky_reludropoutr   rB   HardsigmoidSigmoidSoftmaxTanhr   sparser   r   r   r   r   r   r   boolr   r   r   r   r   r    r!   r"   r#   r$   Moduler[   r_   r1   r-   r,   <module>r      s
    1 1    # # * * . . 7 7 7   ( ( # # , , . .     ? 9 C8 s||IIt{{IIt{{IIt{{IIt{{,,,,,,LL$..OOT&&JJKKJJGGTYYG .Xs]0C &6=s||6=6= NNCOO6= NNCOO	6=
 JJ6= IIszz6= IIszz6= IIszz6= ++6= ++6= ++6= FFCGG6= LL#--6= OOS%%6= LL#--6=  LL#--!6=" s))#6=$ s))%6=& s))'6=( LL#--)6=* LL#--+6=, JJ55szz-6=. IIszz/6=0 HHcii16=2 JJ36=4 HHcii56=8 96=< LL$--=6=> LL$--?6=@ NNDOOA6=B NNDOOC6=D NNDOOE6=F MM4>>G6=H t))I6=J NNDOOK6=L --M6=N NNDOOO6=P OOSZZQ6=R OOSZZS6=T OOSZZU6=V W6=X Y6=Z [6=\ t]6=^ t_6=` ta6=b szzc6=f 
LL#**g6=h 
LL#**i6=j 
LL#**k6= $d8S=&9 6t IIu||IIu||IIu||JJ55u||LL&//LL&//LL&//f))f))f))NNF%%NNF%%NNF%%NNF%%4 T(C-0 ( JJIIt{{
MM4;;JJ55t{{GGTYYFFDHHKKJJNNE$$OOS%%LL#--> %tHcM': 0 MM2 X  EE599""KK$$..OOUYY((66LL%))%%00LL%))%%00IIuyy""**V ,d533G3Q.R  NN?JJ;JJ;GG;	@ "D8);$<  IIu||%%,,D +T(C--@  IIu||%%--44E ,d8S=.A 
S ?$x}2E ?
ID3<O I
D34G Fhm9L F FJ4 4%-d8S=.A%B4 4 		44 GK5 5&.tHcM/B&C5 	5(6hm)< 6
4#+> 14#3F 1
8$x}:M 8

>c(m 
>IH I Gx}	x	'(GU8S=%9 h 	%((// 	hx>P 	R%((// Rd Rr-   