o
    ˜à·ií  ã                   @   s~   d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlZe
dƒZeG dd„ de	e ƒƒZG d	d
„ d
ee	e ƒZdS )é    )ÚABCÚabstractmethod)Ú	dataclass)ÚPath)ÚAnyÚGenericÚTypeVarNÚ_Tc                   @   s^   e Zd ZU dZeed< eed< dejfdd„Z	dd„ Z
d	eeef fd
d„Zdefdd„ZdS )ÚMediaWithBytesa±  
    Wrapper that couples a media object with its original encoded bytes.

    This ensures the raw bytes and media object remain synchronized,
    preventing cache corruption from in-place modifications.

    The wrapper delegates attribute access to the underlying media object,
    making it behave transparently like the wrapped type (e.g., PIL.Image).

    NOTE: Currently, this wrapper is used only for the image modality.
    ÚmediaÚoriginal_bytesÚreturnc                 O   s   t j| jg|¢R i |¤ŽS )z2Allow np.array(obj) to return np.array(obj.media).)ÚnpÚarrayr   )ÚselfÚargsÚkwargs© r   úP/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/multimodal/media/base.pyÚ	__array__   s   zMediaWithBytes.__array__c                 C   s
   | j  ¡ S ©N)Ú__dict__Úcopy)r   r   r   r   Ú__getstate__#   s   
zMediaWithBytes.__getstate__Ústatec                 C   s   | j  |¡ d S r   )r   Úupdate)r   r   r   r   r   Ú__setstate__&   s   zMediaWithBytes.__setstate__Únamec                 C   s   t | j|ƒS )z9Delegate attribute access to the underlying media object.)Úgetattrr   )r   r   r   r   r   Ú__getattr__)   s   zMediaWithBytes.__getattr__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   Ú__annotations__Úbytesr   Úndarrayr   r   ÚdictÚstrr   r   r   r   r   r   r   r
      s   
 r
   c                   @   sR   e Zd Zededefdd„ƒZedededefdd„ƒZede	defd	d
„ƒZ
dS )ÚMediaIOÚdatar   c                 C   ó   t ‚r   ©ÚNotImplementedError)r   r*   r   r   r   Ú
load_bytes/   ó   zMediaIO.load_bytesÚ
media_typec                 C   r+   )zm
        List of media types:
        https://www.iana.org/assignments/media-types/media-types.xhtml
        r,   )r   r0   r*   r   r   r   Úload_base643   s   zMediaIO.load_base64Úfilepathc                 C   r+   r   r,   )r   r2   r   r   r   Ú	load_file;   r/   zMediaIO.load_fileN)r    r!   r"   r   r%   r	   r.   r(   r1   r   r3   r   r   r   r   r)   .   s    r)   )Úabcr   r   Údataclassesr   Úpathlibr   Útypingr   r   r   Únumpyr   r	   r
   r)   r   r   r   r   Ú<module>   s   