ó
    Eñiy5  ã                   óâ   • S SK Jr  S SKrS SKJs  Js  Jr  S SKJs  Js  Js  J	r
  S SKJr  S SKJr  S SKJr  SSKJrJrJr  SS/r " S	 S\R
                  R*                  5      r " S
 S\5      rg)é    )ÚIterableN)Úfuse_linear_bn_weights)Útype_before_parametrizationsé   )Ú_hide_packed_params_reprÚ_quantize_weightÚWeightedQuantizedModuleÚLinearPackedParamsÚLinearc                   ó  ^ • \ rS rSrSr\R                  4U 4S jjr\R                  R                  S\R                  S\R                  S-  SS4S j5       r\R                  R                  S	 5       rS
 rU 4S jrU 4S jrS rSrU =r$ )r
   é   é   c                 ód  >• [         TU ]  5         Xl        U R                  [        R                  :X  a(  [        R
                  " SS/SS[        R                  S9nOCU R                  [        R                  :X  a%  [        R                  " SS/[        R                  S9nU R                  WS 5        g )Nr   ç      ð?r   ©ÚscaleÚ
zero_pointÚdtype©r   )
ÚsuperÚ__init__r   ÚtorchÚqint8Ú_empty_affine_quantizedÚfloat16ÚzerosÚfloatÚset_weight_bias)Úselfr   ÚwqÚ	__class__s      €Úa/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/ao/nn/quantized/modules/linear.pyr   ÚLinearPackedParams.__init__   s~   ø€ Ü‰ÑÔØŒ
Ø�:‰:œŸ™Ó$Ü×.Ò.Ø�A�˜c¨a´u·{±{ñ‰Bð �Z‰Zœ5Ÿ=™=Ó(Ü—’˜a ˜V¬5¯;©;Ñ7ˆBØ×Ñ˜R Õ&ó    ÚweightÚbiasNÚreturnc                 óL  • U R                   [        R                  :X  a/  [        R                  R                  R                  X5      U l        g U R                   [        R                  :X  a/  [        R                  R                  R                  X5      U l        g [        S5      e©Nz.Unsupported dtype on dynamic quantized linear!)
r   r   r   ÚopsÚ	quantizedÚlinear_prepackÚ_packed_paramsr   Úlinear_prepack_fp16ÚRuntimeError)r   r%   r&   s      r"   r   Ú"LinearPackedParams.set_weight_bias    sh   € à�:‰:œŸ™Ó$Ü"'§)¡)×"5Ñ"5×"DÑ"DÀVÓ"RˆDÕØ�Z‰Zœ5Ÿ=™=Ó(Ü"'§)¡)×"5Ñ"5×"IÑ"IÈ&Ó"WˆDÕäÐOÓPÐPr$   c                 ó\  • U R                   [        R                  :X  a3  [        R                  R                  R                  U R                  5      $ U R                   [        R                  :X  a3  [        R                  R                  R                  U R                  5      $ [        S5      er)   )
r   r   r   r*   r+   Úlinear_unpackr-   r   Úlinear_unpack_fp16r/   ©r   s    r"   Ú_weight_biasÚLinearPackedParams._weight_bias)   sp   € à�:‰:œŸ™Ó$Ü—9‘9×&Ñ&×4Ñ4°T×5HÑ5HÓIÐIØ�Z‰Zœ5Ÿ=™=Ó(Ü—9‘9×&Ñ&×9Ñ9¸$×:MÑ:MÓNÐNäÐOÓPÐPr$   c                 ó   • U$ ©N© ©r   Úxs     r"   ÚforwardÚLinearPackedParams.forward2   s   € Øˆr$   c                 ór   >• [         TU ]  XU5        U R                  XS-   '   U R                  5       XS-   '   g )Nr   r-   )r   Ú_save_to_state_dictr   r5   ©r   ÚdestinationÚprefixÚ	keep_varsr!   s       €r"   r?   Ú&LinearPackedParams._save_to_state_dictE   s:   ø€ Ü‰Ñ# K¸ÔCØ(,¯
©
ˆ˜WÑ$Ñ%Ø15×1BÑ1BÓ1DˆÐ-Ñ-Ò.r$   c           	      óÔ  >• UR                  SS 5      nUb  US:  a  [        R                  U l        O XS-      U l        UR	                  US-   5        Ub  US:  aD  U R                  XS-      XS-      5        UR	                  US-   5        UR	                  US-   5        US:X  a.  XS-      u  pšUR	                  US-   5        U R                  Xš5        [        TU ]  UUUSUUU5        g )	NÚversioné   r   r   r%   r&   r-   F)Úgetr   r   r   Úpopr   r   Ú_load_from_state_dict©r   Ú
state_dictrB   Úlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsrF   r%   r&   r!   s              €r"   rJ   Ú(LinearPackedParams._load_from_state_dictJ   sö   ø€ ð !×$Ñ$ Y°Ó5ˆØ‰?˜g¨›kÜŸ™ˆD�Jà#¨WÑ$4Ñ5ˆDŒJØ�N‰N˜6 GÑ+Ô,à‰?˜g¨›kØ× Ñ Ø HÑ,Ñ-¨zÀ6¹/Ñ/Jôð �N‰N˜6 HÑ,Ô-Ø�N‰N˜6 F™?Ô+à�a‹<Ø%Ð/?Ñ&?Ñ@‰LˆFØ�N‰N˜6Ð$4Ñ4Ô5Ø× Ñ  Ô.ä‰Ñ%ØØØØØØØõ	
r$   c                 ó>   • U R                  5       R                  5       $ r8   )r5   Ú__repr__r4   s    r"   rT   ÚLinearPackedParams.__repr__q   s   € Ø× Ñ Ó"×+Ñ+Ó-Ð-r$   )r-   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú_versionr   r   r   ÚjitÚexportÚTensorr   r5   r<   r?   rJ   rT   Ú__static_attributes__Ú__classcell__©r!   s   @r"   r
   r
      s•   ø† Ø€Hà"Ÿ[™[÷ 	'ð ‡Y�Y×ÑðQ e§l¡lð Q¸%¿,¹,ÈÑ:Mð QÐRVó Qó ðQð ‡Y�Y×ÑñQó ðQòõ&Eõ
%
÷N.ð .r$   c                   ó‚  ^ • \ rS rSrSrSr\R                  \R                  R                  R                  4rS\R                  4U 4S jjrS rS rS rS	\R$                  S
\R$                  4S jrU 4S jrU 4S jrS rS rS rS\R$                  S\R$                  S-  S
S4S jr\SS j5       r\S 5       rSrU =r$ )r   éu   a„  
A quantized linear module with quantized tensor as inputs and outputs.
We adopt the same interface as `torch.nn.Linear`, please see
https://pytorch.org/docs/stable/nn.html#torch.nn.Linear for documentation.

Similar to :class:`~torch.nn.Linear`, attributes will be randomly
initialized at module creation time and will be overwritten later

Attributes:
    weight (Tensor): the non-learnable quantized weights of the module of
                     shape :math:`(\text{out\_features}, \text{in\_features})`.
    bias (Tensor): the non-learnable bias of the module of shape :math:`(\text{out\_features})`.
            If :attr:`bias` is ``True``, the values are initialized to zero.
    scale: `scale` parameter of output Quantized Tensor, type: double
    zero_point: `zero_point` parameter for output Quantized Tensor, type: long

Examples::

    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_QENGINE)
    >>> m = nn.quantized.Linear(20, 30)
    >>> input = torch.randn(128, 20)
    >>> # xdoctest: +SKIP
    >>> input = torch.quantize_per_tensor(input, 1.0, 0, torch.quint8)
    >>> output = m(input)
    >>> print(output.size())
    torch.Size([128, 30])
r   Tc                 ó  >• [         TU ]  5         Xl        X l        S nU(       a#  [        R
                  " U[        R                  S9nU[        R                  :X  a'  [        R                  " X!/SS[        R                  S9nODU[        R                  :X  a%  [        R
                  " X!/[        R                  S9nO[        S5      e[        U5      U l        U R                  R                  Xe5        SU l        SU l        g )Nr   r   r   r   z1Unsupported dtype specified for quantized Linear!r   )r   r   Úin_featuresÚout_featuresr   r   r   r   r   r   r/   r
   r-   r   r   r   )r   rd   re   Úbias_r   r&   Úqweightr!   s          €r"   r   ÚLinear.__init__•   sÄ   ø€ Ü‰ÑÔð
 'ÔØ(ÔØˆÞÜ—;’;˜|´5·;±;Ñ?ˆDà”E—K‘KÓÜ×3Ò3ØÐ+°1ÀÌ%Ï+É+ñ‰Gð ”e—m‘mÓ#Ü—k’k <Ð"=ÄUÇ[Á[ÑQ‰GäÐRÓSÐSä0°Ó7ˆÔØ×Ñ×+Ñ+¨GÔ:ØˆŒ
Øˆ�r$   c                 ó   • g)NÚQuantizedLinearr9   r4   s    r"   Ú	_get_nameÚLinear._get_name¯   s   € Ø r$   c                 ó¬   • SU R                    SU R                   SU R                   SU R                   SU R	                  5       R                  5        3
$ )Nzin_features=z, out_features=z, scale=z, zero_point=z
, qscheme=)rd   re   r   r   r%   Úqschemer4   s    r"   Ú
extra_reprÚLinear.extra_repr²   s\   € à˜4×+Ñ+Ð,¨O¸D×<MÑ<MÐ;NÈhÐW[×WaÑWaÐVbð cØŸ/™/Ð*¨*°T·[±[³]×5JÑ5JÓ5LÐ4MðOð	
r$   c                 ó"   • [        U [        5      $ r8   )r   r
   r4   s    r"   rT   ÚLinear.__repr__¸   s   € Ü'¨Ô.@ÓAÐAr$   r;   r'   c                 ó¨   • [         R                  R                  R                  XR                  R                  U R
                  U R                  5      $ r8   )r   r*   r+   Úlinearr-   r   r   r:   s     r"   r<   ÚLinear.forward»   s:   € Ü�y‰y×"Ñ"×)Ñ)Ø×"Ñ"×1Ñ1°4·:±:¸t¿¹ó
ð 	
r$   c                 óº   >• [         TU ]  XU5        [        R                  " U R                  5      XS-   '   [        R                  " U R
                  5      XS-   '   g )Nr   r   )r   r?   r   Útensorr   r   r@   s       €r"   r?   ÚLinear._save_to_state_dictÝ   sF   ø€ Ü‰Ñ# K¸ÔCÜ(-¯ª°T·Z±ZÓ(@ˆ˜WÑ$Ñ%Ü-2¯\ª\¸$¿/¹/Ó-Jˆ˜\Ñ)Ò*r$   c           	      ó�  >• [        XS-      5      U l        UR                  US-   5        [        XS-      5      U l        UR                  US-   5        UR                  SS 5      nUb  US:X  aC  UR                  US-   5      n	UR                  US-   5      n
UR                  US-   U	US-   U
05        [        TU ]!  UUUS	UUU5        g )
Nr   r   rF   r   r%   r&   z_packed_params.weightz_packed_params.biasF)	r   r   rI   Úintr   rH   Úupdater   rJ   rK   s              €r"   rJ   ÚLinear._load_from_state_dictå   sÞ   ø€ ô ˜:¨wÑ&6Ñ7Ó8ˆŒ
Ø�‰�v Ñ'Ô(ä˜j°,Ñ)>Ñ?Ó@ˆŒØ�‰�v Ñ,Ô-à ×$Ñ$ Y°Ó5ˆà‰?˜g¨›là—^‘^ F¨XÑ$5Ó6ˆFØ—>‘> &¨6¡/Ó2ˆDØ×ÑàÐ4Ñ4°fØÐ2Ñ2°Dðôô 	‰Ñ%ØØØØØØØõ	
r$   c                 ó6   • U R                   R                  5       $ r8   )r-   r5   r4   s    r"   r5   ÚLinear._weight_bias  s   € Ø×"Ñ"×/Ñ/Ó1Ð1r$   c                 ó(   • U R                  5       S   $ )Nr   ©r5   r4   s    r"   r%   ÚLinear.weight  ó   € Ø× Ñ Ó" 1Ñ%Ð%r$   c                 ó(   • U R                  5       S   $ )Nr   r€   r4   s    r"   r&   ÚLinear.bias  r‚   r$   ÚwÚbNc                 ó:   • U R                   R                  X5        g r8   )r-   r   )r   r…   r†   s      r"   r   ÚLinear.set_weight_bias  s   € Ø×Ñ×+Ñ+¨AÕ1r$   c           	      óÆ  • [        US5      (       aÍ  [        U5      [        R                  :X  a–  [	        UR
                  UR                  UR                  R                  UR                  R                  UR                  R                  UR                  R
                  UR                  R                  5      u  Ul        Ul        UR                  nUR                  nGO)[        U R                  [        5      (       d  U R                  /U l        SR!                  U R                   Vs/ s H  oUR"                  PM     sn5      nSU R"                   SU S[%        U5       3n[        U5      U R                  ;  a  ['        U5      e[        US5      (       d  ['        S5      eUR                  n[        U5      [(        R*                  :X  a  US   n[        US5      (       d  UR,                  R                  5       OUR                  nU(       d  U" UR
                  5        UR.                  nUR1                  5       u  pšU[2        R4                  :w  a  ['        S	U 35      e[7        UR
                  R9                  5       U5      nU " UR:                  UR<                  US
9nUR?                  X±R                  5        [9        U	5      Ul         [C        U
5      Ul"        U$ s  snf )aM  Create a quantized module from an observed float module

Args:
    mod (Module): a float module, either produced by torch.ao.quantization
                  utilities or provided by the user
    use_precomputed_fake_quant (bool): if True, the module will reuse min/max
                  values from the precomputed fake quant module.
Úweight_fake_quantz, znnq.z.from_float only works for z, but got: Úqconfigz,Input float module must have qconfig definedr   z1Weight observer must have dtype torch.qint8, got r   )#Úhasattrr   ÚnniqatÚ
LinearBn1dr   r%   r&   ÚbnÚrunning_meanÚrunning_varÚepsrŠ   Úactivation_post_processÚ
isinstanceÚ_FLOAT_MODULEr   ÚjoinrV   ÚtypeÚAssertionErrorÚnniÚ
LinearReLUr‹   r   Úcalculate_qparamsr   r   r   r   rd   re   r   r   rz   r   )ÚclsÚmodÚuse_precomputed_fake_quantÚweight_post_processr“   Ú	float_modÚsupported_modulesÚ	error_msgr   Ú	act_scaleÚact_zprg   Úqlinears                r"   Ú
from_floatÚLinear.from_float  s`  € ô �3Ð+×,Ñ,Ü+¨CÓ0´F×4EÑ4EÓEÜ'=Ø—J‘JØ—H‘HØ—F‘F×'Ñ'Ø—F‘F×&Ñ&Ø—F‘F—J‘JØ—F‘F—M‘MØ—F‘F—K‘Kó(Ñ$�”
˜CœHð #&×"7Ñ"7ÐØ&)×&AÑ&AÒ#ô
 ˜c×/Ñ/´×:Ñ:à%(×%6Ñ%6Ð$7�Ô!Ø $§	¡	Ø58×5FÒ5FÓGÒ5F¨	×#Ô#Ñ5FÑGó!Ðð ˜sŸ|™|˜nÐ,GÐHYÐGZÐZeÔfjÐknÓfoÐepÐqˆIÜ+¨CÓ0¸×8IÑ8IÓIÜ$ YÓ/Ð/Ü˜3 	×*Ñ*Ü$Ð%SÓTÐTØ&)×&AÑ&AÐ#Ü+¨CÓ0´C·N±NÓBØ˜!‘f�ô ˜sÐ$7×8Ñ8ð —‘×"Ñ"Ô$à×*Ñ*ð  ö *ñ   §
¡
Ô+Ø#×)Ñ)ˆØ3×EÑEÓGÑˆ	Ø”E—K‘KÓÜ ØCÀEÀ7ÐKóð ô # 3§:¡:×#3Ñ#3Ó#5Ð7JÓKˆÙ�c—o‘o s×'7Ñ'7¸uÑEˆØ×Ñ ¯©Ô2Ü˜iÓ(ˆŒÜ  ›[ˆÔØˆùò? Hs   Ä)Kc                 óÖ   • U " UR                   UR                  5      nUR                  5       nUR                  XQR                  5        [        U5      Ul        [        U5      Ul        U$ )a\  Create a (fbgemm/qnnpack) quantized module from a reference quantized module

Args:
    ref_qlinear (Module): a reference quantized linear module, either produced by torch.ao.quantization
                  utilities or provided by the user
    output_scale (float): scale for output Tensor
    output_zero_point (int): zero point for output Tensor
)	rd   re   Úget_quantized_weightr   r&   r   r   rz   r   )rœ   Úref_qlinearÚoutput_scaleÚoutput_zero_pointr¥   rg   s         r"   Úfrom_referenceÚLinear.from_referenceZ  s]   € ñ �k×-Ñ-¨{×/GÑ/GÓHˆØ×2Ñ2Ó4ˆØ×Ñ ×)9Ñ)9Ô:ä˜lÓ+ˆŒÜ Ð!2Ó3ˆÔØˆr$   )r-   rd   re   r   r   )F)rV   rW   rX   rY   Ú__doc__rZ   Únnr   Úmodulesrt   ÚNonDynamicallyQuantizableLinearr•   r   r   r   rk   ro   rT   r]   r<   r?   rJ   r5   r%   r&   r   Úclassmethodr¦   r­   r^   r_   r`   s   @r"   r   r   u   sÒ   ø† ñð8 €HØ—Y‘Y §
¡
× 1Ñ 1× QÑ QÐR€Mà8<ÀEÇKÁK÷ ò4!ò
òBð
˜Ÿ™ð 
¨%¯,©,ô 
õDKõ%
òR2ò&ò&ð2 §¡ð 2°%·,±,ÀÑ2Eð 2È$ô 2ð ó=ó ð=ð~ ñó ör$   )Úcollections.abcr   r   Útorch.ao.nn.intrinsicÚaor°   Ú	intrinsicr™   Útorch.ao.nn.intrinsic.qatÚqatr�   Útorch.nnÚtorch.nn.utils.fusionr   Útorch.nn.utils.parametrizer   Úutilsr   r   r	   Ú__all__ÚModuler
   r   r9   r$   r"   Ú<module>rÀ      sZ   ðõ %ã ß #Ó #ß *Ö *Ý Ý 8Ý Cç VÑ Vð   Ð
*€ô`.˜Ÿ™Ÿ™ô `.ôFuÐ$õ ur$   