a
    i‚jZ  ã                   @   sd   d Z ddlmZ ddlmZ ddlZddlZe eedƒd¡G dd„ dej	ƒƒZ
ed	kr`e ¡  dS )
zTests for the MuJoCo renderer.é    )Úabsltest)ÚparameterizedNZ	GLContextzMuJoCo rendering is disabledc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚMuJoCoRendererTestc              	   C   s   d}t j |¡}t  |¡}t  |dd¡T}t  ||¡ |  td¡ | |d¡ W d   ƒ n1 sd0    Y  W d   ƒ n1 s‚0    Y  d S )NúH
<mujoco>
  <worldbody>
    <camera name="a"/>
  </worldbody>
</mujoco>
é2   zcamera "b" does not existÚb©	ÚmujocoÚMjModelÚfrom_xml_stringÚMjDataÚRendererÚ
mj_forwardÚassertRaisesRegexÚ
ValueErrorÚupdate_scene©ÚselfÚxmlÚmodelÚdataÚrenderer© r   úT/home/ghrups/robot-bench/.venv/lib64/python3.9/site-packages/mujoco/renderer_test.pyÚ!test_renderer_unknown_camera_name   s    
z4MuJoCoRendererTest.test_renderer_unknown_camera_namec              	   C   s   d}t j |¡}t  |¡}t  |dd¡T}t  ||¡ |  td¡ | |d¡ W d   ƒ n1 sd0    Y  W d   ƒ n1 s‚0    Y  d S )Nr   r   z-2 is out of rangeéþÿÿÿr   r   r   r   r   Ú test_renderer_camera_under_range+   s    
z3MuJoCoRendererTest.test_renderer_camera_under_rangec              	   C   s   d}t j |¡}t  |¡}t  |dd¡T}t  ||¡ |  td¡ | |d¡ W d   ƒ n1 sd0    Y  W d   ƒ n1 s‚0    Y  d S )Nr   r   z1 is out of rangeé   r   r   r   r   r   Útest_renderer_camera_over_range:   s    
z2MuJoCoRendererTest.test_renderer_camera_over_rangec                 C   s˜   d}t j |¡}t  |¡}t  |dd¡\}t  ||¡ | |d¡ | ¡  ¡ }d}|D ]}|dkrVd} qlqV|  	|¡ W d   ƒ n1 sŠ0    Y  d S )Nú¶
<mujoco>
  <worldbody>
    <camera name="closeup" pos="0 -6 0" xyaxes="1 0 0 0 1 100"/>
    <geom name="white_box" type="box" size="1 1 1" rgba="1 1 1 1"/>
  </worldbody>
</mujoco>
r   ÚcloseupFr   T)
r	   r
   r   r   r   r   r   ÚrenderÚflattenÚ
assertTrue)r   r   r   r   r   ÚpixelsZnot_all_blackZpixelr   r   r   Útest_renderer_renders_sceneI   s    
z.MuJoCoRendererTest.test_renderer_renders_scenec           	      C   sî   d}t j |¡}t  |¡}t  ||¡ t  |dd¡¦}| |d¡ | ¡ g}d}t|ƒD ]r\}}||j	dd d …f< t  ||¡ | |d¡ | 
| ¡ ¡ |  |d |d ¡ |  ||d  || k ¡ ¡ qXW d   ƒ n1 sà0    Y  d S )	Nr   r   r    ))ç      ð?ç        r'   r&   )r'   r&   r'   r&   )r'   r'   r&   r&   r   r   éÿÿÿÿr   )r	   r
   r   r   r   r   r   r!   Ú	enumerateZ	geom_rgbaÚappendZassertIsNotÚassertFalseÚall)	r   r   r   r   r   r$   ÚcolorsÚiÚcolorr   r   r   Ú test_renderer_output_without_outb   s    

z3MuJoCoRendererTest.test_renderer_output_without_outc           	   	   C   s   d}d}t  g |¢d‘R t j¡}tj |¡}t |¡}t ||¡ tj|g|¢R Ž ¶}| 	|d¡ |  
t  |dk¡¡ |j|d}|  ||¡ |  t  |dk¡¡ d}|  ||¡ |  t¡0 |jt  g |¢d‘R t j¡d W d   ƒ n1 sò0    Y  W d   ƒ n1 s0    Y  d S )Nr   )r   r   é   r    r   )Úout)é
   r3   )ÚnpZzerosZuint8r	   r
   r   r   r   r   r   r#   r,   r!   ZassertIsr+   ZassertNotEqualZassertRaisesr   )	r   r   Zrender_sizeZ
render_outr   r   r   r$   Zfailing_render_sizer   r   r   Útest_renderer_output_with_out‚   s     
z0MuJoCoRendererTest.test_renderer_output_with_outN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r%   r0   r5   r   r   r   r   r      s    r   Ú__main__)Ú__doc__Zabsl.testingr   r   r	   Únumpyr4   Z
skipUnlessÚhasattrZTestCaser   r6   Úmainr   r   r   r   Ú<module>   s   
ÿ 