@@ -6998,6 +6998,45 @@ def test_heterogeneous_invalid_material_raises():
69986998
69996999
70007000@pytest .mark .slow # ~200s
7001+ @pytest .mark .required
7002+ def test_heterogeneous_morph_property_raises ():
7003+ """Test that heterogeneous entities require explicit access through morphs."""
7004+ scene = gs .Scene (show_viewer = False )
7005+
7006+ single_morph = gs .morphs .Box (size = (0.1 , 0.1 , 0.1 ))
7007+ single_obj = scene .add_entity (morph = single_morph )
7008+
7009+ rigid_morphs_heterogeneous = (
7010+ gs .morphs .Box (size = (0.1 , 0.1 , 0.1 )),
7011+ gs .morphs .Cylinder (radius = 0.05 , height = 0.2 ),
7012+ )
7013+ rigid_obj = scene .add_entity (morph = rigid_morphs_heterogeneous )
7014+ kinematic_morphs_heterogeneous = (
7015+ gs .morphs .Box (size = (0.2 , 0.2 , 0.2 )),
7016+ gs .morphs .Sphere (radius = 0.1 ),
7017+ )
7018+ kinematic_obj = scene .add_entity (
7019+ morph = kinematic_morphs_heterogeneous ,
7020+ material = gs .materials .Kinematic (),
7021+ )
7022+
7023+ assert single_obj .morph is single_morph
7024+ assert rigid_obj .main_morph is rigid_morphs_heterogeneous [0 ]
7025+ assert list (rigid_obj .morphs ) == list (rigid_morphs_heterogeneous )
7026+ with pytest .raises (gs .GenesisException , match = r"Heterogeneous.*\.morphs" ) as exc_info :
7027+ _ = rigid_obj .morph
7028+ assert ".main_morph" in str (exc_info .value )
7029+
7030+ assert kinematic_obj .main_morph is kinematic_morphs_heterogeneous [0 ]
7031+ assert list (kinematic_obj .morphs ) == list (kinematic_morphs_heterogeneous )
7032+ with pytest .raises (gs .GenesisException , match = r"Heterogeneous.*\.morphs" ):
7033+ _ = kinematic_obj .morph
7034+
7035+ repr (rigid_obj )
7036+ repr (kinematic_obj )
7037+ repr (scene .entities )
7038+
7039+
70017040@pytest .mark .required
70027041def test_heterogeneous_fewer_envs_than_variants ():
70037042 """Test that having fewer environments than variants works correctly.
0 commit comments