class_docstr: Implement the acquisition function of Sparsity Exploring Bayesian
  Optimization (SEBO).
  
  The SEBO is a hyperparameter-free method to simultaneously maximize a target
  objective and sparsity. When L0 norm is used, SEBO uses a novel differentiable
  relaxation based on homotopy continuation to efficiently optimize for sparsity.
class_docstr_tok: ["Implement","the","acquisition","function","of","Sparsity","Exploring","Bayesian","Optimization","(","SEBO",")",".","The","SEBO","is","a","hyperparameter-free","method","to","simultaneously","maximize","a","target","objective","and","sparsity",".","When","L0","norm","is","used",",","SEBO","uses","a","novel","differentiable","relaxation","based","on","homotopy","continuation","to","efficiently","optimize","for","sparsity","."]
docstr: Construct a penalty term as deterministic model to be included in
  SEBO acqusition function. Currently only L0 and L1 penalty are supported.
docstr_tok: ["Construct","a","penalty","term","as","deterministic","model","to","be","included","in","SEBO","acqusition","function",".","Currently","only","L0","and","L1","penalty","are","supported","."]
code: def _construct_penalty(self) -> GenericDeterministicModel:
      """Construct a penalty term as deterministic model to be included in
      SEBO acqusition function. Currently only L0 and L1 penalty are supported.
      """
      if self.penalty_name == "L0_norm":
          L0 = L0Approximation(target_point=self.target_point)
          return GenericDeterministicModel(f=L0)
      elif self.penalty_name == "L1_norm":
          L1 = functools.partial(
              L1_norm_func,
              init_point=self.target_point,
          )
          return GenericDeterministicModel(f=L1)
      else:
          raise NotImplementedError(
              f"{self.penalty_name} is not currently implemented."
          )
  
imports: import functools
  from copy import deepcopy
  from functools import partial
  from typing import Any, Callable, Dict, List, Optional, Tuple, Type
  import torch
  from ax.core.search_space import SearchSpaceDigest
  from ax.models.torch.botorch_modular.acquisition import Acquisition
  from ax.models.torch.botorch_modular.optimizer_argparse import optimizer_argparse
  from ax.models.torch.botorch_modular.surrogate import Surrogate
  from ax.models.torch_base import TorchOptConfig
  from ax.utils.common.constants import Keys
  from ax.utils.common.typeutils import not_none
  from botorch.acquisition.acquisition import AcquisitionFunction
  from botorch.acquisition.multi_objective.monte_carlo import qExpectedHypervolumeImprovement
  from botorch.acquisition.penalized import L0Approximation
  from botorch.models.deterministic import GenericDeterministicModel
  from botorch.models.model import ModelList
  from botorch.optim import Homotopy, HomotopyParameter, LogLinearHomotopySchedule, optimize_acqf_homotopy
  from botorch.utils.datasets import SupervisedDataset
  from botorch.utils.multi_objective.pareto import is_non_dominated
  from torch import Tensor
  from torch.quasirandom import SobolEngine
label_desc: Use image node_id 2 for calling the SEBOAcquisition obj's underlying member method code with example usage: obj._construct_penalty() and returns: GenericDeterministicModel, GenericDeterministicModel