Ë
    ÛÓ^j„Œ  ã                   ó8  — U d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZmZmZmZmZ ddlmZ erddl m!Z! ddl"m#Z# ddl$m%Z%  e«       r
d dl&Z&d dl'm(Z(  ejR                  e*«      Z+de› de› de› d�Z,ejZ                  j]                  dd«      j_                  «       Z0e0ev Z1 e«       rUd dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl2m<Z= d dl2m>Z? d dl2m@ZA d dl2mBZC deDfd„Z@deDfd „ZBdaEeFdz  eGd!<   d"eFfd#„ZHd"eFfd$„ZIdSd%„ZJn/d&Z1d'„ Z@d(„ ZB G d)„ d*«      Z6 G d+„ d,«      Z7 G d-„ d.«      Z5d/„ Z:d0„ Z9d1„ ZJd2dd3œd4dd3œd4dd3œd5d6d3œd7dd3œd8d9d:œd;œZKeFeDeFeDeDf   f   eGd<<   i ZLeFeDedz  f   eGd=<   d>eDdz  d"eMfd?„ZN	 dTd>eDd@edz  dAeMd"edz  fdB„ZOeLfdCeDdDeFeDedz  f   fdE„ZPdSdUdF„Z>	 	 	 dVdCeDdGeDdz  dHeQeDz  dz  dAeMd"ef
dI„Z<dJeRe   ez  fdK„ZSd&aTedL„ «       ZUdMeVdNeReD   dOeVd"eVfdP„ZW	 	 	 	 	 	 	 	 dWdQ„ZXg dR¢ZYy)Xé    N)ÚCallable)Úcontextmanager)ÚPath)Ú
ModuleType)ÚTYPE_CHECKINGé   )Ú!get_checkpoint_conversion_mappingÚ&register_checkpoint_conversion_mapping)Úregister_patch_mapping)ÚENV_VARS_TRUE_VALUESÚlogging)Úis_flash_attention_requested)ÚKERNELS_MAX_VERSIONÚKERNELS_MIN_VERSIONÚis_kernels_availableÚis_rocm_platformÚis_torch_availableé   )Úflash_attention_forward)ÚPretrainedConfig)ÚPreTrainedModel)ÚKernelConfigzh`kernels` is either not installed or uses an incompatible version. Please install a compatible version (z <= version < z), e.g. `pip install kernels==ú`ÚUSE_HUB_KERNELSÚYES)	ÚCUDAPropertiesÚDeviceÚFuncRepositoryÚLayerRepositoryÚLocalLayerRepositoryÚModeÚregister_kernel_mappingÚreplace_kernel_forward_from_hubÚuse_kernel_mapping)Ú
get_kernel)Ú	kernelize)Úuse_kernel_forward_from_hub)Úuse_kernel_func_from_hubÚ
layer_namec                 ób   — t         rt        | «      S t        j                  dt        › �«       d„ S )NúFkernels hub usage is disabled through the environment USE_HUB_KERNELS=c                 ó   — | S ©N© ©Úclss    úp/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/integrations/hub_kernels.pyú<lambda>z-use_kernel_forward_from_hub.<locals>.<lambda>[   s   € ˜s€ ó    )Ú_kernels_enabledÚ$_kernels_use_kernel_forward_from_hubÚloggerÚwarning_onceÚ_TRANSFORMERS_USE_HUB_KERNELS)r)   s    r1   r'   r'   T   s2   € ÝÜ7¸
ÓCÐCä×ÑØXÔYvÐXwÐxôñ #Ð"r3   Ú	func_namec                 ób   — t         rt        | «      S t        j                  dt        › �«       d„ S )Nr+   c                 ó   — | S r-   r.   ©Úfuncs    r1   r2   z*use_kernel_func_from_hub.<locals>.<lambda>d   s   €  € r3   )r4   Ú!_kernels_use_kernel_func_from_hubr6   r7   r8   )r9   s    r1   r(   r(   ]   s2   € ÝÜ4°YÓ?Ð?ä×ÑØXÔYvÐXwÐxôñ %Ð$r3   Ú_KERNEL_MAPPING_CACHEÚreturnc                  ó¢	  — dt        ddd¬«      it        dt        dd¬«      ¬«      t        d	d
dd¬«      idt        j                  t        ddd¬«      t        j
                  t        ddd¬«      iidt        j                  t        ddd¬«      t        j
                  t        ddd¬«      iidt        j
                  t        j                  z  t        ddd¬«      t        j                  t        j                  z  t        ddd¬«      iidt        j
                  t        j                  z  t        ddd¬«      t        j                  t        j                  z  t        ddd¬«      iidt        j                  t        j                  z  t        ddd¬«      iit        j                  t        ddd¬«      t        j
                  t        ddd¬«      it        j                  t        ddd¬«      t        j
                  t        ddd¬«      it        j
                  t        ddd¬«      it        j
                  t        ddd¬«      it        j                  t        ddd¬«      t        j
                  t        ddd¬«      idœt        j                  t        ddd¬«      t        j
                  t        ddd¬«      it        j                  t        ddd¬«      t        j
                  t        ddd¬«      it        j
                  t        ddd¬«      it        j
                  t        ddd¬«      id œdt        j
                  t        j                  z  t        d!d"d¬«      iidt        j
                  t        j                  z  t        d!d#d¬«      iidt        j
                  t        j                  z  t        d!d$d¬«      iidt        j
                  t        j                  z  t        d!d%d¬«      iidt        j
                  t        j                  z  t        d!d&d¬«      iidt        j
                  t        j                  z  t        d!d'd¬«      iid(œ} t        j
                  t        d)d*d¬+«      it        d)d*d¬+«      t        j
                  t        d,d*d¬+«      id-œdt        j                  t        j                  z  t        dd.d¬+«      iid/œ}| |z  } | S )0NÚcudaz!kernels-community/deformable-detrÚMultiScaleDeformableAttentionr   )Úrepo_idr)   Úversionéy   )Úmin_capabilityÚmax_capability)ÚtypeÚ
