o
    .i                  
   @   s^  U d Z ddlmZmZ ddlmZ ddlmZmZm	Z	m
Z
mZ er+ddlZddlmZ e
dZe
dZeed	f ed	 B ed
 B eB Ze	ed< 	 eed	f ed	 B ed
 B eeef B ee B eedf B eB Ze	ed< 	 dee dee fddZededgdf ddddfddZedeegef deeeef B deeeef B fddZedeegef deee B deee B fddZedeegef deeedf B deeedf B fddZedeegef dee dee fddZdeegef deddee B fddZedeeegef deeeef B defddZedeeegef deee B defddZedeeegef deeedf B defddZedeeegef dee defd dZedeeegef dee d!edefd"dZ	d&deeegef eeegef B dee d!edeeB fd#dZdee defd$d%ZdS )'z5Helper functions to work with nested JSON structures.    )CallableIterable)reduce)TYPE_CHECKINGAny	TypeAliasTypeVaroverloadN)BatchedTensorInputs_T_UJSONTree[_T])r   .JSONTree.	_JSONTreevaluereturnc                 c   s`    t | tr|  D ]	}t|E dH  q
dS t | ttfr+| D ]	}t|E dH  qdS | V  dS )z5Iterate through each leaf in a nested JSON structure.N)
isinstancedictvaluesjson_iter_leaveslisttuple)r   v r   P/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/utils/jsontree.pyr   $   s   

r   funcztorch.Tensorr
   c                 C      d S Nr   r   r   r   r   r   json_map_leaves0      r   c                 C   r   r   r   r   r   r   r   r   7   r    c                 C   r   r   r   r   r   r   r   r   >   r    c                 C   r   r   r   r   r   r   r   r   E   r    c                 C   r   r   r   r   r   r   r   r   L   r    c                    sd   t |tr fdd| D S t |tr fdd|D S t |tr.t fdd|D S  |S )z9Apply a function to each leaf in a nested JSON structure.c                    s   i | ]
\}}|t  |qS r   r   ).0kr   r   r   r   
<dictcomp>Y   s    z#json_map_leaves.<locals>.<dictcomp>c                    s   g | ]}t  |qS r   r!   r"   r   r$   r   r   
<listcomp>[   s    z#json_map_leaves.<locals>.<listcomp>c                 3   s    | ]}t  |V  qd S r   r!   r&   r$   r   r   	<genexpr>]   s    z"json_map_leaves.<locals>.<genexpr>)r   r   itemsr   r   r   r   r$   r   r   S   s   


c                C   r   r   r   r   r   r   r   json_reduce_leavesb      r*   c                C   r   r   r   r   r   r   r   r*   j   r+   c                C   r   r   r   r   r   r   r   r*   r   r+   c                C   r   r   r   r   r   r   r   r*   z   r+   initialc                C   r   r   r   r   r   r,   r   r   r   r*      s   c                C   s&   |du rt | t|S t | t||S )z
    Apply a function of two arguments cumulatively to each leaf in a
    nested JSON structure, from left to right, so as to reduce the
    sequence to a single value.
    .)r   r   r-   r   r   r   r*      s   c                 C   s   t dd t| D S )z6Count the number of leaves in a nested JSON structure.c                 s   s    | ]}d V  qdS )   Nr   )r"   _r   r   r   r(      s    z$json_count_leaves.<locals>.<genexpr>)sumr   )r   r   r   r   json_count_leaves   s   r1   ).)__doc__collections.abcr   r   	functoolsr   typingr   r   r   r   r	   torchvllm.multimodal.inputsr
   r   r   r   strr   r   r   __annotations__r   r   r   r*   intr1   r   r   r   r   <module>   s   




	





