
    ^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 )NFkernels 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XYvXw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    4Y??XYvXw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)   versiony   )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    ?>." -SQTU #15G&*	% MM? =#5 !$
 NNO =#5 !%! MM? =#9 !$
 NNO =#9 !%% NNT%7%77 A#3 !:
 MMD$6$66 A#8 !9 NNT%7%77 A#2 !:
 MMD$6$66 A#7 !9 MMD$6$66 A#0 !9 MM? A#1 !$
 NNO A#1 !% MM? A#1 !$
 NNO A#1 !% NNO ;#, !% NNO ?#, !% MM? A#1 !$
 NNO A#1 !%Q4n MM? >#5 !$
 NNO >#5 !% MM? >#5 !$
 NNO >#5 !% NNO >#5 !% NNO >#8 !%A'!R NNT%7%77 >#- !: NNT%7%77 >#. !: NNT%7%77 >#, !: NNT%7%77 >6[\: NNT%7%77 >6[\: NNT%7%77 >:_`:Iki
b NNN :Fakl%
 '6B]gh NNN >Jeop%  MMD$6$66 AMcmn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7G(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II@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5a8\o%&!233 /55c:!'')"mmoG'',OGQmmoG #))+$CG
{-QXbcd!1[Gc7Vgh .v/0$ 7+	,	-
 	9/@/L+Rg$		 !&+6 $$%8/J ))*=?[\o?pqM7   [H	QTUVTWWX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{##--gk]2STU#"2	()+6yAG*;7;;JMH)+6::9dKG8#3(G_pqF#)GK @ ;- 	%--c37/**5		'!//0FTI"))Y"E '(-@-B,"00O3DF'-$ $(GK ;? ! 	M#'GK "8Rs KLL: ;9  	(#'GK 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    (92>DDF 	1HD"4 5 5 788!"bii0$=dV DB B 
 &&tR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$5r: 	&D vt$%		&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~~$,\`ll''& %5%7 K[)*"'"5"5"F"FFO#E$7$7$F$FXgh D"5dCD D uV$?!)*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Jbs 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56GLN" 
*B
D1 6r#6=6r;5 
 <$'PQSPV%WXX (*t$
*r3   )r   )r0   r  r  r   s     @r1   r|   z&use_kernelized_func.<locals>.decorator  s    LL		*"  
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?@DGD$'@@$h/k!no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4zmjR^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                  <   nt        |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     Ke7651Ks   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'ws7G7G/V6#,,/RSTT!!,,J%'MK J - < < B B D C6
Hhe-h'Hh%8??$%* bckblm  0K
~VWWX__./0 h&!)Hh||J5Hll9d3G (-@% H ]L]/6/B	7+U]H^H,.?@@H"H-JH#$;LMH"H-J)1););C)@&&0:8,kR\Q_`aa))'w--D
 # - D YY[
I(VWW[[__Z%:%:;
R\WZJ,?,?+@)GNbf
!iz7J7J&J__Z//0 1 "/J j#&!*4J' ,6+>+>J((2M*% 0:K
++, 
E*! #J$7$7#: ;(1122MO 
 ,6+>+>J(1;<T!W<M<<IJqqxxQ/2JOJ3'(A- ]^k]lm  -Q/77VDN8EF1188C+A.FKF!\\&) -!$VJ-  K * 8 8 : f||ND9K{KK$!$)ST_S` a,,6,?,?+BD  #!&\
5XZ6j112  00BBTU_UhUhTk lH I 
 	}=:348DHj;;<J#%
2
2:zUYZ+5J''(GC6J $/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]rrsu  !#

/@% H N N P 04HH  
 
 
 V# #%C % *.4$;-I4 IV%T %) w w p p

u
 "CqQ:qI$AaP#FSTU:qI:U2 T#tCH~-.  8: S*t"334 93: $  diKK19DK\`K$K\ Pf 1 # 1 S*t:K5K0L 1 h(+Z   $#	Dj 3Y 	
 "$d8nx&? $P   " " c  
	4U/	 U/U/ "U/ 
	U/pr3   