propertieszAtlas-Inference/gdnÚQwen3_5GatedDeltaNetÚ(ef12347fc77d6ddf1cb72c0bd0af1c7d6cc69172T)rD   r)   ÚrevisionÚtrust_remote_codeúkernels-community/mamba-ssmÚcausal_conv1d_fnÚcausal_conv1d_updatezkernels-community/liger-kernelsÚLigerSwiGLUMLPr   ÚLigerTiledSwiGLUMLPÚLigerGEGLUMLPÚLigerTiledGEGLUMLPÚLigerLinearÚLigerRMSNormzkernels-community/rmsnormÚRMSNormzkernels-community/mlx_rmsnorm)rB   ÚrocmÚxpuÚmpsÚnpuzkernels-community/megablocksÚMegaBlocksMoeMLPÚCPUMegaBlocksMoeMLP)rB   rY   rZ   Úcpuzkernels-community/activationÚFastGELUÚ	QuickGELUÚNewGELUÚSiluÚGeluÚGeluTanh)rC   rK   rP   rQ   Ú	SwiGLUMLPÚGeGLUMLPÚLinearrX   r]   r`   ra   rb   ÚSiLUÚGeLUre   zkernels-community/rotaryÚapply_rotary_transformers)rD   r9   rE   zkernels-community/aiter-rope)rZ   rB   rY   ÚLigerForCausalLMLoss)Úrotary_pos_embÚForCausalLMLoss)r   r   r   r!   ÚTRAININGÚ	INFERENCEÚTORCH_COMPILEr   )Ú_KERNEL_MAPPINGÚ_FUNCTION_KERNEL_MAPPINGs     r1   Ú_build_kernel_mappingrt   l   s  € ð œØ?Ø>Øôð.ô" ØÜ-¸SÐQTÔUôô #Ø1Ø5ØGà&*ôð	%ð Ü—M‘M¤?Ø =Ø#5Ø !ô$ô
 —N‘N¤OØ =Ø#5Ø !ô%ðð!ð Ü—M‘M¤?Ø =Ø#9Ø !ô$ô
 —N‘N¤OØ =Ø#9Ø !ô%ðð%ð Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø AØ#3Ø !ô:ô
 —M‘M¤D×$6Ñ$6Ñ6¼Ø AØ#8Ø !ô9ððð Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø AØ#2Ø !ô:ô
 —M‘M¤D×$6Ñ$6Ñ6¼Ø AØ#7Ø !ô9ððð Ü—M‘M¤D×$6Ñ$6Ñ6¼Ø AØ#0Ø !ô9ððô —M‘M¤?Ø AØ#1Ø !ô$ô
 —N‘N¤OØ AØ#1Ø !ô%ðô —M‘M¤?Ø AØ#1Ø !ô$ô
 —N‘N¤OØ AØ#1Ø !ô%ðô —N‘N¤OØ ;Ø#,Ø !ô%ðô —N‘N¤OØ ?Ø#,Ø !ô%ðô —M‘M¤?Ø AØ#1Ø !ô$ô
 —N‘N¤OØ AØ#1Ø !ô%ðñQ4ôn —M‘M¤?Ø >Ø#5Ø !ô$ô
 —N‘N¤OØ >Ø#5Ø !ô%ðô —M‘M¤?Ø >Ø#5Ø !ô$ô
 —N‘N¤OØ >Ø#5Ø !ô%ðô —N‘N¤OØ >Ø#5Ø !ô%ðô —N‘N¤OØ >Ø#8Ø !ô%ðñA'!ðR Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø >Ø#-Ø !ô:ððð Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø >Ø#.Ø !ô:ððð Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø >Ø#,Ø !ô:ððð Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø >È6Ð[\ô:ððð Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø >È6Ð[\ô:ððð Ü—N‘N¤T×%7Ñ%7Ñ7¼Ø >È:Ð_`ô:ððñIki
ˆôb —N‘N¤NØ :ÐFaÐklô%ðô
 'Ø6ÐB]Ðghôô —N‘N¤NØ >ÐJeÐopô%ðñð  Ü—M‘M¤D×$6Ñ$6Ñ6¼Ø AÐMcÐmnô9ðð ñ!$
