Ë
    g^(h#  ã                   ó¬   — d dl mZ d dlZd dlmZmZ ddgZ G d„ dej                  j                  «      Z	 G d„ dej                  j                  «      Z
y)é    )ÚOptionalN)Ú_hide_packed_params_reprÚ_quantize_weightÚLinearPackedParamsÚLinearc                   ó”  ‡ — e Zd ZdZddej
                  fˆ fd„	Zd„ Zej                  j                  dej                  deej                     dee   dee   d	d
f
d„«       Zej                  j                  d„ «       Zd„ Zˆ fd„Zˆ fd„Zej                  j                  d„ «       Zej                  j                  d„ «       Zd„ Zˆ xZS )r   é   é   c                 óæ   •— t         ‰| �  «        |t        j                  k7  rt	        d«      ‚|| _        t        j                  ddgddt        j                  ¬«      }| j                  |d ||«       y )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        €úa/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/ao/nn/sparse/quantized/linear.pyr   zLinearPackedParams.__init__   sd   ø€ Ü‰ÑÔà”E—K‘KÒÜ%Ð&MÓNÐNØˆŒ
Ü×*Ñ*Ø�ˆF˜#¨!´5·;±;ô
ˆð 	×Ñ˜R  ~°~ÕFó    c                  ó   — y)NÚ!SparseQuantizedLinearPackedParams© ©r   s    r   Ú	_get_namezLinearPackedParams._get_name   s   € Ø2r   ÚweightÚbiasr   r   ÚreturnNc                 ór   — |�|€J ‚t         j                  j                  j                  ||||«      | _        y ©N)r   ÚopsÚsparseÚqlinear_prepackÚ_packed_params)r   r$   r%   r   r   s        r   r   z"LinearPackedParams.set_weight_bias!   s;   € ð Ð)¨nÐ.HÐHÐHÜ#Ÿi™i×.Ñ.×>Ñ>Ø�D˜.¨.ó
ˆÕr   c                 óˆ   — t         j                  j                  j                  | j                  «      \  }}}|||d   |d   fS )Nr   r	   )r   r)   r*   Úqlinear_unpackr,   )r   r$   r%   Úblock_sizess       r   Ú_weight_biaszLinearPackedParams._weight_bias.   sE   € ä&+§i¡i×&6Ñ&6×&EÑ&EØ×Ñó'
Ñ#ˆ��{ð ˜˜k¨!™n¨k¸!©nÐ=Ð=r   c                 ó   — |S r(   r!   ©r   Úxs     r   ÚforwardzLinearPackedParams.forward5   s   € Øˆr   c                 óx   •— t         ‰| �  |||«       | j                  ||dz   <   | j                  «       ||dz   <   y )Nr   r,   )r   Ú_save_to_state_dictr   r0   ©r   ÚdestinationÚprefixÚ	keep_varsr   s       €r   r6   z&LinearPackedParams._save_to_state_dict8   s@   ø€ Ü‰Ñ# K°¸ÔCØ(,¯
©
ˆ�F˜WÑ$Ñ%Ø15×1BÑ1BÓ1Dˆ�FÐ-Ñ-Ò.r   c           	      ó  •— |j                  dd «      }|| j                  k  sJ ‚|j                  |dz   «      | _        |j                  |dz   «      \  }	}
}}| j	                  |	|
||«       t
        ‰| �  |||d|||«       y )NÚversionr   r,   F)ÚgetÚ_versionÚpopr   r   r   Ú_load_from_state_dict)r   Ú
