§
     ’Þjö6  ã                   ó  — d Z ddlZddlmZ g d¢ZddddœZej        ej        fZd	a	d	a
dad
ad
adad
ad
adaddddœZd„ Zd„ Zd„ Zd!d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd"d„Zd!d„Z  G d„ d ¦  «        Z! e!¦   «         Z"dS )#a¼  FP8 math kernels of FP8 checkpoints (Quanto qfloat8 weights and shared.qtypes.scaled_fp8 weights), chosen in the configuration
(fp8_kernels):
- pytorch: each weight is dequantized whole (copies of its size in 16 bits) before a 16-bit matmul;
- triton: weight-only Triton matmul (fp8_w8a16_triton): FP8 weight tiles decoded in registers, no copy of the weight, same values as
  pytorch up to the order of the sums;
- cuda: FP8 tensor cores (torch._scaled_mm, cuBLASLt, RTX 40xx and later): the activations are also quantized to FP8 (one scale per
  call), fastest, lower precision;
- auto: the fastest available (cuda, then triton, then pytorch), as WanGP's FP8 checkpoints used FP8 tensor cores before.
Block-scaled FP8 weights (shared.qtypes.block_scaled: one scale per 128 x 128 block, or per output channel and 128-element block of K)
run on WGPKernels' FP8 GEMMs with E4M3 activations (quantized per row and 128 columns, approximate) under the cuda choice, else with
16-bit activations (exact, the weights decoded in registers): WGPKernels' W8A16 kernels when its library has them, else the Triton block
kernel (shared.kernels.fp8_block_triton), on every GPU including those without FP8 tensor cores; without a precise kernel, the E4M3
kernels when the precision setting allows approximate kernels; the pytorch choice dequantizes them per call.
A choice this GPU cannot run gives way to the next one (cuda -> triton -> pytorch), and the kernels in use are printed.é    N)Úis_fake))zAuto (fastest available)Úauto)zPyTorch (slowest, precise)Úpytorch)zTriton (fast, precise)Útriton)z!CUDA FP8 (fastest, least precise)ÚcudaÚPyTorchÚTritonzCUDA FP8 Tensor Cores)r   r   r   r   Fr   zWGPKernels (E4M3 activations)zWGPKernels (16-bit activations)zTriton (16-bit activations))Úwgp_w8a8Úwgp_a16Ú
triton_a16c                 óú   — d}| dk    r@ddl m} |                     ¦   «          |                     t          j        ¦  «        rdS d\  } }| dk    r*	 ddlm} d|fS # t          $ r}d	d
|› d�fcY d}~S d}~ww xY wd	|fS )zY(kernels this GPU runs for a pytorch / triton / cuda selection, reason when they differ).Nr   r   ©Ú
scaled_fp8)r   N)r   z.FP8 tensor cores need an RTX 40xx or later GPUr   ©Úfp8_w8a16_tritonr   zTriton is unavailable (ú))	Úshared.qtypesr   Ú_init_scaled_mm_supportÚ_scaled_mm_availableÚtorchÚfloat8_e4m3fnÚshared.kernelsr   ÚImportError)Ú	selectionÚreasonr   r   Úexcs        úBC:\Users\johnn\OneDrive\Documents\AI\shared\kernels\fp8_backend.pyÚ
_availabler   #   sÛ   € à€FØ�FÒÐØ,Ð,Ð,Ð,Ð,Ð,Ø×*Ò*Ñ,Ô,Ð,Ø×*Ò*­5Ô+>Ñ?Ô?ð 	 Ø�<ØVÑˆ	�6Ø�HÒÐð	?Ø7Ð7Ð7Ð7Ð7Ð7Ø˜VÐ#Ð#øÝð 	?ð 	?ð 	?ØÐ>¸Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øøøøð	?øøøà�fÐÐs   Á	A Á
A6Á$A1Á+A6Á1A6c                 óŒ   — | d„ t           D ¦   «         vrt          d| ›�¦  «        ‚t          | dk    rdn| ¦  «        \  }}||f|fS )zy((kernels of the Quanto qfloat8 weights, kernels of the scaled FP8 weights), reason when they differ from the selection).c                 ó   — h | ]\  }}|’ŒS © r!   )Ú.0Ú_Úvalues      r   ú	<setcomp>z"resolve_backend.<locals>.<setcomp>7   s   € Ð7Ð7Ð7¡8 1 e˜Ð7Ð7Ð7ó    zUnknown FP8 kernel backend: r   r   )ÚCHOICESÚ
ValueErrorr   )r   Úresolvedr   s      r   Úresolve_backendr*   5   sc   € àÐ7Ð7­wÐ7Ñ7Ô7Ð7Ð7ÝÐE¸	ÐEÐEÑFÔFÐFÝ!¨I¸Ò,?Ð,? & &ÀYÑOÔOÑ€HˆfØ�hÐ Ð'Ð'r&   c                  óh  — ddl } 	 |                      d¦  «        }|                     ¦   «                              ¦   «         sdS |j        €|                     ¦   «          t          j        ¦   «         5  |                     ¦   «         rdn|cddd¦  «         S # 1 swxY w Y   dS # t          $ r Y dS w xY w)z^wgpkernels.fp8 when installed with its library and its selftest passes on this GPU, else None.r   Nzwgpkernels.fp8)
Ú	importlibÚimport_moduleÚdefault_library_pathÚis_fileÚ_libÚload_libraryr   Úinference_modeÚselftestÚ	Exception)r,   Úmodules     r   Ú_probe_wgp_fp8r6   =   s  € àÐÐÐð	Ø×(Ò(Ð)9Ñ:Ô:ˆØ×*Ò*Ñ,Ô,×4Ò4Ñ6Ô6ð 	Ø�4ØŒ;ÐØ×ÒÑ!Ô!Ð!ÝÔ!Ñ#Ô#ð 	9ð 	9Ø!Ÿ?š?Ñ,Ô,Ð8�4�4°&ð	9ð 	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øåð ð ð Øˆtˆtðøøøs;   †;B# Á.B# Á1BÂ	B# ÂBÂB# ÂBÂB# Â#
B1Â0B1c           	      óˆ  — |€t          | ¦  «        n|\  \  }}}||| ft          t          t          fk    r
t          dz  a||| caaa|dk    rt          ¦   «         nd at          d uo t          t          dd„ ¦  «        ¦   «         a|dk    ot          ¦   «         a
||fdk    rt          ¦   «          ddlm} |                     t          ¦  «         ||k    rt           |         nt           |         › dt           |         › d	�}t#          ¦   «         }t%          d
|› |rdt&          |         z   nd› d| › |rd|z   nd› d�¦  «         ||fS )Né   r   Úa16_supportedc                  ó   — dS )NFr!   r!   r&   r   ú<lambda>zconfigure.<locals>.<lambda>S   s   € ÐSX€ r&   )r   r   r   )Úoffloadú, z for scaled FP8 checkpointsz[FP8] Backend: z; block-scaled weights: Ú z (setting: z; z).)r*   ÚbackendÚscaled_backendÚ
_selectionÚrevisionr6   Ú_wgp_fp8ÚgetattrÚ_wgp_a16Ú_probe_triton_blockÚ_triton_blockÚ_register_opsÚmmgpr<   Úregister_row_projectionÚ_FP8_ROW_PROJECTIONÚ_LABELSÚ_block_routeÚprintÚBLOCK_LABELS)r   r)   ÚquantoÚscaledr   r<   ÚkernelsÚblocks           r   Ú	configurerT   L   sÅ  € à=EÐ=M�¨yÑ9Ô9Ð9ÐS[ÑÑ€VˆV�fØ�˜	Ð"¥wµÅ
Ð&KÒKÐKÝ�A‰ˆØ*0°&¸)Ð'€Gˆ^˜ZØ#)¨YÒ#6Ð#6�~ÑÔÐ¸D€HÝ˜tÐ#Ð[Ð(Y­µ¸/È=È=Ñ(YÔ(YÑ([Ô([€HØ˜iÒ'ÐAÕ,?Ñ,AÔ,A€MØ�ÐÐ1Ò1Ð1Ý‰ŒˆØÐÐÐÐÐØ×#Ò#Õ$7Ñ8Ô8Ð8Ø!'¨6Ò!1Ð!1�g�fŒoˆo½'À&¼/Ð7yÐ7yÍWÐU[Ì_Ð7yÐ7yÐ7y€GÝ‰NŒN€EÝ	ð  b˜Gð  bÐY^Ð%fÐ%?Å,ÈuÔBUÑ%UÐ%UÐdfð  bð  bÐs|ð  bð  PVð  ^ð  Cð  FLñ  Lð  Lð  \^ð  bð  bð  bñ  cô  cð  cØ�6ˆ>Ðr&   c                  ó6   — 	 ddl m}  dS # t          $ r Y dS w xY w)Nr   ©Úfp8_block_tritonTF)r   rW   r4   rV   s    r   rF   rF   _   s@   € ðØ3Ð3Ð3Ð3Ð3Ð3ØˆtøÝð ð ð Øˆuˆuðøøøs   ‚
 Š