Ð ð0 *Ð,DÑDˆàÐr3   c                  ó.   — t         €
t        «       a t         S )zPReturn the default transformers kernel mapping, building it lazily on first use.)r?   rt   r.   r3   r1   Úget_kernel_mapping_transformersrv   w  s   € ô !Ð(Ü$9Ó$;Ð!Ü$Ð$r3   c                 ó2   — | €
t        «       } t        | «       y r-   )rv   r"   )Úmappings    r1   Ú$register_kernel_mapping_transformersry   ~  s   € Øˆ?Ü5Ó7ˆGÜ Õ(r3   Fc                  ó   — d„ }|S )Nc                 ó   — | S r-   r.   r/   s    r1   Ú	decoratorz.use_kernel_forward_from_hub.<locals>.decorator‰  s   € ØˆJr3   r.   ©ÚargsÚkwargsr|   s      r1   r'   r'   ˆ  s   € ò	ð Ðr3   c                  ó   — d„ }|S )Nc                 ó   — | S r-   r.   r<   s    r1   r|   z+use_kernel_func_from_hub.<locals>.decorator�  s   € ØˆKr3   r.   r}   s      r1   r(   r(   Ž  s   € ò	ð Ðr3   c                   ó   — e Zd Zd„ Zd„ Zy)r   c                 ó   — t        d«      ‚)NzNLayerRepository requires `kernels` to be installed. Run `pip install kernels`.©ÚRuntimeError©Úselfr~   r   s      r1   Ú__init__zLayerRepository.__init__•  s   € ÜÐoÓpÐpr3   c                 ó   — t        d«      ‚)NzMLayerRepository requires `kernels` to be installed. Run `pip install kernels.©ÚNotImplementedError©r‡   s    r1   ÚloadzLayerRepository.load˜  s   € Ü%Ð&uÓvÐvr3   N©Ú__name__Ú
__module__Ú__qualname__rˆ   r�   r.   r3   r1   r   r   ”  s   „ ò	qó	wr3   r   c                   ó   — e Zd Zd„ Zd„ Zy)r    c                 ó   — t        d«      ‚)NzSLocalLayerRepository requires `kernels` to be installed. Run `pip install kernels`.r„   r†   s      r1   rˆ   zLocalLayerRepository.__init__œ  s   € ÜÐtÓuÐur3   c                 ó   — t        d«      ‚)NzRLocalLayerRepository requires `kernels` to be installed. Run `pip install kernels.rŠ   rŒ   s    r1   r�   zLocalLayerRepository.loadŸ  s   € Ü%Ødóð r3   NrŽ   r.   r3   r1   r    r    ›  s   „ ò	vó	r3   r    c                   ó   — e Zd Zd„ Zy)r   c                 ó   — t        d«      ‚)NzMFuncRepository requires `kernels` to be installed. Run `pip install kernels`.r„   r†   s      r1   rˆ   zFuncRepository.__init__¥  s   € ÜÐnÓoÐor3   N)r�   r�   r‘   rˆ   r.   r3   r1   r   r   ¤  s   „ ó	pr3   r   c                  ó   — t        d«      ‚)Nz^replace_kernel_forward_from_hub requires `kernels` to be installed. Run `pip install kernels`.r„   ©r~   r   s     r1   r#   r#   ¨  s   € ÜØló
ð 	
r3   c                  ó   — t        d«      ‚)NzVregister_kernel_mapping requires `kernels` to be installed. Run `pip install kernels`.r„   r˜   s     r1   r"   r"   ­  s   € ÜÐsÓtÐtr3   c                  ó   — t        d«      ‚)Nzcregister_kernel_mapping_transformers requires `kernels` to be installed. Run `pip install kernels`.r„   r˜   s     r1   ry   ry   °  s   € ÜØqó
ð 	
r3   zkernels-community/causal-conv1d)rD   rE   rO   z!kernels-community/finegrained-fp8é   zkernels-community/deep-gemmzkernels-community/sonic-moez
ep-support)rD   rM   )zcausal-conv1dz	mamba-ssmzfalcon_mamba-ssmzfinegrained-fp8z	deep-gemmz	sonic-moeÚ_HUB_KERNEL_MAPPINGÚ_KERNEL_MODULE_MAPPINGÚattn_implementationc                 ó>   — | duxr t        j                  d| «      duS )zJCheck whether `attn_implementation` matches a kernel pattern from the hub.Nz'^[^/:]+/[^/:]+(?:@[^/:]+)?(?::[^/:]+)?$)ÚreÚsearch)rž   s    r1   Ú	is_kernelr¢   Â  s-   € ð 	 4Ð'ò 	cÜ�I‰IÐ@ÐBUÓVÐ^bÐbðr3   Úattention_wrapperÚallow_all_kernelsc                 ó   — ddl m} ddlm} d| v r| j	                  d«      d   n| }t        |«      syt        «       st        t        «      ‚d|v r%|j	                  d«      \  }}|j                  «       }n|}d}|j                  «       }|j                  d«      \  }}}	|j                  «       }|	r|	j                  «       nd}	d}
|	€t        |d	¬
«      }|rdnd}
	 t        ||	|
|¬«      }d}t        |d«      r|€t         }|}n)t        |d«      rddlm} |�|n|}d}n|�t'        ||«      }|j)                  | «       |j)                  | ||   «       |S # t        $ r ‚ t        $ r}t        d|› d|› d�«      ‚d}~ww xY w)a  
    Load and register the kernel associated to `attn_implementation`.

    Args:
        attn_implementation: A string, usually a kernel repo like "kernels-community/flash-mla".
        attn_wrapper: a callable for the wrapper around the attention implementation. In `transformers` we
            have a wrapper around the `flash_attn_var_len` call, and the same goes for `sdpa` and `eager`.
            They just prepare the arguments properly. This is mostly used for continuous batching, where we
            want the `paged` wrapper, which calls the paged cache.
        allow_all_kernels (`bool`, optional):
            Whether to load kernels from unverified hub repos, if it is a custom kernel outside of the `kernels-community`
            hub repository.
    r   )ÚALL_MASK_ATTENTION_FUNCTIONS)ÚALL_ATTENTION_FUNCTIONSú|r   Nú:ú@r›   )Ú"requested_attention_implementationrE   r   ©rM   rE   r¤   z-An error occurred while trying to load from 'z': ú.Úflash_attention_2Úflash_attn_varlen_funcÚsparse_atten_func)Úmsa_attention_forwardÚsdpa)Úmasking_utilsr¦   Úmodeling_utilsr§   Úsplitr¢   r   ÚImportErrorÚ_MISSING_KERNELS_MESSAGEÚstripÚ	partitionr   r%   Ú
ValueErrorÚ	ExceptionÚhasattrr   Úmsa_attentionr±   ÚgetattrÚregister)rž   r£   r¤   r¦   r§   Úactual_attn_namerD   Úkernel_nameÚ_ÚrevrE   Úis_fa4ÚkernelÚeÚmask_implementationÚkernel_functionr±   s                    r1   Úload_and_register_attn_kernelrÉ   Ê  s¿  € õ  =Ý8à<?ÐCVÑ<VÐ*×0Ñ0°Ó5°aÒ8Ð\oÐÜÐ%Ô&ØÜÔ!ÜÔ2Ó3Ð3ð ÐÑØ/×5Ñ5°cÓ:Ñˆ�Ø!×'Ñ'Ó)‰à"ˆØˆØ�m‰m‹o€Gà×'Ñ'¨Ó,�O€GˆQ�Ø�m‰m‹o€Gñ ˆ#�)‰)Œ+ $€CØ€GØ
€{ä-ÐQXÐbcÔdˆÙ‘! 1ˆð[Ü˜G¨c¸7ÐVgÔhˆð .ÐÜˆvÐ/Ô0ØÐ$Ü 7ÐØ+‰Ü	�Ð,Ô	-õ
 	9à/@Ð/LÑ+ÐRgˆØ$ÑØ	Ð	 Ü! &¨+Ó6ˆð ×$Ñ$Ð%8¸/ÔJØ ×)Ñ)Ð*=Ð?[Ð\oÑ?pÔqà€Møô7 ò ØÜò [ÜÐHÈÈ	ÐQTÐUVÐTWÐWXÐYÓZÐZûð[ús   ÃE ÅE=Å&E8Å8E=rÁ   rx   c                 óD  — | |v rt        ||    t        «      r||    S | t        vrt        j	                  d| › d�«       d || <   y t        «       rht        rb	 t        |    d   }t        |    j                  dd «      }t        |    j                  dd «      }|€|€d}t        |||t        ¬«      }||| <   ||    S d
d l}| j                  dd«      }d|› d�}		 |j                  dt        «      }
t!        |
|	d «      }t%        |«      r! |«       r	 |j                  |› «      }||| <   |S d || <   ||    S # t        $ r.}d || <   t        j	                  d| › d	|› �«       Y d }~||    S d }~wt        $ r d || <   Y ||    S w xY w# t"        $ r d }Y Œ�w xY w# t"        $ r d || <   Y ||    S w xY w)NzKernel z! not found in _HUB_KERNEL_MAPPINGrD   rM   rE   r   r¬   zFailed to load kernel z: r   ú-rÂ   Úis_Ú
_availablez..utils.import_utils)Ú
isinstancer   rœ   r6   r7   r   r4   Úgetr%   ÚALLOW_ALL_KERNELSÚFileNotFoundErrorÚAssertionErrorÚ	importlibÚreplaceÚimport_moduleÚ__package__r¾   r»   Úcallable)rÁ   rx   rD   rM   rE   rÅ   rÆ   rÓ   Únew_kernel_namer9   Ú	utils_modÚis_kernel_availableÚmodules                r1   Úlazy_load_kernelrÜ     s  € Ø�gÑ¤*¨W°[Ñ-AÄ:Ô"NØ�{Ñ#Ð#ØÔ-Ñ-Ü×Ñ˜g k ]Ð2SÐTÔUØ#ˆ�ÑØÜÔÕ"2ð	(Ü)¨+Ñ6°yÑAˆGÜ*¨;Ñ7×;Ñ;¸JÈÓMˆHÜ)¨+Ñ6×:Ñ:¸9ÀdÓKˆGàˆ 8Ð#3Ø�ä °(ÀGÔ_pÔqˆFØ#)ˆG�KÑ ð@ �;ÑÐó- 	à%×-Ñ-¨c°3Ó7ˆØ˜/Ð*¨*Ð5ˆ	ð	'Ø!×/Ñ/Ð0FÌÓTˆIÜ")¨)°YÀÓ"EÐô Ð'Ô(Ñ-@Ô-Bð,Ø"×0Ñ0°OÐ3DÓF�Ø'-�˜Ñ$Ø�ð $(ˆG�KÑ à�;ÑÐøô? !ò 	MØ#'ˆG�KÑ Ü×ÑÐ"8¸¸ÀRÈÀsÐ K×LÐLð: �;ÑÐûô9 ò 	(à#'ˆG�KÒ ð4 �;ÑÐð9	(ûô ò 	'Ø"&Òð	'ûô ò ,Ø'+�˜Ò$ð �;ÑÐð,úsC   ÁAD, Ã#E9 Ä	F
 Ä,	E6Ä5 EÅE6Å5E6Å9FÆFÆ
FÆFc                 ót  — t        «       st        t        «      ‚d„ }d„ }	 | j                  |«       | j                  st
        j                  n|€t
        j                  n|}| j                  j                  }|dk(  rt        «       rd}t        |¬«      }| j                  �P| j                  j                   }t        | j                  j                  |¬«      5  t!        | ||¬«       ddd«       nt!        | ||¬«       d	| _        | j                  |«       y# 1 sw Y   Œ"xY w# | j                  |«       w xY w)
zYTemporarily register hidden kernel wrappers so `kernelize` can discover and replace them.c                 óø   — t        | di «      j                  «       D ]\  \  }}|t        | j                  «       «      vsŒ"t	        |t
        j                  «      st        d|› d�«      ‚| j                  ||«       Œ^ y )NÚ_hidden_kernelsz#Attempted to register a kernel for zè, but it was not a `torch.nn.Module`. This means the underlying function needs to be decorated with `@use_kernel_func_from_hub`. Please submit and issue to the transformers repo: `https://github.com/huggingface/transformers/issues`.)	r¾   ÚitemsÚdictÚnamed_childrenrÎ   ÚnnÚModulerº   Úregister_module)rÛ   ÚnameÚfns      r1   Úattach_hidden_kernelsz(kernelize.<locals>.attach_hidden_kernelsQ  s   € Ü Ð(9¸2Ó>×DÑDÓFò 	1‰HˆD�"Øœ4 × 5Ñ 5Ó 7Ó8Ò8Ü! "¤b§i¡iÔ0Ü$Ø=¸d¸Vð DBð Bóð ð
 ×&Ñ& t¨RÕ0ñ	1r3   c                 óZ   — t        | di «      D ]  }t        | |«      sŒt        | |«       Œ y )Nrß   )r¾   r¼   Údelattr)rÛ   ræ   s     r1   Údetach_hidden_kernelsz(kernelize.<locals>.detach_hidden_kernels\  s1   € Ü˜FÐ$5°rÓ:ò 	&ˆDô �v˜tÕ$Ü˜ Õ%ñ		&r3   NrB   rY   )rI   )Úinherit_mapping)ÚdeviceÚmodeT)r   r¶   r·   ÚapplyÚtrainingr!   rp   ro   rí   rI   r   r   Úkernel_configÚuse_local_kernelr$   Úkernel_mappingÚ_kernels_kernelizeÚ_use_kernels)Úmodelrî   rè   rë   Údevice_typerí   rì   s          r1   r&   r&   L  s  € äÔ!ÜÔ2Ó3Ð3ò	1ò&ð+Ø�‰Ð)Ô*à%*§^¢^Œt�~Š~È$È,¼¿ºÐ\`ˆØ—l‘l×'Ñ'ˆØ˜&Ò Ô%5Ô%7Ø ˆKÜ˜[Ô)ˆØ×ÑÐ*Ø"'×"5Ñ"5×"FÑ"FÐFˆOÜ# E×$7Ñ$7×$FÑ$FÐXgÔhñ DÜ" 5°¸dÕC÷Dð Dô ˜u¨V¸$Õ?à!ˆÔà�‰Ð)Õ*÷Dð Dûð 	�‰Ð)Õ*ús$   ¡B8D$ ÃDÃ(D$ ÄD!ÄD$ Ä$D7rM   rE   c                 ól   — ddl m} t        «       st        t        «      ‚d|| dœ}t        | ||||¬«      S )Nr   )Ú__version__Útransformers)Ú	frameworkrE   rD   )rM   rE   Ú
user_agentrN   )Ú rù   r   r¶   r·   Úget_kernel_hub)rÁ   rM   rE   r¤   rù   rü   s         r1   r%   r%   w  s?   € õ äÔ!ÜÔ2Ó3Ð3à-¸+ÐR]Ñ^€JÜØ˜h°ÀJÐbsôð r3   Úmodule_namesc                 ó8   ‡ — t        ‰ t        «      r‰ gŠ ˆ fd„}|S )aO  
    This decorator attaches the target function within the module as a plain attribute (not as a submodule).
    Keep in mind that this registration is only meant for `kernelize` to recognize its target modules (i.e.
    function exchanged for a weightless `nn.Module` with the same forward) to then exchange to the kernel
    variation (in-place) if the conditions are met.

    We cache each of these function-based registrations: After proper registration and exchange it is removed
    from the module's `_modules` dict as it does not really act as `nn.Module` but a base function.
    c                 ó<   •‡— | j                   Šˆˆfd„}|| _         | S )Nc                 óä   •—  ‰| g|¢­i |¤Ž | j                   j                  di «      }‰D ]B  }t        |dd «      xs t        |dd «      xs t        |dd «      }|€t        d|›�«      ‚|||<   ŒD y )Nrß   r�   Úkernel_layer_namer9   z)Could not infer kernel function name for )Ú__dict__Ú
setdefaultr¾   rº   )r‡   r~   r   Úhidden_kernelsrç   ræ   rÿ   Ú	orig_inits         €€r1   Únew_initz8use_kernelized_func.<locals>.decorator.<locals>.new_init˜  s™   ø€ Ù�dÐ,˜TÒ, VÒ,ð "Ÿ]™]×5Ñ5Ð6GÈÓLˆNØ"ò 
*�ä˜B 
¨DÓ1ò 6Ü˜rÐ#6¸Ó=ò6ä˜r ;°Ó5ð ð
 �<Ü$Ð'PÐQSÐPVÐ%WÓXÐXð (*�˜tÒ$ñ
*r3   )rˆ   )r0   r  r  rÿ   s     @€r1   r|   z&use_kernelized_func.<locals>.decorator•  s   ù€ Ø—L‘Lˆ	õ	*ð"  ˆŒØˆ
r3   )rÎ   r   )rÿ   r|   s   ` r1   Úuse_kernelized_funcr	  ˆ  s#   ø€ ô �,¤Ô)Ø$�~ˆôð. Ðr3   c               #   ó,   K  — 	 da d–— da y# da w xY w­w)zã
    Context manager used to adjust the value of the global `ALLOW_HUB_KERNELS`. This is needed, as this argument
    cannot be forwarded directly to the `__init__` of the models, where we set the attention implementation.
    TNF)rÐ   r.   r3   r1   Úallow_all_hub_kernelsr  ³  s"   è ø€ ð"Ø Ðãð "Ñø˜EÑüs   ‚„ Š�‘Ú
