+
    "Ý³j^J  ã                   ón  € ^ RI t ^ RIHt ^ RIHtHtHtHt ^ RIt^ RI	H
t
 ^ RIHt ^ RIHtHt ^ RIHtHtHtHtHtHt ^ RIHtHtHtHtHt ^ R	IHt ^ R
IH t  ^RI!H"t"  ! R R] PF                  4      t$] ! R R]$4      4       t%] ! R R]$4      4       t&] ! R R]$4      4       t' ! R R]'4      t(R R lt)R# )é    N)Ú	dataclass)ÚAnyÚOptionalÚTupleÚUnion)ÚAOBaseConfig)Ú
e4m3_dtype)ÚFP8GranularityÚ_normalize_granularity)ÚGranularityÚPerAxisÚPerGroupÚPerRowÚ	PerTensorÚPerToken)Ú_SUB_BYTE_INT_BOUNDSÚ_SUB_BYTE_UINT_BOUNDSÚMappingTypeÚTorchAODTypeÚZeroPointDomain)ÚInt4PackingFormat)Ú_is_float8_type©Ú_log_deprecation_warningc                   ó   € ] tR t^(tRtRtR# )ÚFakeQuantizeConfigBasez7
Base class for representing fake quantization config.
© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ún/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/quantization/qat/fake_quantize_config.pyr   r   (   s   † ñó 	r$   r   c                   óP   a € ] tR t^0t o Rt]t]! 4       tRt	Rt
R tV 3R ltRtV tR# )ÚFloat8FakeQuantizeConfigaâ  
Config for float8 fake quantization, targeting :class:`~torchao.quantization.Float8Tensor`.

Args:
   dtype (torch.dtype): the dtype for float8 Tensor
   granularity (FP8Granularity): the granularity for the Tensor, currently either PerRow() or PerTensor()
   hp_value_lb (Optional[float]): the lower bound for high precision floating point value for calculating scale
   hp_value_ub (Optional[float]): the upper bound for high precision floating point value for calculating scale
Nc                ó:  € \        V P                  4      '       g   \        V P                   R24      h\        V P                  \
        4      '       d   \        R4      h\        V P                  4      \        \        39  d   \        RV P                   24      hR# )z7
Verify dtype and granularity are the ones we support.
z is not a float8 dtypez[Please specify the granularity object instead of the class, e.g. PerRow() instead of PerRowz.Expected PerRow or PerTensor granularity, got N)r   ÚdtypeÚ
ValueErrorÚ
isinstanceÚgranularityÚtyper   r   ©Úselfs   &r%   Ú__post_init__Ú&Float8FakeQuantizeConfig.__post_init__A   sŠ   € ô ˜tŸz™z×*Ò*Ü §
¡
˜|Ð+AÐBÓCÐCÜ�d×&Ñ&¬×-Ò-ÜØmóð ô �× Ñ Ó!¬&´)Ð)<Ô<ÜØ@À×AQÑAQÐ@RÐSóð ñ =r$   c                ó~   <€ V ^8„  d   Qh/ S[ P                  ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   # )é   r)   r,   Úhp_value_lbÚhp_value_ub)Útorchr)   r
   r   Úfloat)ÚformatÚ__classdict__s   "€r%   Ú__annotate__Ú%Float8FakeQuantizeConfig.__annotate__0   sE   ø‡ ‚ ñ �;‰;Ñ#ñ ñ  Ñ*ñ ñ ™%•Ñ'ñ ñ ™%•Ñ'ò r$   r   )r   r   r    r!   r"   r	   r)   r   r,   r4   r5   r0   Ú__annotate_func__r#   Ú__classdictcell__©r9   s   @r%   r'   r'   0   s.   ø‡ € ñð $€EÙ"(£(€KØ#'€KØ#'€Kò÷# ƒ r$   r'   c                   ó>   a € ] tR t^Qt o Rt^€t]tR tV 3R lt	Rt