—c                  óÈ   — t           dk    rdS t          �t           dk    st          dk    rdS t          rdS t          rdS ddlm}  t          �|                      ¦   «         rdndS )	a0  Kernels of the block-scaled FP8 weights for the active choice: 'wgp_w8a8' (WGPKernels, E4M3 activations) under the cuda choice,
    else the exact 16-bit-activation kernels 'wgp_a16' (WGPKernels) or 'triton_a16', else 'wgp_w8a8' when approximate kernels are allowed,
    else None (dequantized per call).r   Nr   r
   r   r   r   ©Úkernel_policy)r@   rC   rA   rE   rG   r   rZ   Úallow_approximaterY   s    r   rM   rM   g   s€   € õ ˜Ò"Ð"ØˆtÝÐ¥°6Ò!9Ð!9½ZÈ6Ò=QÐ=QØˆzÝð ØˆyÝð Øˆ|Ø,Ð,Ð,Ð,Ð,Ð,Ý!Ð-°-×2QÒ2QÑ2SÔ2SÐ-ˆ:ˆ:ÐY]Ð]r&   c                 óº   — ddl m} |                     | j        ¦  «        o;| j        d         dz  dk    o'| j        d         dz  dk    o|                      ¦   «         S )Nr   r   é   r8   )r   r   r   ÚdtypeÚshapeÚis_contiguous)ÚweightÚxr   s      r   Ú
