o
    .i#                     @   sh   d dl mZ d dlmZmZmZmZmZmZ d dl	Z	d dl
mZ eeZG dd dZG dd dZdS )	    )	UnionType)	AnnotatedAnyUnionget_args
get_originget_type_hintsN)init_loggerc                       sh   e Zd ZdddeeB dee dB ddf fddZdedeeeB d	f fd
dZdefddZ	  Z
S )TensorShapeN)dynamic_dimsdimsr   returnc                   s*   t    || _|r|| _d S t | _d S N)super__init__r   setr   )selfr   r   	__class__ U/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/utils/tensor_schema.pyr      s   
zTensorShape.__init__bindings.c                 K   sN   t ttB   }| jD ]}t|tr||v r|||  q
|| q
t|S r   )listintstrr   
isinstanceappendtuple)r   r   resolveddimr   r   r   resolve   s   
zTensorShape.resolvec                 C   sb   g }| j D ]"}t|tr || jv r|| d q|| q|t| qdd| dS )z3Return a string representation of the tensor shape.*(z, ))r   r   r   r   r   join)r   dim_strsr   r   r   r   __str__!   s   


zTensorShape.__str__)__name__
__module____qualname__r   r   r   r   r   r    r&   __classcell__r   r   r   r   r
      s    

	r
   c                       s`  e Zd Zddddedeeef dB deddf fdd	Zd
edefddZ	d(d
ededefddZ
deedf deedf deeeB df dee def
ddZdeedf defddZ	d)dededeeeB df dee deedf deedf fddZd eedf deeeB df ded!eeef dee ddfd"d#Zd*d$d%Zd*d&d'Z  ZS )+TensorSchemaTN)validateresolve_bindingsr,   r-   kwargsr   c                   sJ   t    |r	|ni | _| D ]
\}}t| || q|r#|   d S d S r   )r   r   _resolve_bindingsitemssetattrr,   )r   r,   r-   r.   keyvaluer   r   r   r   0   s   
zTensorSchema.__init__r2   c                 C   s
   t | |S r   getattr)r   r2   r   r   r   __getitem__A   s   
zTensorSchema.__getitem__defaultc                 C   s   t | ||S r   r4   )r   r2   r7   r   r   r   getD   s   zTensorSchema.getactual.	referenceexpected_shaper   c           	      C   sn   t |t |kst |t |krdS tt||D ]\}\}}|t | |  }||v r-q||kr4 dS qdS )NFT)len	enumeratezip)	r   r9   r:   r;   r   iarr   r   r   r   _match_shape_with_dynamicG   s    z&TensorSchema._match_shape_with_dynamicidxsc                 C   s   |sdS t t|S )N )r   r   )r   rC   r   r   r   _fmt_indexer^   s   zTensorSchema._fmt_indexerr   r3   
field_nameleading_idxsc           
      C   s   t |ttfr	dS t |tjr|jS t |ttfs)t| | 	| dt
| t|dkr;t| | 	| dt|D ]9\}}| j|||dd |||f d}|dkr[|}	q?| ||	||sxt| | 	| d|	 d	| d
| d	q?t|f|	 S )z-Validate a field and return the actual shape.r   zI is not one of the expected types: int, float, Tensor, list, tuple. Got: r   z is an empty sequence   N)rG   z contains inconsistent shapes: z (index 0) vs z (index r#   )r   r   floattorchTensorshaper   r   	TypeErrorrE   typer<   
ValueErrorr=   _validate_fieldrB   )
r   r3   rF   r;   r   rG   r?   vrL   first_shaper   r   r   rP   d   sR   	
zTensorSchema._validate_fieldactual_shape	shape_envc                 C   s  t |t |krt| dt | dt | d| d| 	t|D ]h\}}||v r+q"t|trN|| |krMt| d| d| d||  d| d| q"t|tr}||v rv|| || krut| d| d| d	||  d||  	q"|| ||< q"t| d| d
t| dS )zAValidate that the actual tensor shape matches the expected shape.z
 has rank z but expected z. Expected shape: z
, but got z dim[z] expected z, got z] expected 'z'=z] has unsupported type: N)r<   rO   r=   r   r   r   rM   rN   )r   rS   r;   rF   rT   r   r?   r   r   r   r   _validate_tensor_shape_expected   sZ   


z,TensorSchema._validate_tensor_shape_expectedc              	   C   s
  t | jdd}tttf  }| D ]p\}}t| |r"t| |d u rM|}t|t	u r2t
|}|d }t|tthv rEt
|}td |v rEqtd| dt| |}t|d urt
|}|D ]#}t|tr|jdi | j}	| |||	|j}
| |
|	|||j q^qd S )NTinclude_extrasr   zRequired field 'z' is missingr   )r   r   dictr   r   r0   hasattrr5   r   r   r   r   r   rN   rO   r   r
   r    r/   rP   r   rU   )r   
type_hintsrT   rF   
field_typeactual_typeargsr3   argr;   rS   r   r   r   r,      sD   

zTensorSchema.validatec                 C   sn   t d| jj t| jdd}| D ]!\}}t|dur4t|}|D ]}t|t	r3t d|t
| q#qdS )z,Print TensorShape annotations for debugging.zShapes in %s:TrV   Nz  %s: %s)loggerdebugr   r'   r   r0   r   r   r   r
   r   )r   rZ   rF   r[   r]   r^   r   r   r   print_shapes   s   
zTensorSchema.print_shapesr   )r   )r   N)r'   r(   r)   boolrX   r   r   r   r   r6   r8   r   r   rB   rE   objectrP   rU   r,   ra   r*   r   r   r   r   r+   /   sn    





7



,.r+   )typesr   typingr   r   r   r   r   r   rJ   vllm.loggerr	   r'   r_   r
   r+   r   r   r   r   <module>   s    "