
    i                        S SK JrJr  S SKJs  Js  Jr  S SKrS SKJ	r	J
r
Jr  S SKJr  S\S\4S jrS\S\4S jrS\S\4S	 jr " S
 S\	5      r\
" S5      S\R&                  R(                  S\\   4S j5       rS\R&                  R,                  4S jr\" S5      S\S\R&                  R,                  S\4S j5       rg)    )AnyOptionalN)PatternMatchregister_pattern_detectorregister_pattern_replacement)ExportedProgramnodereturnc                 0    [         R                  " U S5      $ )Nzllama::update_cacheutilsnode_has_targetr	   s    g/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/executorch/backends/vulkan/patterns/sdpa.pyis_update_cache_noder      s      '<==    c                 0    [         R                  " U S5      $ )Nzllama::custom_sdpar   r   s    r   is_custom_sdpa_noder      s      ';<<r   c                 0    [         R                  " U S5      $ )Nzllama::sdpa_with_kv_cacher   r   s    r   is_sdpa_with_kv_cache_noder      s      'BCCr   c                   N    \ rS rSrS\R
                  R                  SS4S jrSrg)CausalSDPAMatch"   custom_sdpa_noder
   Nc                    Xl         SU l        U R                   /U l        [        UR                  5      S:  a  g UR                  S   U l        UR                  S   U l        UR                  S   U l        UR                  S   U l        UR                  S   U l	        UR                  S   U l
        UR                  S   U l        [        UR                  5      S	:  a  UR                  S	   U l        OS U l        S U l        U R                  R                   H  n[        U5      (       d  M  X l          O   S U l        U R                  b  U R                  R                  S   U l        S U l        U R                  R                   H  n[        U5      (       d  M  X l          O   S U l        U R"                  b  U R"                  R                  S   U l        S
U l        g )NF   r                     T)anchor_nodematch_found	all_nodeslenargs
query_nodekey_cache_nodevalue_cache_nodestart_pos_nodeattn_mask_nodedropout_p_nodeis_causal_node
scale_nodeupdate_key_cache_nodeusersr   key_projection_nodeupdate_value_cache_nodevalue_projection_node)selfr   users      r   __init__CausalSDPAMatch.__init__#   s   + **+ $$%)*//2.33A6 0 5 5a 8.33A6.33A6.33A6.33A6$$%).33A6DO"DO &*"''--D#D))-1* .
 $( %%1'+'A'A'F'Fq'ID$ (,$))//D#D))/3, 0
 &*"''3)-)E)E)J)J1)MD&
  r   )r%   r#   r,   r-   r.   r)   r2   r$   r(   r/   r+   r0   r3   r*   r4   )	__name__
__module____qualname____firstlineno__torchfxNoder7   __static_attributes__ r   r   r   r   "   s    /  / 4 / r   r   causal_sdpac                 b    [        U 5      (       d  g [        U 5      nUR                  (       a  U$ g )N)r   r   r$   )r	   matched_patterns     r   find_causal_sdpa_patternsrE   U   s.     t$$%d+O""r   graph_modulec                     U R                   R                   HE  n[        U5      (       a  UR                  S   s  $ [	        U5      (       d  M6  UR                  S   s  $    [        S5      e)Nr   r    zGCould not find an instance of llama::update_cache or sdpa_with_kv_cache)graphnodesr   r'   r   	Exception)rF   r	   s     r   find_singleton_start_pos_noderK   h   s\    ""((%%99Q<%d++99Q< ) Q r   epmatchc                 ~   UR                   c   eUR                  c   eUR                  c   eUR                  c   e[	        U5      nUR
                  R                  UR                  5         UR
                  R                  S[        R                  R                  R                  R                  UR                  UR                  UR                  UR                  UR                   USUR"                  UR$                  UR&                  UR(                  4S9nS S S 5        UR                  R*                  S   WR*                  S'   UR                  R-                  U5        UR
                  R/                  UR                   5        UR
                  R/                  UR                  5        g ! , (       d  f       N= f)Ncall_functionr   )r'   val)r0   r2   r3   r4   rK   rH   inserting_beforer#   create_noder=   opsllamasdpa_with_kv_cachedefaultr(   r)   r*   r,   r-   r.   r/   metareplace_all_uses_with
erase_node)rL   rF   rM   singleton_start_pos_nodenew_nodes        r   $replace_custom_sdpa_with_causal_sdpar\   u   s}    &&222$$000((444&&222<\J				,	,U->->	?%%11IIOO..66  ))++$$&&($$$$$$   2 
 
@& !,,11%8HMM%	++H5 !!%"="=>!!%"?"?@3 
@	?s   -B-F..
F<)typingr   r    executorch.backends.vulkan.utilsbackendsvulkanr   r=   4executorch.backends.vulkan.patterns.pattern_registryr   r   r   executorch.exirr   boolr   r   r   r   r>   r?   rE   GraphModulerK   r\   rA   r   r   <module>re      s    ! 0 0   ,>s >t >=c =d =DS DT D0 l 0 f =)

((--
o
 *
$
0D0D 
 m,%A%A((&&%A %A -%Ar   