
    sgW                         d dl Z d dlZd dlZd dlZd dlmZ dgZ G d dej                  j                  e j                        Z
d Zd Zd Zd	 Zd
 Zd Z ed      Zy)    N)
_addindentWeightedQuantizedModulec                   >    e Zd ZdZeej                  d               Zy)r   zIWrapper for quantized modules than can be lowered from reference modules.c                     t         )N)NotImplementedError)cls
ref_moduleoutput_scaleoutput_zero_points       V/var/www/html/venv/lib/python3.12/site-packages/torch/ao/nn/quantized/modules/utils.pyfrom_referencez&WeightedQuantizedModule.from_reference   s
     "!    N)__name__
__module____qualname____doc__classmethodabcabstractmethodr    r   r   r   r      s%    S"  "r   )	metaclassc                 6    t        | d      r| j                  } | S )Nactivation_post_process)hasattrr   )observers    r   _get_weight_observerr      s    x2333Or   c                    t        |       } |t        j                  t        j                  t        j                  fv rIt        j
                  |      }| j                  |j                  kD  xs | j                  |j                  k  S y)NF)
r   torchqint8quint8qint32iinfo	quant_minmin	quant_maxmax)r   dtypeinfos      r   _needs_weight_clampingr)       sa    #H-HellELL99{{5!!!DHH,M0B0BTXX0MMr   c                 b   t        || j                        s| S t        |      }|j                  |j                  }}t        j                  | j                               j                  |      }t        j                  | j                               j                  |      }t        j                  t        j                  | j                         |      |      }|j                  t
        j                  t
        j                  fv r5t        j                  ||j                         |j                               } | S |j                  t
        j                   t
        j"                  t
        j$                  fv r%t        j&                  ||||j(                        } | S t+        d|j                  z         )N)axisUnexpected qscheme )r)   r'   r   r#   r%   r   cloneint_reprfill_minimummaximumqschemeper_tensor_symmetricper_tensor_affine!_make_per_tensor_quantized_tensoritemper_channel_symmetricper_channel_affine per_channel_affine_float_qparams"_make_per_channel_quantized_tensorch_axis
ValueError)	qweightr   scalezpmin_max_
qw_int_max
qw_int_minqw_ints	            r   _clamp_weightsrE   (   sX   !(GMM:#H-H##X%7%7$D W--/066t<JW--/066t<J]]5==)9)9);ZH*UFE668O8OPP99EJJL"'')
 N 
		##  .. 

 ::E2H$4$4

 N .1A1AABBr   c                    |j                         \  }}|j                  t        j                  t        j                  fv rHt        j
                  | t        |      t        |      t        j                        }t        ||||      }|S |j                  t        j                  t        j                  fv r}|j                  }t        j                  | |j                  t        j                        |j                  t        j                         |t        j                        }t        ||||      }|S |j                  t        j"                  fv rwt        j                  | |j                  t        j                        |j                  t        j                        |j                  |j$                        }t        ||||      }|S t'        d|j                  z         )Nr,   )calculate_qparamsr2   r   r3   r4   quantize_per_tensorfloatintr   rE   r7   r8   r;   quantize_per_channeltodoubleint64r9   r'   r<   )float_wtr   wt_scalewt_zpr=   wt_axiss         r   _quantize_weightrS   E   s   002OHeE668O8OPP++eHos5z5;;
 !(HeD, N+ 
		e995;S;ST	T"",,KK%HHU[[!KK
 !(HeD N 
		eDDE	E,,KK$HHU[[!NN
 !(HeD N .1A1AABBr   c                       fd}|S )zOConverts the argument to a tuple of size n
    with the first element repeated.c                     t        | t        j                  j                        r9t	        |       k(  rn*| d   } t        | t        j                  j                        r9t        t        j                  |             S )Nr   )
isinstancecollectionsr   Sequencelentuple	itertoolsrepeat)xns    r   parsez!_ntuple_from_first.<locals>.parseh   s^    KOO4451v{!A KOO445 Y%%a+,,r   r   )r^   r_   s   ` r   _ntuple_from_firstr`   d   s    - Lr   c                    g }| j                         }|r|j                  d      }g }| j                  j                         D ]C  \  }}t	        ||      rt        |      }t        |d      }|j                  d|z   dz   |z          E ||z   }| j                         dz   }	|r3t        |      dk(  r|s	|	|d   z  }	n|	ddj                  |      z   dz   z  }	|	dz  }	|	S )	N
   (z):    r   z
  ))
extra_reprsplit_modulesitemsrV   reprr   append	_get_namerY   join)
selfparamsextra_linesrg   child_lineskeymodulemod_strlinesmain_strs
             r   _hide_packed_params_reprrx   r   s     K"J &&t,K}}**, 8Vff%v,Wa(39u,w678 +%E~~#%H{q A&HU!33d::HOHOr   rc   )r   rW   r[   r   torch.nn.modules.moduler   __all__nnModuleABCMetar   r   r)   rE   rS   r`   rx   _pair_from_firstr   r   r   <module>r      se    
    . 
"ehhoo ":>< &a( r   