code: def __init__(
      self,
      order: int,
      num_bases: int,
      *,
      hidden_units: List[int],
      bias: bool = True,
      activation: str = "ReLU",
      batch_norm: bool = False,
      dropout: float = 0.0,
  ) -> None:
      super().__init__()
      self.order = order
      self.num_bases = num_bases
  
      blocks: List[nn.Module] = []
      in_dim = order
      for hidden_unit in hidden_units:
          mapping = SeparableMapping(
              in_dim,
              hidden_unit,
              num_bases,
              bias=bias,
              activation=activation,
              batch_norm=batch_norm,
              dropout=dropout,
          )
          blocks.append(mapping)
          in_dim = hidden_unit
      blocks.append(
          SeparableMapping(
              in_dim,
              1,
              num_bases,
              bias=bias,
              activation=None,
              batch_norm=False,
              dropout=0.0,
          )
      )
  
      self.net = nn.Sequential(*blocks)
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from torch import Tensor
  from typing import Dict
  from typing import List
  from typing import Tuple
  from typing import Optional
  from itertools import combinations
  from .base import MLModel
  from ...schema import MLEncoderSettings
  from ...schema import MLGlobalEncoderSettings
  from ...misc.toolkit import eval_context
  from ...modules.blocks import Activation
label_desc: Use image node_id 1 to create a new NBMBlock object from inherited base classes: nn with example: obj = NBMBlock(order, num_bases)