Unverified Commit a424509d authored by Edward Z. Yang's avatar Edward Z. Yang Committed by GitHub
Browse files

Make torchaudio work on Python 2. (#209)



- Apply __future__ imports uniformly (future division is the biggy, but absolute
  imports mattered too)
- Hotfix use of tempfile.TemporaryDirectory using a BC library (DO NOT
  add this library as a dependency to torchaudio; it's only for testing)
- Replace math.gcd with fractions.gcd
- Fix a weird pytest collection bug involving parametrized tests
- Turn on Python 2 and Python 3.7 in Travis.
Signed-off-by: default avatarEdward Z. Yang <ezyang@fb.com>
parent 67f9f302
......@@ -12,10 +12,11 @@ cache:
matrix:
fast_finish: true
include:
# TODO add this back in when there is a pytorch 1.2 for python 3.5
# - env: PYTHON_VERSION="3.5"
- env: PYTHON_VERSION="3.7"
- env: PYTHON_VERSION="3.6"
# TODO add this back in when there is a pytorch 1.2 for python 3.5
- env: PYTHON_VERSION="3.5" RUN_FLAKE8="true" SKIP_TESTS="true"
- env: PYTHON_VERSION="2.7"
addons:
apt:
......
......@@ -14,4 +14,7 @@ librosa>=0.4.3
scipy
# Unit tests with pytest
pytest
\ No newline at end of file
pytest
# Testing only Py3 compat
backports.tempfile
from __future__ import absolute_import, division, print_function, unicode_literals
import os
from shutil import copytree
import tempfile
import backports.tempfile as tempfile
import torch
TEST_DIR_PATH = os.path.dirname(os.path.realpath(__file__))
......
from __future__ import absolute_import, division, print_function, unicode_literals
import argparse
import logging
import os
......
from __future__ import absolute_import, division, print_function, unicode_literals
import argparse
import logging
import os
......
from __future__ import absolute_import, division, print_function, unicode_literals
import random
import torchaudio
......
from __future__ import absolute_import, division, print_function, unicode_literals
import unittest
import common_utils
import torch
......
from __future__ import absolute_import, division, print_function, unicode_literals
import math
import os
import common_utils
......
from __future__ import absolute_import, division, print_function, unicode_literals
import unittest
import common_utils
import torch
......
from __future__ import absolute_import, division, print_function, unicode_literals
import os
import torch
......
from __future__ import absolute_import, division, print_function, unicode_literals
import math
import torch
......@@ -195,15 +196,18 @@ def _num_stft_bins(signal_len, fft_len, hop_length, pad):
return (signal_len + 2 * pad - fft_len + hop_length) // hop_length
@pytest.mark.parametrize('rate', [0.5, 1.01, 1.3])
@pytest.mark.parametrize('complex_specgrams', [
torch.randn(1, 2, 1025, 400, 2),
torch.randn(1, 1025, 400, 2)
])
@pytest.mark.parametrize('rate', [0.5, 1.01, 1.3])
@pytest.mark.parametrize('hop_length', [256])
@unittest.skipIf(not IMPORT_LIBROSA, 'Librosa is not available')
def test_phase_vocoder(complex_specgrams, rate, hop_length):
# Using a decorator here causes parametrize to fail on Python 2
if not IMPORT_LIBROSA:
raise unittest.SkipTest('Librosa is not available')
# Due to cummulative sum, numerical error in using torch.float32 will
# result in bottom right values of the stretched sectrogram to not
# match with librosa.
......
from __future__ import division
from __future__ import absolute_import, division, print_function, unicode_literals
import torch
import torchaudio.functional as F
import torchaudio.transforms as transforms
......
from __future__ import absolute_import, division, print_function, unicode_literals
import os
import torch
import torchaudio.kaldi_io as kio
......
from __future__ import absolute_import, division, print_function, unicode_literals
import unittest
import common_utils
import torch
......
from __future__ import print_function
from __future__ import absolute_import, division, print_function, unicode_literals
import math
import os
......
from __future__ import division, print_function
from __future__ import absolute_import, division, print_function, unicode_literals
import os.path
import torch
......
from __future__ import absolute_import, division, print_function, unicode_literals
import torchaudio
......
from __future__ import absolute_import, division, print_function, unicode_literals
import sys
PY3 = sys.version_info > (3, 0)
......
from __future__ import absolute_import, division, print_function, unicode_literals
import math
import fractions
import random
import torch
......@@ -600,7 +602,7 @@ def _get_LR_indices_and_weights(orig_freq, new_freq, output_samples_in_unit, win
def _lcm(a, b):
return abs(a * b) // math.gcd(a, b)
return abs(a * b) // fractions.gcd(a, b)
def _get_num_LR_output_samples(input_num_samp, samp_rate_in, samp_rate_out):
......@@ -675,7 +677,7 @@ def resample_waveform(waveform, orig_freq, new_freq, lowpass_filter_width=6):
assert lowpass_cutoff * 2 <= min_freq
base_freq = math.gcd(int(orig_freq), int(new_freq))
base_freq = fractions.gcd(int(orig_freq), int(new_freq))
input_samples_in_unit = int(orig_freq) // base_freq
output_samples_in_unit = int(new_freq) // base_freq
......
from __future__ import print_function
from __future__ import absolute_import, division, print_function, unicode_literals
import torch.utils.data as data
import os
import os.path
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment