docs: def sg_aconv1d(tensor, opt):
      r"""Applies 1-D atrous (or dilated) convolution.
      
      Args:
        tensor: A 3-D `Tensor` (automatically passed by decorator).
        opt:
          causal: Boolean. If True, zeros are padded before the time axis such that
            each activation unit doesn't have receptive neurons beyond the equivalent time step.
          size: A positive `integer` representing `[kernel width]`. As a default it is set to 2
            if causal is True, 3 otherwise. 
          rate: A positive `integer`. The stride with which we sample input values across
            the `height` and `width` dimensions. Default is 1.
          in_dim: A positive `integer`. The size of input dimension.
          dim: A positive `integer`. The size of output dimension.
          pad: Either `SAME` (Default) or `VALID`.
          bias: Boolean. If True, biases are added.
          regularizer:  A (Tensor -> Tensor or None) function; the result of applying it on a newly created variable
            will be added to the collection tf.GraphKeys.REGULARIZATION_LOSSES and can be used for regularization
          summary: If True, summaries are added. The default is True.
  
      Returns:
        A `Tensor` with the same type as `tensor`.
      """
      # default options
      opt += tf.sg_opt(size=(2 if opt.causal else 3), rate=1, pad='SAME')
  
      # parameter tf.sg_initializer
      w = tf.sg_initializer.he_uniform('W', (1, opt.size, opt.in_dim, opt.dim),
                                       regularizer=opt.regularizer, summary=opt.summary)
      b = tf.sg_initializer.constant('b', opt.dim, summary=opt.summary) if opt.bias else 0
  
      if opt.causal:
          # pre-padding for causality
          if opt.pad == 'SAME':
              pad_len = (opt.size - 1) * opt.rate  # padding size
              x = tf.pad(tensor, [[0, 0], [pad_len, 0], [0, 0]]).sg_expand_dims(axis=1)
          else:
              x = tensor.sg_expand_dims(axis=1)
          # apply 2d convolution
          out = tf.nn.atrous_conv2d(x, w, rate=opt.rate, padding='VALID') + b
      else:
          # apply 2d convolution
          out = tf.nn.atrous_conv2d(tensor.sg_expand_dims(axis=1),
                                    w, rate=opt.rate, padding=opt.pad) + b
      # reduce dimension
      # noinspection PyUnresolvedReferences
      out = out.sg_squeeze(axis=1)
  
      return out