a
    i‚j1~  ã                   @   sj   d Z ddlZddlZddlmZ ddlmZ ddlZddlZ	dd„ Z
G dd„ dejƒZed	krfe ¡  dS )
zTests for mjSpec bindings.é    N)Úabsltest)Úepathc                  C   s   t  ¡ } | jjS )N)ÚinspectÚcurrentframeÚf_backÚf_lineno)Úcf© r	   úQ/home/ghrups/robot-bench/.venv/lib64/python3.9/site-packages/mujoco/specs_test.pyÚget_linenumber   s    r   c                   @   sÄ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/S )0Ú	SpecsTestc                 C   sü  t  ¡ }|  |jjd d¡ g d¢|j_|  |jjd d¡ d|jjd< d|jjd< |  |jjd d¡ |  |jjd d¡ |  dd |jj¡¡ |  |jjd	¡ |  t¡ d|jjd	< W d   ƒ n1 sÎ0    Y  |  t¡ d|jjd
< W d   ƒ n1 s0    Y  |j	 
¡ }|  |jd¡ tj |jg d¢¡ d|_|  |jd¡ d|_|  |jd¡ g d¢|_tj |jg d¢¡ |  |jjd¡ d|jd< tj |jg d¢¡ g d¢|_tj |jg d¢¡ |  |jjd¡ | ¡ }d|_t jj|_g d¢|_|  |jd¡ |  |jt jj¡ tj |jg d¢¡ | ¡ }t  |¡}t  ||¡ |  |jd¡ tj | |¡jg d¢¡ tj | |¡jg d¢¡ tj | |¡jg d¢¡ |  |jd¡ |  |jd¡ tj |jd g d¢¡ |  |  ¡ t! "d¡¡ d S )Nr   Úx)ÚzÚyr   r   r   é   ZyzxÚ é   éÿÿÿÿ©r   r   r   r   ZfoobarZbaz)é   é   r   )r   ©r   r   r   ©r   r   r   r   )r   Úsitename©r   r   r   r   é   é   r   r   aN          <mujoco model="MuJoCo Model">
          <compiler angle="radian"/>

          <size nuser_site="6"/>

          <worldbody>
            <body name="baz" pos="1 2 3" quat="0 1 0 0">
              <site name="sitename" pos="0 0 0" type="box" user="1 2 3 4 5 6"/>
            </body>
          </worldbody>
        </mujoco>
    )#ÚmujocoÚMjSpecÚassertEqualÚcompilerZeulerseqÚjoinÚ	assertLenÚassertRaisesÚ
IndexErrorÚ	worldbodyÚadd_bodyÚnameÚnpÚtestingÚassert_array_equalÚquatÚposÚshapeÚadd_siteÚmjtGeomÚ
mjGEOM_BOXÚtypeÚuserdataÚcompileÚMjDataZ
mj_forwardÚnbodyÚbindZxposÚnsiteZ
nuser_siteZ	site_userÚto_xmlÚtextwrapÚdedent)ÚselfÚspecÚbodyÚsiteÚmodelÚdatar	   r	   r
   Ú
test_basic!   sd    *,