state_dictr9   Úlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsr<   r$   r%   r   r   r   s                €r   r@   z(LinearPackedParams._load_from_state_dict=   s–   ø€ ð !×$Ñ$ Y°Ó5ˆØ˜$Ÿ-™-Ò'Ð'Ð'à—^‘^ F¨WÑ$4Ó5ˆŒ
Ø7A·~±~ØÐ%Ñ%ó8
Ñ4ˆ��n nð 	×Ñ˜V T¨>¸>ÔJä‰Ñ%ØØØØØØØõ	
r   c                 óH   — | j                   | j                  | j                  fS r(   ©r,   Útrainingr   r"   s    r   Ú__getstate__zLinearPackedParams.__getstate__Z   s   € à×"Ñ" D§M¡M°4·:±:Ð=Ð=r   c                 ó.   — |\  | _         | _        | _        y r(   rH   )r   Ústates     r   Ú__setstate__zLinearPackedParams.__setstate__^   s   € à;@Ñ8ˆÔ	˜dœm¨T­Zr   c                 ó>   — | j                  «       j                  «       S r(   )r0   Ú__repr__r"   s    r   rO   zLinearPackedParams.__repr__b   s   € Ø× Ñ Ó"×+Ñ+Ó-Ð-r   )Ú__name__Ú
__module__Ú__qualname__r>   r   r   r   r#   ÚjitÚexportÚTensorr   Úintr   r0   r4   r6   r@   rJ   rM   rO   Ú__classcell__©r   s   @r   r   r      sò   ø„ Ø€Hà&'¸ÀÇÁõ 	Gò3ð ‡Y�Y×Ñð

à—‘ð

ð �u—|‘|Ñ$ð

ð ! ™ð	

ð
 ! ™ð

ð 
ò

ó ð

ð ‡Y�Y×Ññ>ó ð>òôEô

ð: ‡Y�Y×Ññ>ó ð>ð ‡Y�Y×ÑñAó ðAö.r   c            
       óN  ‡ — e Zd ZdZdZej                  j                  Zdej                  fˆ fd„	Z
ed„ «       Zd„ Zd„ Zdej                  d	ej                  fd
„Zˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zdej                  deej                     dee   dee   d	df
d„Zedd„«       Zˆ xZS )r   zW
    A quantized sparse linear module with quantized tensor as inputs and outputs.
    r	   Tc                 ó²  •— t         ‰| �  «        |t        j                  k7  rt	        d«      ‚|| _        || _        |r0t        j                  | j                  t        j                  ¬«      }nd }t        j                  ||gddt        j                  ¬«      }t        |||¬«      | _        | j                  j                  ||||«       d| _        d| _        y )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   r\   r]   r   r   r%   r   Úqweightr   s	           €r   r   zLinear.__init__n   sÈ   ø€ ô 	‰ÑÔà”E—K‘KÒÜ%ØEóð ð 'ˆÔØ(ˆÔáÜ—;‘;˜t×0Ñ0¼¿¹ÔD‰DàˆDä×/Ñ/Ø˜;Ð'¨q¸QÄeÇkÁkô
ˆô 1Ø)¸.ÐPUô
ˆÔð 	×Ñ×+Ñ+Ø�T˜>¨>ô	
ð ˆŒ
Øˆ�r   c                  ó   — y)NÚSparseQuantizedLinearr!   )Úclss    r   r#   zLinear._get_name’   s   € à&r   c                 ó¬   — d| j                   › d| j                  › d| j                  › d| j                  › d| j	                  «       j                  «       › �
S )Nzin_features=z, out_features=z, scale=z, zero_point=z
, qscheme=)r\   r]   r   r   r$   Úqschemer"   s    r   Ú
extra_reprzLinear.extra_repr–   s\   € à˜4×+Ñ+Ð,¨O¸D×<MÑ<MÐ;NÈhÐW[×WaÑWaÐVbð cØŸ/™/Ð*¨*°T·[±[³]×5JÑ5JÓ5LÐ4MðOð	
r   c                 ó"   — t        | t        «      S r(   )r   r   r"   s    r   rO   zLinear.__repr__œ   s   € Ü'¨Ô.@ÓAÐAr   r3   r&   c                 óª   — t         j                  j                  j                  || j                  j                  | j
                  | j                  «      S r(   )r   r)   r*   Úqlinearr,   r   r   r2   s     r   r4   zLinear.forwardŸ   s<   € Ü�y‰y×Ñ×'Ñ'Øˆt×"Ñ"×1Ñ1°4·:±:¸t¿¹ó
ð 	
r   c                 ó¼   •— t         ‰| �  |||«       t        j                  | j                  «      ||dz   <   t        j                  | j
                  «      ||dz   <   y )Nr   r   )r   r6   r   Útensorr   r   r7   s       €r   r6   zLinear._save_to_state_dict¤   sL   ø€ Ü‰Ñ# K°¸ÔCÜ(-¯©°T·Z±ZÓ(@ˆ�F˜WÑ$Ñ%Ü-2¯\©\¸$¿/¹/Ó-Jˆ�F˜\Ñ)Ò*r   c           	      óF  •— t        ||dz      «      | _        |j                  |dz   «       t        ||dz      «      | _        |j                  |dz   «       |j                  |dz   «       |j                  dd «      }|| j                  k  sJ ‚t        ‰	| �!  |||d|||«       y )Nr   r   Úop_typer<   F)	r_   r   r?   rV   r   r=   r>   r   r@   )
r   rA   r9   rB   rC   rD   rE   rF   r<   r   s
            €r   r@   zLinear._load_from_state_dict©   sª   ø€ ô ˜: f¨wÑ&6Ñ7Ó8ˆŒ
