§
    2�Åj~  ã                  óJ   — d dl mZ d dlZd dlmZ dd	„Z G d
„ de¦  «        ZdS )é    )ÚannotationsN)ÚOpRunÚxú
np.ndarrayÚ	num_headsÚintÚreturnc           	     óÌ   — | j         \  }}}||z  dk    rt          d|› d|› d| j         › d�¦  «        ‚||z  }|                      ||||¦  «                             dddd¦  «        S )	z$Reshape (B, T, H*D) -> (B, H, T, D).r   z	Last dim z not divisible by num_heads z for shape ú.é   é   é   )ÚshapeÚ
ValueErrorÚreshapeÚ	transpose)r   r   ÚbÚtÚhdÚds         úWC:\Projects\Historical\venv\Lib\site-packages\onnx/reference/ops/op_linear_attention.pyÚ_unpack_3d_to_4dr      s‡   € àŒw�H€A€qˆ"Ø	ˆI�~˜ÒÐÝØX˜ÐXÐX¸	ÐXÐXÈaÌgÐXÐXÐXñ
ô 
ð 	
ð 	ˆi‰€AØ�9Š9�Q˜˜9 aÑ(Ô(×2Ò2°1°a¸¸AÑ>Ô>Ð>ó    c                  ó&   — e Zd Z	 	 	 	 	 	 	 	 dd„ZdS )ÚLinearAttentionNc                ó¶
  — |€d}|dvrt          d|› d�¦  «        ‚|	�|€t          d¦  «        ‚|	dk    s|dk    s	|	|z  dk    rt          d|	› d|› d	�¦  «        ‚|d
v }|dv }|r|€t          d|› d�¦  «        ‚|s|�t          d|› d�¦  «        ‚|r|€t          d|› d�¦  «        ‚|s|�t          d|› d�¦  «        ‚d|fd|fd|ffD ]*\  }}|j        dk    rt          |› d|j        › d�¦  «        ‚Œ+|j        }|j        \  }}}|j        d         |	z  }|j        d         |z  }|	|z  }t	          ||	¦  «                             t          j        ¦  «        }t	          ||¦  «                             t          j        ¦  «        }t	          ||¦  «                             t          j        ¦  «        }|�º|j        dk    rt          d|j        › d�¦  «        ‚|j        d         }||k    r/|                     |||d¦  «         	                    dddd¦  «        }n6|||z  k    rt	          ||¦  «        }nt          d|› d|› d||z  › d	�¦  «        ‚|                     t          j        ¦  «        }|�™|j        dk    rt          d|j        › d�¦  «        ‚|j        d         }||dfvrt          d|› d |› d!�¦  «        ‚|                     |||d¦  «         	                    dddd¦  «        }|                     t          j        ¦  «        }|�l|j        ||||fk    r$t          d"|j        › d#|› d$|› d$|› d$|› d	�¦  «        ‚|j        }|                     t          j        ¦  «         
                    ¦   «         }n&|}t          j        ||||ft          j        ¬%¦  «        }|