þzSpecsTest.test_basicc           *      C   sN  t  ¡ }|jddgdd}tj |jddg¡ |  |jd¡ |j	g d¢d}tj |j
g d¢¡ |jdd}|  |jd¡ |jt jjd	}|  |jt jj¡ |jddd
gd}|  |jd¡ tj |jdd
g¡ |jdddgd}|  |jd¡ tj |jddg¡ |jdddgddggd}|  |jd¡ tj |jddgddgg¡ |jddd}	|  |	jd¡ |  |	jd¡ |jddd}
|  |
jd¡ |  |
jd¡ |j g d¢dgd}tj |j!g d¢¡ |  |j"d d¡ |j#g d¢g d¢d}tj |j$g d¢¡ tj |j%g d¢¡ |j&ddd}|  |j'd¡ |  |j(d¡ |j)dddgd}|  |j*d¡ tj |j+ddg¡ |j,g d ¢dd!}tj |jg d ¢¡ |  |j-d¡ |j.d"d#}|  |j/d"¡ |j0t j1j2t jjd$}|  |j3t j1j2¡ |  |jt jj¡ |j4d%d&d'dd(}|  |j5d%¡ |  |j6d&¡ |  |j7d'¡ |  |jd¡ |j8j9d)g d¢g d*¢d+}|  |j5d)¡ tj |j:g d¢¡ tj |j;g d*¢¡ |j8j9|d,}|  |j<j5d%¡ |  |j<j6d&¡ |  |j<j7d'¡ |  |j<jd¡ |j=d-g d.¢g d/¢dd0}|  |j5d-¡ tj |j:g d.¢¡ tj |j>g d/¢¡ |  |j?d¡ |j@d1g d2¢g d3¢g d4¢g d.¢t jAjBd5d6g d7¢g d/¢dd8}|  |j5d1¡ tj |j:g d2¢¡ tj |j;g d3¢¡ tj |j>g d4¢¡ tj |j-g d.¢¡ |  |jCt jAjB¡ |  |jDd5¡ |  |jEd6¡ tj |jFg d7¢¡ tj |jGg d/¢¡ |  |jd¡ |jHddd9gd:}|  |jId¡ tj |jJdd9g¡ |jKd;g d¢g d*¢d+}tj |j:g d¢¡ tj |j;g d*¢¡ |jK|d<g d=¢g d>¢d+}| L¡ }| M|¡}|  |j5|j5¡ |  |j5|j5¡ tj |j:|j:¡ tj |j;|j;¡ tj |j:|j:¡ tj |j;|j;¡ |jNt jOjPg d?¢d@}|  |jCt jOjP¡ tj |jQg d?¢¡ | R¡ }|  |jCt jOjS¡ |jRd'dA}|  |jTd'¡ |  UtV¡ }|jRg d¢dB W d   ƒ n1 sè0    Y  |  tW|jXƒdC¡ |jYg d¢dD} tj | jZg d¢¡ |  Ut[¡}|j=dEdF W d   ƒ n1 sV0    Y  |  tW|jXƒdG¡ |  Ut[¡ }|j=ddgdF W d   ƒ n1 s¤0    Y  |  tW|jXƒdH¡ |  Ut[¡}|j=ddI W d   ƒ n1 sî0    Y  |  tW|jXƒdJ¡ |  Ut[¡}|j=dKdL W d   ƒ n1 s80    Y  |  tW|jXƒdM¡ |  UtV¡}|j=dNdO W d   ƒ n1 s‚0    Y  |  tW|jXƒdP¡ |j=g dQ¢dR}!|j=g d/¢dS}"|j=g d¢dT}#|j=g d¢dU}$|  |!j\jCt j]j^¡ |  |"j\jCt j]j_¡ |  |#j\jCt j]j`¡ |  |$j\jCt j]ja¡ tj |!j\jbg dQ¢¡ tj |"j\jcg d/¢¡ tj |#j\jdg d¢¡ tj |$j\jeg d¢¡ |j8j9g dQ¢dV}%|j8j9g d/¢dW}&|j8j9g d¢dX}'|j8j9g d¢dY}(|j8j9g d¢g d=¢dZ})tj |%jfjbg dQ¢¡ tj |&jfjcg d/¢¡ tj |'jfjdg d¢¡ tj |(jfjeg d¢¡ tj |)j\jeg d¢¡ tj |)jfjeg d=¢¡ |  Ut[¡ }|j=g d¢dR W d   ƒ n1 
sœ0    Y  |  tW|jXƒd[¡ |  Ut[¡ }|j=g d\¢dS W d   ƒ n1 
sê0    Y  |  tW|jXƒd]¡ |  Ut[¡ }|j=g dQ¢dT W d   ƒ n1 s80    Y  |  tW|jXƒd^¡ |  Ut[¡}|j=dgdU W d   ƒ n1 s„0    Y  |  tW|jXƒd_¡ |  Ut[¡&}|j=g dQ¢g d¢d` W d   ƒ n1 sØ0    Y  |  tW|jXƒda¡ |  Ut[¡(}|j8j9g dQ¢g d¢db W d   ƒ n1 s.0    Y  |  tW|jXƒdc¡ d S )dNr   r   r   )Ú	texrepeatÚemissionr   )Úrefposgš™™™™™¹?)Úgap)Úobjtypegš™™™™™É?)Ú	stiffnessÚspringlengthé
   )ÚactdimÚ	ctrlrangeç       @)ÚinflateÚvertidr   r   )ÚbuiltinÚnchannelr@   Úinfo)r@   rQ   )rL   ç      @g      @Úobj)ÚobjprmÚobjname)ç      ð?rL   rR   )ÚfrictionÚtexcoordr1   )ÚnrowÚcontent_typeç333333ó?rV   )ÚtimeÚqpos)rV   gš™™™™™ñ?r[   )r@   ÚsizeÚbody2)Ú	bodyname2)Ú	needstagerF   Zinstance_namezmujoco.pluginT)r'   Úplugin_nameÚactiverQ   r=   ©r   r   r   r   )r'   r,   r+   )ÚpluginÚgeom)r   r   r   r   )r'   r,   ÚfromtoÚcontyper   )r   r   r   r   )r   r   r   r   r   r   Úmaterialé   )r   r   r   g      à?)r'   r,   r+   rg   r^   r1   ri   ÚgroupÚrgbar2   rQ   é   )ÚorthographicÚ
resolutionZframeaZframeb)r   r   r   r   ©r   r   r   )r1   Úaxis)Úalign)rq   zEInvalid axis keyword argument. Valid options are: align, group, name.)Úattenuationr,   ©r,   zpos should be a list/array.z%pos should be a list/array of size 3.)r1   ztype is the wrong type.r   )r2   zuserdata has the wrong type.Úvel)ru   aV  Invalid vel keyword argument. Valid options are: name, type, pos, quat, axisangle, xyaxes, zaxis, euler, fromto, size, contype, conaffinity, condim, priority, friction, solmix, solref, solimp, margin, gap, mass, density, typeinertia, fluid_ellipsoid, fluid_coefs, material, rgba, group, hfieldname, meshname, fitscale, userdata, plugin, info.)r   r   r   r   )Ú	axisangle)Úxyaxes)Úzaxis©Úeuler)Ú
iaxisangle)Zixyaxes)Zizaxis)Úieuler)rz   r|   z+axisangle should be a list/array of size 4.)r   r   r   r   r   z(xyaxes should be a list/array of size 6.z'zaxis should be a list/array of size 3.z'euler should be a list/array of size 3.)rv   rz   z:Only one of: axisangle, xyaxes, zaxis, oreuler can be set.)r{   r|   z>Only one of: iaxisangle, ixyaxes, izaxis, orieuler can be set.)gr   r   Úadd_materialr(   r)   r*   rB   r   rC   Úadd_meshrD   Zadd_pairrE   Zadd_equalityÚmjtObjZ
mjOBJ_SITErF   Z
add_tendonrG   rH   Úadd_actuatorrJ   rK   Zadd_skinrM   rN   Úadd_texturerO   rP   Úadd_textr@   rQ   Z	add_tuplerT   rU   Zadd_flexrW   rX   Z
add_hfieldrY   rZ   Zadd_keyr\   r]   Zadd_numericr^   Zadd_excluder`   Ú
add_sensorZmjtStageZmjSTAGE_ACCra   Ú
add_pluginr'   rb   rc   r%   r&   r,   r+   re   Úadd_geomrg   rh   r.   r/   r0   r1   ri   rk   rl   r2   Z
add_camerarn   ro   Ú	add_frameZfirst_frameZ
next_frameÚ	add_jointÚmjtJointZmjJNT_HINGErq   Zadd_freejointZ
mjJNT_FREErr   r#   Ú	TypeErrorÚstrÚ	exceptionZ	add_lightrs   Ú
ValueErrorZaltZmjtOrientationZmjORIENTATION_AXISANGLEZmjORIENTATION_XYAXESZmjORIENTATION_ZAXISZmjORIENTATION_EULERrv   rw   rx   rz   Zialt)*r;   r<   ri   ÚmeshÚpairZequalityZtendonÚactuatorZskinÚtextureÚtextÚtuple_ZflexZhfieldÚkeyÚnumericÚexcludeZsensorre   r=   Zbody_with_pluginrf   r>   ZcamZframea0Zframeb0Zframea1Zframeb1ÚjointZ	freejointZfreejoint_alignÚcmZlightZgeom_axisangleZgeom_xyaxesZ
geom_zaxisZ
geom_eulerZbody_iaxisangleZbody_ixyaxesZbody_izaxisZbody_ieulerZbody_euler_ieulerr	   r	   r
   Ú