parent_clsÚchild_namesÚ
kernel_clsc                 ó”   ‡‡‡— | j                   Šˆˆˆfd„}t        d| j                  › �| fd|i«      }d| j                  › �|_        |S )a6  
    Create a new class that inherits from `parent_cls` and fuses the child modules specified in `child_names
    with the provided `kernel_cls`.
    The first child in `child_names` will be replaced with the `kernel_cls`, and the rest will be replaced with
    `nn.Identity()` to keep the same interface.
    c                 óÖ   •—  ‰| g|¢­i |¤Ž ‰D �cg c]  }t        | |«      ‘Œ }} ‰|Ž }t        | ‰d   |«       ‰dd  D ]!  }t        | |t        j                  «       «       Œ# y c c}w )Nr   r   )r¾   Úsetattrrã   ÚIdentity)	r‡   r~   r   ræ   ÚchildrenÚkernel_instancer  r  Úoriginal_inits	         €€€r1   Úpatched_initz9make_parent_class_for_kernel_fusion.<locals>.patched_initÑ  sv   ø€ Ù�dÐ,˜TÒ, VÒ,Ø4?Ö@¨D”G˜D $Õ'Ð@ˆÐ@Ù$ hÐ/ˆÜ��k !‘n oÔ6Ø  �Oò 	/ˆDÜ�D˜$¤§¡£Õ.ñ	/ùò As   ’A&ÚFusedrˆ   )rˆ   rI   r�   r‘   )r  r  r  r  Úpatched_clsr  s    ``  @r1   Ú#make_parent_class_for_kernel_fusionr  Ä  sW   ú€ ð ×'Ñ'€Mö/ô ˜˜z×2Ñ2Ð3Ð4°z°mÀjÐR^ÐE_Ó`€KØ!& z×'>Ñ'>Ð&?Ð@€KÔØÐr3   c           
      óÊ	  ‡"— t        | d«      rt        | j                  d«      st        d| j                  › d�«      ‚| j                  j                  }i }i }d }|j
                  j                  «       D �]J  \  }}t        |t        t        f«      rd |i}t        |t        «      r*t        |j                  «       «      dk7  rt        d|› �«      ‚t        d|›d|›�«      ‚t        t        |j                  «       «      «      }t        |t        «      rY|\  }	}