_cuda_runsrc   w   s‰   € Ø(Ð(Ð(Ð(Ð(Ð(Ø×*Ò*¨6¬<Ñ8Ô8ð  P¸V¼\È!¼_ÈrÑ=QÐUVÒ=Vð  PÐ[aÔ[gÐhiÔ[jÐmoÑ[oÐstÒ[tð  PÐy÷  zNò  zNñ  zPô  zPð  Pr&   c                 ó  — ddl m} |                     |                     ¦   «         dk    r|                     d¦  «        n||¦  «        \  }}|                     |                      ¦   «         |                     ¦   «         |                     t          j
        ¦  «        |€|nd| j        ¦  «        }|�X|                     |                     |j        ¦  «                             dd¦  «        ¦  «         |�|                     |¦  «         |S )zwFP8 tensor cores: x quantized to FP8 with one scale, the weight scale applied by cuBLASLt (one value) or to the output.r   r   r8   éÿÿÿÿN)r   r   Ú_scaled_mm_weight_scaleÚnumelÚreshapeÚ_scaled_mm_rowsÚ
contiguousÚtÚtor   Úfloat32r^   Úmul_ÚviewÚadd_)rb   ra   ÚscaleÚbiasr   Úscale_bÚoutput_scaleÚouts           r   Ú_cuda_linearrv   |   s  € à(Ð(Ð(Ð(Ð(Ð(Ø&×>Ò>ÐTY×T_ÒT_ÑTaÔTaÐdeÒTeÐTe¸u¿}º}ÈRÑ?PÔ?PÐ?PÐkpÐrxÑyÔyÑ€Gˆ\Ø
×
$Ò
$ Q§\¢\¡^¤^°V·X²X±Z´ZÀÇÂÍEÌMÑAZÔAZÐdpÐdxÐ\`Ð\`ð  Cð  EFô  ELñ  Mô  M€CØÐØ�Š�—’ ¤Ñ+Ô+×0Ò0°°BÑ7Ô7Ñ8Ô8Ð8ØÐØ�HŠH�T‰NŒNˆNØ€Jr&   c                 óJ  — |rXt          || ¦  «        rt          | |||¦  «        S t          s/dat          d|j        › dt          |j        ¦  «        › d�¦  «         ddlm} | 	                    | ||||  
                    | j        d         |j        d         f¦  «        ¦  «        S )NTz8[FP8] CUDA FP8 kernels cannot compute some layers (e.g. r=   z): Triton computes them.r   r   )rc   rv   Ú_cuda_skips_notedrN   r^   Útupler_   r   r   ÚlinearÚ	new_empty)rb   ra   rq   rr   r   r   s         r   Ú_linear_implr|   ˆ   sÜ   € àð LÝ�f˜aÑ Ô ð 	8Ý  6¨5°$Ñ7Ô7Ð7Ý ð 	LØ $ÐÝð  KÈVÌ\ð  Kð  KÕ]bÐciÔcoÑ]pÔ]pð  Kð  Kð  Kñ  Lô  Lð  LØ/Ð/Ð/Ð/Ð/Ð/Ø×"Ò" 1 f¨e°T¸1¿;º;ÈÌÐPQÌ
ÐTZÔT`ÐabÔTcÐGdÑ;eÔ;eÑfÔfÐfr&   c                  ó  — t           rd S t          j                             dd¬¦  «        dt          j        dt          j        dt          j        dt          j        d z  dt
          d	t          j        fd
„¦   «         } | j        d„ ¦   «         }da d S )Nzwan2gp_fp8::linearr!   )Úmutates_argsrb   ra   rq   rr   r   Úreturnc                 ó(   — t          | ||||¦  «        S ©N)r|   ©rb   ra   rq   rr   r   s        r   Ú	linear_opz _register_ops.<locals>.linear_op™   s   € å˜A˜v u¨d°DÑ9Ô9Ð9r&   c                 ó\   — |                       | j        d         |j        d         f¦  «        S )Nr   )r{   r_   r‚   s        r   Úfakez_register_ops.<locals>.fake�   s%   € à�{Š{˜AœG AœJ¨¬°Q¬Ð8Ñ9Ô9Ð9r&   T)Ú_ops_registeredr   ÚlibraryÚ	custom_opÚTensorÚboolÚregister_fake)rƒ   r…   s     r   rH   rH   ”   s²   € åð Øˆå
„]×ÒÐ1ÀÐÑCÔCð:•U”\ð :­5¬<ð :ÅÄð :ÕTYÔT`ÐcgÑTgð :Õosð :Õx}ô  yEð :ð :ð :ñ DÔCð:ð Ôð:ð :ñ Ôð:ð €O€O€Or&   c                 óÒ   — t           j                             ¦   «         st          | ¦  «        r(t           j        j                             | ||||¦  «        S t          | ||||¦  «        S )z¾x (M, K) @ (weight (N, K) float8 * scale (1 or N values, in x's dtype))^T + bias with the selected kernels (FP8 tensor cores
    when cuda, else the Triton weight-only kernel), in x's dtype.)r   ÚcompilerÚis_compilingr   ÚopsÚ
wan2gp_fp8rz   r|   r‚   s        r   Úmatmulr‘   ¤   s`   € õ „~×"Ò"Ñ$Ô$ð I­°©
¬
ð IÝŒyÔ#×*Ò*¨1¨f°e¸TÀ4ÑHÔHÐHÝ˜˜6 5¨$°Ñ5Ô5Ð5r&   c                 ó¤   — | j         r:| j        t          j        t          j        fv r|j         r| j        d         dz  dk    sdS t          ¦   «         S )z²The kernels (a BLOCK_LABELS key) computing a block-scaled FP8 weight for this input (BF16/FP16 CUDA activations, K a multiple of 16),
    or None for the per-call dequantization.re   r]   r   N)Úis_cudar^   r   Úbfloat16Úfloat16r_   rM   )Úinputra   s     r   Ú