�|
d&k    rd't          j        |¦  «        z  } nt          |
¦  «        } t          j        ||	||ft          j        ¬%¦  «        }!t          |¦  «        D ]ý}"|d d …d d …|"d d …f         }#|d d …d d …|"d d …f         }$|d d …d d …|"d d …f         }%|r/|d d …d d …|"d d …f         }&|t          j        |&¦  «        d(         z  }|r.t          j        d)||$¦  «        }'|d d …d d …|"d d …f         |%|'z
  z  }%||$d*d d …d f         |%d*d d d …f         z  z   }|dk    r|}(nt          j        ||d¬+¦  «        }(| t          j        d,|#|(¦  «        z  |!d d …d d …|"d d …f<   Œþ|! 	                    dddd¦  «                             |||	|z  ¦  «        })|)                     |¦  «        })|                     |¦  «        }*|)|*fS )-NÚgated_delta)ÚlinearÚgatedÚdeltar   zUnsupported update_rule 'z>'. Expected one of: 'linear', 'gated', 'delta', 'gated_delta'.z5q_num_heads and kv_num_heads are required attributes.r   zq_num_heads (z/) must be a positive multiple of kv_num_heads (z).)r   r   )r    r   zupdate_rule 'z' requires decay input.z' forbids decay input.z' requires beta input.z' forbids beta input.ÚqueryÚkeyÚvaluer   z' must be rank 3 (B, T, H*D), got shape r   éÿÿÿÿz decay must be rank 3, got shape r   r   zdecay last dim z must equal kv_num_heads (z) or kv_num_heads*d_k (zbeta must be rank 3, got shape zbeta last dim z must be kv_num_heads (z) or 1.zpast_state shape z does not match (z, )Údtypeg        g      ð?).Nzbhdm,bhd->bhm.)Úaxiszbhd,bhdm->bhm)r   Úndimr   r%   r   ÚastypeÚnpÚfloat32r   r   ÚcopyÚzerosÚsqrtÚfloatÚrangeÚexpÚeinsumÚrepeat)+Úselfr!   r"   r#   Ú
past_stateÚdecayÚbetaÚ
chunk_sizeÚkv_num_headsÚq_num_headsÚscaleÚupdate_ruleÚgatingÚdelta_correctionÚnameÚarrÚ	out_dtyper   r   Ú_Úd_kÚd_vÚ
group_sizeÚq4Úk4Úv4Ú
decay_lastÚdecay4Ú	beta_lastÚbeta4Ústate_in_dtypeÚstateÚ	scale_valÚoutputsÚiÚq_tÚk_tÚv_tÚg_tÚ	retrievedÚstate_for_readÚoutputÚpresent_states+                                              r   Ú_runzLinearAttention._run   s*  € ð ÐØ'ˆKØÐIÐIÐIÝðN¨Kð Nð Nð Nñô ð ð Ð ,Ð"6ÝÐTÑUÔUÐUØ˜!ÒÐ˜|¨qÒ0Ð0°KÀ,Ñ4NÐRSÒ4SÐ4SÝð2 ð 2ð 2Ø!-ð2ð 2ð 2ñô ð ð
 Ð 8Ð8ˆØ&Ð*BÐBÐàð 	S�e�mÝÐQ¨[ÐQÐQÐQÑRÔRÐRØð 	R˜%Ð+ÝÐP¨[ÐPÐPÐPÑQÔQÐQØð 	R  ÝÐP¨[ÐPÐPÐPÑQÔQÐQØð 	Q DÐ$4ÝÐO¨[ÐOÐOÐOÑPÔPÐPà" EÐ*¨U°C¨L¸7ÀEÐ:JÐKð 	ð 	‰IˆD�#ØŒx˜1Š}ˆ}Ý ØÐPÐPÀCÄIÐPÐPÐPñô ð ð ð ”Kˆ	Ø”+‰ˆˆ1ˆaØŒk˜"Œo Ñ,ˆØŒk˜"Œo Ñ-ˆØ  LÑ0ˆ
å˜e [Ñ1Ô1×8Ò8½¼ÑDÔDˆÝ˜c <Ñ0Ô0×7Ò7½¼
ÑCÔCˆÝ˜e \Ñ2Ô2×9Ò9½"¼*ÑEÔEˆð ÐØŒz˜QŠˆÝ Ð!RÀEÄKÐ!RÐ!RÐ!RÑSÔSÐSØœ RœˆJØ˜\Ò)Ð)àŸš q¨!¨\¸1Ñ=Ô=×GÒGÈÈ1ÈaÐQRÑSÔS��Ø˜|¨cÑ1Ò1Ð1å)¨%°Ñ>Ô>��å ðT jð Tð TØ$ðTð TØ=IÈCÑ=OðTð Tð Tñô ð ð —]’]¥2¤:Ñ.Ô.ˆFð ÐØŒy˜AŠ~ˆ~Ý Ð!PÀ4Ä:Ð!PÐ!PÐ!PÑQÔQÐQØœ
 2œˆIØ ¨qÐ 1Ð1Ð1Ý ð. Yð .ð .Ø$ð.ð .ð .ñô ð ð
 —L’L  A y°!Ñ4Ô4×>Ò>¸qÀ!ÀQÈÑJÔJˆEØ—L’L¥¤Ñ,Ô,ˆEð Ð!ØÔ A |°S¸#Ð#>Ò>Ð>Ý ð<¨
Ô(8ð <ð <Øð<ð <Ø)ð<ð <Ø-0ð<ð <Ø47ð<ð <ð <ñô ð ð (Ô-ˆNØ×%Ò%¥b¤jÑ1Ô1×6Ò6Ñ8Ô8ˆEˆEà&ˆNÝ”H˜a ¨s°CÐ8ÅÄ
ÐKÑKÔKˆEð ˆ=˜E SšL˜LØ�bœg c™lœlÑ*ˆIˆIå˜e™œˆIõ ”(˜A˜{¨A¨sÐ3½2¼:ÐFÑFÔFˆÝ�q‘”ð 	ð 	ˆAØ�Q�Q�Q˜˜˜˜1˜a˜a˜a�Z”.ˆCØ�Q�Q�Q˜˜˜˜1˜a˜a˜a�Z”.ˆCØ�Q�Q�Q˜˜˜˜1˜a˜a˜a�Z”.ˆCð ð 7Ø˜Q˜Q˜Q    1 a a a˜ZÔ(�Ø¥¤ s¡¤¨IÔ 6Ñ6�ð  ð <åœI o°u¸cÑBÔB�	Ø˜A˜A˜A˜q˜q˜q ! Q Q Q˜JÔ'¨3°©?Ñ;�ð ˜C  Q Q Q¨ Ô-°°C¸¸q¸q¸q°LÔ0AÑAÑAˆEð ˜QŠˆØ!&��õ "$¤¨5°*À1Ð!EÑ!EÔ!E�à"+­b¬iØ  nñ/ô /ñ #ˆG�A�A�A�q�q�q˜!˜Q˜Q˜Q�JÑÐð
 ×"Ò" 1 a¨¨AÑ.Ô.×6Ò6°q¸!¸[È3Ñ=NÑOÔOˆØ—’˜yÑ)Ô)ˆð Ÿš ^Ñ4Ô4ˆà˜Ð&Ð&r   )NNNNNNNN)Ú__name__Ú
__module__Ú__qualname__rY   © r   r   r   r      sH   € € € € € ð ØØØØØØØð^'ð ^'ð ^'ð ^'ð ^'ð ^'r   r   )r   r   r   r   r	   r   )Ú
__future__r   Únumpyr)   Úonnx.reference.op_runr   r   r   r]   r   r   ú<module>ra      s‰   ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'ð?ð ?ð ?ð ?ð_'ð _'ð _'ð _'ð _'�eñ _'ô _'ð _'ð _'ð _'r   