test_kwarg|   sÒ   ÿüÿüõÿ
0þ,þ0þ,þ,þ,þÿÿÿÿÿ0þ0þ0þ.þ6þ8þzSpecsTest.test_kwargc                 C   s  t  d¡d d }| ¡ }tjj}tj |¡}| ¡ }t 	|¡}t 
||¡ t ||¡}t |tj¡}t ||||¡ t|dƒ$}	tj |	 ¡  ¡ ¡}
W d   ƒ n1 sª0    Y  |
 ¡ }t 	|¡}t 
||¡ t ||¡}t |tj¡}t ||||¡ tj ||¡ d S )Nr   Útestdataú	model.xmlÚr)r   Úresource_pathÚas_posixr   ZmjtStateZmjSTATE_INTEGRATIONr   Ú	from_filer3   r4   Úmj_stepZmj_stateSizer(   ÚemptyZfloat64Zmj_getStateÚopenÚfrom_stringÚreadÚrstripr)   r*   )r;   Ú	file_pathÚfilenameZ
state_typeZspec1Úmodel1Zdata1Zsize1Zstate1ÚfileZspec2Úmodel2Zdata2Zsize2Zstate2r	   r	   r
   Útest_load_xml³  s&    
2
zSpecsTest.test_load_xmlc                 C   st   t  ¡ }tƒ d }|j ¡ }d|_d|› |_dd|›  }|  t|¡ | 	¡  W d   ƒ n1 sf0    Y  d S )Nr   ZMyGeomzgeom added on line z'Error: size 0 must be positive in geom
z0Element name 'MyGeom', id 0, geom added on line )
r   r   r   r%   r…   r'   rQ   ÚassertRaisesRegexrŒ   r3   )r;   r<   Zadded_on_linerf   Úexpected_errorr	   r	   r
   Ú"test_compile_errors_with_line_infoÎ  s    

