code: def __init__(
      self,
      depth: int,
      n_features: int,
      dropout: float = 0,
      binning_activation: Callable = entmax15,
      feature_mask_function: Callable = entmax15,
      feature_sparsity: float = 0.8,
      learnable_sparsity: bool = True,
  ):
      super().__init__()
      self.depth = depth
      self._num_cutpoints = 1
      self.n_features = n_features
      self._dropout = dropout
      self.binning_activation = binning_activation
      self.feature_mask_function = feature_mask_function
      self.feature_sparsity = feature_sparsity
      self.learnable_sparsity = learnable_sparsity
      self._build_network()
  
imports: import random
  from typing import Callable
  from warnings import warn
  import numpy
  import torch
  import torch.nn
  from pytorch_tabular.utils import check_numpy
  from ..layers import ModuleWithInit
  from .activations import RSoftmax, entmax15, sparsemax, sparsemoid
label_desc: Use image node_id 1 to create a new NeuralDecisionTree object from inherited base classes: nn with example: obj = NeuralDecisionTree(depth, n_features, dropout, binning_activation, feature_mask_function, feature_sparsity, learnable_sparsity)