o
    }oi                     @   sZ   d dl Z d dlZd dlmZmZ d dlZd dlZd dlm	Z	 d dl
mZ G dd dZdS )    N)	MagicMockpatch)ImageNemoQueryMultimodalc                   @   s   e Zd Zejdd Zejdd Zejdd Zejdd Zd	d
 Z	dd Z
eddd Zdd Zdd Zeddd Zeddd Zeddd ZdS )TestNemoQueryMultimodalc                 C   s   t ddddS N	localhost
test_modelnevaurl
model_name
model_typer   )self r   V/home/ubuntu/.local/lib/python3.10/site-packages/tests/deploy/test_query_multimodal.pyquery_multimodal   s   z(TestNemoQueryMultimodal.query_multimodalc                 C   sT   t jddd}tjdddd}||j |jW  d    S 1 s#w   Y  d S )Nz.jpgFsuffixdeleteRGB)d   r   red)color)tempfileNamedTemporaryFiler   newsavename)r   tmpimgr   r   r   
mock_image   s
   $z"TestNemoQueryMultimodal.mock_imagec                 C   8   t jddd}|jW  d    S 1 sw   Y  d S )Nz.mp4Fr   r   r   r   r   r    r   r   r   
mock_video'      $z"TestNemoQueryMultimodal.mock_videoc                 C   r#   )Nz.wavFr   r$   r%   r   r   r   
mock_audio.   r'   z"TestNemoQueryMultimodal.mock_audioc                 C   s<   t dddd}|jdksJ |jdksJ |jdksJ d S r   )r   r   r   r   )r   nqr   r   r   	test_init5   s   z!TestNemoQueryMultimodal.test_initc                 C   s:   | |}t|tjsJ |jd dksJ t| d S )Nr      )setup_media
isinstancenpndarrayshapeosunlink)r   r   r"   resultr   r   r   test_setup_media_image_local;   s   
z4TestNemoQueryMultimodal.test_setup_media_image_localzrequests.getc                 C   s   t  }d|_||_td)}t  }||j_||_|d}t|tjs%J |j	d dks.J W d    d S 1 s9w   Y  d S )Ns   fake_image_datazPIL.Image.openzhttp://example.com/image.jpgr   r+   )
r   contentreturn_valuer   convertr,   r-   r.   r/   r0   )r   mock_getr   mock_responsemock_image_openr"   r3   r   r   r   test_setup_media_image_urlA   s   

"z2TestNemoQueryMultimodal.test_setup_media_image_urlc                 C   sP   dd t dD }||dksJ dd t dD }||}|dks&J d S )Nc                 S      g | ]}t d qS r   r      r.   zeros.0_r   r   r   
<listcomp>T       z:TestNemoQueryMultimodal.test_frame_len.<locals>.<listcomp>r   c                 S   r<   r=   r@   rB   r   r   r   rE   X   rF   i,     )range	frame_len)r   r   framesr3   r   r   r   test_frame_lenR   s
   
z&TestNemoQueryMultimodal.test_frame_lenc                 C   s6   dd t dD }d}|||}t||ksJ d S )Nc                 S   r<   r=   r@   rB   r   r   r   rE   ]   rF   zFTestNemoQueryMultimodal.test_get_subsampled_frames.<locals>.<listcomp>
      )rH   get_subsampled_frameslen)r   r   rJ   subsample_lenr3   r   r   r   test_get_subsampled_frames\   s   z2TestNemoQueryMultimodal.test_get_subsampled_framesz3nemo.deploy.multimodal.query_multimodal.ModelClientc                 C   sz   t  }dtdgi|j_t tjdg|j_||jj_|j	d|ddddd	}t
|tjs.J |d
 dks6J t| d S )Noutputsztest response)dtypeztest prompt   r+   g        g      ?)
input_textinput_mediamax_output_lentop_ktop_ptemperaturer   )r   r.   arrayinfer_batchr6   bytes_model_configrR   	__enter__queryr-   r/   r1   r2   )r   mock_model_clientr   r"   mock_client_instancer3   r   r   r   
test_queryb   s   
	z"TestNemoQueryMultimodal.test_queryz3nemo.deploy.multimodal.query_multimodal.VideoReaderc                 C   sN   t dddd}dd tdD }||_||}t|tjs J t| d S )Nr	   r
   z
video-nevar   c                 S   s   g | ]	}t d d dqS )c                   S   s
   t dS )Nr>   r@   r   r   r   r   <lambda>|   s   
 zKTestNemoQueryMultimodal.test_setup_media_video.<locals>.<listcomp>.<lambda>)asnumpy)r   rB   r   r   r   rE   |   s    zBTestNemoQueryMultimodal.test_setup_media_video.<locals>.<listcomp>rL   )	r   rH   r6   r,   r-   r.   r/   r1   r2   )r   mock_video_readerr&   r)   mock_framesr3   r   r   r   test_setup_media_videow   s   
z.TestNemoQueryMultimodal.test_setup_media_videozsoundfile.readc                 C   s\   t dddd}tddf|_||}t|tsJ d|v s!J d|v s'J t| d S )	Nr	   r
   salmr   i  i>  input_signalinput_signal_length)	r   r.   rA   r6   r,   r-   dictr1   r2   )r   mock_sf_readr(   r)   r3   r   r   r   test_setup_media_audio   s   
z.TestNemoQueryMultimodal.test_setup_media_audioN)__name__
__module____qualname__pytestfixturer   r"   r&   r(   r*   r4   r   r;   rK   rQ   rc   rh   rn   r   r   r   r   r      s*    







r   )r1   r   unittest.mockr   r   numpyr.   rr   PILr   'nemo.deploy.multimodal.query_multimodalr   r   r   r   r   r   <module>   s   