Ë
    –\;j¢  ã                   ó¨  — d dl Zd dlZd dlmZ i dej
                  j                  “dej
                  j                  “dej
                  j                  “dej
                  j                  “dej
                  j                  “dej
                  j                  “d	ej
                  j                  “d
ej
                  j                  “dej
                  j                  “dej
                  j                  “dej
                  j                   “dej
                  j"                  “dej
                  j$                  “dej
                  j&                  “dej
                  j(                  “dej
                  j*                  “dej
                  j,                  “ej
                  j.                  ej
                  j0                  dœ¥Zej
                  j                  ej
                  j                  ej
                  j                  gZej
                  j6                  j8                  ej
                  j6                  j:                  ej
                  j6                  j<                  ej
                  j6                  j>                  ej
                  j6                  j@                  gZ!ejD                  ejF                  ejH                  ejJ                  gZ&ejN                  ejP                  ejR                  ejT                  ejV                  gZ,ej
                  j                  ej
                  j                  gZ-g d¢Z.g d¢Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4d„ Z5d„ Z6y)é    N)Úquant_layersÚConv2DTransposeÚConv2DÚLinearÚAdaptiveAvgPool2DÚAdaptiveMaxPool2DÚ	AvgPool2DÚ	MaxPool2DÚ	HardswishÚ	LeakyReLUÚPReLUÚReLUÚReLU6ÚSigmoidÚSoftmaxÚSwishÚTanhÚ	BatchNorm)Ú	GroupNormÚ	LayerNorm)Úconv2dÚdepthwise_conv2dÚmatmulÚconv2d_transposeÚdepthwise_conv2d_transpose)Ú fake_quantize_dequantize_abs_maxÚ-fake_channel_wise_quantize_dequantize_abs_maxÚ/fake_quantize_dequantize_moving_average_abs_maxc                 óˆ   — | j                  |«      }|€J d|z   dz   «       ‚t        j                  |j                  «       «      S )z(
    Load variable value from scope
    zCan not find z in the scope.)Úfind_varÚnpÚarrayÚ
get_tensor)ÚscopeÚvar_nameÚvar_nodes      úmG:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\paddle/quantization/imperative/utils.pyÚload_variable_datar(   ]   sF   € ð �~‰~˜hÓ'€HØÐÐN °8Ñ!;Ð>NÑ!NÓNÐÜ�8‰8�H×'Ñ'Ó)Ó*Ð*ó    c                 óJ   — | j                   D ]  }||j                  v sŒ|c S  y)z6
    Find the previous op for the input variable.
    N)ÚopsÚoutput_arg_names)Úblockr%   Úops      r'   Úfind_previous_opr/   f   s*   € ð �iŒiˆØ�r×*Ñ*Ò*ØŠIð ð r)   c                 ól   — g }| j                   D ]"  }||j                  v sŒ|j                  |«       Œ$ |S )z7
    Find all followed ops for the input variable.
    )r+   Úinput_arg_namesÚappend)r-   r%   Úres_opsr.   s       r'   Úfind_next_opsr4   p   s8   € ð €GØ�iŒiˆØ�r×)Ñ)Ò)Ø�N‰N˜2Õð ð €Nr)   c                 ó8  — t        | t        j                  j                  «      sJ d«       ‚t	        |«      dkD  sJ d«       ‚d}d}| }|t	        |«      k  r>||   dk(  r"||| }t        ||«      rt        ||«      }|dz   }|dz  }|t	        |«      k  rŒ>||| }||fS )a†  
    Given the model and the name of a layer, find the parent layer and
    the sub_name of the layer.
    For example, if name is 'block_1/convbn_1/conv_1', the parent layer is
    'block_1/convbn_1' and the sub_name is `conv_1`.
    Args:
        model(paddle.nn.Layer): the model to be quantized.
        name(string): the name of a layer

    Returns:
        parent_layer, subname
    z2The model must be the instance of paddle.nn.Layer.r   z%The input (name) should not be empty.Ú.é   )Ú
