+
    G-j–  ã                   óN   € ^ RI t ^ RIt] P                  ! ]4      t ! R R4      tR# )é    Nc                   óÀ   a € ] tR t^t o Rt]RV 3R lR ll4       t]R 4       t]R 4       t]V 3R lR l4       t	]RV 3R lR	 ll4       t
]RV 3R
 lR ll4       tRtV tR# )ÚPastKeyValuesHelperzEHelper functions to process past key values for encoder-decoder modelc                ó    <€ V ^8„  d   QhRS[ /# )é   Úpresent)Úbool)ÚformatÚ__classdict__s   "€Úu/Volumes/fast/ai/experiments/nudenet-smoke/.venv/lib/python3.14/site-packages/onnxruntime/transformers/past_helper.pyÚ__annotate__Ú PastKeyValuesHelper.__annotate__   s   ø€ ÷ 2ñ 2©Dñ 2ó    c                óê   € . p. p\        V 4       FY  pTP                  V'       d   R V 2RV 2.M	RV 2RV 2.4       TP                  V'       d   RV 2RV 2.M	RV 2RV 2.4       K[  	  W#,           # )Úpresent_key_self_Úpresent_value_self_Úpast_key_self_Úpast_value_self_Úpresent_key_cross_Úpresent_value_cross_Úpast_key_cross_Úpast_value_cross_)ÚrangeÚextend)Ú