|
j                  d	d «      }|
j                  d
d «      }|
j                  dd«      xs t         }|�d
|ind	|i}
|
d|iz  }
|	|
f}n|}	dt         dœ}
|	|
f}|	j#                  d«      \  }}}|r|st        d|	›d|›�«      ‚|j$                  rt'        t)        |«      |¬«      }nt+        d)||dœ|
¤Ž}|j-                  «       }|€t        d|›�«      ‚t.        j0                  j                  |j2                  «      }|rt5        ||j                  › d�d «      nd }|�:d|j6                  vr,t9        j:                  |j<                  «      d„ «       }||_        t        |t        «      r0|€|||<   �Œ|j                  |_        |||<   |||j                  <   �nªt        |t        «      �r™|€&t        d|j                  ›d|j                  › d�«      ‚|j                  |_        |D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|jA                  dd«      d   ‘Œ }}t        tC        |«      «      dk7  rt        d|› �«      ‚|d   jE                  dd«      }|D �cg c]  }|jA                  dd«      d   ‘Œ }}|€&tG        jH                  d«      5   | |«      }d d d «       d}|jK                  «       D ]u  \  }Š"tM        jN                  ||«      sŒtQ        ˆ"fd„|D «       «      st        d |›d!|› d"|j                  ›�«      ‚d#}tS        ‰"«      }tU        |||«      ||j                  <   Œw |st        d$|›d%|j                  ›d&�«      ‚tW        |d#¬'«       t        |d(«      r5tY        |«      } t[        |j\                  «      }!| �| |!z   }!t_        ||!d#¬'«       |||j                  <   �ŒM ||_        y c c}w c c}w c c}w # 1 sw Y   �Œ)xY w)*NÚconfig_classÚ
model_typezModel z# has no config_class or model_type.r   zLExpected exactly one kernel repo regardless of device/mode specificity, got zInvalid hub repo z for layer rM   rE   rN   F)rE   rN   r©   zInvalid kernel repo string )Ú	repo_pathr)   )rD   r)   z*Could not load kernel class from hub_repo=ÚLayoutÚforwardc                  ó   — y r-   r.   r†   s      r1   Ú_noop_forwardz?register_kernel_replacements_and_fusions.<locals>._noop_forward&  s   € àr3   zFused kernel z* requires a companion layout class named 'zLayout' in the same module.r­   r   zGAll patterns for a fused kernel must share the same parent module, got Ú*z\w+Úmetac              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wr-   )r¼   )Ú.0ÚchildrÛ   s     €r1   ú	<genexpr>z;register_kernel_replacements_and_fusions.<locals>.<genexpr>W  s   øè ø€ ÒK°eœ7 6¨5×1ÑKùs   ƒzModule z* does not have the expected child modules z required for the fused kernel TzNo module matched pattern z for fused kernel z3. Provide the full dotted path from the model root.)Ú	overwriteÚconversion_mappingr.   )0r¼   r  rº   r�   r  ró   rà   rÎ   ÚstrÚtuplerá   ÚlenÚvaluesÚnextÚiterrÏ   rÐ   r¹   rò   r    r   r   r�   ÚsysÚmodulesr�   r¾   r  Ú	functoolsÚwrapsr  r  ÚrsplitÚsetrÔ   Útorchrí   Únamed_modulesr    Ú	fullmatchÚallrI   r  r   r	   Úlistr)  r
   )#r0   Úconfigrñ   r  Úpatch_mappingÚnew_mappingÚ
