class_docstr: Block for structured data.
  
  # Arguments
      categorical_encoding: Boolean. Whether to use the CategoricalToNumerical
          to encode the categorical features to numerical features. Defaults
          to True.
      normalize: Boolean. Whether to normalize the features.
          If unspecified, it will be tuned automatically.
      seed: Int. Random seed.
code: def build(self, hp, inputs=None):
      input_node = nest.flatten(inputs)[0]
      output_node = input_node
      if self.categorical_encoding:
          block = preprocessing.CategoricalToNumerical()
          block.column_types = self.column_types
          block.column_names = self.column_names
          output_node = block.build(hp, output_node)
  
      if self.normalize is None and hp.Boolean(NORMALIZE):
          with hp.conditional_scope(NORMALIZE, [True]):
              output_node = preprocessing.Normalization().build(
                  hp, output_node
              )
      elif self.normalize:
          output_node = preprocessing.Normalization().build(
              hp, output_node
          )
  
      output_node = basic.DenseBlock().build(hp, output_node)
      return output_node
  
imports: from typing import Optional
  from tensorflow import nest
  from autokeras.blocks import basic
  from autokeras.blocks import preprocessing
  from autokeras.blocks import reduction
  from autokeras.engine import block
label_desc: Use image node_id 4 for calling the StructuredDataBlock obj's underlying member method code with example usage: obj.build(hp, inputs) and returns: output_node