ÿÿz,SpecsTest.test_compile_errors_with_line_infoc           
      C   s  t  ¡ }|j ¡ }| ¡ }d|jd< g d¢|_| ¡ }t jj	|_
| ¡ }t  |¡}|jdk rjt  ||¡ qR|j ¡ }d|jd< | ¡ }d|jd< g d¢|_| ¡ }t jj	|_
| ||¡\}}	tj |jd |jd ¡ tj |	jd d… |j¡ tj |	jd d… |j¡ d S )Nr   r   )r   r   r   r   rp   r   )r   r   r%   r&   r…   r^   r,   r‡   rˆ   Z
mjJNT_BALLr1   r3   r4   r\   rŸ   Ú	recompiler(   r)   r*   Úbody_posr]   Zqvel)
r;   r<   Úbody1rf   r–   r?   r@   r_   Z	model_newZdata_newr	   r	   r
   Útest_recompileÞ  s,    










zSpecsTest.test_recompilec                 C   sF   t  ¡ }d}|  t j|¡ | ¡  W d   ƒ n1 s80    Y  d S )Nz3XML Write error: Only compiled model can be written)r   r   ZassertRaisesWithLiteralMatchZ
FatalErrorr8   )r;   r<   r¬   r	   r	   r
   Ú&test_uncompiled_spec_cannot_be_written  s    z0SpecsTest.test_uncompiled_spec_cannot_be_writtenc                 C   sä   t  ¡ }d|_| ¡ }d|jjd< | d|¡}d|jjd< |j |¡ |j |¡ | 	¡  |  