meta_modelr)   Úhub_repoÚrepo_strÚmetadatarM   rE   rN   Ú
final_reporD   rÂ   Úlayer_name_in_repoÚrepor  Ú
kernel_modÚ
layout_clsr!  ÚitemÚglob_patternsÚpÚparent_patternsÚparent_patternr  Úmatched_anyræ   Ú
module_clsÚexistingÚ
transformsrÛ   s#                                     @r1   Ú(register_kernel_replacements_and_fusionsrP  Þ  sq  ø€ ô
 �3˜Ô'¬w°s×7GÑ7GÈÔ/VÜ˜6 #§,¡, Ð/RÐSÓTÐTØ×!Ñ!×,Ñ,€Jà%'€MØ€Kð €Jà -× <Ñ <× BÑ BÓ Dó C6Ñˆ
�HÜ�h¤¤e Ô-Ø˜hÐ'ˆHä�h¤Ô%Ü�8—?‘?Ó$Ó%¨Ò*Ü ØbÐckÐblÐmóð ô Ð0°°¸KÈ
À~ÐVÓWÐWäœ˜XŸ_™_Ó.Ó/Ó0ˆô �h¤Ô&Ø!)ÑˆH�hà—|‘| J°Ó5ˆHØ—l‘l 9¨dÓ3ˆGØ (§¡Ð-@À%Ó HÒ ]ÔL]ÐØ/6Ð/B˜	 7Ñ+ÈÐU]ÐH^ˆHØÐ,Ð.?Ð@Ñ@ˆHà" HÐ-‰JàˆHØ#$Ô;LÑMˆHØ" HÐ-ˆJà)1×);Ñ);¸CÓ)@Ñ&ˆ�Ð&ÙÑ0ÜÐ:¸8¸,ÀkÐR\ÐQ_Ð`ÓaÐaà×)Ò)Ü'Ü˜w›-Ø-ô‰Dô
 #ð ØØ-ñð ñˆDð —Y‘Y“[ˆ
àÐÜÐIÈ(ÈÐVÓWÐWä—[‘[—_‘_ Z×%:Ñ%:Ó;ˆ
ÙR\”W˜Z¨J×,?Ñ,?Ð+@ÀÐ)GÈÔNÐbfˆ
àÐ! i°z×7JÑ7JÑ&Jä�_‰_˜Z×/Ñ/Ó0ñó 1ðð "/ˆJÔô �j¤#Ô&àÐ!Ø*4�˜JÑ'Ùð ,6×+>Ñ+>ˆJÔ(Ø(2ˆM˜*Ñ%ð 0:ˆK˜
×+Ñ+Ó,ô ˜
¤EÕ*ØÐ!Ü Ø# J×$7Ñ$7Ð#:ð ;Ø(×1Ñ1Ð2Ð2MðOóð ð
 ,6×+>Ñ+>ˆJÔ(à1;Ö<¨˜T !›WÐ<ˆMÐ<Ø<IÖJ°q˜qŸx™x¨¨QÓ/°Ó2ÐJˆOÐJä”3�Ó'Ó(¨AÒ-Ü Ø]Ð^kÐ]lÐmóð ð -¨QÑ/×7Ñ7¸¸VÓDˆNØ8EÖF°1˜1Ÿ8™8 C¨Ó+¨AÓ.ÐFˆKÐFàÐ!Ü—\‘\ &Ó)ñ -Ù!$ V£�J÷-ð  ˆKØ *× 8Ñ 8Ó :ò ‘��fÜ—|‘| N°DÔ9ØÜÓK¸{ÔKÔKÜ$Ø! $ Ð)SÐT_ÐS`ð a,Ø,6×,?Ñ,?Ð+BðDóð ð #�Ü! &›\�
