
    .`i                        d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
mZmZmZ ddlmZmZmZ  ed          Z ede          Z ed	          Z G d
 deeef         ee                   Zdee         dee         fdZdeee         z  dee         fdZdddedee         eee         df         z  ded         deee                  fdZede	e         defd            Zede	e	e                  de	e         fd            Zde	e	e         ez           de	e         ez  fdZdee         dedeee                  fdZ d eee                  dee         fd!Z!d"ee         d#eegef         fd$Z"de#eef         d%ed&edd'fd(Z$d'S ))zl
Contains helpers that are applied to collections.

This is similar in concept to the `collections` module.
    )defaultdict)Callable	GeneratorHashableIterableMappingSequence)GenericLiteralTypeVar)TypeIsassert_neveroverloadT_K)bound_Vc                   z    e Zd ZdZdeeeg ef         f         fdZdedefdZ	dedeg ef         fdZ
d	 Zd
 ZdS )LazyDictz
    Evaluates dictionary items only when they are accessed.

    Adapted from: https://stackoverflow.com/a/47212782/5082708
    factoryc                 "    || _         i | _        d S N)_factory_dict)selfr   s     o/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/utils/collection_utils.py__init__zLazyDict.__init__   s    $&


    keyreturnc                     || j         vr5|| j        vrt          |           | j        |                     | j         |<   | j         |         S r   )r   r   KeyError)r   r   s     r   __getitem__zLazyDict.__getitem__    sN    dj  $-''smm#0dmC022DJsOz#r   valuec                     || j         |<   d S r   )r   )r   r   r$   s      r   __setitem__zLazyDict.__setitem__'   s    "cr   c                 *    t          | j                  S r   )iterr   r   s    r   __iter__zLazyDict.__iter__*   s    DM"""r   c                 *    t          | j                  S r   )lenr   r)   s    r   __len__zLazyDict.__len__-   s    4=!!!r   N)__name__
__module____qualname____doc__dictstrr   r   r   r#   r&   r*   r-    r   r   r   r      s         'S(2r6*:%: ; ' ' ' 's r    #s #8BF+; # # # ## # #" " " " "r   r   
maybe_listr    c                 N    t          | t                    r| nt          |           S )z5Convert iterable to list, unless it's already a list.)
isinstancelist)r5   s    r   as_listr9   1   s#    #J55K::4
;K;KKr   objc                 `    t          | t                    st          | t                    s| gS | S r   )r7   r3   r   )r:   s    r   as_iterr<   6   s1    #s :c8#<#< uJr   first)checkr$   typ.r>   )r=   allc                    t          | t                    sdS |dk    r)t          |           dk    pt          | d                   S |dk    rt          fd| D                       S t	          |           d S )NFr=   r   r@   c              3   8   K   | ]}t          |          V  d S r   )r7   ).0vr?   s     r   	<genexpr>zis_list_of.<locals>.<genexpr>H   s-      55!:a%%555555r   )r7   r8   r,   r@   r   )r$   r?   r>   s    ` r   
is_list_ofrF   <   s     eT"" u5zzQ;*U1Xs";";;	%5555u555555r   itemsc                     d S r   r4   rG   s    r   common_prefixrJ   M   s    03r   c                     d S r   r4   rI   s    r   rJ   rJ   Q   s    @Cr   c                 L   t          |           dk    rg S t          |           dk    r| d         S t          | t                     }|s
|dd         S t          dt          |          dz             D ]0}|d|         }| D ]!}|d|         |k    r|d|dz
           c c S "1|S )z,Find the longest prefix common to all items.r      )r   N)r,   minrange)rG   shortest	match_lenmatchitems        r   rJ   rJ   U   s    
5zzQ	
5zzQQx5c"""H |1c(mma/00 1 1	)$ 	1 	1DJYJ5(()a-000000 )	1 Or   lst
chunk_sizec              #   j   K   t          dt          |           |          D ]}| |||z            V  dS )z,Yield successive chunk_size chunks from lst.r   N)rO   r,   )rT   rU   is      r   
chunk_listrX   i   sN      1c#hh
++ & &!a*n$%%%%%& &r   listsc                     d | D             S )z)Flatten a list of lists to a single list.c                     g | ]	}|D ]}|
S r4   r4   )rC   sublistrS   s      r   
<listcomp>z$flatten_2d_lists.<locals>.<listcomp>q   s%    :::W'::$D::::r   r4   )rY   s    r   flatten_2d_listsr^   o   s    ::::::r   valuesr   c                    t          t          t          t                   f         t                    }| D ]&}| ||                                       |           '|                                S )z[
    Unlike [`itertools.groupby`][], groups are not broken by
    non-contiguous data.
    )r   r   r8   r   appendrG   )r_   r   groupsr$   s       r   full_groupbyrc   t   s_    
 T"X&t,,F ) )ss5zz!!%((((<<>>r   key1key2Nc                     |                      |          }|                      |          }||| |<   n|                     |d           ||| |<   dS |                     |d           dS )zSwap values between two keys.N)getpop)r:   rd   re   v1v2s        r   swap_dict_valuesrk      sp    	B	B	~D		d	~D			dr   )%r1   collectionsr   collections.abcr   r   r   r   r   r	   typingr
   r   r   typing_extensionsr   r   r   r   r   r   r3   r   r8   r9   r<   objecttypetuplerF   rJ   intrX   r^   rc   r2   rk   r4   r   r   <module>rt      s$    $ # # # # # V V V V V V V V V V V V V V V V , , , , , , , , , , < < < < < < < < < <GCLLWT"""WT]]" " " " "wsBw " " "8L LQ L L L L
Xa[ Xa[     &-	  	a5a#&	& >"	
 DG_   " 
 3# 33 3 3 3 
 3 
 C(1+. C8A; C C C 
 C(1+"34 !s9J    (&DG & &471C & & & &;HXa[1 ;d1g ; ; ; ;

" 
xb/A 
 
 
 
$r2v, b  t      r   