V tR# )ÚInt4WeightFakeQuantizeConfigaÉ  
Config for pint4 weight fake quantization that targets the numerics in the following preshuffled kernel:
    torch.ops.mslk.f8i4bf16_shuffled
    torch.ops.mslk.bf16i4bf16_shuffled
    torch.ops.mslk.bf16i4bf16_rowwise

Currently this only supports float8 input activations. It is expected to be used in conjunction with
:class:`~torchao.quantization.Float8DynamicActivationInt4WeightConfig`. In the future, we may extend
this to support bfloat16 as well.
c                óv   € V P                   \        \        P                  39  d   \	        R \         R24      hR# )zOnly z+ or torch.bfloat16 activation are supportedN)Úactivation_dtyper	   r6   Úbfloat16r*   r.   s   &r%   r0   Ú*Int4WeightFakeQuantizeConfig.__post_init__a   s9   € Ø× Ñ ¬´U·^±^Ð(DÔDÜØœ
�|Ð#NÐOóð ñ Er$   c                óF   <€ V ^8„  d   Qh/ S[ ;R&   S[P                  ;R&   # )r3   Ú
group_sizerB   )Úintr6   r)   )r8   r9   s   "€r%   r:   Ú)Int4WeightFakeQuantizeConfig.__annotate__Q   s#   ø‡ ‚ ñ Ññ ñ —k‘kÑ.ò r$   r   N)r   r   r    r!   r"   rF   r	   rB   r0   r<   r#   r=   r>   s   @r%   r@   r@   Q   s#   ø‡ € ñ	ð €JØ$.Ðò÷! ƒ r$   r@   c                   ó*  a a€ ] tR t^ht oRtRtRtRtRR]P                  ]P                  ]P                  RRR3RRRR/V3R lR llltR	 tV3R
 lR ltV3R lR lt]V3R lR l4       t]V3R lR l4       tV3R lV 3R lltV3R ltRtVtV ;t# )ÚIntxFakeQuantizeConfiga¶  
Config for how to fake quantize weights or activations,
targeting integer dtypes up to torch.int8.

Args:
    dtype: dtype to simulate during fake quantization, e.g. torch.int8.
    granularity: granularity of scales and zero points, e.g. PerGroup(32).
        We also support the following strings:
           1) 'per_token': equivalent to PerToken()
           2) 'per_channel': equivalent to PerAxis(0)
           3) 'per_group': equivalent to PerGroup(group_size), must be combined
               with separate `group_size` kwarg, Alternatively, just set the
               `group_size` kwarg and leave this field empty.
    mapping_type: whether to use symmetric (default) or asymmetric quantization
        Alternatively, set `is_symmetric` (bool) and leave this field empty.
    scale_precision: scale dtype (default torch.fp32)
    zero_point_precision: zero point dtype (default torch.int32)
    zero_point_domain: whether zero point is in integer (default) or float domain
    is_dynamic: whether to use dynamic (default) or static scale and zero points
    range_learning (prototype): whether to learn scale and zero points during training
        (default false), not compatible with `is_dynamic`.

Keyword args:
    group_size: size of each group in per group fake quantization,
        can be set instead of `granularity`
    is_symmetric: whether to use symmetric or asymmetric quantization,
        can be set instead of `mapping_type`

Example usage::

    # Per token asymmetric quantization
    IntxFakeQuantizeConfig(torch.int8, "per_token", is_symmetric=False)
    IntxFakeQuantizeConfig(torch.int8, PerToken(), MappingType.ASYMMETRIC)

    # Per channel symmetric quantization
    IntxFakeQuantizeConfig(torch.int4, "per_channel")
    IntxFakeQuantizeConfig(torch.int4, "per_channel", is_symmetric=True)
    IntxFakeQuantizeConfig(torch.int4, PerAxis(0), MappingType.SYMMETRIC)

    # Per group symmetric quantization
    IntxFakeQuantizeConfig(torch.int4, group_size=32)
    IntxFakeQuantizeConfig(torch.int4, group_size=32, is_symmetric=True)
    IntxFakeQuantizeConfig(torch.int4, "per_group", group_size=32, is_symmetric=True)
    IntxFakeQuantizeConfig(torch.int4, PerGroup(32), MappingType.SYMMETRIC)
