docstr: :param fc_layers: list of dictionaries containing the parameters of
      all the fully connected layers.
  :type fc_layers: List
  :param num_fc_layers: Number of stacked fully connected layers.
  :type num_fc_layers: Integer
  :param output_size: Size of each layer.
  :type output_size: Integer
  :param use_bias: bool determines where to use a bias vector.
  :type use_bias: bool
  :param weights_initializer: Initializer for the weights (aka kernel)
      matrix.
  :type weights_initializer: string
  :param bias_initializer: Initializer for the bias vector.
  :type bias_initializer: string
  :param norm: type of normalization to use 'batch' or 'layer'.
  :type norm: string, default None
  :param norm_params: parameters to pass to normalization function.
  :type norm_params: dictionary
  :param activation: Activation function to use.
  :type activation: string
  :param dropout: determines if there should be a dropout layer before
      returning the encoder output.
  :type dropout: float
docstr_tok: [":","param","fc_layers",":","list","of","dictionaries","containing","the","parameters","of","all","the","fully","connected","layers",".",":","type","fc_layers",":","List",":","param","num_fc_layers",":","Number","of","stacked","fully","connected","layers",".",":","type","num_fc_layers",":","Integer",":","param","output_size",":","Size","of","each","layer",".",":","type","output_size",":","Integer",":","param","use_bias",":","bool","determines","where","to","use","a","bias","vector",".",":","type","use_bias",":","bool",":","param","weights_initializer",":","Initializer","for","the","weights","(","aka","kernel",")","matrix",".",":","type","weights_initializer",":","string",":","param","bias_initializer",":","Initializer","for","the","bias","vector",".",":","type","bias_initializer",":","string",":","param","norm",":","type","of","normalization","to","use","'batch","'","or","'layer","'",".",":","type","norm",":","string",",","default","None",":","param","norm_params",":","parameters","to","pass","to","normalization","function",".",":","type","norm_params",":","dictionary",":","param","activation",":","Activation","function","to","use",".",":","type","activation",":","string",":","param","dropout",":","determines","if","there","should","be","a","dropout","layer","before","returning","the","encoder","output",".",":","type","dropout",":","float"]
code: def __init__(
      self,
      fc_layers: Optional[List[FCStack]] = None,
      num_fc_layers: int = 1,
      output_size: int = 10,
      use_bias: bool = True,
      weights_initializer: str = "xavier_uniform",
      bias_initializer: str = "zeros",
      norm: Optional[str] = None,
      norm_params: Optional[Dict] = None,
      activation: str = "relu",
      dropout: float = 0,
      encoder_config=None,
      **kwargs,
  ):
      """
      :param fc_layers: list of dictionaries containing the parameters of
          all the fully connected layers.
      :type fc_layers: List
      :param num_fc_layers: Number of stacked fully connected layers.
      :type num_fc_layers: Integer
      :param output_size: Size of each layer.
      :type output_size: Integer
      :param use_bias: bool determines where to use a bias vector.
      :type use_bias: bool
      :param weights_initializer: Initializer for the weights (aka kernel)
          matrix.
      :type weights_initializer: string
      :param bias_initializer: Initializer for the bias vector.
      :type bias_initializer: string
      :param norm: type of normalization to use 'batch' or 'layer'.
      :type norm: string, default None
      :param norm_params: parameters to pass to normalization function.
      :type norm_params: dictionary
      :param activation: Activation function to use.
      :type activation: string
      :param dropout: determines if there should be a dropout layer before
          returning the encoder output.
      :type dropout: float
      """
      super().__init__()
      self.config = encoder_config
  
      logger.debug(f" {self.name}")
  
      logger.debug("  year FCStack")
      self.year_fc = FCStack(
          first_layer_input_size=1,
          num_layers=1,
          default_output_size=1,
          default_use_bias=use_bias,
          default_weights_initializer=weights_initializer,
          default_bias_initializer=bias_initializer,
          default_norm=None,
          default_norm_params=None,
          default_activation=None,
          default_dropout=dropout,
      )
  
      # Summed sizes of all of the embeddings.
      # Additional 8 for periodic_[month, day, ..., second_of_day].
      fc_layer_input_size = self.year_fc.output_shape[0] + 8
  
      logger.debug("  FCStack")
      self.fc_stack = FCStack(
          first_layer_input_size=fc_layer_input_size,
          layers=fc_layers,
          num_layers=num_fc_layers,
          default_output_size=output_size,
          default_use_bias=use_bias,
          default_weights_initializer=weights_initializer,
          default_bias_initializer=bias_initializer,
          default_norm=norm,
          default_norm_params=norm_params,
          default_activation=activation,
          default_dropout=dropout,
      )
  
imports: import logging
  from typing import Dict, List, Optional, Type
  import torch
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.constants import DATE, ENCODER_OUTPUT
  from ludwig.encoders.base import Encoder
  from ludwig.encoders.registry import register_encoder
  from ludwig.encoders.types import EncoderOutputDict
  from ludwig.modules.embedding_modules import Embed
  from ludwig.modules.fully_connected_modules import FCStack
  from ludwig.schema.encoders.base import BaseEncoderConfig
  from ludwig.schema.encoders.date_encoders import DateEmbedConfig, DateWaveConfig
  from ludwig.utils import torch_utils
label_desc: Use image node_id 1 to create a new DateWave object from inherited base classes: Encoder with example: obj = DateWave(fc_layers, num_fc_layers, output_size, use_bias, weights_initializer, bias_initializer, norm, norm_params, activation, dropout, encoder_config)