
    9i=6                     0   U d dl Z d dlmZ d dl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	Z/e*ej0        e)ej1        ej2        e j2        ej3        e j3        ej4        e j4        ej5        e j5        ej6        e j6        ej7        e j7        ej8        e j8        ej9        e j9        ej:        e j:        ej;        e j;        ej<        e j<        ej=        e j=        ej>        e j>        iZ?e@eef         eAd
<   i e*ej0        e)ej1        ejB        ejB        ejC        ejC        ejD        ejD        ej3        ej3        ej4        ej4        ej5        ej5        ej6        ej6        ej7        ej7        ej8        ej8        ejE        ejE        ej9        ej9        ej:        ej:        ejF        ejF        ejG        ejG        ejH        ejH        i ejI        ejI        ejJ        ejJ        ejK        ejK        ejL        ejL        ejM        jN        jO        ej2        ej2        ej2        ejP        ejP        ejQ        ejQ        ejR        ejS        ejT        ejT        ejU        ejU        ejV        ejV        ejW        ejW        ejX        ejX        ejY        ejY        ejZ        ejZ        ej[        ej[        ej\        ej\        ej]        ej]        ej^        ej3        ej_        ej4        ej`        ej5        eja        ejV        ejb        ejW        ejc        ejX        ejW        ejW        ejX        ejX        ej[        ej[        ejd        ej2        ej2        ej2        ej4        ej4        ej5        ej5        iZee@eef         eAd<   ej4        ej4        ej5        ej5        ej2        ej2        ejM        jN        jO        ej2        ej^        ej^        ej_        ej_        ej`        ej`        eja        eja        ejb        ejb        ejc        ejc        ejW        ejW        ejX        ejX        ej[        ej[        ejd        ejd        iZfe@eef         eAd<   ej;        ej;        ej2        ej2        ej2        ej2        ejM        jN        jO        ej2        ej>        ej>        ejg        ejg        ej<        ej<        ej=        ej=        ej[        ej[        ej:        ej:        ej9        ej9        iZhe@eef         eAd<   eji        hZjeke         eAd<   e$jl        ejm        j        jl        e$jn        ejm        j        jn        e$jo        ejm        j        jo        e$jp        ejm        j        jp        e$jq        ejm        j        jq        e$jr        ejm        j        jr        iZse@eetz  ef         eAd<   eju        e&ejv        e&ejw        e&ejx        e'iZye@eef         eAd<   ej2        e	jz        j        j2        iZ{e@eef         eAd<   ej2        e	jz        j        j        j2        iZ|e@eef         eAd<   deke         fdZ}de@eef         fdZ~de@eef         fdZde@eef         fdZde@eef         fdZ	 	 d,dede@eef         dz  dedefdZ	 d-dede@eef         dz  defdZde@eef         fd Zde@eef         fd!Zde@eef         fd"Zde@eef         fd#Zdeke         fd$Zdeke         fd%Zde@eetz  ef         fd&Zd'eetz  defd(Zd)ej        j        dedz  fd*Zd)ej        j        defd+ZdS ).    N)Callable)Any)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                  J    t           j        j        t           j        j        h} | S )z8These modules cannot have observers inserted by default.)r   quantizableLSTMMultiheadAttention)no_observerss    ^/var/www/icac/venv/lib/python3.11/site-packages/torch/ao/quantization/quantization_mappings.pyr   r      s    N')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-   r.   r   r/   r+   r*   r   r      s    =GHHHr+   c                      t          j        t                    } t          j        | t
          j        <   t          j        | t
          j        <   | S )z7Get module mapping, including mapping for embedding QAT)r-   r.   r   nnqEmbeddingBagnnqat	Embeddingmappings    r*   r   r      s5    m@AAG"%"2GE"}GEONr+   c                  4    t          j        t                    S )z?Get module mapping for post training static sparse quantization)r-   r.   r   r/   r+   r*   r   r      s    =DEEEr+   Ffloat_module_classadditional_static_quant_mappingis_referencec                     |i }t          |rt          nt          |          }|                    | d          }|"t	          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AssertionErrorstrr-   r.   )r9   r:   r;   all_mappingsstatic_quant_module_classs        r*   r   r      s     '.*,'$	2661'	 L !- 0 01CT J J (D3/A+B+BDDEF
 
 	
 =2333r+    additional_dynamic_quant_mappingc                     |i }t          t          |          }|                    | d          }|"t          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   r?   r@   rA   r-   r.   )r9   rD   rB   dynamic_quant_module_classs       r*   r   r     s     (/+-($-/O L ".!1!12Dd!K!K!)D3/A+B+BDDEF
 
 	
 =3444r+   c                  4    t          j        t                    S )z:Get default module mapping for quantization aware training)r-   r.   r   r/   r+   r*   r   r     s    =45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-   r.   r   r4   r3   r   r5   r6   s    r*   r   r   !  s6    
 m788G$1GBO!OGBLNr+   c                      t           S )z9Get module mapping for post training dynamic quantization)r   r/   r+   r*   r   r   ,  s    00r+   c                      t           S )z@Get module mapping for post training dynamic sparse quantization)r   r/   r+   r*   r   r   1  s    77r+   c                  "   t          t                                                    t          t                                                    z  t          t                                                    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-   r.   )#QCONFIG_PROPAGATE_MODULE_CLASS_LISTs    r*   r   r   6  sx    
 	0557788
)..00
1
1	2
388::
;
;	< *	* ( =<===r+   c                     t          t                                                    t          t                                                    z  t          t                                                    z  t          t                                                    z  t          t                                                    z  t          t                                                    z  t          z  } t          j        |           S )zSGet list of module class types that we will record output
    in numeric suite
    )	rL   r   valuesr   r   rM   r#   r-   r.   ).NUMERIC_SUITE_COMPARE_MODEL_OUTPUT_MODULE_LISTs    r*   r    r    C  s    
 	07799::
)0022
3
3	4
3::<<
=
=	> 27799
:
:	; )..00
1
1		2
 388::
;
;	< *	* 3 =GHHHr+   c                  4    t          j        t                    S N)r-   r.   r   r/   r+   r*   r!   r!   S  s     =EFFFr+   float_opc                 ~    t                               |           }| t          dt          |            d          |S )z>Get the quantized operator corresponding to the float operatorNz	Operator z) does not have corresponding quantized op)r   r?   r@   rA   )rT   quantized_ops     r*   r"   r"   Z  sI    ?CCHMMLPHPPP
 
 	
 r+   modulec                 R    t                               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   r?   r   rW   s    r*   _get_special_act_post_processrZ   d  s)     .11$V,,d  r+   c                 <    | j         ot          |           t          v S rS   )trainingtyper   rY   s    r*   _has_special_act_post_processr^   p  s    ?QtF||/QQQr+   )NFrS   )r-   collections.abcr   typingr   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.qatr4   torch.ao.nn.qat.dynamicnnqatdtorch.ao.nn.quantizedr2   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ConvTranspose3dr5   r3   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#   rL   eluops	hardswishinstance_norm
layer_norm
leaky_reludropoutr   rA   HardsigmoidSigmoidSoftmaxTanhr   sparser   r   r   r   r   r   r   boolr   r   r   r   r   r   r   r    r!   r"   ModulerZ   r^   r/   r+   r*   <module>r      s    $ $ $ $ $ $                 # # # # # # # # # # # # * * * * * * * * * * * * * * * . . . . . . . . . . . . . . . 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7             ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( # # # # # # # # # # # # , , , , , , , , , , , , , , , . . . . . . . . . . . . . . .                           ? > > > > > > > 9 9 9 9 9 9 C C C C C C  8 s|It{It{It{It{,,,L$.OT&JKJGTYG .Xs]0C   &5=s|5=5= NCO5= NCO	5=
 J5= Isz5= Isz5= Isz5= +5= +5= +5= FCG5= L#-5= OS%5= L#-5=  L#-!5=" s)#5= 5=$ s)%5=& s)'5=( L#-)5=* L#-+5=, J5sz-5=. Isz/5=0 Hci15=2 Hci35=6 75=: L$-;5=< L$-=5=> NDO?5=@ NDOA5=B NDOC5=D M4>E5=F t)G5=H NDOI5= 5=J -NDO
OSZ
OSZ
OSZ



t
t
t
sz	L#*	L#*	L#*i5= 5= $d8S=&9 5 5 5r Iu|Iu|Iu|J5u|L&/L&/L&/f)f)f)NF%NF%NF%NF%4 T(C-0   ( JIt{
M4;J5t{GTYFDHKJNE$OS%L#-> %tHcM':   0 M2 X    E59"K$.OUY(6L%)%0L%)%0Iuy"*P ,d8c>83K.L    N?J;J;G;	@ "D8);$<    Iu|%,D +T(C--@    Iu|%-4E ,d8S=.A   
S    ?$x}2E ? ? ? ?
ID3<O I I I I
D34G    Fhm9L F F F F CG4 4 4%)(C-%84%?4 4 		4 4 4 46 DH5 5 5&*8S=&9D&@5 	5 5 5 5*6hm)< 6 6 6 6
4#+>    14#3F 1 1 1 1
8$x}:M 8 8 8 8

>c(m 
> 
> 
> 
>IH I I I I G$sNH; G G G GX^     	%(/ 	ho 	 	 	 	R%(/ Rd R R R R R Rr+   