block_moder—   ¬   sV   € ð ŒMð ˜eœk­e¬n½e¼mÐ-LÐLÐLÐQWÔQ_ÐLÐdiÔdoÐprÔdsÐvxÑdxÐ|}Òd}Ðd}ØˆtÝ‰>Œ>Ðr&   r
   c                 óz  — |                       d| j        d         ¦  «        }|                     d¦  «        dk    s/|                     d¦  «        dz  s|                     ¦   «         dz  r|                     ¦   «         }|�*|j        |j        k    r|                     |j        ¦  «        }|dk    rddlm} | 	                    ||||¦  «        }nGt          r#t           	                    |||||d	k    ¬
¦  «        nt           	                    ||||¦  «        } |j         g | j        dd…         ¢|j        d         ‘R Ž S )a  input @ (weight E4M3 * scale per 128 x 128 block, or per channel and 128-element block of K).T + bias with the kernels of mode
    (block_mode()): WGPKernels with E4M3 activations ('wgp_w8a8') or 16-bit ones ('wgp_a16'), or the Triton block kernel ('triton_a16').re   r8   r   é   r]   Nr   rV   r   )Úprecise)rh   r_   ÚstrideÚdata_ptrrj   r^   rl   r   rW   rz   rE   rC   )r–   ra   rq   rr   Úmoderb   rW   ru   s           r   Úblock_linearrž   ´   sG  € ð 	�Š�b˜%œ+ bœ/Ñ*Ô*€AØ‡x‚x��|„|�qÒÐ˜AŸHšH Q™KœK¨!™OÐ¨q¯zªz©|¬|¸bÑ/@ÐØ�LŠL‰NŒNˆØÐ˜DœJ¨!¬'Ò1Ð1Ø�wŠw�q”wÑÔˆØˆ|ÒÐØ3Ð3Ð3Ð3Ð3Ð3Ø×%Ò% a¨°¸Ñ=Ô=ˆˆåT\ð  J�h�oŠo˜a ¨°¸dÀiÒ>OˆoÑPÔPÐPÕbj×bqÒbqÐrsÐu{ð  ~Cð  EIñ  cJô  cJˆØˆ3Œ;Ð:˜œ C R CÔ(Ð:¨&¬,°q¬/Ð:Ð:Ð:Ð:r&   c           	      óx  — |j         |j        }}|                      d| j        d         ¦  «        }|j        |j        k    r|                     |j        ¦  «        }|�|j        |j        k    r|nd} t          ||||t          dk    ¦  «        j        g | j        dd…         ¢|j        d         ‘R Ž }|�|€||z   n|S )zŽinput @ weight^T + bias for a Quanto qfloat8 weight with the selected kernels, computed as Quanto does in the dtype of the
    weight's scale.re   Nr   r   )Ú_dataÚ_scalerh   r_   r^   rl   r‘   r?   )r–   ra   rr   Údatarq   rb   Ú
