Ë
    ÄÓ^j¦'  ã                   ó    — 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)é    N)Ú_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j                  dz  dedz  d	edz  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        €ún/var/www/ramen.bs-engineer-server.com/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ÚbiasNr   r   Úreturnc                 ó�   — |�|€t        d|› d|› �«      ‚t        j                  j                  j	                  ||||«      | _        y ©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   z"LinearPackedParams.set_weight_bias   s]   € ð Ð! ^Ð%;Ü ð"Ø"0Ð!1Ð1BÀ>ÐBRðTóð ô $Ÿ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_bias0   sE   € ä&+§i¡i×&6Ñ&6×&EÑ&EØ×Ñó'
Ñ#ˆ��{ð ˜˜k¨!™n¨k¸!©nÐ=Ð=r   c                 ó   — |S ©Nr    ©r   Úxs     r   ÚforwardzLinearPackedParams.forward7   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   r7   z&LinearPackedParams._save_to_state_dict:   s@   ø€ Ü‰Ñ# K°¸ÔCØ(,¯
©
ˆ�F˜WÑ$Ñ%Ø15×1BÑ1BÓ1Dˆ�FÐ-Ñ-Ò.r   c           	      ó8  •— |j                  dd «      }|�*|| j                  kD  rt        d|› d| j                  › �«      ‚|j                  |dz   «      | _        |j                  |dz   «      \  }	}
}}| j                  |	|
||«       t        ‰| �  |||d|||«       y )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_msgsr=   r#   r$   r   r   r   s                €r   rC   z(LinearPackedParams._load_from_state_dict?   s²   ø€ ð !×$Ñ$ Y°Ó5ˆØÐ 7¨T¯]©]Ò#:Ü  8¨G¨9Ð4EÀdÇmÁmÀ_Ð!UÓVÐVà—^‘^ F¨WÑ$4Ó5ˆŒ
Ø7A·~±~ØÐ%Ñ%ó8
Ñ4ˆ��n nð 	×Ñ˜V T¨>¸>ÔJä‰Ñ%ØØØØØØØõ	
r   c                 óH   — | j                   | j                  | j                  fS r2   ©r,   Útrainingr   r!   s    r   Ú__getstate__zLinearPackedParams.__getstate__]   s   € à×"Ñ" D§M¡M°4·:±:Ð=Ð=r   c                 ó.   — |\  | _         | _        | _        y r2   rK   )r   Ústates     r   Ú__setstate__zLinearPackedParams.__setstate__a   s   € à;@Ñ8ˆÔ	˜dœm¨T­Zr   c                 ó>   — | j                  «       j                  «       S r2   )r0   Ú__repr__r!   s    r   rR   zLinearPackedParams.__repr__e   s   € Ø× Ñ Ó"×+Ñ+Ó-Ð-r   )Ú__name__Ú
__module__Ú__qualname__rA   r   r   r   r"   ÚjitÚexportÚTensorÚintr   r0   r5   r7   rC   rM   rP   rR   Ú__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            
       ó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j                  dz  dedz  dedz  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__r   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 r2   )r   r   r!   s    r   rR   zLinear.__repr__    s   € Ü'¨Ô.@ÓAÐAr   r4   r%   c                 óª   — t         j                  j                  j                  || j                  j                  | j
                  | j                  «      S r2   )r   r)   r*   Úqlinearr,   r   r   r3   s     r   r5   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   r7   r   Útensorr   r   r8   s       €r   r7   zLinear._save_to_state_dict¨   sL   ø€ Ü‰Ñ# K°¸ÔCÜ(-¯©°T·Z±ZÓ(@ˆ�F˜WÑ$Ñ%Ü-2¯\©\¸$¿/¹/Ó-Jˆ�F˜\Ñ)Ò*r   c           	      ó|  •— t        ||dz      «      | _        |j                  |dz   «       t        ||dz      «      | _        |j                  |dz   «       |j                  |dz   «       |j                  dd «      }|�*|| j                  kD  rt        d|› d| j                  › �«      ‚t        ‰	| �%  |||d|||«       y )Nr   r   Úop_typer=   r>   r?   F)
rb   r   rB   rY   r   r@   rA   r(   r   rC   )
r   rD   r:   rE   rF   rG   rH   rI   r=   r   s
            €r   rC   zLinear._load_from_state_dict­   sÆ   ø€ ô ˜: f¨wÑ&6Ñ7Ó8ˆŒ
Ø�‰�v Ñ'Ô(ä˜j¨°,Ñ)>Ñ?Ó@ˆŒØ�‰�v Ñ,Ô-à�‰�v 	Ñ)Ô*à ×$Ñ$ Y°Ó5ˆØÐ 7¨T¯]©]Ò#:Ü  8¨G¨9Ð4EÀdÇmÁmÀ_Ð!UÓVÐVä‰Ñ%ØØØØØØØõ	
r   c                 ó6   — | j                   j                  «       S r2   )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   rs   r!   s    r   r$   zLinear.biasÓ   rt   r   ÚwÚbNr   r   c                 ój   — |�|€t        d|› d|› �«      ‚| j                  j                  ||||«       y r'   )r(   r,   r   )r   rv   rw   r   r   s        r   r   zLinear.set_weight_biasÖ   sQ   € ð Ð! ^Ð%;Ü ð&Ø&4Ð%5Ð5FÀ~ÐFVðXóð ð 	×Ñ×+Ñ+¨A¨q°.À.ÕQr   c                 óÜ  — t        |«      | j                  ur3t        | j                  «       dz   | j                  j                  z   «      ‚t        |d«      st        d«      ‚|j                  j                  dd«      }t        |t        t        f«      st        dt        |«      › �«      ‚t        |«      dk7  rt        dt        |«      › �«      ‚t        |d	«      st        d
«      ‚|j                  }|j                  j                  «       }|j                  } ||«       |j                  }|j!                  «       \  }}	|t"        j$                  k7  rt        d|› �«      ‚|j!                  «       \  }
}t        |t"        j&                  «      r.t#        j(                  |j+                  «       «      rt        d«      ‚|dk7  rt        d|› �«      ‚t-        |j/                  «       |«      }|j                  d   d   }|j                  d   d   } | |j0                  |j2                  |||¬«      }|j5                  ||j6                  ||«       t/        |«      |_        t;        |	«      |_        |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_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   r^   )ÚtypeÚ_FLOAT_MODULEr(   r"   rS   Úhasattrrz   r@   Ú
isinstanceÚtupleÚlistÚlenÚactivation_post_processr}   r#   r   Úcalculate_qparamsr   r   rX   ÚanyÚboolr   rb   r_   r`   r   r$   r   rY   r   )rf   ÚmodÚuse_precomputed_fake_quantr{   r…   Úweight_post_processr#   r   Ú	act_scaleÚact_zpÚw_scÚw_zprc   r   r   rl   s                   r   Ú
from_floatzLinear.from_floatä   sd  € ô �‹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Ñˆ	�6Ø”E—K‘KÒÜ ØCÀEÀ7ÐKóð ð )×:Ñ:Ó<‰
ˆˆdÜ�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   )F)rS   rT   rU   Ú__doc__rA   r   Únnr   r   r   r   Úclassmethodr"   ri   rR   rX   r5   r7   rC   r0   r#   r$   rY   r   r�   rZ   r[   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   