def METHOD_NAME(self, input_data):
    num_batches = input_data.size(0)
    num_samples = input_data.size(1)
    self.num_samples = num_samples
    # similar to librosa, reflect-pad the input
    input_data = input_data.view(num_batches, 1, num_samples)
    input_data = F.pad(
        input_data.unsqueeze(1),
        (int(self.filter_length / 2), int(self.filter_length / 2), 0, 0),
        mode='reflect')
    input_data = input_data.squeeze(1)
    forward_transform = F.conv1d(
        input_data,
        Variable(self.forward_basis, requires_grad=False),
        stride=self.hop_length,
        padding=0)
    cutoff = int((self.filter_length / 2) + 1)
    real_part = forward_transform[:, :cutoff, :]
    imag_part = forward_transform[:, cutoff:, :]
    magnitude = torch.sqrt(real_part**2 + imag_part**2)
    phase = torch.autograd.Variable(
        torch.atan2(imag_part.data, real_part.data))
    return magnitude, phase