fused_biasru   s           r   rz   rz   Ä   sÊ   € ð ”, ¤ˆ%€DØ�Š�b˜%œ+ bœ/Ñ*Ô*€AØ„w�%”+ÒÐØ�DŠD�”ÑÔˆØÐ)¨d¬j¸E¼KÒ.GÐ.G��ÈT€JØ
G�&��D˜% ­W¸Ò->Ñ
?Ô
?Ô
GÐ
iÈÌÐUXÐVXÐUXÔIYÐ
iÐ[_Ô[eÐfgÔ[hÐ
iÐ
iÐ
i€CØÐ)¨jÐ.@ˆ3�‰:ˆ:ÀcÐIr&   c                   óf   — e Zd Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú_FP8RowProjectionc                 óx  — t          | dd ¦  «        }|�	|j        dvrdS t          |¦  «        s/t          j                             ¦   «         st          | dd ¦  «        �dS | j        }|j        |j        k    oE|j         	                    ¦   «         d|j
        d         fv o| j        d u p| j        j        |j        k    S )NÚweight_qtype)Úqfloat8_e4m3fnÚqfloat8_e4m3fnuzÚqfloat8_e5m2Úscaled_float8_e4m3fnÚscaled_float8_e5m2FÚactivation_qtyper8   r   )rD   Únamer   r   r�   rŽ   Úqweightr^   r¡   rg   r_   rr   )r5   rb   Úqtypera   s       r   Úsupportsz_FP8RowProjection.supportsÑ   sÏ   € å˜ °Ñ5Ô5ˆØˆ=˜EœJð  /Sð  Sð  SØ�5Ý�1‰:Œ:ð 	�œ×4Ò4Ñ6Ô6ð 	½'À&ÐJ\Ð^bÑ:cÔ:cÐ:oØ�5Ø”ˆØ” ¤Ò'ð J¨F¬M×,?Ò,?Ñ,AÔ,AÀaÈÌÐVWÌÐEYÐ,Yð JØ”[ DÐ(ÐH¨F¬KÔ,=ÀÄÒ,Hð	Kr&   c                 óð   — ddl m} | j        }t          ||¦  «        }|rt          nt
          }|j        sd}n+|dk    r%|r|j        st          |j	        |j	        ¦  «        sd}d||j
        |j	        j
        fS )Nr   )ÚScaledFP8WeightTensorr   r   r   Úfp8_rows)Úshared.qtypes.scaled_fp8r³   r¯   Ú