Ø�‰�v Ñ'Ô(ä˜j¨°,Ñ)>Ñ?Ó@ˆŒØ�‰�v Ñ,Ô-à�‰�v 	Ñ)Ô*à ×$Ñ$ Y°Ó5ˆØ˜$Ÿ-™-Ò'Ð'Ð'ä‰Ñ%ØØØØØØØõ	
r   c                 ó6   — | j                   j                  «       S r(   )r,   r0   r"   s    r   r0   zLinear._weight_biasÈ   s   € Ø×"Ñ"×/Ñ/Ó1Ð1r   c                 ó(   — | j                  «       d   S )Nr   ©r0   r"   s    r   r$   zLinear.weightË   ó   € Ø× Ñ Ó" 1Ñ%Ð%r   c                 ó(   — | j                  «       d   S )Nr	   rp   r"   s    r   r%   zLinear.biasÎ   rq   r   ÚwÚbr   r   Nc                 óL   — |�|€J ‚| j                   j                  ||||«       y r(   )r,   r   )r   rs   rt   r   r   s        r   r   zLinear.set_weight_biasÑ   s/   € ð Ð)¨nÐ.HÐHÐHØ×Ñ×+Ñ+¨A¨q°.À.ÕQr   c                 óN  — t        |«      | j                  k(  s/J | j                  «       dz   | j                  j                  z   «       ‚t	        |d«      sJ d«       ‚|j
                  j                  dd«      }t        |t        t        f«      sJ ‚t        |«      dk(  sJ ‚t	        |d«      sJ d«       ‚|j                  }|j                  j                  «       }|j                  } ||«       |j                  }|j                  «       \  }}	|t         j"                  k(  sJ d	«       ‚|j                  «       \  }
}t        |t         j$                  «      r*t!        j&                  |j)                  «       «      rJ d
«       ‚|dk(  sJ d«       ‚t+        |j-                  «       |«      }|j
                  d   d   }|j
                  d   d   } | |j.                  |j0                  |||¬«      }|j3                  ||j4                  ||«       t-        |«      |_        t9        |	«      |_        |S )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_shapeNé   Úqconfigz,Input float module must have qconfig definedz+Weight observer must have dtype torch.qint8z$All weight zero points must map to 0r   zWeight zero point must map to 0r	   r[   )ÚtypeÚ_FLOAT_MODULEr#   rP   Úhasattrrw   r=   Ú
isinstanceÚtupleÚlistÚlenÚactivation_post_processrz   r$   r   Úcalculate_qparamsr   r   rU   ÚanyÚboolr   r_   r\   r]   r   r%   r   rV   r   )rc   ÚmodÚuse_precomputed_fake_quantrx   r‚   Úweight_post_processr$   r   Ú	act_scaleÚact_zpÚw_scÚw_zpr`   r   r   ri   s                   r   Ú
from_floatzLinear.from_floatÛ   s  € ô �C‹y˜C×-Ñ-Ò-ð 	
Ø�M‰M‹OÐ;Ñ;¸c×>OÑ>O×>XÑ>XÑXó	
Ð-ô �s˜OÔ,ð 	
ð^ó	
Ð,ð !×.Ñ.×2Ñ2Ð3GÈÓNÐÜÐ,¬u´d¨mÔ<Ð<Ð<ÜÐ%Ó&¨!Ò+Ð+Ð+ô �s˜IÔ&ÐVÐ(VÓVÐ&Ø"%×"=Ñ"=ÐØ!Ÿk™k×0Ñ0Ó2Ðð —‘ˆá˜FÔ#Ø#×)Ñ)ˆØ3×EÑEÓGÑˆ	�6ØœŸ™Ò#ÐRÐ%RÓRÐ#Ø(×:Ñ:Ó<‰
ˆˆdÜ�dœEŸL™LÔ)Ü—y‘y §¡£Ô-ÐUÐ/UÓUÐ-à˜1’9Ð?Ð?Ó?�9Ü" 6§<¡<£>Ð3FÓGˆà×*Ñ*Ð+?Ñ@ÀÑCˆØ×*Ñ*Ð+?Ñ@ÀÑCˆÙØ�O‰OØ×ÑØØØô
ˆð 	×ÑØ�S—X‘X˜~¨~ô	
ô ˜iÓ(ˆŒÜ  ›[ˆÔØˆr   )F)rP   rQ   rR   Ú__doc__r>   r   Únnr   r|   r   r   Úclassmethodr#   rf   rO   rU   r4   r6   r@   r0   r$   r%   r   rV   r   r�   rW   rX   s   @r   r   r   g   sæ   ø„ ñð €HØ—H‘H—O‘O€Mð Ø�k‰kõ"ðH ñ'ó ð'ò
òBð
˜Ÿ™ð 
¨%¯,©,ó 
ô
Kô

ò>2ò&ò&ðRà�<‰<ðRð �E—L‘LÑ!ðRð ! ™ð	Rð
 ! ™ðRð 
óRð ò4ó ô4r   )Útypingr   r   Ú#torch.ao.nn.quantized.modules.utilsr   r   Ú__all__r�   ÚModuler   r   r!   r   r   ú<module>r•      sK   ðõ ã ÷ð   Ð
*€ôS.˜Ÿ™Ÿ™ô S.ôniˆU�X‰X�_‰_õ ir   