L i_ ddlZddlZddlZddlmZddlmZmZmZddl m Z ddl Z ddl m Z ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0gdZ1Gd d ed d d gZ2e d e3Gddedd d gZ4e2e#e'Z5 e2e'eZ6 e2e#e$Z7 e2e e'Z8 e2e.jre jtde.jre jtZ; e2e.jre jte.jre jtZ< e2e e$Z= e2e%e!Z> e2e%e"Z?e2eeZ@ e2eeZA e2e jjeZC e2ee jjZD e2eeZE e2e&e+ZF d5dZG e2e(jre jdde0ZIe2e(jre jdde-ZJe2e+jre jeZLe2e+jre jeZMe2e(e)ZNd6dZO e2ejre*dde jddeZPe2ejre*dde jddeZQe2e.jre je.jre jZRe2e.jre jdZTe de3d5dZUe d e3d6d!ZVd"ee2d#e jjd$dfd%ZXejd&kr ee2ZZd'eZ_[ndd(lm\Z\e\d)ee2ZZd"eZd*ee jd$efd+Z]eee^e,e^efZ_d,e_d-e_fd.Z`d,ed-efd/Zad0eZd1eZfd2Zbd"e2fd3Zcd"ee2fd4Zdy)7N) namedtuple)AnyOptionalUnion) deprecated)default_dynamic_fake_quantdefault_embedding_fake_quant!default_embedding_fake_quant_4bitdefault_fake_quantdefault_fused_act_fake_quant'default_fused_per_channel_wt_fake_quantdefault_fused_wt_fake_quant%default_per_channel_weight_fake_quantdefault_weight_fake_quant FakeQuantizeFakeQuantizeBase4fused_per_channel_wt_fake_quant_range_neg_127_to_127(fused_wt_fake_quant_range_neg_127_to_127FusedMovingAvgObsFakeQuantize)_PartialWrapperdefault_debug_observerdefault_dynamic_quant_observerdefault_float_qparams_observer#default_float_qparams_observer_4bitdefault_observer#default_per_channel_weight_observerdefault_placeholder_observerdefault_reuse_input_observerdefault_weight_observerHistogramObserverMinMaxObserverMovingAverageMinMaxObserver NoopObserver ObserverBase0per_channel_weight_observer_range_neg_127_to_127PlaceholderObserverReuseInputObserver$weight_observer_range_neg_127_to_127)QConfigQConfigDynamicdefault_qconfigdefault_debug_qconfigdefault_per_channel_qconfigdefault_dynamic_qconfigfloat16_dynamic_qconfigfloat16_static_qconfigper_channel_dynamic_qconfig!float_qparams_weight_only_qconfig&float_qparams_weight_only_qconfig_4bitdefault_quint8_weight_qconfigdefault_qat_qconfigdefault_dynamic_qat_qconfigdefault_weight_only_qconfigdefault_activation_only_qconfigdefault_qat_qconfig_v2default_reuse_input_qconfig!default_symmetric_qnnpack_qconfig-default_per_channel_symmetric_qnnpack_qconfig%default_symmetric_qnnpack_qat_qconfig1default_per_channel_symmetric_qnnpack_qat_qconfigdefault_embedding_qat_qconfig"default_embedding_qat_qconfig_4bitget_default_qconfigget_default_qat_qconfigget_default_qconfig_dictget_default_qat_qconfig_dict QConfigAnyqconfig_equalsc&eZdZdZdZfdZxZS)r*a  Describes how to quantize a layer or a part of the network by providing settings (observer classes) for activations and weights respectively. Note that QConfig needs to contain observer **classes** (like MinMaxObserver) or a callable that returns instances on invocation, not the concrete observer instances themselves. Quantization preparation function will instantiate observers multiple times for each of the layers. Observer classes have usually reasonable default arguments, but they can be overwritten with `with_args` method (that behaves like functools.partial):: my_qconfig = QConfig( activation=MinMaxObserver.with_args(dtype=torch.qint8), weight=default_observer.with_args(dtype=torch.qint8), ) ct|tjst|tjr tdt||||S)NzQConfig received observer instance, please pass observer class instead. Use MyObserver.with_args(x=1) to override arguments to constructor if needed isinstancennModule ValueErrorsuper__new__cls activationweight __class__s c/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/torch/ao/quantization/qconfig.pyrQzQConfig.__new__msF j")) , 62990Ma wsJ77)__name__ __module__ __qualname____doc__ __slots__rQ __classcell__rVs@rWr*r*Vs(I88rXr*rTrUzX`QConfigDynamic` is going to be deprecated in PyTorch 1.12, please use `QConfig` instead)categoryc|eZdZdZdZej jej jffd ZxZ S)r+a Describes how to dynamically quantize a layer or a part of the network by providing settings (observer classes) for weights. It's like QConfig, but for dynamic quantization. Note that QConfigDynamic needs to contain observer **classes** (like MinMaxObserver) or a callable that returns instances on invocation, not the concrete observer instances themselves. Quantization function will instantiate observers multiple times for each of the layers. Observer classes have usually reasonable default arguments, but they can be overwritten with `with_args` method (that behaves like functools.partial):: my_qconfig = QConfigDynamic(weight=default_observer.with_args(dtype=torch.qint8)) rIcpt|tjr tdt||||S)NzQConfigDynamic received observer instance, please pass observer class instead. Use MyObserver.with_args(x=1) to override arguments to constructor if neededrKrRs rWrQzQConfigDynamic.__new__s9 fbii (a wsJ77rX) rYrZr[r\r]torchrMIdentityrQr^r_s@rWr+r+ws2  I % 1 1%((:K:K88rXr+rTrU)rUrTT)dtype is_dynamic)rfc`gd}||vrtdt|zd|z|dk(r|dk(r'ttjdt }|S|d k(r'ttjd t }|S|d k(rZtjjstjd ttjd t }|S|d k(r'ttjdt }|St}|Stdt|zdz)z Returns the default PTQ qconfig for the specified backend. Args: * `backend` (str): a string representing the target backend. Currently supports `x86` (default), `fbgemm`, `qnnpack` and `onednn`. Return: qconfig fbgemmx86qnnpackonednn backend: ' not supported. backend must be one of rrjT) reduce_rangererlFrmzDefault qconfig of oneDNN backend with reduce_range of false may have accuracy issues on CPU without Vector Neural Network Instruction support.rkVersion number: zB in get_default_qconfig is not supported. Version number must be 0) AssertionErrorstrr*r! with_argsrr rccpu_is_vnni_supportedwarningswarnr,backendversionsupported_backendsqconfigs rWrBrBsS@(( 'l 78J7KL M  !| h ,66DI:GF N? !,66EJ.G: N3 99//1 P,66EJ:G& N ,66DI:G N&G N  'l R S  rXFg0?)rfrpepscgd}||vrtdt|zd|z|dk(r|dk(r.ttjt dddt }|S|d k(r.ttjt ddd t }|S|d k(r-ttjt dd t }|S|dk(r.ttjt dddt }|St}|S|dk(r|dk(r.ttjt dddt }|S|d k(r.ttjt ddd t }|S|d k(r-ttjt dd t }|S|dk(r.ttjt dddt }|St}|Stdt|zdz)aL Returns the default QAT qconfig for the specified backend. Args: * `backend` (str): a string representing the target backend. Currently supports `x86` (default), `fbgemm`, `qnnpack` and `onednn`. * `version`: version, for backwards compatibility. Can be `None` or `1`. Return: qconfig rirnrorrjT)observer quant_min quant_maxrprerlFrm)rrrrkrrqzJin get_default_qat_qconfig is not supported. Version number must be 0 or 1) rrrsr*rrtr#rrr6rr rr:rys rWrCrCtsh@(( 'l 78J7KL M  !| h '118!!%  =Gn N] !'118!!&  1GZ NI '118AQT= GF N{ '118!!%  =Gx Ne*Gd Na A h 8BB8!!%  ?G\ NK !8BB8!!&  3GF N5 8BB8AQT? G2 N' 8BB8!!%  ?G$ N-G N  'l Z [  rXi)rrrrfrpr~z`torch.ao.quantization.get_default_qconfig_dict` is deprecated and will be removed in a future version. Please use `torch.ao.quantization.get_default_qconfig_mapping` instead.crtjjj||j SN)rcao quantizationget_default_qconfig_mappingto_dictrzr{s rWrDrD s* 88 < > ! ">>+# %%>>%%KK  " U !>rX) ztorch.ao.quantization.qconfig) TypeAliasTyperFmodulec||jdk7r|Sfdfd}||j}||j}t||S)aPThis is a helper function for use in quantization prepare that updates a qconfig so that the constructors stored in the qconfig will create observers on the same device that 'module' is on. This is intended to be used when the qconfigs are propagated to each module in order to avoid potential device alignment issues. Args: qconfig: QConfig with obs constructors stored in activation and weight module: module which the qconfig is related to Return: qconfig: configured so that obs constructors set to construct on the same device as module rec^ttjjsJj Dchc]}|j c}j Dchc]}|j c}z}t|dkDrtt|nd}|dSd|iScc}wcc}w)Nrdevice) rLrcrMrN parametersrbufferslennextiter)pdevicesrrs rW)get_factory_kwargs_based_on_module_devicezQ_add_module_to_qconfig_obs_ctr..get_factory_kwargs_based_on_module_deviceWs&%((//222%+%6%6%891889$nn.= AHH=  ),G q(8d7m$d~t=Hf+== := s B%!B*c |jd}||jS#t$r|cYSt$r|cYSwxYw)N)factory_kwargs)rtwith_callable_argsAttributeError TypeError)original_constructorcheckrs rW1configure_constructor_to_put_obs_on_module_devicezY_add_module_to_qconfig_obs_ctr..configure_constructor_to_put_obs_on_module_device_s` ((22$2GE G'::H;  (' ' (' ' (s*. A AA)_fieldsrTrUr*)r}rrrTrUrs ` @rW_add_module_to_qconfig_obs_ctrrDsW ~GOO?W,W> (C7CUCUVJ >w~~ NF :v &&rX obs_or_fq1 obs_or_fq2cdt|trt|tr t||S||k(Sr)rLr_partial_wrapper_equals)rrs rW_obs_or_fq_ctr_equalsrws4*o.:O4'z:>>  ##rXctj|jj}tj|jj}d}d|vr._is_memorylesss# H2 3 X8S8SWX8X rXactivation_post_process)rTrLrrr)r}racts rW_activation_is_memorylessrsH     C#'(WS:S-Tc99::c""rXc|duxr>t|jtxrt|jtSr)rLrTr(rUr$)r}s rW_is_reuse_input_qconfigrs>t 7 w))+-? @ 7 w~~' 6rX)rkr)rkr)ersysrw collectionsrtypingrrrtyping_extensionsrrctorch.nnrM#torch.ao.quantization.fake_quantizerr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)__all__r* FutureWarningr+r,r-r.r/rtfloat16r0r1r2r3r4r6r7rdr8r9r:r;rBqint8r<r=float32r@rAr5rCr>r?!_default_fp32_placeholder_qconfigquint8#_default_quint8_placeholder_qconfigrDrErNr version_inforFrZrrtype"_ObserverOrFakeQuantizeConstructorrrrGrrrIrXrWrsB "''( ". F8j\8$<=8B ^ 8Z 0<2JK8 8:%5>UV "/E&(K"-6M",",,5==TR (  ( (u}} =!,",,5==A (  ( (u}} =&- .%,+4R%!*1+4W*&!*C&)2K&xx  )B#*!%((*;*;# !+4O&+L 8v4%,* **kk6 0 %!18* **kk6 < 1-!(%|%%EMM: '! &-%|%%EMM: ,&" !( ! nb)06,66,kk   4 )%5<6,66,kk   @ 51%,,",,5==A (  ( (u}} =%! '.,",,5<<@ '# `  Y  Y d      8G#4 588?? t 6g'"J;J$|Xg->?J+' +'!)"))!4+'+'\&+T,'.>)??&" $2$2$_.zz&#w#$Xg%6rX