def __init__(
        self,
        output_acc_footprint_map: dict[AcceleratorSpec, Footprint],
        all_footprints: dict[AcceleratorSpec, Footprint],
    ):
        """Initialize a WorkflowOutput instance.

        Args:
            output_acc_footprint_map: Dictionary mapping accelerator specs to their Footprint
            all_footprints: All footprints in the workflow

        """
        self._device_outputs: dict[str, DeviceOutput] = {}
        self._all_footprints = all_footprints
        self._input_model_id = all_footprints[
            AcceleratorSpec(Device.CPU, ExecutionProvider.CPUExecutionProvider)
        ].input_model_id

        if not output_acc_footprint_map:
            self._objective_dict = {}
            return

        # Store objective dict for ranking
        no_search_footprint = next(iter(output_acc_footprint_map.values()))
        self._objective_dict = no_search_footprint.objective_dict if output_acc_footprint_map else {}

        # Group outputs by device type
        for acc_spec, footprint in output_acc_footprint_map.items():
            device_type = str(acc_spec.accelerator_type).lower()
            if device_type not in self._device_outputs:
                self._device_outputs[device_type] = {}
            self._device_outputs[device_type][acc_spec.execution_provider] = footprint

        # Create DeviceOutput objects for each device type
        for device_type in list(self._device_outputs.keys()):
            self._device_outputs[device_type] = DeviceOutput(
                device_type, self._device_outputs[device_type], self._objective_dict
            )

        # Set device attributes for easy access
        for device in Device:
            setattr(self, device.value, self._device_outputs.get(device.value))

        self._best_candidate = self._get_best_candidate()
Initialize a WorkflowOutput instance.

        Args:
            output_acc_footprint_map: Dictionary mapping accelerator specs to their Footprint
            all_footprints: All footprints in the workflow

        
olive/engine/output.py