| ¡ t d¡¡ t  ¡ }d|_| ¡ }d|jjd< | d|¡}d|jjd< |j |¡ |j |¡ | 	¡  |  
| ¡ t d¡¡ d S )NÚtestr   r   Údef1r   ad          <mujoco model="test">
          <compiler angle="radian"/>

          <default>
            <geom size="2 0 0"/>
            <default class="def1">
              <geom size="3 0 0"/>
            </default>
          </default>

          <worldbody>
            <geom class="def1"/>
            <geom/>
          </worldbody>
        </mujoco>
    )r   r   Z	modelnameÚdefaultrf   r^   Zadd_defaultr%   r…   r3   r   r8   r9   r:   )r;   r<   Úmainr´   r	   r	   r
   Útest_modelname_default_class  s4    þþz&SpecsTest.test_modelname_default_classc                 C   s`  t  ¡ }| ¡ }| ¡ }| ¡ }| ¡ }| ¡ }| ¡ }d|_d|_d|_d|_d|_d|_|  |jd¡ |  |jd¡ |  |jd jd¡ |  |jd	 jd¡ |  |jd
 jd¡ |  |jd jd¡ |  |jd	 jd¡ |  |jd
 jd¡ |  | 	d¡|¡ |  | 	d¡|¡ |  | 	d¡|¡ |  | 
d¡|¡ |  | 
d¡|¡ |  | 
d¡|¡ d S )NÚsensor1Úsensor2Úsensor3Ú	actuator1Ú	actuator2Ú	actuator3r   r   r   r   )r   r   rƒ   r€   r'   r"   ÚsensorsZ	actuatorsr   Zfind_sensorZfind_actuator)r;   r<   r¸   r¹   rº   r»   r¼   r½   r	   r	   r
   Útest_element_listO  s6    zSpecsTest.test_element_listc                 C   s”  d}t j |¡}t jj}|  |jd¡ |  |jd¡ |  |j 	d¡d¡ |  |j 	d¡d¡ |  
|jd jd¡ |  
|jd jd	¡ |  
|jd
 jd¡ |  
|jd jd¡ |  |j 	|¡d¡ |  |jd  	|¡d¡ |  |jd
  	|¡d¡ |  
|j 	d¡d jd¡ |  
|j 	d¡d jd	¡ |  
|j 	d¡d jd¡ |  
|j 	d¡d
 jd¡ |  
|jd  	d¡d jd¡ |  
|jd  	d¡d jd¡ |  
|jd
  	d¡d jd¡ |  |jd  	d¡¡ |  |jd  	d¡¡ |  
|j 	d¡d jd¡ |  
|j 	d¡d jd¡ |  
|j 	d¡d jd¡ |  
|j 	d¡d
 jd¡ |  
|j 	d¡d jd¡ |  |jd j¡ |  |jd
 jd¡ |  |jd jd¡ |  
|jd
 jd jd¡ |  
|jd
 jd jd¡ |  
|jd
 jd jd¡ |  
|jd
 jd
 jd¡ |  
|jd jd jd¡ |  t¡}|j 	d¡ W d   ƒ n1 sJ0    Y  |  
t|jƒd¡ |j 	d¡d
 }d|_|  
|jd jd¡ d S )Na™  
    <mujoco>
      <worldbody>
        <body name="body1">
          <body name="body3">
            <site name="site1"/>
            <site name="site2"/>
            <site name="site3"/>
            <site name="site4"/>
            <body name="body4">
              <site name="site5"/>
            </body>
          </body>
        </body>
        <body name="body2"/>
      </worldbody>
    </mujoco>
    r   r=   r   r>   r   r°   r   r_   r   Zbody3Úbody4r   Zsite1Zsite2Zsite3Zsite4Zsite5r   zPbody.find_all supports the types: body, frame, geom, site, joint, light, camera.Z	body4_new)r   r   r¢   r   Z
mjOBJ_BODYr"   ZbodiesÚsitesr%   Zfind_allr   r'   ZassertEmptyr#   rŒ   rŠ   r‹   )r;   Úmain_xmlr<   Zbodytyper—   rÀ   r	   r	   r
   Útest_body_listl  sZ    ,þzSpecsTest.test_body_listc                 C   sz   t  ¡ }|j ¡ }|j ¡ }|j ¡ }d|_d|_d|_|j ¡ }d}|rv|  |jdt|ƒ ¡ |j |¡}|d7 }qFd S )NÚgeom1Úgeom2Úgeom3r   rf   )	r   r   r%   r…   r'   Ú
first_geomr   rŠ   Z	next_geom)r;   r<   rÄ   rÅ   rÆ   rf   Úir	   r	   r
   Útest_iterators­  s    



zSpecsTest.test_iteratorsc                 C   sp   d}t  ¡ }| ¡ }d|_d|_|j ¡ }t jj|_	d|_
d|i|_| ¡ }|  |jd¡ |  |jd |¡ d S )Nzˆ
      v -1 -1  1
      v  1 -1  1
      v -1  1  1
      v  1  1  1
      v -1  1 -1
      v  1  1 -1
      v -1 -1 -1
      v  1 -1 -1Úcubezcube.objé   )r   r   r~   r'   r¨   r%   r…   r/   ZmjGEOM_MESHr1   ZmeshnameZassetsr3   r   Z	nmeshvert)r;   rÊ   r<   r   rf   r?   r	   r	   r
   Útest_assets¼  s    	


zSpecsTest.test_assetsc                 C   sB   d}t j t d¡d| d¡i¡}|  |j ¡  	¡ j
t jj¡ d S )Nzœ
      <mujoco>
        <worldbody>
          <body>
            <geom type="box" size="1 1 1"/>
          </body>
        </worldbody>
      </mujoco>
    z`
      <mujoco model="MuJoCo Model">
        <include file="included.xml"/>
      </mujoco>
    zincluded.xmlzutf-8)r   r   r¢   r9   r:   Úencoder   r%   Z
