code: def __init__(
      self,
      cat_embedding_dims: list,
      n_continuous_features: int,
      gflu_stages: int,
      num_trees: int,
      tree_depth: int,
      chain_trees: bool = True,
      tree_wise_attention: bool = False,
      tree_wise_attention_dropout: float = 0.0,
      gflu_dropout: float = 0.0,
      tree_dropout: float = 0.0,
      binning_activation: str = "entmoid",
      feature_mask_function: str = "softmax",
      gflu_feature_init_sparsity: float = 0.3,
      tree_feature_init_sparsity: float = 0.8,
      learnable_sparsity: bool = True,
      batch_norm_continuous_input: bool = True,
      virtual_batch_size: int = None,
      embedding_dropout: float = 0.0,
  ):
      super().__init__()
      assert (
          binning_activation in self.BINARY_ACTIVATION_MAP.keys()
      ), f"`binning_activation should be one of {self.BINARY_ACTIVATION_MAP.keys()}"
      assert (
          feature_mask_function in self.ACTIVATION_MAP.keys()
      ), f"`feature_mask_function should be one of {self.ACTIVATION_MAP.keys()}"
  
      self.gflu_stages = gflu_stages
      self.num_trees = num_trees
      self.tree_depth = tree_depth
      self.chain_trees = chain_trees
      self.tree_wise_attention = tree_wise_attention
      self.tree_wise_attention_dropout = tree_wise_attention_dropout
      self.gflu_dropout = gflu_dropout
      self.tree_dropout = tree_dropout
      self.binning_activation = self.BINARY_ACTIVATION_MAP[
          binning_activation
      ]
      self.feature_mask_function = self.ACTIVATION_MAP[
          feature_mask_function
      ]
      self.batch_norm_continuous_input = batch_norm_continuous_input
      self.n_continuous_features = n_continuous_features
      self.cat_embedding_dims = cat_embedding_dims
      self._embedded_cat_features = sum(
          [y for x, y in cat_embedding_dims]
      )
      self.n_features = (
          self._embedded_cat_features + n_continuous_features
      )
      self.embedding_dropout = embedding_dropout
      self.output_dim = (
          2**self.tree_depth
          if self.num_trees > 0
          else self.n_features
      )
      self.gflu_feature_init_sparsity = gflu_feature_init_sparsity
      self.tree_feature_init_sparsity = tree_feature_init_sparsity
      self.learnable_sparsity = learnable_sparsity
      self.virtual_batch_size = virtual_batch_size
      self._build_network()
  
imports: import torch
  import torch.nn
  from omegaconf import DictConfig
  from pytorch_tabular.models.common.heads import blocks
  from pytorch_tabular.models.common.layers import Add, Embedding1dLayer, GatedFeatureLearningUnit, NeuralDecisionTree
  from pytorch_tabular.models.common.layers.activations import entmax15, entmoid15, sparsemax, sparsemoid, t_softmax
  from pytorch_tabular.utils import get_logger
  from ..base_model import BaseModel
label_desc: Use image node_id 1 to create a new GatedAdditiveTreesBackbone object from inherited base classes: nn with example: obj = GatedAdditiveTreesBackbone(cat_embedding_dims, n_continuous_features, gflu_stages, num_trees, tree_depth, chain_trees, tree_wise_attention, tree_wise_attention_dropout, gflu_dropout, tree_dropout, binning_activation, feature_mask_function, gflu_feature_init_sparsity, tree_feature_init_sparsity, learnable_sparsity, batch_norm_continuous_input, virtual_batch_size, embedding_dropout)