§
    †Pƒih  ã                   ó€  — d dl Z d dlmZ d dlmZ ddgZe j        j        Z G d„ de¦  «        Zej	        Z	ej
        Z
 e
e j        j        j        ¦  «        d„ ¦   «         Z e	ej        j        ¦  «        d„ ¦   «         Z e	ej        j        ¦  «        d	„ ¦   «         Zej        Ze j                             eg¦  «         dS )
é    N)Úreturn_and_correct_aliasing)ÚTorchAOBaseTensorÚ-WeightTensorWithLinearActivationScaleMetadataÚ6to_weight_tensor_with_linear_activation_scale_metadatac                   óâ   — e Zd ZdZddgZg Zdej        dej        fd„Zdej        dej        fd„Z	d„ Z
edej        dej        d	ej        fd
„¦   «         Zedej        dej        fd„¦   «         ZdS )r   aé  
    Tensor subclass that wraps a weight tensor and provides metadata for linear activation scaling.
    Right now we hardcode how we apply the scale:
       scaled_linear_act = input_act / scale
       out = F.linear(scaled_linear_act, weight, ...)

    We can generalize this to accept a function as well if needed.

    Args:
        original_weight_tensor (torch.Tensor): The weight tensor to be wrapped.
        scale (torch.Tensor): The scale tensor to be applied to activation.
    Úoriginal_weight_tensorÚscalec                 óz   — i }|j         }||d<   d|d<   |j        |d<   |j        }t          j        j        | |fi |¤ŽS )NÚdtypeFÚrequires_gradÚdevice)r   r   ÚshapeÚtorchÚTensorÚ_make_wrapper_subclass)Úclsr   r	   Úkwargsr   r   s         ú€/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchao/quantization/linear_activation_scale.pyÚ__new__z5WeightTensorWithLinearActivationScaleMetadata.__new__$   sV   € ð
 ˆØ&Ô,ˆØˆˆw‰Ø"'ˆˆÑØ1Ô8ˆˆxÑØ&Ô,ˆÝŒ|Ô2°3¸ÐHÐHÀÐHÐHÐHó    c                 ó"   — || _         || _        d S ©N)r   r	   )Úselfr   r	   s      r   Ú__init__z6WeightTensorWithLinearActivationScaleMetadata.__init__1   s   € ð
 '=ˆÔ#ØˆŒ
ˆ
ˆ
r   c                 ó   — | j         › S r   )Ú	__class__)r   s    r   Ú_quantization_typez@WeightTensorWithLinearActivationScaleMetadata._quantization_type9   s   € Ø”.Ð"Ð"r   Úinput_tensorÚweight_tensorÚbiasc                 ót   — |j         }|j        }| |z  }t          j        j                             |||¦  «        S r   )r   r	   r   ÚnnÚ
functionalÚlinear)r   r   r    r   r	   Úscaled_input_acts         r   Ú_quantized_linear_opzBWeightTensorWithLinearActivationScaleMetadata._quantized_linear_op<   sE   € ð "/Ô!EÐØÔ#ˆà'¨%Ñ/ÐÝŒxÔ"×)Ò)ØÐ4°dñ
ô 
ð 	
r   Úinput_floatc                 ó   —  | ||¦  «        S r   © )r   r'   r	   s      r   Ú
from_floatz8WeightTensorWithLinearActivationScaleMetadata.from_floatH   s   € ð ˆs; Ñ&Ô&Ð&r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Útensor_data_namesÚtensor_attribute_namesr   r   r   r   r   Ústaticmethodr&   Úclassmethodr*   r)   r   r   r   r      s  € € € € € ðð ð 2°7Ð;ÐØÐðIà %¤ðIð Œ|ðIð Ið Ið Iðà %¤ðð Œ|ðð ð ð ð#ð #ð #ð ð	
Ø”lð	
Ø38´<ð	
ØGLÄ|ð	
ð 	
ð 	
ñ „\ð	
ð ð'à”\ð'ð Œ|ð'ð 'ð 'ñ „[ð'ð 'ð 'r   c                 óÒ   — |d         |d         t          |¦  «        dk    r|d         nd }}}t          |t          ¦  «        r|                     |||¦  «        S t	          d¦  «        ‚)Nr   é   é   zLLinearActivationQuantizedTensor: No specialized dispatch found for linear op)ÚlenÚ
isinstancer   r&   ÚNotImplementedError)ÚfuncÚtypesÚargsr   r   r   r    s          r   Ú_r<   W   sw   € ð 	ˆQŒØˆQŒÝt‘9”9˜q’==ˆˆQŒˆ dð "&-€Lõ
 -Õ!NÑOÔOð UØ×1Ò1°,ÀÈtÑTÔTÐTå
ØVñô ð r   c                 óš   — |d         }|                       | |j        g|dd …         ¢R i |¤Ž|j        ¦  «        }t          | |||¦  «        S )Nr   r4   )r   r   r	   r   )r9   r:   r;   r   r   Únews         r   r<   r<   f   s`   € àŒ7€DØ
.Š.ØˆˆTÔ(Ð>¨4°°°¬8Ð>Ð>Ð>°vÐ>Ð>ÀÄ
ñô €Cõ ' t¨T°6¸3Ñ?Ô?Ð?r   c                 ól   — t          | |||d                              t          j        ¦  «        ¦  «        S )Nr   )r   Ú_apply_fn_to_datar   Út)r9   r:   r;   r   s       r   r<   r<   o   s1   € å&ØˆdF˜D œG×5Ò5µe´gÑ>Ô>ñô ð r   )r   Útorch.utils._python_dispatchr   Útorchao.utilsr   Ú__all__ÚopsÚatenr   Ú
implementsÚimplements_torch_functionr"   r#   r$   r<   Úslicer   rA   Údefaultr*   r   ÚserializationÚadd_safe_globalsr)   r   r   ú<module>rM      sF  ðð €€€Ø DÐ DÐ DÐ DÐ DÐ Dà +Ð +Ð +Ð +Ð +Ð +ð 4Ø<ð€ð
 „y„~€ð;'ð ;'ð ;'ð ;'ð ;'Ð4Eñ ;'ô ;'ð ;'ð| ;ÔE€
à1ÔKð ð
 Ð˜5œ8Ô.Ô5Ñ6Ô6ðð ñ 7Ô6ðð €ˆDŒJÔÑÔð@ð @ñ Ôð@ð €ˆDŒFŒNÑÔðð ñ Ôðð 2Ô<ð 7ð
 Ô × $Ò $Ð&SÐ%TÑ UÔ UÐ UÐ UÐ Ur   