isinstancer@   r?   r“   Ú_force_full_precision_mmrc   r    r^   )r5   r³   ra   rQ   r�   s        r   Úkeyz_FP8RowProjection.keyÜ   s�   € àBÐBÐBÐBÐBÐBØ”ˆÝ˜FÐ$9Ñ:Ô:ˆØ!'Ð4�~ˆ~­WˆØŒ~ð 	ØˆDˆDØ�VŠ^ˆ^ &ˆ^¨VÔ-Lˆ^ÕU_Ð`fÔ`lÐntÔnzÑU{ÔU{ˆ^ØˆDØ˜4 ¤¨v¬|Ô/AÐAÐAr&   c                 óÌ   — ddl m} t                               | ¦  «        \  }}}}|                     |¦  «                             ¦   «         }|dk    rg  |||¦  «        ¢|‘R n|S )Nr   )Ú_quantize_activationr   )rµ   rº   r¥   r¸   rl   rj   )r5   rb   rº   r#   r�   r^   Ú	fp8_dtypes          r   Úpreparez_FP8RowProjection.prepareè   s{   € àAÐAÐAÐAÐAÐAÝ$5×$9Ò$9¸&Ñ$AÔ$AÑ!ˆˆ4�˜	Ø�DŠD�‰KŒK×"Ò"Ñ$Ô$ˆØ?CÀvº~¸~Ð;Ð%Ð% a¨Ñ3Ô3Ð;°UÐ;Ð;Ð;ÐSTÐTr&   c                 ó  — ddl m} | j        }|j        ||…         }|j                             ¦   «         dk    r|j        n!|j                             d¦  «        ||…         }| j        €d n| j        ||…         }t           	                    | ¦  «        d         }	|	dk    �r6|\  }
}}||z
  } |||¦  «        \  }}|dz  rJ| 
                    |dz   dz  dz  |j        d         f¦  «        }|d |…                              |¦  «         |}|€|t          j        k    r|dz  dk    r|nd }t          j        |