TFNrF   Úis_symmetricc                ó  <€ V ^8„  d   QhRS[ S[P                  R3,          RS[ S[S[R3,          RS[S[,          RS[P                  RS[P                  RS[R	S[R
S[RS[S[	,          RS[S[
,          RS[S[,          /# )r3   r)   r   r,   NÚmapping_typeÚscale_precisionÚzero_point_precisionÚzero_point_domainÚ
is_dynamicÚrange_learningÚepsrF   rK   )r   r6   r)   r   Ústrr   r   r   Úboolr7   rG   )r8   r9   s   "€r%   r:   Ú#IntxFakeQuantizeConfig.__annotate__¢   s¬   ø€ ÷ (ñ (á‘U—[‘[ .Ð0Õ1ð(ñ ™;©¨TÐ1Õ2ð(ñ ™{Õ+ð	(ñ
 Ÿ™ð(ñ $Ÿk™kð(ñ +ð(ñ ð(ñ ð(ñ ‘e�_ð(ñ ™S•Mð(ñ ™t•nñ(r$   c
               óL  € Vf   \        R4      hWn        V P                  W*4      V n        V P	                  W;4      V n        W@n        WPn        W`n        Wpn	        W€n
        W�n        \        P                  \        P                  .pVP                  \!        \"        P$                  ! 4       4      4       VP                  \!        \&        P$                  ! 4       4      4       W9  d   \        RV: RV: 24      hV'       d   V'       d   \        R4      hV P)                  4        R # )Nz/Please use ZeroPointDomain.NONE instead of NonezUnsupported dtype 'z', choose from z4`is_dynamic` is not compatible with `range_learning`)r*   r)   Ú_get_granularityr,   Ú_get_mapping_typerM   rN   rO   rP   rQ   rR   rS   r6   Úint8Úuint8ÚextendÚlistr   Úkeysr   r0   )r/   r)   r,   rM   rN   rO   rP   rQ   rR   rS   rF   rK   Ú
all_dtypess   &&&&&&&&&&$$ r%   Ú__init__ÚIntxFakeQuantizeConfig.__init__¢   së   € ð Ò$ÜÐNÓOÐOØŒ
Ø×0Ñ0°ÓIˆÔØ ×2Ñ2°<ÓNˆÔØ.ÔØ$8Ô!Ø!2ÔØ$ŒØ,ÔØŒô —j‘j¤%§+¡+Ð.ˆ
Ø×Ñœ$Ô3×8Ò8Ó:Ó;Ô<Ø×Ñœ$Ô4×9Ò9Ó;Ó<Ô=ØÔ"ÝÛ<AÂ:ÐNóð ÷
 Ÿ.ÜÐSÓTÐTà×ÑÖr$   c                ó   € R# )zS
For deprecation only, can remove after https://github.com/pytorch/ao/issues/2630.
Nr   r.   s   &r%   r0   Ú$IntxFakeQuantizeConfig.__post_init__Ì   s   € ñ 	r$   c                óT   <€ V ^8„  d   QhRS[ S[S[R3,          RS[S[,          RS[/# )r3   r,   NrF   Úreturn)r   r   rT   r   rG   )r8   r9   s   "€r%   r:   rV   Ò   s9   ø€ ÷ :$ñ :$á™;©¨TÐ1Õ2ð:$ñ ™S•Mð:$ñ 
ñ	:$r$   c                ó’  € Ve   VR8w  d   Ve   \        RV,          4      h\        V\        4      '       dh   \        V\        \        \
        34      '       g   \        RV,          4      h\        V\        4      '       d   VP                  ^ 8w  d   \        R4      hV# VR8X  d   \        4       # VR8X  d   \	        ^ R7      # VR8X  d   Vf   \        R4      h\        V4      # \        V\        4      '       d   \        R	V: R
. RO: 24      hVe   \        RV: R\        V4      : 24      hVf   \        R4      h\        V4      # )aI  
Parse the `Granularity` represented in the args.

Granularity can be specified in one of three ways:
    1) `Granularity` object: one of PerToken(), PerAxis(), and PerGroup(group_size)
    2) str: one of 'per_token', 'per_channel', and 'per_group'
    3) None: `group_size` must be set instead, represents per group granularity
Ú	per_groupz,`group_size` conflicts with granularity '%s'z!Granularity '%s' is not supportedz0Only axis=0 is supported for PerAxis granularityÚ	per_tokenÚper_channel)Úaxisz7Granularity was 'per_group' but no `group_size` was setzUnexpected granularity: 'z', must be one of zGranularity 'z' has unexpected type z9At least one of `granularity` or `group_size` must be set)rh   ri   rg   )	r*   r+   r   r   r   r   rj   rT   r-   )r/   r,   rF   s   &&&r%   rX   Ú'IntxFakeQuantizeConfig._get_granularityÒ   sK  € ð Ò"Ø˜{Ô*ØÒ'äØ>ÀÕLóð ô
 �k¤;×/Ò/Ü˜k¬H´g¼xÐ+H×IÒIÜ Ð!DÀ{Õ!RÓSÐSÜ˜+¤w×/Ò/°K×4DÑ4DÈÔ4IÜ Ð!SÓTÐTØÐð ˜+Ô%Ü“:ÐØ˜MÔ)Ü ”?Ð"Ø˜KÔ'ØÒ!Ü ØMóð ô ˜JÓ'Ð'Ü˜¤S×)Ò)ÝãÔ IðKóð ð Ò"Ýã¤ [Õ 1ð3óð ð ÒÜØKóð ô ˜
Ó#Ð#r$   c                óL   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[/# )r3   rM   rK   re   )r   r   rU   )r8   r9   s   "€r%   r:   rV     s2   ø€ ÷ *ñ *á™{Õ+ð*ñ ™t•nð*ñ 
ñ	*r$   c                ó.  € Ve   Ve   \        R4      hVf   Vf   \        P                  # Ve:   V\        P                  \        P                  39  d   \        RV,          4      hV# Vf   Q hV'       d   \        P                  # \        P                  # )z¼
Parse the `MappingType` represented in the args.

Mapping type can be specified in one of two ways:
    1): `MappingType` object: one of SYMMETRIC or ASYMMETRIC
    2): is_symmetric bool
z1Cannot set both `mapping_type` and `is_symmetric`z!MappingType '%s' is not supported)r*   r   Ú	SYMMETRICÚ
ASYMMETRIC)r/   rM   rK   s   &&&r%   rY   Ú(IntxFakeQuantizeConfig._get_mapping_type  s•   € ð Ò#¨Ò(@ÜÐPÓQÐQð Ò LÒ$8Ü×(Ñ(Ð(ð Ò#Ø¤K×$9Ñ$9¼;×;QÑ;QÐ#RÔRÜ Ð!DÀ|Õ!SÓTÐTØÐð Ò'Ð'Ð'ßÜ×(Ñ(Ð(ä×)Ñ)Ð)r$   c                ó    <€ V ^8„  d   QhRS[ /# ©r3   re   )rG   )r8   r9   s   "€r%   r:   rV   /  s   ø€ ÷ 
ñ 
™Cñ 
r$   c                ó¦   € \        V P                  \        4      '       d   V P                  P                  # \	        RV P                  ,          4      h)zU
If this is per group granularity, return the group size.
Otherwise, throw an error.
z,`group_size` is undefined for %s granularity)r+   r,   r   rF   r*   r.   s   &r%   rF   Ú!IntxFakeQuantizeConfig.group_size.  sD   € ô �d×&Ñ&¬×1Ò1Ø×#Ñ#×.Ñ.Ð.äØ>À×AQÑAQÕQóð r$   c                ó    <€ V ^8„  d   QhRS[ /# rr   )rU   )r8   r9   s   "€r%   r:   rV   <  s   ø€ ÷ :ñ :™dñ :r$   c                ó<   € V P                   \        P                  8H  # )zD
Return True if mapping type is symmetric, else False (asymmetric).
)rM   r   rn   r.   s   &r%   rK   Ú#IntxFakeQuantizeConfig.is_symmetric;  s   € ð
 × Ñ ¤K×$9Ñ$9Ñ9Ð9r$   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r3   ÚnameÚvalue)rT   r   )r8   r9   s   "€r%   r:   rV   B  s   ø€ ÷ 
-ñ 
-¡ð 
-©Cñ 
-r$   c                óì   <€ VR8X  d   \         SV `  R\        V4      4       R# VR8X  d;   V'       d   \        P                  M\        P
                  p\         SV `  RV4       R# \         SV `  W4       R# )z2
Support setting `group_size` and `is_symmetric`.
rF   r,   rK   rM   N)ÚsuperÚ__setattr__r   r   rn   ro   )r/   ry   rz   rM   Ú	__class__s   &&& €r%   r}   Ú"IntxFakeQuantizeConfig.__setattr__B  sY   ø€ ð �<ÔÜ‰GÑ ¬x¸«Ö?Ø�^Ô#ß49œ;×0Ò0¼{×?UÑ?UˆLÜ‰GÑ °Ö=ä‰GÑ Ö,r$   c                óæ   <€ V ^8„  d   Qh/ S[ S[P                  R3,          ;R&   S[;R&   S[;R&   S[P                  ;R&   S[P                  ;R&   S[;R&   S[;R&   S[;R	&   S[S[,          ;R
&   # )r3   r   r)   r,   rM   rN   rO   rP   rQ   rR   rS   )	r   r6   r)   r   r   r   rU   r   r7   )r8   r9   s   "€r%   r:   rV   h   s¦   ø‡ ‚ ñ` ‘—‘˜nÐ,Õ-Ñ-ña ñb Ññc ñd Ññe ñf —[‘[Ñ ñg ñh  Ÿ+™+Ñ%ñi ñj 'Ñ&ñk ñl Ññm ñn Ñ ño ñp 
‘%�Ñòq r$   )	r)   rS   r,   rQ   rM   rR   rN   rP   rO   )r   r   r    r!   r"   rQ   rR   rS   r6   Úfloat32Úint32r   ÚINTr`   r0   rX   rY   ÚpropertyrF   rK   r}   r<   r#   r=   Ú__classcell__)r~   r9   s   @@r%   rJ   rJ   h   s¸   ù‡ € ñ,ðh €JØ €NØ€Cð
 6:Ø.2Ø',§}¡}Ø,1¯K©KØ-<×-@Ñ-@ØØ$Ø#ñ(ð %)ð(ð (,÷(ó (òT÷:$ð :$÷x*ð *ð@ ÷
ó ð
ð ÷:ó ð:÷
-ó 
-÷u … r$   rJ   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚFakeQuantizeConfigiP  z\
(Deprecated) Please use :class:`~torchao.quantization.qat.IntxFakeQuantizeConfig` instead.
c                ó   € \        V 4       R # )Nr   r.   s   &r%   r0   Ú FakeQuantizeConfig.__post_init__U  s
   € Ü  Ö&r$   r   N)r   r   r    r!   r"   r0   r#   r=   r>   s   @r%   r‡   r‡   P  s   ø‡ € ñ÷'ð 'r$   r‡   c                ó~   € V ^8„  d   QhR\         R\        \        \        ,          \        \        ,          3,          /# )r3   Úbase_configre   )r   r   r   r   )r8   s   "r%   r:   r:   Y  s6   € ÷ P'ñ P'ÜðP'ä
Œ8Ô*Õ+¬XÔ6LÕ-MÐMÕNñP'r$   c                óê  € ^ RI HpHp ^ RIHpHp ^ RIHpHpH	pH
pHp	 \        W4      '       d’   Rp
V P                  ^8X  dh   \        P                  \        P                   .pV P"                  V9  d   \%        RV 24      h\'        V P(                  \*        P,                  R7      pW¬3# \%        R\/        V 4       24      h\        W4      '       dˆ   V P                  ^8w  d   \%        R\/        V 4       R	24      h\1        V P2                  4      w  rÞ\5        V P6                  VV P8                  V P:                  R
7      p
\5        V P<                  VR7      pW¬3# \        W4      '       d.   \5        \>        \A        4       R7      p
\'        ^€\>        R7      pW¬3# \        W4      '       d8   V! V PB                  RRR7      p
V! V PB                  RV PD                  R7      pW¬3# \        W4      '       dl   V! V P6                  V PF                  V PH                  V PJ                  R7      p
V! V P<                  V PF                  V PH                  V PJ                  R7      pW¬3# \        W4      '       Ed   V P                  ^8¼  g   Q R4       hV PL                  R8X  g   Q R4       hV P<                  \*        PN                  8w  g   Q R4       hV PP                  \R        PT                  8X  g   Q R4       hV PV                  \R        PX                  8X  g   Q R4       hV PZ                  e   Q R4       h\]        \*        P^                  RRV PZ                  R7      p
\]        V P<                  V P`                  V PV                  V PZ                  R7      pW¬3# \        W	4      '       dÎ   V P                  ^8¼  g   Q R4       hV PL                  R8X  g   Q R4       hV Pb                  \R        PX                  8X  g   Q R4       hV P<                  \*        PN                  8w  g   Q R4       hV Pd                  e   Q R4       hRp
\]        V P<                  V P2                  V Pb                  V Pd                  R7      pW¬3# \%        RV ,          4      h)a  
Given a base post-training quantization (PTQ) config, infer the corresponding
`FakeQuantizeConfigBase`s for both the activations and the weights.
This is called during the prepare phase of QAT.

Return a 2-tuple of (activation_config, weight_config) for fake quantization.
)Ú!MXDynamicActivationMXWeightConfigÚ'NVFP4DynamicActivationNVFP4WeightConfig)ÚMXFakeQuantizeConfigÚNVFP4FakeQuantizeConfig)Ú)Float8DynamicActivationFloat8WeightConfigÚ'Float8DynamicActivationInt4WeightConfigÚInt4WeightOnlyConfigÚ%Int8DynamicActivationIntxWeightConfigÚIntxWeightOnlyConfigNzPacking format must be one of )rF   rB   zUnknown version on base config zOnly version 2 of z is supported)r)   r,   r4   r5   )r)   r,   F)Úuse_per_tensor_scaleÚuse_swizzled_scalesÚuse_triton_kernelT)r)   Ú
block_sizeÚscaling_modeÚkernel_preferencezOnly version 2+ is supportedÚunpacked_to_int8z"Only unpacked_to_int8 is supportedzOnly int2+ is supportedz/Only asymmetric activation mapping is supportedz*Only symmetric weight mapping is supportedz.Specifying weight_scale_dtype is not supportedrh   )rK   rN   )r)   r,   rM   rN   z#Only symmetric mapping is supportedz'Specifying scale_dtype is not supportedzUnexpected base config: %s)3Útorchao.prototype.mx_formatsr�   rŽ   Útorchao.prototype.qatr�   r�   Útorchao.quantizationr‘   r’   r“   r”   r•   r+   Úversionr   ÚPLAINÚPRESHUFFLEDÚint4_packing_formatr*   r@   rF   r6   rC   r-   r   r,   r'   rB   Úactivation_value_lbÚactivation_value_ubÚweight_dtyper	   r   Úuse_dynamic_per_tensor_scaler˜   r™   rš   r›   Úintx_packing_formatÚint1Úact_mapping_typer   ro   Úweight_mapping_typern   Úweight_scale_dtyperJ   rZ   Úweight_granularityrM   Úscale_dtype)r‹   r�   rŽ   r�   r�   r‘   r’   r“   r”   r•   Ú
act_configÚsupported_packing_formatsÚweight_configÚact_granularityr­   s   &              r%   Ú_infer_fake_quantize_configsr³   Y  s‡  € ÷÷÷õ ô �+×4Ò4Øˆ
Ø×Ñ !Ô#ä!×'Ñ'Ü!×-Ñ-ð)Ð%ð ×.Ñ.Ð6OÔOÜ Ø4Ð5NÐ4OÐPóð ô 9Ø&×1Ñ1Ü!&§¡ôˆMðR Ð&Ð&ôI Ð>¼tÀKÓ?PÐ>QÐRÓSÐSÜ	�K×	KÒ	KØ×Ñ !Ô#ÜÐ1´$°{Ó2CÐ1DÀMÐRÓSÐSÜ0FØ×#Ñ#ó1
Ñ-ˆô .Ø×.Ñ.Ø'Ø#×7Ñ7Ø#×7Ñ7ô	
ˆ
ô 1Ø×*Ñ*Ø*ô
ˆðn Ð&Ð&ôg 
�K×	IÒ	IÜ-ÜÜ›ô
ˆ
ô 5ØÜ'ô
ˆð\ Ð&Ð&ôU 
�K×	IÒ	IÙ,Ø!,×!IÑ!IØ %Ø#ô
ˆ
ñ
 0Ø!,×!IÑ!IØ $Ø)×;Ñ;ô
ˆðH Ð&Ð&ô 
�K×	CÒ	CÙ)Ø×.Ñ.Ø"×-Ñ-Ø$×1Ñ1Ø)×;Ñ;ô	
ˆ
ñ -Ø×*Ñ*Ø"×-Ñ-Ø$×1Ñ1Ø)×;Ñ;ô	
ˆðp Ð&Ð&ôe 
�K×	GÓ	GØ×"Ñ" aÔ'ÐGÐ)GÓGÐ'Ø×.Ñ.Ð2DÔDð 	
Ø0ó	
ÐDð ×'Ñ'¬5¯:©:Ô5ÐPÐ7PÓPÐ5Ø×+Ñ+¬{×/EÑ/EÔEð 	
Ø=ó	
ÐEð ×.Ñ.´+×2GÑ2GÔGð 	
Ø8ó	
ÐGð ×-Ñ-Ò5ð 	
Ø<ó	
Ð5ô ,Ü�J‰JØØØ'×:Ñ:ô	
ˆ
ô /Ø×*Ñ*Ø#×6Ñ6Ø$×8Ñ8Ø'×:Ñ:ô	
ˆð8 Ð&Ð&ô- 
�K×	6Ò	6Ø×"Ñ" aÔ'ÐGÐ)GÓGÐ'Ø×.Ñ.Ð2DÔDð 	
Ø0ó	
ÐDð ×'Ñ'¬;×+@Ñ+@Ô@ð 	
Ø1ó	
Ð@ð ×'Ñ'¬5¯:©:Ô5ÐPÐ7PÓPÐ5Ø×&Ñ&Ò.ð 	
Ø5ó	
Ð.ð ˆ
Ü.Ø×*Ñ*Ø#×/Ñ/Ø$×1Ñ1Ø'×3Ñ3ô	
ˆð Ð&Ð&ô Ð5¸ÕCÓDÐDr$   )*ÚabcÚdataclassesr   Útypingr   r   r   r   r6   Útorchao.core.configr   Útorchao.float8.configr	   Útorchao.float8.inferencer
   r   Ú torchao.quantization.granularityr   r   r   r   r   r   Ú%torchao.quantization.quant_primitivesr   r   r   r   r   Ú(torchao.quantization.quantize_.workflowsr   Útorchao.utilsr   Úutilsr   ÚABCr   r'   r@   rJ   r‡   r³   r   r$   r%   Ú<module>rÀ      s½   ðó Ý !ß .Ó .ã å ,Ý ,÷÷÷ ÷õ õ GÝ )å +ô	˜SŸW™Wô 	ð ôÐ5ó ó ðð@ ôÐ#9ó ó ðð, ôc-Ð3ó c-ó ðc-ôN'Ð/ô '÷P'r$   