def get_number_summary(scenario):
        """Return the stats of all objects in a scenario.

        Examples:
            {'num_objects': 211,
             'object_types': {'CYCLIST', 'PEDESTRIAN', 'VEHICLE'},
             'num_objects_each_type': {'VEHICLE': 184, 'PEDESTRIAN': 25, 'CYCLIST': 2},
             'num_moving_objects': 69,
             'num_moving_objects_each_type': defaultdict(int, {'VEHICLE': 52, 'PEDESTRIAN': 15, 'CYCLIST': 2}),
             'num_traffic_lights': 8,
             'num_traffic_light_types': {'LANE_STATE_STOP', 'LANE_STATE_UNKNOWN'},
             'num_traffic_light_each_step': {'LANE_STATE_UNKNOWN': 164, 'LANE_STATE_STOP': 564},
             'num_map_features': 358,
             'map_height_diff': 2.4652252197265625}

        Args:
            scenario: The input scenario.

        Returns:
            A dict describing the number of different kinds of data.
        """
        number_summary_dict = {}

        # object
        number_summary_dict[ScenarioDescription.SUMMARY.NUM_OBJECTS] = len(scenario[ScenarioDescription.TRACKS])
        number_summary_dict[ScenarioDescription.SUMMARY.OBJECT_TYPES] = \
            set(v["type"] for v in scenario[ScenarioDescription.TRACKS].values())
        object_types_counter = defaultdict(int)
        for v in scenario[ScenarioDescription.TRACKS].values():
            object_types_counter[v["type"]] += 1
        number_summary_dict[ScenarioDescription.SUMMARY.NUM_OBJECTS_EACH_TYPE] = dict(object_types_counter)

        # If object summary does not exist, fill them here
        object_summaries = {}
        for track_id, track in scenario[ScenarioDescription.TRACKS].items():
            object_summaries[track_id] = ScenarioDescription.get_object_summary(object_dict=track, object_id=track_id)
        scenario[ScenarioDescription.METADATA][ScenarioDescription.SUMMARY.OBJECT_SUMMARY] = object_summaries

        # moving object
        number_summary_dict.update(ScenarioDescription._calculate_num_moving_objects(scenario))

        # Number of different dynamic object states
        dynamic_object_states_types = set()
        dynamic_object_states_counter = defaultdict(int)
        for v in scenario[ScenarioDescription.DYNAMIC_MAP_STATES].values():
            for step_state in v["state"]["object_state"]:
                if step_state is None:
                    continue
                dynamic_object_states_types.add(step_state)
                dynamic_object_states_counter[step_state] += 1
        number_summary_dict[ScenarioDescription.SUMMARY.NUM_TRAFFIC_LIGHTS
                            ] = len(scenario[ScenarioDescription.DYNAMIC_MAP_STATES])
        number_summary_dict[ScenarioDescription.SUMMARY.NUM_TRAFFIC_LIGHT_TYPES] = dynamic_object_states_types
        number_summary_dict[ScenarioDescription.SUMMARY.NUM_TRAFFIC_LIGHTS_EACH_STEP
                            ] = dict(dynamic_object_states_counter)

        # map
        number_summary_dict[ScenarioDescription.SUMMARY.NUM_MAP_FEATURES
                            ] = len(scenario[ScenarioDescription.MAP_FEATURES])
        number_summary_dict[ScenarioDescription.SUMMARY.MAP_HEIGHT_DIFF
                            ] = ScenarioDescription.map_height_diff(scenario[ScenarioDescription.MAP_FEATURES])
        return number_summary_dict
Return the stats of all objects in a scenario.

        Examples:
            {'num_objects': 211,
             'object_types': {'CYCLIST', 'PEDESTRIAN', 'VEHICLE'},
             'num_objects_each_type': {'VEHICLE': 184, 'PEDESTRIAN': 25, 'CYCLIST': 2},
             'num_moving_objects': 69,
             'num_moving_objects_each_type': defaultdict(int, {'VEHICLE': 52, 'PEDESTRIAN': 15, 'CYCLIST': 2}),
             'num_traffic_lights': 8,
             'num_traffic_light_types': {'LANE_STATE_STOP', 'LANE_STATE_UNKNOWN'},
             'num_traffic_light_each_step': {'LANE_STATE_UNKNOWN': 164, 'LANE_STATE_STOP': 564},
             'num_map_features': 358,
             'map_height_diff': 2.4652252197265625}

        Args:
            scenario: The input scenario.

        Returns:
            A dict describing the number of different kinds of data.
        
metadrive/scenario/scenario_description.py