+
    "Ý³jµ3  ã                   ó  € R t ^ RIHt ^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
Ht ^ RIHtHtHt ^ RIHt ]P$                  P&                   ! R R	]P(                  P*                  4      4       t ! R
 R]P.                  P0                  4      tR# )zD
A simple module swap UX for a float8 version of `torch.nn.Linear`.
)ÚOptionalN)ÚFloat8LinearConfigÚScalingType)Útensor_already_casted_to_fp8)Úget_maybe_axiswise_dimÚhp_tensor_to_float8_dynamic)ÚGemmInputRoleÚLinearMMConfigÚScaledMMConfig)Ú!WeightWithDynamicFloat8CastTensorc                   óP   a € ] tR t^t o Rt]V 3R lR l4       t]R 4       tRtV t	R# )Úmatmul_with_hp_or_float8_argszý
Like torch.matmul, but with the arguments in either high precision or float8.
* if the arguments are in high precision, they are cast to float8 according
  to the specified config
* if the arguments are in float8, we assume the cast honored the config
c                óZ   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[RS[/# )é   Úinput_hpÚweight_hp_tÚlinear_mm_configÚconfig)ÚtorchÚTensorr	   r   )ÚformatÚ__classdict__s   "€Ú]/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torchao/float8/float8_linear.pyÚ__annotate__Ú*matmul_with_hp_or_float8_args.__annotate__&   s;   ø€ ÷ 5ñ 5á—,‘,ð5ñ —\‘\ð5ñ )ð	5ñ
 #ñ5ó    c                óÈ  € V P                  W4       W0n        W@n        Tp\        V4      '       d   TpM›VP                  P
                  \        P                  J d   TpMp\        VVP                  P                  V\        P                  VP                  P                  \        RVP                  P                  4      VP                  R7      p\        V4      '       d   TpM›VP                  P
                  \        P                  J d   TpMp\        VVP                  P                  V\        P                   VP                  P                  \        ^ VP                  P                  4      VP                  R7      pVP"                  pVP%                  RVR,          4      p	\&        P(                  ! W—4      p
V
P$                  ! . VRR OV
P"                  R,          N5!  p
V
# )é   ©Úgemm_input_roleÚscaling_granularityÚaxiswise_dimÚround_scales_to_power_of_2Néÿÿÿÿ)Úsave_for_backwardr   r   r   Úcast_config_inputÚscaling_typer   ÚDISABLEDr   Útarget_dtyper   ÚINPUTr    r   r"   Úcast_config_weightÚWEIGHTÚshapeÚreshaper   Úmm)Úctxr   r   r   r   ÚcÚinput_maybe_fp8Úweight_maybe_fp8_tÚ
orig_shapeÚinput_maybe_fp8_reshapedÚres_bitss   &&&&&      r   ÚforwardÚ%matmul_with_hp_or_float8_args.forward%   sš  € ð 	×Ñ˜hÔ4Ø/ÔØŒ
àˆä'¨×1Ò1Ø&‰OØ× Ñ ×-Ñ-´×1EÑ1EÓEØ&‰Oä9ØØ×#Ñ#×0Ñ0Ø Ü -× 3Ñ 3Ø$%×$7Ñ$7×$KÑ$KÜ3Ø˜×+Ñ+×?Ñ?óð ,-×+GÑ+Gô
ˆOô (¨×4Ò4Ø!,ÑØ×!Ñ!×.Ñ.´+×2FÑ2FÓFØ!,Ñä!<ØØ×$Ñ$×1Ñ1Ø Ü -× 4Ñ 4Ø$%×$8Ñ$8×$LÑ$LÜ3Ø�q×+Ñ+×?Ñ?óð ,-×+GÑ+Gô
"Ðð %×*Ñ*ˆ
Ø#2×#:Ñ#:¸2¸zÈ"½~Ó#NÐ Ü—8’8Ð4ÓIˆØ×#Ò#ÐI Z°° _ÐI°h·n±nÀRÕ6HÓIˆØˆr   c                ó¤  € V P                   w  r#V P                  pVP                  pVP                  RVR,          4      p\	        V4      '       d   TpM¥VP
                  P                  \        P                  J d   TpMz\        VVP
                  P                  V P                  \        P                  VP
                  P                  \        RVP
                  P                  4      VP                   R7      p\	        V4      '       d   TpM¥VP"                  P                  \        P                  J d   TpMz\        VVP"                  P                  V P                  \        P$                  VP"                  P                  \        RVP"                  P                  4      VP                   R7      p\&        P(                  ! VVP+                  4       4      p	V	P                  ! . VRR OV	P                  R,          N5!  p	VP                  p
VP                  RV
R,          4      p\	        V4      '       d   TpM¥VP,                  P                  \        P                  J d   TpMz\        VVP,                  P                  V P                  \        P                  VP,                  P                  \        ^ VP,                  P                  4      VP                   R7      p\	        V4      '       d   TpM¥VP.                  P                  \        P                  J d   TpMz\        VVP.                  P                  V P                  \        P0                  VP.                  P                  \        ^ VP.                  P                  4      VP                   R7      p\&        P(                  ! VP+                  4       V4      pRpWžP+                  4       .VO5# )r   r   Nr#   )NN)Úsaved_tensorsr   r,   r-   r   Úcast_config_grad_outputr&   r   r'   r   r(   r   r   ÚGRAD_OUTPUTr    r   r"   Ú!cast_config_weight_for_grad_inputr+   r   r.   ÚtÚ'cast_config_grad_output_for_grad_weightÚ!cast_config_input_for_grad_weightr)   )r/   Úgrad_outputr   r   r0   Úgrad_output_orig_shapeÚgrad_output_reshapedÚ#grad_output_reshaped_maybe_fp8_dim0Úweight_t_maybe_fp8_dim0Ú
grad_inputÚinput_hp_orig_shapeÚinput_hp_reshapedÚ#grad_output_reshaped_maybe_fp8_dim1Úinput_reshaped_maybe_fp8_dim1Úgrad_weightÚempty_gradss   &&              r   ÚbackwardÚ&matmul_with_hp_or_float8_args.backward]   sO  € à #× 1Ñ 1ÑˆØ�J‰Jˆð "-×!2Ñ!2ÐØ*×2Ñ2°2Ð7MÈbÕ7QÓRÐô (Ð(<×=Ò=à2FÑ/Ø×&Ñ&×3Ñ3´{×7KÑ7KÓKØ2FÑ/ä2MØ$Ø×)Ñ)×6Ñ6Ø×$Ñ$Ü -× 9Ñ 9Ø$%×$=Ñ$=×$QÑ$QÜ3Ø˜×1Ñ1×EÑEóð ,-×+GÑ+Gô
3Ð/ô (¨×4Ò4à&1Ñ#Ø×0Ñ0×=Ñ=Ä×AUÑAUÓUØ&1Ñ#ä&AØØ×3Ñ3×@Ñ@Ø×$Ñ$Ü -× 4Ñ 4Ø$%×$GÑ$G×$[Ñ$[Ü3Ø˜×;Ñ;×OÑOóð ,-×+GÑ+Gô
'Ð#ô —X’XØ/Ø#×%Ñ%Ó'ó
ˆ
ð  ×'Ò'ð 
Ø# C RÐ(ð
Ø*4×*:Ñ*:¸2Õ*>ó
ˆ
ð 'Ÿn™nÐØ$×,Ñ,¨RÐ1DÀRÕ1HÓIÐô (Ð(<×=Ò=à2FÑ/à×5Ñ5×BÑBÜ×#Ñ#ó$ð 3GÑ/ä2MØ$Ø×9Ñ9×FÑFØ×$Ñ$Ü -× 9Ñ 9Ø$%×$MÑ$M×$aÑ$aÜ3Ø�q×@Ñ@×TÑTóð ,-×+GÑ+Gô
3Ð/ô (Ð(9×:Ò:à,=Ñ)Ø×0Ñ0×=Ñ=Ä×AUÑAUÓUØ,=Ñ)ä,GØ!Ø×3Ñ3×@Ñ@Ø×$Ñ$Ü -× 3Ñ 3Ø$%×$GÑ$G×$[Ñ$[Ü3Ø�q×:Ñ:×NÑNóð ,-×+GÑ+Gô
-Ð)ô —h’hØ/×1Ñ1Ó3Ø)ó
ˆð
 !ˆàŸ=™=›?Ð8¨[Ñ8Ð8r   © N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústaticmethodr6   rL   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      s5   ø‡ € ñð ÷5ó ð5ðn ñn9ó ön9r   r   c                   ót   a a€ ] tR t^Ït oRtV 3R ltV3R lR ltV 3R lt]R	V3R lR ll4       t	Rt
VtV ;t# )
ÚFloat8Linearzì
Note: this is **not** a public API and is only intended to be used
inside of this repository. Please file an issue if you would benefit
from this being a public API.

A wrapper around a `torch.nn.Linear` module which does fp8 compute.
c           
     óÌ  <€ VP                  R4      p\        SV `  ! V/ VB  VP                  P                  V n        VP                  P                  V n        VP                  P                  V n	        W0n
        \        \        VP                  V P                  P                  P                  RV P                  P                   4      \        VP                  V P                  P"                  P                  RV P                  P                   4      \        VP                  V P                  P$                  P                  RV P                  P                   4      4      V n        R# )z^
Additional arguments on top of `torch.nn.Linear`'s arguments:
* `config`: Float8LinearConfig
r   FN)ÚpopÚsuperÚ__init__r%   r&   Úscaling_type_inputr*   Úscaling_type_weightr:   Úscaling_type_grad_outputr   r	   r
   ÚemulateÚgemm_config_outputÚuse_fast_accumÚpad_inner_dimÚgemm_config_grad_inputÚgemm_config_grad_weightr   )ÚselfÚargsÚkwargsr   Ú	__class__s   &*, €r   r\   ÚFloat8Linear.__init__Ø   s  ø€ ð —‘˜HÓ%ˆÜ‰Ò˜$Ð) &Ò)ð #)×":Ñ":×"GÑ"GˆÔØ#)×#<Ñ#<×#IÑ#IˆÔ Ø(.×(FÑ(F×(SÑ(SˆÔ%ØŒä .äØ—‘Ø—‘×.Ñ.×=Ñ=ØØ—‘×)Ñ)ó	ô Ø—‘Ø—‘×2Ñ2×AÑAØØ—‘×)Ñ)ó	ô Ø—‘Ø—‘×3Ñ3×BÑBØØ—‘×)Ñ)ó	ó!!
ˆÖr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   ÚinputÚreturn)r   r   )r   r   s   "€r   r   ÚFloat8Linear.__annotate__ÿ   s#   ø€ ÷ ñ ™UŸ\™\ð ©e¯l©lñ r   c                ó‚  € \         P                  ! 4       '       d'   \         P                  ! 4       pVP                  V4      p\        P                  VV P                  P                  4       V P                  V P                  4      pV P                  e,   W0P                  P                  VP                  4      ,           pV# ©N)r   Úis_autocast_enabledÚget_autocast_gpu_dtypeÚtor   ÚapplyÚweightr=   r   r   ÚbiasÚdtype)rf   rl   Úautocast_dtypeÚoutputs   &&  r   r6   ÚFloat8Linear.forwardÿ   s‹   € ô ×$Ò$×&Ò&ô #×9Ò9Ó;ˆNØ—H‘H˜^Ó,ˆEä.×4Ñ4ØØ�K‰K�M‰M‹OØ×!Ñ!Ø�K‰Kó	
ˆð �9‰9Ò ØŸi™iŸl™l¨6¯<©<Ó8Õ8ˆFØˆr   c                óÊ  <€ V P                   pR VP                  P                  4        2pRVP                  P                  4        2pRVP                  P                  4        2pW#V.pVP
                  VP                  8w  d-   VP                  RVP
                  P                  4        24       VP                  VP                  8w  d-   VP                  RVP                  P                  4        24       VP                  VP                  8w  d-   VP                  RVP                  P                  4        24       RP                  V4      p\        SV `-  4        RV R2pV# )	zi:zw:zgo:zi_gw:zw_gi:zgo_gw:Ú,z, cast_configs=Ú")r   r%   Ú	short_strr*   r:   r?   Úappendr<   r>   Újoinr[   Ú
extra_repr)	rf   r0   ÚciÚcwÚcgoÚpartsÚcast_config_strÚsri   s	   &       €r   r�   ÚFloat8Linear.extra_repr  sA  ø€ Ø�K‰KˆØ�!×%Ñ%×/Ñ/Ó1Ð2Ð3ˆØ�!×&Ñ&×0Ñ0Ó2Ð3Ð4ˆØ�A×-Ñ-×7Ñ7Ó9Ð:Ð;ˆØ˜�ˆØ×.Ñ.°!×2EÑ2EÔEØ�L‰L˜5 ×!DÑ!D×!NÑ!NÓ!PÐ QÐRÔSØ×.Ñ.°!×2FÑ2FÔFØ�L‰L˜5 ×!DÑ!D×!NÑ!NÓ!PÐ QÐRÔSØ×4Ñ4¸×8QÑ8QÔQØ�L‰LØ˜×BÑB×LÑLÓNÐOÐPôð Ÿ(™( 5›/ˆÜ‰wÑ!Ó#Ð$ O°OÐ3DÀAÐFˆØˆr   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r   r   )r   r   )r   r   s   "€r   r   rn   &  s   ø€ ÷ )ñ )ñ Ñ+Õ,ñ)r   c           	     ó€  € Vf   \        4       p\        P                  ! R4      ;_uu_ 4        V ! VP                  VP                  RVR7      pRRR4       VP
                  Xn        VP                  Vn        VP                  '       d¢   VP                  P                  \        P                  J g   Q h\        P                  P                  \        VP
                  VP                  VP                   P                  P"                  4      VP
                  P$                  R7      Vn        V#   + '       g   i     Lç; i)zÈ
Create an nn.Linear with fp8 compute from a regular nn.Linear

Args:
    mod (torch.nn.Linear): nn.Linear to convert
    config (Optional[Float8LinearConfig]): configuration for conversion to float8
NÚmetaF)rv   r   )Úrequires_grad)r   r   ÚdeviceÚin_featuresÚout_featuresru   rv   Úenable_fsdp_float8_all_gatherr*   r&   r   ÚDYNAMICÚnnÚ	Parameterr   r   r   r(   rŒ   )ÚclsÚmodr   Únew_mods   &&& r   Ú
from_floatÚFloat8Linear.from_float%  sð   € ð Š>Ü'Ó)ˆFÜ�\Š\˜&×!Õ!ÙØ—‘Ø× Ñ ØØô	ˆG÷ "ð Ÿ™ˆŒØ—x‘xˆŒð ×/×/Ð/Ø×,Ñ,×9Ñ9¼[×=PÑ=PÓPÐPÐPÜ"ŸX™X×/Ñ/Ü1Ø—N‘NØ×,Ñ,Ø—N‘N×5Ñ5×BÑBóð
 &Ÿn™n×:Ñ:ð 0ó ˆGŒNð ˆ÷7 "×!ús   ­!D-Ä-D=	)r   r   r_   r]   r^   rp   )rO   rP   rQ   rR   rS   r\   r6   r�   Úclassmethodr—   rU   rV   Ú__classcell__)ri   r   s   @@r   rX   rX   Ï   s=   ù‡ € ñõ%
÷Nð õ(ð$ ÷)ñ )ó ÷)ð )r   rX   )rS   Útypingr   r   Útorchao.float8.configr   r   Ú torchao.float8.distributed_utilsr   Ú#torchao.float8.float8_scaling_utilsr   r   Ú%torchao.float8.float8_training_tensorr   r	   r
   Útorchao.float8.fsdp_utilsr   Ú_dynamoÚallow_in_graphÚautogradÚFunctionr   r’   ÚLinearrX   rN   r   r   Ú<module>r¦      sv   ðñõ ã ç AÝ I÷÷ñ õ
 Hð ‡�×Ñôo9 E§N¡N×$;Ñ$;ó o9ó ðo9ôd@�5—8‘8—?‘?ö @r   