def __init__(
        self,
        accelerator_spec: AcceleratorSpec,
        config: type[BasePassConfig],
        host_device=None,
    ):
        """Initialize the pass.

        :param accelerator_spec: the accelerator spec for the pass.
        :type accelerator_spec: AcceleratorSpec
        :param config: the configuration representing search space.
        :type config: type[BasePassConfig]
        :param host_device: the host device for the pass.
        :type host_device: Optional[str]
        """
        assert accelerator_spec is not None, "Please specify the accelerator spec for the pass."
        assert config is not None, "Please specify the configuration for the pass."

        self.config = config
        self.accelerator_spec = accelerator_spec
        self.host_device = host_device

        if hasattr(self.config, "user_script") and hasattr(self.config, "script_dir"):
            self._user_module_loader = UserModuleLoader(self.config.user_script, self.config.script_dir)

        # Params that are paths [(param_name, required)]
        self.path_params = [
            (param, param_config.required, param_config.category)
            for param, param_config in self.default_config(accelerator_spec).items()
            if param_config.category in (ParamCategory.PATH, ParamCategory.DATA)
        ]

        self._initialized = False
Initialize the pass.

        :param accelerator_spec: the accelerator spec for the pass.
        :type accelerator_spec: AcceleratorSpec
        :param config: the configuration representing search space.
        :type config: type[BasePassConfig]
        :param host_device: the host device for the pass.
        :type host_device: Optional[str]
        
olive/passes/olive_pass.py