first_bodyrÇ   r1   r/   r0   )r;   Zincluded_xmlr<   r	   r	   r
   Útest_includeÒ  s    	úÿzSpecsTest.test_includec                 C   sÞ   t  d¡d d }tj | ¡ ¡}| ¡ }|  |¡ |  |j	d¡ |  |j
d¡ | d¡}|  |¡ | ¡ }|  |¡ |  || d¡¡ | ¡  |jd  ¡  |jd  ¡  | ¡ }|  |¡ |  |j	d¡ |  |j
d¡ d S )	Nr   r™   rš   é   Úheadr   rI   é	   )r   rœ   r   r   rž   r   r3   ÚassertIsNotNoner   r7   ZnsensorZ	find_bodyZ
first_siteZ	find_siteÚdeleter¾   )r;   r¥   r<   r?   rÐ   r>   r	   r	   r
   Útest_deleteè  s$    




zSpecsTest.test_deletec                 C   s¸   d}t j |¡}|  |j¡ |j ¡ }d|j_| ¡ |j_	d|j_
|  |jj	d¡ | ¡ }t jj|_d|jd< d|jd< d|jd< | ¡ }|  |¡ |  |jd¡ |  |jd d¡ d S )Nzx
    <mujoco>
      <extension>
        <plugin plugin="mujoco.elasticity.cable"/>
      </extension>
    </mujoco>
    zmujoco.elasticity.cableTr   r   r   )r   r   r¢   rÒ   r%   r&   re   rb   r„   Úidrc   r   r…   r/   r0   r1   r^   r3   ÚnpluginZbody_plugin)r;   Úxmlr<   r=   rf   r?   r	   r	   r
   Útest_plugin   s"    





zSpecsTest.test_pluginc                 C   sr   d}t j |¡}| ¡ }t  |¡}d| ¡ _d| ¡ _|  td¡ | 	||¡ W d   ƒ n1 sd0    Y  d S )Nz
    <mujoco>
      <worldbody>
        <body>
          <geom size="0.1"/>
        </body>
      </worldbody>
    </mujoco>
    Úyellowz)Error: repeated name 'yellow' in material)
r   r   r¢   r3   r4   r}   r'   r«   rŒ   r®   )r;   rÂ   r<   r?   r@   r	   r	   r
   Útest_recompile_error  s    



ÿzSpecsTest.test_recompile_errorc                 C   sL   t j d¡}|jd }|  |¡ | ¡  | ¡ }|  |¡ |  |jd¡ d S )Nao  
      <mujoco model="MuJoCo Model">
        <extension>
          <plugin plugin="mujoco.pid">
            <instance name="pid1">
              <config key="kp" value="4.0"/>
            </instance>
          </plugin>
        </extension>

        <worldbody>
          <body>
            <geom size="1"/>
          </body>
        </worldbody>
      </mujoco>
    r   )	r   r   r¢   ÚpluginsrÒ   rÓ   r3   r   rÖ   )r;   r<   re   r?   r	   r	   r
   Útest_delete_unused_plugin4  s    