|                     ¦   «         ||                     t          j        ¦  «        ||¬¦  «        d d …d |…f         }|�<|                     |                     |¦  «                             dd¦  «        ¦  «         |�|€|                     |¦  «         |S |	d	k    r+t+          |||                     |j        ¦  «        |d
¦  «        S |                     |j        ¦  «        |                     |j        ¦  «                             dd¦  «        z  }||                     ¦   «         z  }|�|                     |¦  «         |S )Nr   )rf   r8   re   r   r]   é   )rr   Ú	out_dtyper   F)rµ   rf   r¯   r    r¡   rg   rh   rr   r¥   r¸   Ú	new_zerosr_   Úcopy_r   rm   Ú
_scaled_mmrk   rl   rn   ro   rp   r‘   r^   )r5   ÚpreparedÚstartÚstoprf   ra   r¢   rq   rr   r�   rb   Úxsr^   ÚcountÚwsrt   Úpaddedr£   ru   Údenses                       r   Úrowsz_FP8RowProjection.rowsï   s†  € àDÐDÐDÐDÐDÐDØ”ˆØŒ|˜E $˜JÔ'ˆØ!'¤×!4Ò!4Ñ!6Ô!6¸!Ò!;Ð!;�”�ÀÄ×AVÒAVÐWYÑAZÔAZÐ[`ÐaeÐ[eÔAfˆØ”{Ð*ˆtˆt°´¸EÀ$¸JÔ0GˆÝ ×$Ò$ VÑ,Ô,¨QÔ/ˆØ�6Š>‰>Ø#‰LˆAˆr�5Ø˜5‘LˆEØ6Ð6°u¸dÑCÔCÑˆB�à�r‰zð ØŸš¨%°"©*¸Ñ);¸bÑ)@À$Ä*ÈQÄ-Ð(PÑQÔQ�Ø�v˜�v”×$Ò$ TÑ*Ô*Ð*Ø�Ø!-Ð!5¸%Å5Ä=Ò:PÐ:PÐUZÐ]_ÑU_ÐcdÒUdÐUd˜˜ÐjnˆJÝÔ" 1 d§f¢f¡h¤h°°B·E²E½%¼-Ñ4HÔ4HÈzÐejÐkÑkÔkÐlmÐlmÐlmÐouÐpuÐouÐluÔvˆCØÐ'Ø—’˜Ÿš¨Ñ/Ô/×4Ò4°Q¸Ñ;Ô;Ñ<Ô<Ð<ØÐ JÐ$6Ø—’˜‘”�ØˆJØ�8ÒÐÝ˜( D¨%¯(ª(°8´>Ñ*BÔ*BÀDÈ%ÑPÔPÐPØ—’˜œÑ'Ô'¨%¯(ª(°8´>Ñ*BÔ*B×*JÒ*JÈ2ÈqÑ*QÔ*QÑQˆØ˜Ÿš™œÑ"ˆØÐØ�HŠH�T‰NŒNˆNØˆ
r&   N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr±   r¸   r¼   rË   r!   r&   r   r¥   r¥   Ð   s‡   € € € € € ØðKð Kñ „\ðKð ð	Bð 	Bñ „\ð	Bð ðUð Uñ „\ðUð ðð ñ „\ðð ð r&   r¥   r�   )Nr
   )#Ú__doc__r   Útorch._subclasses.fake_tensorr   r'   rL   r   Úfloat8_e5m2Ú
FP8_DTYPESr?   r@   rB   r†   rx   rC   rE   rG   rA   rO   r   r*   r6   rT   rF   rM   rc   rv   r|   rH   r‘   r—   rž   rz   r¥   rK   r!   r&   r   ú<module>rÔ      sÖ  ðð{ð {ð €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ð:ð :ð :€à¨8Ð=TÐ
UÐ
U€ØÔ! 5Ô#4Ð5€
Ø
€Ø€Ø€Ø€ØÐ Ø€Ø€Ø€Ø€
Ø;ÐHið  zWð  Xð  X€ðð ð ð$(ð (ð (ðð ð ðð ð ð ð&ð ð ð^ð ^ð ^ð Pð Pð Pð
	ð 	ð 	ð	gð 	gð 	gðð ð ð 6ð 6ð 6ðð ð ð;ð ;ð ;ð ;ð 	Jð 	Jð 	Jð 	Jð=ð =ð =ð =ð =ñ =ô =ð =ð@ (Ð'Ñ)Ô)Ð Ð Ð r&   