Ü5XØ ¨Zó6�˜j×1Ñ1Ò2ðñ Ü Ø0°Ð0BÐBTÐU_×UhÑUhÐTkð lHð Ióð ô
 	˜}¸Õ=ä�:Ð3Ô4Ü8¸ÓDˆHÜ˜j×;Ñ;Ó<ˆJØÐ#Ø%¨
Ñ2�
Ü2°:¸zÐUYÕZà+5ˆ�J×'Ñ'Ó(ðGC6ðJ $/€MÕ ùò_ =ùÚJùò G÷-ñ -ús   ÌS	ÌSÍ3SÎ(	SÓS"	)r   r%   r&   rÜ   r"   ry   rP  r#   r'   r(   r	  r-   )NF)rö   r   rî   zMode | None)NNF)r0   ztype[PreTrainedModel]r;  r   rñ   r   r@   N)Zr2  Úosr    r0  Úcollections.abcr   Ú
contextlibr   Úpathlibr   Útypesr   Útypingr   r)  r	   r
   Úmonkey_patchingr   Úutilsr   r   Úutils.genericr   Úutils.import_utilsr   r   r   r   r   Úflash_attentionr   Úconfiguration_utilsr   r´   r   Úutils.kernel_configr   r6  Útorch.nnrã   Ú
get_loggerr�   r6   r·   ÚenvironrÏ   Úupperr8   r4   Úkernelsr   r   r   r   r    r!   r"   r#   r$   r%   rþ   r&   rô   r'   r5   r(   r>   r*  r?   rá   Ú__annotations__rt   rv   ry   rœ   r�   Úboolr¢   rÉ   rÜ   Úintr:  r	  rÐ   r  rI   r  rP  Ú__all__r.   r3   r1   ú<module>rg     sN  ðô Û 	Û 	Û 
Ý $Ý %Ý Ý Ý  ç jÝ 4ß 1Ý 8÷õ õ 5ñ Ý6Ý0Ý2áÔÛÝð 
ˆ×	Ñ	˜HÓ	%€ðØÐ˜NÐ+>Ð*?Ð?]Ð^qÐ]rÐrsðuð ð !#§
¡
§¡Ð/@À%Ó H× NÑ NÓ PÐ Ø0Ð4HÐHÐ ñ Ô÷
÷ 
õ 
õõõõ Vð#°ó #ð%¨Có %ð *.Ð˜4 $™;Ó-ðI 4ó IðV%¨Tó %ô)ð Ðòò÷wñ w÷ñ ÷pñ pò
ò
uò
ð "CÈqÑQØ:ÀqÑIØ$AÈaÑPØ#FÐSTÑUØ:ÀqÑIØ:ÈÑUñ2Ð �T˜#˜t C¨ H™~Ð-Ñ.ó ð 8:Ð ˜˜S *¨tÑ"3Ð3Ñ4Ó 9ð 3¨¡:ð °$ó ð diñKØðKØ19¸D±ðKØ\`ðKà�$ÑóKð\ Pfñ 1  #ð 1 °°S¸*ÀtÑ:KÐ5KÑ0Ló 1 ôh(+ðZ  Ø $Ø#ñ	Øðà�D‰jðð �3‰Y˜Ñðð ð	ð
 óð"$ d¨8¡n°xÑ&?ó $ðP Ð ð ñ"ó ð"ð Øðà�c‘ðð ðð 
ó	ð4U/Ø	 ðU/àðU/ð "ðU/ð 
ó	U/òp�r3   