+
    9i                     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   "b/var/www/html/photoedit/myenv/lib/python3.14/site-packages/onnxruntime/transformers/past_helper.py__annotate__ PastKeyValuesHelper.__annotate__   s     2 2D 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"" %QC(,?s*CD&qc*.>qc,BC
 ## &aS)-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,h0QRUVeRfQg.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UQYQ^a!e+,Q^a!e+a/0	 's   A5A8)r$   tupler   )r4   r   s   ffr   group_by_layer"PastKeyValuesHelper.group_by_layer7   s[     4yA
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"      U5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1Aa%C#(#!G,#sN3#sNQ$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  rgrV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,h0QRUVeRfQg.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"      uU\\/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 )zProcess 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     29S)Q.s??S
 'Zz"ALL1#+aS@Q.RS.R1**.RST #z"ALLA3/?<PQsAS.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   