num_layersr   Úpast_self_namesÚpast_cross_namesÚis   &&   r   Úget_past_namesÚ"PastKeyValuesHelper.get_past_names   s«   € àˆØÐÜ�zÖ"ˆAØ×"Ñ"çð % Q CÐ(Ð,?À¸sÐ*CÑDà& q cÐ*Ð.>¸q¸cÐ,BÐCôð
 ×#Ñ#çð & a SÐ)Ð-AÀ!ÀÐ+EÑFà'¨ sÐ+Ð/@ÀÀÐ-DÐEöñ #ð Õ1Ð1r   c                óÔ   € . p. p\        V 4       FS  w  r4\        V4      ^8X  g   Q R\        V4       24       hVw  ppppVP                  WV.4       VP                  Wx.4       KU  	  W3# )a›  Split present state from grouped by layer to grouped by self/cross attention.
Before: (past_key_self_0, past_value_self_0, past_key_cross_0, past_value_cross_0), (past_key_self_1, past_value_self_1, past_key_cross_1, past_value_cross_1), ...
After: (past_key_self_0, past_value_self_0, past_key_self_1, past_value_self_1, ...), (past_key_cross_0, past_value_cross_0, past_key_cross_1, past_value_cross_1, ...)

ú!Expected to have four items. Got ©Ú	enumerateÚlenr   )	Úpresent_key_valuesÚpresent_selfÚpresent_crossÚ_iÚpresent_layer_iÚpresent_key_selfÚpresent_value_selfÚpresent_key_crossÚpresent_value_crosss	   &        r   Úgroup_by_self_or_crossÚ*PastKeyValuesHelper.group_by_self_or_cross"   s�   € ð ˆØˆÜ#,Ð-?Ö#@ÑˆBÜ�Ó'¨1Ô,ÐhÐ0QÔRUÐVeÓRfÐQgÐ.hÓhÐ,ð  ñØ Ø"Ø!Ø#à×ÑÐ!1Ð FÔGØ× Ñ Ð"3Ð!IÖJñ $Að Ð*Ð*r   c                óÄ   a a€ \        S 4      ^S,          8X  g   Q h\        ;QJ d!    . VV 3R l\        S4       4       F  NK  	  5# ! VV 3R l\        S4       4       4      # )a‘  Reorder past state from grouped by self/cross attention to grouped by layer.
Before: past_key_self_0, past_value_self_0, past_key_self_1, past_value_self_1, ..., past_key_cross_0, past_value_cross_0, past_key_cross_1, past_value_cross_1, ...
After: (past_key_self_0, past_value_self_0, past_key_cross_0, past_value_cross_0), (past_key_self_1, past_value_self_1, past_key_cross_1, past_value_cross_1),
c              3   óô   <"  € T Fm  pS^V,          ,          S^V,          ^,           ,          S^S,          ^V,          ,           ,          S^S,          ^V,          ,           ^,           ,          .x € Ko  	  R# 5i)r   N© )Ú.0r   r   Úpasts   & €€r   Ú	<genexpr>Ú5PastKeyValuesHelper.group_by_layer.<locals>.<genexpr>>   sg   øé € ð 
ñ '�ð �Q˜•U•Ø�Q˜•U˜Q•Y•Ø�Q˜•^ a¨!¥eÕ+Õ,Ø�Q˜•^ a¨!¥eÕ+¨aÕ/Õ0õ	ó 'ùs   ƒA5A8)r$   Útupler   )r4   r   s   ffr   Úgroup_by_layerÚ"PastKeyValuesHelper.group_by_layer7   s[   ù€ ô �4‹y˜A 
�NÔ*Ð*Ð*ßŒuõ 
ô ˜:Ô&ó
�uð 	
ˆuõ 
ô ˜:Ô&ó
ó 
ð 	
r   c                óT   <€ V ^8„  d   QhRS[ S[ S[P                  ,          ,          /# ©r   Úpast_key_values©r7   ÚtorchÚTensor)r	   r
   s   "€r   r   r   I   s"   ø€ ÷ ñ ©U±5¹¿¹Õ3FÕ-Gñ r   c                ó  € Rp\        V 4      ^,          p\        \        V 4      ^,          4       FN  p^V,          pVW,          W^,           ,          WV,           ,          WV,           ^,           ,          33,          pKP  	  V# )a˜  Categorize present_key_values from self and cross attention to layer by layer.

Reorder past state from grouped by self/cross attention to grouped by layer.
Before: past_key_self_0, past_value_self_0, past_key_self_1, past_value_self_1, ...,
        past_key_cross_0, past_value_cross_0, past_key_cross_1, past_value_cross_1, ...
After: (past_key_self_0, past_value_self_0, past_key_cross_0, past_value_cross_0),
        (past_key_self_1, past_value_self_1, past_key_cross_1, past_value_cross_1),

Args:
    present_key_values: From past_key_values of a model (group by self and cross attention)

Returns:
    past_tuples: present key and values grouped by layer.
r2   )r$   r   )r<   Úpast_tuplesÚhalf_idxr   Úidxs   &    r   Úback_group_by_layerÚ'PastKeyValuesHelper.back_group_by_layerH   s   € ð  ˆÜ�Ó'¨1Õ,ˆÜ”s˜?Ó+¨qÕ0Ö1ˆAØ�a•%ˆCØà#Õ(Ø#¨!¥GÕ,Ø#¨s¥NÕ3Ø#¨s¥N°QÕ$6Õ7ð	ðõ ŠKñ 2ð Ðr   c                óJ   <€ V ^8„  d   QhRS[ S[P                  ,          RS[/# )r   r%   Úconcat)r7   r>   r?   r   )r	   r
   s   "€r   r   r   g   s%   ø€ ÷ /ñ /±E¹%¿,¹,Õ4Gð /ÑQUñ /r   c                óð   € . p. p\        V 4       FQ  w  rE\        V4      ^8X  g   Q R\        V4       24       hVw  rgr‰VP                  Wg.4       VP                  W‰.4       KS  	  V'       d	   W#,           # W#3# )a8  Categorize present_key_values into self and cross attention.

Split present state from grouped by layer to grouped by self/cross attention.
Before: (past_key_self_0, past_value_self_0, past_key_cross_0, past_value_cross_0),
        (past_key_self_1, past_value_self_1, past_key_cross_1, past_value_cross_1), ...
After: (past_key_self_0, past_value_self_0, past_key_self_1, past_value_self_1, ...),
        (past_key_cross_0, past_value_cross_0, past_key_cross_1, past_value_cross_1, ...)

Args:
    present_key_values: From past_key_values of a model (group by layer)
    concat: If concat self attention with cross attention key/value to return

Returns:
    present_self (Tuple[torch.Tensor]): present key and values from self attention
    present_cross (Tuple[torch.Tensor]): present key and values from cross attention
r!   r"   )
r%   rG   r&   r'   Ú_r)   r*   r+   r,   r-   s
   &&        r   Úgroup_by_self_and_crossÚ+PastKeyValuesHelper.group_by_self_and_crossf   s‘   € ð$ ,.ˆØ,.ˆÜ"+Ð,>Ö"?ÑˆAÜ�Ó'¨1Ô,ÐhÐ0QÔRUÐVeÓRfÐQgÐ.hÓhÐ,Ø[jÑXÐÐ2CØ×ÑÐ!1Ð FÔGØ× Ñ Ð"3Ð!IÖJñ	 #@÷
 ØÕ/Ð/àÐ.Ð.r   c                óT   <€ V ^8„  d   QhRS[ S[ S[P                  ,          ,          /# r;   r=   )r	   r
   s   "€r   r   r   …   s"   ø€ ÷ ñ ©©u±U·\±\Õ/BÕ)Cñ r   c                ó„  € . pV'       d   \        V 4      ^,          M
\        V 4      pV'       g   RMRp\        V4       F2  pTP                  RV 2RV 23 Uu. uF  qdV,           NK  	  up4       K4  	  \        V4       F2  pTP                  RV 2RV 23 Uu. uF  qdV,           NK  	  up4       K4  	  V# u upi u upi )zžProcess input names of model wrapper.

Args:
    past_key_values: Consider `self` and `cross` past_key_values

Returns:
    names (List[string]): input names
Úpast_Úpresent_Ú	key_self_Úvalue_self_Ú
key_cross_Úvalue_cross_)r$   r   r   )r<   ÚencoderÚnamesr   Úprefixr   Úss   &&     r   Úget_input_namesÚ#PastKeyValuesHelper.get_input_names„   s¾   € ð ˆß29”S˜Ó)¨QÖ.¼sÀ?Ó?Sˆ
ß '‘¨ZˆÜ�zÖ"ˆAØ�L‰L°¸1¸#¨À+ÈaÈSÐ@QÑ.RÓSÑ.R¨ 1Ÿ*˜*Ñ.RÑSÖTñ #ä�zÖ"ˆAØ�L‰L°¸A¸3Ð/?À<ÐPQÈsÐASÑ.TÓUÑ.T¨ 1Ÿ*˜*Ñ.TÑUÖVñ #àˆùò TùâUs   ÁB8
ÂB=
r2   N)F)T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústaticmethodr   r.   r8   rD   rJ   rX   Ú__static_attributes__Ú__classdictcell__)r
   s   @r   r   r      s�   ø‡ € ÙOà÷2ñ 2ó ð2ð  ñ+ó ð+ð( ñ
ó ð
ð  ÷ó ðð: ÷/ñ /ó ð/ð: ÷ñ ó ör   r   )Úloggingr>   Ú	getLoggerrZ   Úloggerr   r2   r   r   Ú<module>re      s)   ðó ã à	×	Ò	˜8Ó	$€÷Gó Gr   