o
    )iJ$                     @   s`   d dl mZ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 )    )	AnnotatedAnyOptionalUnionget_args
get_originget_type_hintsN)init_loggerc                       sx   e Zd Zdddeeef deee  ddf fddZde	eef de
eeef 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__ d/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/utils/tensor_schema.pyr      s   
zTensorShape.__init__bindings.c                 K   sD   g }| j D ]}t|tr||v r|||  q|| qt|S r   )r   
isinstancestr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.*(, ))r   r   r   r   r   join)r   Zdim_strsr   r   r   r   __str__#   s   


zTensorShape.__str__)__name__
__module____qualname__r   intr   r   r   r   dictr   r   r$   __classcell__r   r   r   r   r
      s    




r
   c                       sZ  e Zd Zddddedeeeef  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ef df dee def
ddZdeeej eejdf f dedeeeef df dee deedf f
ddZdeedf deeeef 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   4   s   
zTensorSchema.__init__r2   c                 C   s
   t | |S r   getattr)r   r2   r   r   r   __getitem__E   s   
zTensorSchema.__getitem__defaultc                 C   s   t | ||S r   r4   )r   r2   r7   r   r   r   getH   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_dynamicK   s    z&TensorSchema._match_shape_with_dynamicr3   
field_namec              	   C   s   |d }t |D ]/\}}t|tjst| d| d| |j|j||s7t| d|j d|j d| qt|f|j S )z=Validate a list/tuple of tensors and return the actual shape.r   [z] is not a torch.Tensorz contains inconsistent shapes: z vs z
 at index )r=   r   torchTensor
ValueErrorrB   shaper<   )r   r3   rC   r;   r   firstr?   vr   r   r   _validate_nested_tensorsb   s&   
z%TensorSchema._validate_nested_tensorsactual_shape	shape_envc                 C   s  t |t |krt| dt | dt | t|D ]b\}}||v r%qt|trB|| |krAt| d| d| d||  qt|trq||v rj|| || krit| 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 dim[z] expected z, got z] expected 'z'=z] has unsupported type: N)r<   rG   r=   r   r(   r   	TypeErrortype)r   rL   r;   rC   rM   r   r?   r   r   r   r   _validate_tensor_shape_expected   s>   


z,TensorSchema._validate_tensor_shape_expectedc              	   C   s  t | jdd}i }| D ]\}}t| |rt| |d u rF|}t|tu r-t|}|d }t|tu r>t|}t	d |v r>qt
d| dt| |}t|d urt|}|D ]x}t|tr|jd
i | j}	t|ttfr|rt|d tjr| |||	|j}
nC|rt|f}
n;t
| dt|tjr|j}
n*g }|D ]}t|dr|t|j q|t| qd|}t
| d	| | |
|	|||j qWqd S )NTinclude_extrasr   zRequired field 'z' is missingz is an empty listr%   r!   z# is not one of the expected types: r   )r   r   r0   hasattrr5   r   r   r   r   rO   rG   r   r
   r   r/   listr   rE   rF   rK   r   r<   rH   r   r   r%   r#   rP   )r   
type_hintsrM   rC   
field_typeZactual_typeargsr3   argr;   rL   Z
type_namesZexpected_typesr   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:TrQ   Nz  %s: %s)loggerdebugr   r%   r   r0   r   r   r   r
   r   )r   rU   rC   rV   rW   rX   r   r   r   print_shapes   s   
zTensorSchema.print_shapesr   )r   N)r%   r&   r'   boolr   r)   r   r(   r   r   r6   r8   r   r   r   rB   rT   rE   rF   rK   rP   r,   r[   r*   r   r   r   r   r+   2   sf    








!Br+   )typingr   r   r   r   r   r   r   rE   Zvllm.loggerr	   r%   rY   r
   r+   r   r   r   r   <module>   s   $%