code: def from_config(cls, config, kernel_size):
      conv = create_module(
          config.decoder_conv_type,
          input_size=config.decoder_conv_dim,
          kernel_size=kernel_size,
          convolution_type=config.convolution_type,
      )
      if config.attention_type is not None:
          attention = create_module(
              config.attention_type,
              config.decoder_embed_dim,
              config.decoder_attention_heads,
          )
      else:
          attention = None
      if config.self_attention_type is not None:
          self_attention = create_module(
              config.self_attention_type,
              config.decoder_embed_dim,
              config.self_attention_heads,
          )
      else:
          self_attention = None
      return cls(
          **config._asdict(),
          conv=conv,
          self_attention=self_attention,
          attention=attention,
      )
  
imports: import math
  from typing import Dict, List, Optional, Tuple, Union
  import torch
  import torch.nn
  import torch.nn.functional
  from pytext.config import ConfigBase
  from pytext.config.module_config import ModuleConfig
  from pytext.models.module import create_module
  from pytext.models.seq_models.base import PlaceholderAttentionIdentity
  from pytext.models.seq_models.positional import build_positional_embedding, PostionalEmbedCombine, PostionalEmbedType
  from pytext.models.seq_models.utils import Linear, log_and_overwrite
  from torch import Tensor
  from torch.nn import LayerNorm
  from .attention import MultiheadAttention
  from .base import PlaceholderIdentity, PyTextIncrementalDecoderComponent, PyTextSeq2SeqModule
  from .light_conv import LightweightConv
  from .projection_layers import DecoderWithLinearOutputProjection, DecoupledDecoderHead
  from .utils import extract_ontology_vocab
label_desc: Use image node_id 1 for calling the LightConvDecoderLayer obj's underlying member method code with example usage: obj.from_config(cls, config, kernel_size) and returns: cls