ó
    Eñi¦'  ã                   ó    • S SK r S SKJrJr  SS/r " S S\ R
                  R                  5      r " S S\ R
                  R                  5      rg)é    N)Ú_hide_packed_params_reprÚ_quantize_weightÚLinearPackedParamsÚLinearc                   ó¦  ^ • \ rS rSrSrSS\R                  4U 4S jjrS r\R                  R                  S\R                  S\R                  S-  S	\S-  S
\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\R                  R                  S 5       r\R                  R                  S 5       rS rSrU =r$ )r   é   é   é   c                 óà   >• [         TU ]  5         U[        R                  :w  a  [	        S5      eX0l        [        R                  " SS/SS[        R                  S9nU R                  US X5        g )Nz%Linear prepacking only supports QINT8r	   ç      ð?r   ©ÚscaleÚ
zero_pointÚdtype)ÚsuperÚ__init__ÚtorchÚqint8ÚNotImplementedErrorr   Ú_empty_affine_quantizedÚset_weight_bias)ÚselfÚrow_block_sizeÚcol_block_sizer   ÚwqÚ	__class__s        €Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/ao/nn/sparse/quantized/linear.pyr   ÚLinearPackedParams.__init__   s`   ø€ Ü‰ÑÔà”E—K‘KÓÜ%Ð&MÓNÐNØŒ
Ü×*Ò*Ø�ˆF˜#¨!´5·;±;ñ
ˆð 	×Ñ˜R  ~ÕFó    c                 ó   • g)NÚ!SparseQuantizedLinearPackedParams© ©r   s    r   Ú	_get_nameÚLinearPackedParams._get_name   s   € Ø2r   ÚweightÚbiasNr   r   Úreturnc                 ó�   • Ub  Uc  [        SU SU 35      e[        R                  R                  R	                  XX45      U l        g ©NzGrow_block_size and col_block_size must not be None, got row_block_size=z, col_block_size=)ÚAssertionErrorr   ÚopsÚsparseÚqlinear_prepackÚ_packed_params)r   r&   r'   r   r   s        r   r   Ú"LinearPackedParams.set_weight_bias   sY   € ð Ñ! ^Ñ%;Ü ð"Ø"0Ð!1Ð1BÀ>ÐBRðTóð ô $Ÿi™i×.Ñ.×>Ñ>Ø˜.ó
ˆÕr   c                 ó„   • [         R                  R                  R                  U R                  5      u  pnXUS   US   4$ )Nr   r	   )r   r,   r-   Úqlinear_unpackr/   )r   r&   r'   Úblock_sizess       r   Ú_weight_biasÚLinearPackedParams._weight_bias0   sA   € ä&+§i¡i×&6Ñ&6×&EÑ&EØ×Ñó'
Ñ#ˆ�{ð ˜k¨!™n¨k¸!©nÐ=Ð=r   c                 ó   • U$ ©Nr"   ©r   Úxs     r   ÚforwardÚLinearPackedParams.forward7   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   r4   ©r   ÚdestinationÚprefixÚ	keep_varsr   s       €r   r=   Ú&LinearPackedParams._save_to_state_dict:   s:   ø€ Ü‰Ñ# K¸ÔCØ(,¯
©
ˆ˜WÑ$Ñ%Ø15×1BÑ1BÓ1DˆÐ-Ñ-Ò.r   c           	      ó2  >• UR                  SS 5      nUb*  X€R                  :”  a  [        SU SU R                   35      eUR                  US-   5      U l        UR                  US-   5      u  pšp¼U R                  XšX¼5        [        TU ]  UUUSUUU5        g )NÚversionúversion ú > self._version r   r/   F)ÚgetÚ_versionr+   Úpopr   r   r   Ú_load_from_state_dict)r   Ú
state_dictr@   Úlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsrD   r&   r'   r   r   r   s                €r   rJ   Ú(LinearPackedParams._load_from_state_dict?   s¨   ø€ ð !×$Ñ$ Y°Ó5ˆØÑ 7¯]©]Ó#:Ü  8¨G¨9Ð4EÀdÇmÁmÀ_Ð!UÓVÐVà—^‘^ F¨WÑ$4Ó5ˆŒ
Ø7A·~±~ØÐ%Ñ%ó8
Ñ4ˆ�nð 	×Ñ˜V¨>ÔJä‰Ñ%ØØØØØØØõ	
r   c                 óH   • U R                   U R                  U R                  4$ r7   ©r/   Útrainingr   r#   s    r   Ú__getstate__ÚLinearPackedParams.__getstate__]   s   € à×"Ñ" D§M¡M°4·:±:Ð=Ð=r   c                 ó.   • Uu  U l         U l        U l        g r7   rS   )r   Ústates     r   Ú__setstate__ÚLinearPackedParams.__setstate__a   s   € à;@Ñ8ˆÔ	˜dœm¨T­Zr   c                 ó>   • U R                  5       R                  5       $ r7   )r4   Ú__repr__r#   s    r   r\   ÚLinearPackedParams.__repr__e   s   € Ø× Ñ Ó"×+Ñ+Ó-Ð-r   )r/   r   rT   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rH   r   r   r   r$   ÚjitÚexportÚTensorÚintr   r4   r:   r=   rJ   rU   rY   r\   Ú__static_attributes__Ú__classcell__©r   s   @r   r   r      s÷   ø† Ø€Hà&'¸ÀÇÁ÷ 	Gò3ð ‡Y�Y×Ñð
à—‘ð
ð �l‰l˜TÑ!ð
ð ˜d™
ð	
ð
 ˜d™
ð
ð 
ó
ó ð
ð  ‡Y�Y×Ññ>ó ð>òõEõ

ð< ‡Y�Y×Ññ>ó ð>ð ‡Y�Y×ÑñAó ðA÷.ð .r   c            
       ód  ^ • \ rS rSrSrSr\R                  R                  r	S\R                  4U 4S jjr\S 5       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-  S\S-  S
S4
S jr\SS j5       rSrU =r$ )r   éj   zO
A quantized sparse linear module with quantized tensor as inputs and outputs.
r	   Tc                 ó¤  >• [         TU ]  5         U[        R                  :w  a  [	        S5      eXl        X l        U(       a.  [        R                  " U R                  [        R                  S9nOS n[        R                  " X!/SS[        R                  S9n[        X4US9U l        U R                  R                  XuX45        SU l        SU l        g )Nz3Only QINT8 is supported for Sparse Quantized Linear©r   r	   r   r   )r   r   r   r   )r   r   r   r   r   Úin_featuresÚout_featuresÚzerosÚfloatr   r   r/   r   r   r   )	r   rm   rn   r   r   r'   r   Úqweightr   s	           €r   r   ÚLinear.__init__r   s¼   ø€ ô 	‰ÑÔà”E—K‘KÓÜ%ØEóð ð 'ÔØ(ÔæÜ—;’;˜t×0Ñ0¼¿¹ÑD‰DàˆDä×/Ò/ØÐ'¨q¸QÄeÇkÁkñ
ˆô 1Ø)ÐPUñ
ˆÔð 	×Ñ×+Ñ+Ø˜>ô	
ð ˆŒ
Øˆ�r   c                 ó   • g)NÚSparseQuantizedLinearr"   )Úclss    r   r$   Ú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=)rm   rn   r   r   r&   Úqschemer#   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      $ r7   )r   r   r#   s    r   r\   ÚLinear.__repr__    s   € Ü'¨Ô.@ÓAÐAr   r9   r(   c                 ó¨   • [         R                  R                  R                  XR                  R                  U R
                  U R                  5      $ r7   )r   r,   r-   Úqlinearr/   r   r   r8   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           	      óz  >• [        XS-      5      U l        UR                  US-   5        [        XS-      5      U l        UR                  US-   5        UR                  US-   5        UR                  SS 5      nUb*  X€R                  :”  a  [        SU SU R                   35      e[        T	U ]%  UUUSUUU5        g )Nr   r   Úop_typerD   rE   rF   F)
rp   r   rI   re   r   rG   rH   r+   r   rJ   )
r   rK   r@   rL   rM   rN   rO   rP   rD   r   s
            €r   rJ   ÚLinear._load_from_state_dict­   sÀ   ø€ ô ˜:¨wÑ&6Ñ7Ó8ˆŒ
Ø�‰�v Ñ'Ô(ä˜j°,Ñ)>Ñ?Ó@ˆŒØ�‰�v Ñ,Ô-à�‰�v 	Ñ)Ô*à ×$Ñ$ Y°Ó5ˆØÑ 7¯]©]Ó#:Ü  8¨G¨9Ð4EÀdÇmÁmÀ_Ð!UÓVÐVä‰Ñ%ØØØØØØØõ	
r   c                 ó6   • U R                   R                  5       $ r7   )r/   r4   r#   s    r   r4   ÚLinear._weight_biasÍ   s   € Ø×"Ñ"×/Ñ/Ó1Ð1r   c                 ó(   • U R                  5       S   $ )Nr   ©r4   r#   s    r   r&   ÚLinear.weightÐ   ó   € Ø× Ñ Ó" 1Ñ%Ð%r   c                 ó(   • U R                  5       S   $ )Nr	   r‰   r#   s    r   r'   ÚLinear.biasÓ   r‹   r   ÚwÚbNr   r   c                 ój   • Ub  Uc  [        SU SU 35      eU R                  R                  XX45        g r*   )r+   r/   r   )r   rŽ   r�   r   r   s        r   r   ÚLinear.set_weight_biasÖ   sM   € ð Ñ! ^Ñ%;Ü ð&Ø&4Ð%5Ð5FÀ~ÐFVðXóð ð 	×Ñ×+Ñ+¨A°.ÕQr   c                 ó  • [        U5      U R                  La3  [        U R                  5       S-   U R                  R                  -   5      e[        US5      (       d  [        S5      eUR                  R                  SS5      n[        U[        [        45      (       d  [        S[        U5       35      e[        U5      S:w  a  [        S[        U5       35      e[        US	5      (       d  [        S
5      eUR                  nUR                  R                  5       nUR                  nU" U5        UR                  nUR!                  5       u  p‰U["        R$                  :w  a  [        SU 35      eUR!                  5       u  p«[        U["        R&                  5      (       a5  ["        R(                  " UR+                  5       5      (       a  [        S5      eOUS:w  a  [        SU 35      e[-        UR/                  5       U5      nUR                  S   S   nUR                  S   S   nU " UR0                  UR2                  UUUS9nUR5                  UUR6                  UU5        [/        U5      Ul        [;        U	5      Ul        U$ )z¾Create a quantized sparse module from a float module.

We only care about the convert at this stage, no need for observers just yet.

TODO(zaf): Need to add the sparse params to the qconfig
z.from_float only works for Úsparse_paramsz£Expecting the Linear to have `sparse_params`. Make sure you have provided arguments in the `sparsifier.squash_mask(params_to_save=("sparse_block_shape",))` method.Úsparse_block_shapeNz.sparse_block_shape must be tuple or list, got é   z+sparse_block_shape must have length 2, got Úqconfigz,Input float module must have qconfig definedz1Weight observer must have dtype torch.qint8, got z$All weight zero points must map to 0r   z%Weight zero point must map to 0, got r	   rl   )ÚtypeÚ_FLOAT_MODULEr+   r$   r^   Úhasattrr“   rG   Ú
isinstanceÚtupleÚlistÚlenÚactivation_post_processr–   r&   r   Úcalculate_qparamsr   r   rd   ÚanyÚboolr   rp   rm   rn   r   r'   r   re   r   )ru   ÚmodÚuse_precomputed_fake_quantr”   rž   Úweight_post_processr&   r   Ú	act_scaleÚact_zpÚw_scÚw_zprq   r   r   r~   s                   r   Ú
from_floatÚLinear.from_floatä   sv  € ô �‹9˜C×-Ñ-Ò-Ü Ø—‘“Ø/ñ0à×#Ñ#×,Ñ,ñ-óð ô
 �s˜O×,Ñ,Ü ðbóð ð !×.Ñ.×2Ñ2Ð3GÈÓNÐÜÐ,¬u´d¨m×<Ñ<Ü Ø@ÄÐFXÓAYÐ@ZÐ[óð ô Ð!Ó" aÓ'Ü Ø=¼cÐBTÓ>UÐ=VÐWóð ô
 �s˜I×&Ñ&Ü Ð!OÓPÐPØ"%×"=Ñ"=ÐØ!Ÿk™k×0Ñ0Ó2Ðð —‘ˆá˜FÔ#Ø#×)Ñ)ˆØ3×EÑEÓGÑˆ	Ø”E—K‘KÓÜ ØCÀEÀ7ÐKóð ð )×:Ñ:Ó<‰
ˆÜ�dœEŸL™L×)Ñ)Ü�yŠy˜Ÿ™›×%Ñ%Ü$Ð%KÓLÐLð &ð �q‹yÜ$Ð'LÈTÈFÐ%SÓTÐTÜ" 6§<¡<£>Ð3FÓGˆà×*Ñ*Ð+?Ñ@ÀÑCˆØ×*Ñ*Ð+?Ñ@ÀÑCˆÙØ�O‰OØ×ÑØØØñ
ˆð 	×ÑØØ�H‰HØØô		
ô ˜iÓ(ˆŒÜ  ›[ˆÔØˆr   )r/   rm   rn   r   r   )F)r^   r_   r`   ra   Ú__doc__rH   r   Únnr   r˜   r   r   Úclassmethodr$   ry   r\   rd   r:   r=   rJ   r4   r&   r'   re   r   r©   rf   rg   rh   s   @r   r   r   j   sé   ø† ñð €HØ—H‘H—O‘O€Mð Ø�k‰k÷"ðH ñ'ó ð'ò
òBð
˜Ÿ™ð 
¨%¯,©,ô 
õ
Kõ

ò@2ò&ò&ðRà�<‰<ðRð �<‰<˜$ÑðRð ˜d™
ð	Rð
 ˜d™
ðRð 
ôRð óGó öGr   )	r   Ú#torch.ao.nn.quantized.modules.utilsr   r   Ú__all__r¬   ÚModuler   r   r"   r   r   Ú<module>r±      sH   ðó ÷ð   Ð
*€ôX.˜Ÿ™Ÿ™ô X.ôxBˆU�X‰X�_‰_õ Br   