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   W/home/ubuntu/veenaModal/venv/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   