class_docstr: The Latent Context Embedding Additive (LCE-A) Kernel.
  
  This kernel is similar to the SACKernel, and is used when context breakdowns are
  unbserverable. It assumes the same additive structure and a spatial kernel shared
  across contexts. Rather than assuming independence, LCEAKernel models the
  correlation in the latent functions for each context through learning context
  embeddings.
docstr: Set context categorical features and continuous embedding features.
  If cat_feature_dict is None, context indices will be used; If embs_dim_list
  is None, we use 1-d embedding for each categorical features.
docstr_tok: ["Set","context","categorical","features","and","continuous","embedding","features",".","If","cat_feature_dict","is","None",",","context","indices","will","be","used",";","If","embs_dim_list","is","None",",","we","use","1-d","embedding","for","each","categorical","features","."]
code: def _set_context_features(
      self,
      cat_feature_dict: Optional[Dict] = None,
      embs_feature_dict: Optional[Dict] = None,
      embs_dim_list: Optional[List[int]] = None,
  ) -> None:
      """Set context categorical features and continuous embedding features.
      If cat_feature_dict is None, context indices will be used; If embs_dim_list
      is None, we use 1-d embedding for each categorical features.
      """
      # get context categorical features
      if cat_feature_dict is None:
          self.context_cat_feature = torch.arange(
              self.num_contexts, device=self.device
          ).unsqueeze(-1)
      else:
          self.context_cat_feature = torch.tensor(
              [cat_feature_dict[c] for c in self.context_list]
          )
      #  construct emb_dims based on categorical features
      if embs_dim_list is None:
          #  set embedding_dim = 1 for each categorical variable
          embs_dim_list = [
              1 for _i in range(self.context_cat_feature.size(1))
          ]
      self.emb_dims = [
          (
              len(self.context_cat_feature[:, i].unique()),
              embs_dim_list[i],
          )
          for i in range(self.context_cat_feature.size(1))
      ]
      if self.train_embedding:
          self.n_embs = sum(embs_dim_list)  # total num of emb features
      # get context embedding features
      if embs_feature_dict is not None:
          self.context_emb_feature = torch.tensor(
              [embs_feature_dict[c] for c in self.context_list],
              device=self.device,
          )
          self.n_embs += self.context_emb_feature.size(1)
  
imports: from typing import Any, Dict, List, Optional
  import torch
  from gpytorch.constraints import Positive
  from gpytorch.kernels.kernel import Kernel
  from gpytorch.kernels.matern_kernel import MaternKernel
  from gpytorch.priors.torch_priors import GammaPrior
  from linear_operator.operators import DiagLinearOperator
  from linear_operator.operators.dense_linear_operator import DenseLinearOperator
  from torch import Tensor
  from torch.nn import ModuleList
label_desc: Use image node_id 6 for calling the LCEAKernel obj's underlying member method code with example usage: obj._set_context_features(cat_feature_dict, embs_feature_dict, embs_dim_list) without return types