isinstanceÚpaddleÚnnÚLayerÚlenÚhasattrÚgetattr)ÚmodelÚnameÚlast_idxÚidxÚparent_layerÚsub_names         r'   Úfind_parent_layer_and_sub_namerE   {   sÃ   € ô ØŒv�y‰y�‰ôð <à;ó<ð ô ˆt‹9�qŠ=ÐAÐAÓAˆ=à€HØ
€CØ€LØ
”�D“	Š/Ø�‰9˜ÒØ˜H SÐ)ˆHÜ�| XÔ.Ü& |°XÓ>�Ø ™7�Øˆq‰ˆð ”�D“	‹/ð �H˜SÐ!€HØ˜Ð!Ð!r)   c                 óp   — g }| j                   D ]$  }|j                  D ]  }|j                  |«       Œ Œ& |S )z/
    Return all ops for the input program.
    )Úblocksr+   r2   )ÚprogramÚall_opsr-   r.   s       r'   Úprogram_all_opsrJ   ›   s8   € ð €GØ—”ˆØ—)”)ˆBØ�N‰N˜2Õñ ð  ð €Nr)   c                 ó†   — t        | t        j                  j                  «      xr t	        | j                  «       «      dk(  S )z*
    Whether the layer is leaf layer.
    r   )r8   r9   r:   r;   r<   Ú	sublayers)Úlayers    r'   Úis_leaf_layerrN   ¦   s/   € ô �eœVŸY™YŸ_™_Ó-ÒM´#°e·o±oÓ6GÓ2HÈAÑ2MÐMr)   c                 óV   — | j                   dk(  rt        | «      S | j                  «       S )z)
    Convert numpy to float or list.
    r7   )ÚsizeÚfloatÚtolist)Úx_nps    r'   Úfp_numpy_to_naiverT   ­   s%   € ð ‡y�y�A‚~Ü�T‹{Ðà�{‰{‹}Ðr)   )7Únumpyr!   r9   Úpaddle.nn.quantr   r:   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úlayer_name_mapÚfake_quant_input_layersÚquantÚaddÚsubtractÚmultiplyÚdivider   Úfake_quant_output_layersÚFakeQuantAbsMaxÚFakeQuantChannelWiseAbsMaxÚFakeQuantMovingAverageAbsMaxÚMovingAverageAbsMaxScaleÚfake_quant_leaf_layersÚQuantizedConv2DÚQuantizedLinearÚQuantizedConv2DTransposeÚQuantizedColumnParallelLinearÚQuantizedRowParallelLinearÚfake_quant_wrap_layersÚspec_channel_axis_layersÚweight_op_typesÚ!fake_quantize_dequantize_op_typesr(   r/   r4   rE   rJ   rN   rT   © r)   r'   Ú<module>rn      sê  ðó ã Ý (ðØ�v—y‘y×0Ñ0ðàˆf�i‰i×Ñðð ˆf�i‰i×Ñðð ˜Ÿ™×4Ñ4ð	ð
 ˜Ÿ™×4Ñ4ðð �—‘×$Ñ$ðð �—‘×$Ñ$ðð �—‘×$Ñ$ðð �—‘×$Ñ$ðð ˆV�Y‰Y�_‰_ðð ˆF�I‰I�N‰Nðð ˆV�Y‰Y�_‰_ðð ˆv�y‰y× Ñ ðð ˆv�y‰y× Ñ ðð ˆV�Y‰Y�_‰_ðð  ˆF�I‰I�N‰Nð!ð" �—‘×$Ñ$ð#ð$ —‘×$Ñ$Ø—‘×$Ñ$ò'€ð0 ‡I�I×ÑØ
‡I�I×ÑØ
‡I�I×ÑðÐ ð ‡I�I‡O�O×ÑØ
‡I�I‡O�O×ÑØ
‡I�I‡O�O×ÑØ
‡I�I‡O�O×ÑØ
‡I�I‡O�O×ÑðÐ ð × Ñ Ø×+Ñ+Ø×-Ñ-Ø×)Ñ)ð	Ð ð × Ñ Ø× Ñ Ø×)Ñ)Ø×.Ñ.Ø×+Ñ+ðÐ ð #ŸI™I×5Ñ5°v·y±y×7GÑ7GÐHÐ ò€ò%Ð !ò+òòò"ò@òNór)   