z#SpecsTest.test_delete_unused_pluginc                 C   s–   t j d¡}|  |jjd¡ |  |jjd¡ |  |jj	j
d¡ d|j_d|j_d|jj	_
| ¡ }|  |jjd¡ |  |jjd¡ |  |jj	j
d¡ d S )NzË
      <mujoco model="MuJoCo Model">
        <option timestep="0.001"/>
        <statistic meansize="0.05"/>
        <visual>
          <quality shadowsize="4096"/>
        </visual>
      </mujoco>
    gü©ñÒMbP?gš™™™™™©?i   gü©ñÒMb`?g¸…ëQ¸®?i    )r   r   r¢   r   ÚoptionZtimestepÚstatZmeansizeZvisualZqualityZ
shadowsizer3   ÚoptZvis)r;   r<   r?   r	   r	   r
   Útest_access_option_stat_visualN  s    	
z(SpecsTest.test_access_option_stat_visualc                 C   sÞ   t  ¡ }| ¡ }t jj}d|j|< |  |j| d¡ g d¢|_|  |j| d¡ |  dd |j¡¡ |  |jd¡ |  	t
¡ d|jd< W d   ƒ n1 sœ0    Y  |  	t
¡ d|jd< W d   ƒ n1 sÐ0    Y  d S )NZtexture_name)r   Únew_namer   r   r   rá   r   r   r   r   )r   r   r}   ZmjtTextureRoleZmjTEXROLE_RGBZtexturesr   r!   r"   r#   r$   )r;   r<   ri   Ztexture_indexr	   r	   r
   Útest_assign_list_elementf  s    

(z"SpecsTest.test_assign_list_elementc                 C   s:   t  ¡ }|jdddd}tjdtjd ¡ |_| ¡  d S )Nr   r   )r'   ÚheightÚwidth)r   r   r   )Zdtype)	r   r   r   r(   ZzerosZuint8Útobytesr@   r3   )r;   r<   r   r	   r	   r
   Útest_assign_texture€  s    zSpecsTest.test_assign_texturec                 C   s~   t  ¡ }t  ¡ }|jj |j_|jjg d¢d}|jjt j d ddgd}|j|dd | 	¡ }t
j |jd g d¢¡ d S )	N)éZ   r   r   ry   r   r   úchild-©Úprefixr   r   )r   r   r    Zdegreer%   r&   r†   ZmjPIÚattach_bodyr3   r(   r)   Zassert_almost_equalÚ	body_quat)r;   ÚchildÚparentr=   Úframer?   r	   r	   r
   Útest_attach_units†  s    zSpecsTest.test_attach_unitsc                 C   s.  t  ¡ }t  ¡ }|jjg d¢g d¢d}|j ¡ }|  |j|dd¡ | ¡ }|  |¡ |  |j	d¡ t
j |jd g d¢¡ t
j |jd g d¢¡ |  |j|dd¡ | ¡ }|  |¡ |  |j	d	¡ t
j |jd g d¢¡ t
j |jd g d¢¡ t
j |jd g d¢¡ t
j |jd g d¢¡ d S ©
Nr   rd   )r,   r+   Ú_ré   r   r   rè   r   )r   r   r%   r.   r&   rÒ   rë   r3   r   r5   r(   r)   r*   r¯   rì   Úattach)r;   rí   rî   r>   r=   r§   r©   r	   r	   r
   Útest_attach_body_to_site  s$    


z"SpecsTest.test_attach_body_to_sitec                 C   sB   t  ¡ }|jjg d¢d}| ¡  | ¡ }tj |j	g d¢¡ d S )Nr   rt   )
r   r   r%   r&   r3   Zto_framer(   r)   r*   r,   )r;   r<   r=   rï   r	   r	   r
   Útest_body_to_frame¨  s
    zSpecsTest.test_body_to_framec                 C   s.  t  ¡ }t  ¡ }|jjg d¢g d¢d}|j ¡ }|  |j|dd¡ | ¡ }|  |¡ |  |j	d¡ t
j |jd g d¢¡ t
j |jd g d¢¡ |  |j|dd¡ | ¡ }|  |¡ |  |j	d	¡ t
j |jd g d¢¡ t
j |jd g d¢¡ t
j |jd g d¢¡ t
j |jd g d¢¡ d S rñ   )r   r   r%   r†   r&   rÒ   rë   r3   r   r5   r(   r)   r*   r¯   rì   ró   )r;   rí   rî   rï   r=   r§   r©   r	   r	   r
   Útest_attach_spec_to_frame¯  s$    


z#SpecsTest.test_attach_spec_to_frameN)Ú__name__Ú
__module__Ú__qualname__rA   r˜   rª   r­   r±   r²   r·   r¿   rÃ   rÉ   rÌ   rÎ   rÔ   rØ   rÚ   rÜ   rà   râ   ræ   rð   rô   rõ   rö   r	   r	   r	   r
   r      s2   [  9%DA
r   Ú__main__)Ú__doc__r   r9   Zabsl.testingr   Zetilsr   r   Únumpyr(   r   ZTestCaser   r÷   r¶   r	   r	   r	   r
   Ú<module>   s"          0