o
    )i                     @   s   d dl Z d dlZd dlmZmZ d dlmZ d dlZd dl	Z	d dl
m
Z
 d dlmZ d dlmZ d dlmZ eeZeeee f Z	 G dd	 d	ZdS )
    N)IterableMapping)Union)blake3)Image)init_logger)convert_image_modec                   @   s   e Zd Zededeeef fddZede	dedefddZ
ede	dedeeeeeef f  fdd	Zed
ede	fddZdS )MultiModalHasherobjreturnc                 C   s  t |tr
|dS t |ttfr|S t |ttfr!t|	 S t |t
j
rQ| }t
jjj|v rEt |t
jjj tjrE|t
jjj jS | dtt|dS t |tjr_| d| S t |tjr}|jjrl|jn|	 }| d|jj|j|dS tdt| t !|S )Nutf-8imageZRGBAZtensorndarray)dtypeshapedataz=No serialization method found for %s. Falling back to pickle.)"
isinstancestrencodebytes
memoryviewintfloatnparraytobytesr   ZgetexifZExifTagsZBaseZImageIDuuidUUIDitem_to_bytesZasarrayr   torchZTensornumpyr   flagsc_contiguousr   r   r   loggerwarningtypepickledumps)clsr
   ZexifZarr_data r)   b/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/multimodal/hasher.pyserialize_item   s:   


zMultiModalHasher.serialize_itemkeyc                 C   s   d dd | ||D S )N    c                 s   s    | ]	\}}|| V  qd S Nr)   ).0kbZvbr)   r)   r*   	<genexpr>D   s    z1MultiModalHasher.item_to_bytes.<locals>.<genexpr>)joiniter_item_to_bytes)r(   r,   r
   r)   r)   r*   r   >   s   zMultiModalHasher.item_to_bytesc           	      c   s    t |ttfr!t|D ]\}}| | d| |E d H  qd S t |tr?| D ]\}}| | d| |E d H  q*d S |d}| |}||fV  d S )N.r   )	r   listtuple	enumerater3   dictitemsr   r+   )	r(   r,   r
   ielemkv	key_bytesZvalue_bytesr)   r)   r*   r3   F   s   


z#MultiModalHasher.iter_item_to_byteskwargsc                 K   sJ   t  }| D ]\}}| ||D ]\}}|| || qq| S r.   )r   r9   r3   update	hexdigest)r(   r?   Zhasherr<   r=   Zk_bytesZv_bytesr)   r)   r*   hash_kwargsX   s   
zMultiModalHasher.hash_kwargsN)__name__
__module____qualname__classmethodobjectr   r   r   r+   r   r   r   r6   r3   rB   r)   r)   r)   r*   r	      s*    "r	   )r&   r   collections.abcr   r   typingr   r    r   r   r   ZPILr   Zvllm.loggerr   Zvllm.multimodal.imager   rC   r#   r   r5   ZMultiModalHashDictr	   r)   r)   r)   r*   <module>   s   