def FProp(self, theta, inputs, paddings):
    "Apply convolution to inputs.\n\n    Args:\n      theta: A `.NestedMap` object containing weights' values of this layer and\n        its children layers.\n      inputs: The inputs tensor. It is expected to be of shape [batch, time,\n        frequency, channel]. The time dimension corresponds to the height\n        dimension as in images and the frequency dimension corresponds to the\n        width dimension as in images.\n      paddings: The paddings tensor, expected to be of shape [batch, time].\n\n    Returns:\n      outputs, out_paddings pair.\n    "
    p = self.params
    with tf.name_scope(p.name):
        inputs = py_utils.with_dependencies([py_utils.assert_shape_match(tf.shape(paddings), [(- 1), (- 1)]), py_utils.assert_shape_match(tf.shape(inputs), tf.concat([tf.shape(paddings), [(- 1), self.input_channels]], 0))], inputs)

        def _ApplyPadding(tensor_in, padding_in):
            padding_expanded = tf.expand_dims(tf.expand_dims(padding_in, (- 1)), (- 1))
            return (tensor_in * (1.0 - padding_expanded))
        inputs = _ApplyPadding(inputs, paddings)
        out = self._EvaluateConvKernel(theta, inputs)
        conv_padding = ComputeConvOutputPadding(paddings, window=p.filter_stride[0], stride=p.filter_stride[0])
        out = py_utils.HasShape(out, self.OutShape(tf.shape(inputs)))
        return (out, conv_padding)
Apply convolution to inputs.

Args:
  theta: A `.NestedMap` object containing weights' values of this layer and
    its children layers.
  inputs: The inputs tensor. It is expected to be of shape [batch, time,
    frequency, channel]. The time dimension corresponds to the height
    dimension as in images and the frequency dimension corresponds to the
    width dimension as in images.
  paddings: The paddings tensor, expected to be of shape [batch, time].

Returns:
  outputs, out_paddings pair.
def FProp(self, theta, inputs, paddings):
    "Apply convolution to inputs.\n\n    Args:\n      theta: A `.NestedMap` object containing weights' values of this layer and\n        its children layers.\n      inputs: The inputs tensor. It is expected to be of shape [batch, time,\n        frequency, channel]. The time dimension corresponds to the height\n        dimension as in images and the frequency dimension corresponds to the\n        width dimension as in images.\n      paddings: The paddings tensor, expected to be of shape [batch, time].\n\n    Returns:\n      outputs, out_paddings pair.\n    "
    p = self.params
    with tf.name_scope(p.name):
        inputs = py_utils.with_dependencies([py_utils.assert_shape_match(tf.shape(paddings), [(- 1), (- 1)]), py_utils.assert_shape_match(tf.shape(inputs), tf.concat([tf.shape(paddings), [(- 1), self.input_channels]], 0))], inputs)

        def _ApplyPadding(tensor_in, padding_in):
            padding_expanded = tf.expand_dims(tf.expand_dims(padding_in, (- 1)), (- 1))
            return (tensor_in * (1.0 - padding_expanded))
        inputs = _ApplyPadding(inputs, paddings)
        out = self._EvaluateConvKernel(theta, inputs)
        conv_padding = ComputeConvOutputPadding(paddings, window=p.filter_stride[0], stride=p.filter_stride[0])
        out = py_utils.HasShape(out, self.OutShape(tf.shape(inputs)))
        return (out, conv_padding)