def METHOD_NAME(self, query, key, value, mask):
    """Forward of 'Lightweight Convolution'.
    This function takes query, key and value but uses only query.
    This is just for compatibility with self-attention layer (attention.py)
    Args:
        query (Tensor): 
            input tensor. (batch, time1, d_model)
        key (Tensor): 
            NOT USED. (batch, time2, d_model)  
        value (Tensor): 
            NOT USED. (batch, time2, d_model) 
        mask : (Tensor):
            (batch, time1, time2) mask
    Return:
        Tensor: output. (batch, time1, d_model) 
    """
    # linear -> GLU -> lightconv -> linear
    x = query
    B, T, C = x.shape
    H = self.wshare
    # first liner layer
    x = self.linear1(x)
    # GLU activation
    x = self.act(x)
    # lightconv
    # B x C x T
    x = x.transpose([0, 2, 1]).reshape([-1, H, T])
    weight = F.dropout(
        self.weight, self.dropout_rate, training=self.training)
    if self.use_kernel_mask:
        weight = masked_fill(weight, self.kernel_mask == 0.0, float("-inf"))
        # weight = weight.masked_fill(self.kernel_mask == 0.0, float("-inf"))
    weight = F.softmax(weight, axis=-1)
    x = F.conv1d(
        x, weight, padding=self.padding_size,
        groups=self.wshare).reshape([B, C, T])
    if self.use_bias:
        x = x + self.bias.reshape([1, -1, 1])
    # B x T x C
    x = x.transpose([0, 2, 1])
    if mask is not None and not self.use_kernel_mask:
        mask = mask.transpose([0, 2, 1])
        # x = x.masked_fill(mask == 0, 0.0)
        x = masked_fill(x, mask == 0, 0.0)
    # second linear layer
    x = self.linear2(x)
    return x