Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| # -*- coding: utf-8 -*- | |
| # Copyright 2019 Tomoki Hayashi | |
| # MIT License (https://opensource.org/licenses/MIT) | |
| import logging | |
| import numpy as np | |
| import pytest | |
| import torch | |
| from parallel_wavegan.layers import CausalConv1d | |
| from parallel_wavegan.layers import CausalConvTranspose1d | |
| from parallel_wavegan.layers import Conv1d | |
| from parallel_wavegan.layers import Conv1d1x1 | |
| from parallel_wavegan.layers import Conv2d | |
| from parallel_wavegan.layers import ConvInUpsampleNetwork | |
| from parallel_wavegan.layers import PQMF | |
| from parallel_wavegan.layers import UpsampleNetwork | |
| logging.basicConfig( | |
| level=logging.WARN, | |
| format="%(asctime)s (%(module)s:%(lineno)d) %(levelname)s: %(message)s", | |
| ) | |
| def test_conv_initialization(): | |
| conv = Conv1d(10, 10, 3, bias=True) | |
| np.testing.assert_array_equal( | |
| conv.bias.data.numpy(), np.zeros_like(conv.bias.data.numpy()) | |
| ) | |
| conv1x1 = Conv1d1x1(10, 10, bias=True) | |
| np.testing.assert_array_equal( | |
| conv1x1.bias.data.numpy(), np.zeros_like(conv1x1.bias.data.numpy()) | |
| ) | |
| kernel_size = (10, 10) | |
| conv2d = Conv2d(10, 10, kernel_size, bias=True) | |
| np.testing.assert_array_equal( | |
| conv2d.weight.data.numpy(), | |
| np.ones_like(conv2d.weight.data.numpy()) / np.prod(kernel_size), | |
| ) | |
| np.testing.assert_array_equal( | |
| conv2d.bias.data.numpy(), np.zeros_like(conv2d.bias.data.numpy()) | |
| ) | |
| kernel_size = (1, 10) | |
| conv2d = Conv2d(10, 10, kernel_size, bias=True) | |
| np.testing.assert_array_equal( | |
| conv2d.weight.data.numpy(), | |
| np.ones_like(conv2d.weight.data.numpy()) / np.prod(kernel_size), | |
| ) | |
| np.testing.assert_array_equal( | |
| conv2d.bias.data.numpy(), np.zeros_like(conv2d.bias.data.numpy()) | |
| ) | |
| def test_upsample(use_causal_conv): | |
| length = 10 | |
| scales = [4, 4] | |
| x = torch.randn(1, 10, length) | |
| upsample = UpsampleNetwork(scales) | |
| y = upsample(x) | |
| assert x.size(-1) * np.prod(scales) == y.size(-1) | |
| for aux_context_window in [0, 1, 2, 3]: | |
| conv_upsample = ConvInUpsampleNetwork( | |
| scales, | |
| aux_channels=x.size(1), | |
| aux_context_window=aux_context_window, | |
| use_causal_conv=use_causal_conv, | |
| ) | |
| y = conv_upsample(x) | |
| assert (x.size(-1) - 2 * aux_context_window) * np.prod(scales) == y.size(-1) | |
| def test_causal_conv(kernel_size, dilation, pad, pad_params): | |
| x = torch.randn(1, 1, 32) | |
| conv = CausalConv1d(1, 1, kernel_size, dilation, pad=pad, pad_params=pad_params) | |
| y1 = conv(x) | |
| x[:, :, 16:] += torch.randn(1, 1, 16) | |
| y2 = conv(x) | |
| assert x.size(2) == y1.size(2) | |
| np.testing.assert_array_equal( | |
| y1[:, :, :16].cpu().numpy(), | |
| y2[:, :, :16].cpu().numpy(), | |
| ) | |
| def test_causal_conv_transpose(kernel_size, stride): | |
| deconv = CausalConvTranspose1d(1, 1, kernel_size, stride) | |
| x = torch.randn(1, 1, 32) | |
| y1 = deconv(x) | |
| x[:, :, 19:] += torch.randn(1, 1, 32 - 19) | |
| y2 = deconv(x) | |
| assert x.size(2) * stride == y1.size(2) | |
| np.testing.assert_array_equal( | |
| y1[:, :, : 19 * stride].cpu().numpy(), | |
| y2[:, :, : 19 * stride].cpu().numpy(), | |
| ) | |
| def test_pqmf(subbands): | |
| pqmf = PQMF(subbands) | |
| x = torch.randn(1, 1, subbands * 32) | |
| y = pqmf.analysis(x) | |
| assert y.shape[2] * subbands == x.shape[2] | |
| x_hat = pqmf.synthesis(y) | |
| assert x.shape[2] == x_hat.shape[2] | |