def test_intuitive_physics_all_objects_diagonal_size():
    # The fall-down list should contain the move-across objects as well.
    for definition in util.retrieve_complete_definition_list(
        [objects.get_intuitive_physics(True)]
    )[0]:
        print(f'{definition}\n========================================')
        assert (
            (definition['dimensions']['x'] * math.sqrt(2)) <=
            (occluders.OCCLUDER_MAX_SCALE_X + util.MAX_SIZE_DIFFERENCE)
        )
def test_intuitive_physics_move_across_all_objects_untrained_shapes():
    definition_list = util.retrieve_complete_definition_list(
        [objects.get_intuitive_physics(False)]
    )[0]
    trained_list = util.retrieve_trained_definition_list([definition_list])[0]
    untrained_list = util.retrieve_untrained_definition_list(
        [definition_list],
        tags.SCENE.UNTRAINED_SHAPE
    )[0]

    for definition_1 in trained_list:
        option_list = [
            definition_2 for definition_2 in untrained_list
            if util.is_similar_except_in_shape(definition_1, definition_2,
                                               True)
        ]
        assert len(option_list) >= 2
def test_intuitive_physics_fall_down_complex_objects_untrained_sizes():
    definition_list = util.retrieve_complete_definition_list(
        [objects.get_intuitive_physics(True, False, True)]
    )[0]
    trained_list = util.retrieve_trained_definition_list([definition_list])[0]
    untrained_list = util.retrieve_untrained_definition_list(
        [definition_list],
        tags.SCENE.UNTRAINED_SIZE
    )[0]

    for definition_1 in trained_list:
        option_list = [
            definition_2 for definition_2 in untrained_list
            if util.is_similar_except_in_size(definition_1, definition_2,
                                              True)
        ]
        # We want at least two possible untrained objects.
        assert len(option_list) >= 2