Skip to content

Commit

Permalink
Merge pull request #435 from deezer/fix_tests_multiprocess
Browse files Browse the repository at this point in the history
Fix tests multiprocess issues
  • Loading branch information
mmoussallam committed Jul 8, 2020
2 parents 39af950 + b0ec2a5 commit 6e8f470
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 52 deletions.
4 changes: 2 additions & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
- restore_cache:
key: models-{{ checksum "spleeter/model/__init__.py" }}
- run: apt-get update && apt-get install -y ffmpeg
- run: pip install -r requirements.txt && pip install pytest pytest-xdist musdb museval
- run: pip install -r requirements.txt && pip install pytest==5.4.3 pytest-xdist==1.32.0 pytest-forked==1.1.3 musdb museval
- run: make test
- save_cache:
key: models-{{ checksum "spleeter/model/__init__.py" }}
Expand All @@ -30,7 +30,7 @@ jobs:
- restore_cache:
key: models-{{ checksum "spleeter/model/__init__.py" }}
- run: apt-get update && apt-get install -y ffmpeg
- run: pip install -r requirements.txt && pip install pytest pytest-xdist musdb museval
- run: pip install -r requirements.txt && pip install pytest==5.4.3 pytest-xdist==1.32.0 pytest-forked==1.1.3 musdb museval
- run: make test
- save_cache:
key: models-{{ checksum "spleeter/model/__init__.py" }}
Expand Down
10 changes: 8 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
FEEDSTOCK = spleeter-feedstock
FEEDSTOCK_REPOSITORY = https://github.com/deezer/$(FEEDSTOCK)
FEEDSTOCK_RECIPE = $(FEEDSTOCK)/recipe/spleeter/meta.yaml
PYTEST_CMD = pytest -W ignore::FutureWarning -W ignore::DeprecationWarning -vv --forked
PYTEST_CMD = pytest -W ignore::FutureWarning -W ignore::DeprecationWarning -vv

all: clean build test deploy

Expand All @@ -27,7 +27,13 @@ build-gpu: clean
python3 setup.py sdist

test:
$(PYTEST_CMD)
#$(foreach file, $(wildcard tests/test_*.py), $(PYTEST_CMD) $(file);)
# deactivate this until we figure out why it fails on the CI container
#$(PYTEST_CMD) tests/test_eval.py
$(PYTEST_CMD) tests/test_ffmpeg_adapter.py
$(PYTEST_CMD) tests/test_github_model_provider.py
$(PYTEST_CMD) --boxed tests/test_separator.py



deploy:
Expand Down
93 changes: 45 additions & 48 deletions tests/test_separator.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,67 +42,64 @@
@pytest.mark.parametrize('test_file, configuration, backend', TEST_CONFIGURATIONS)
def test_separate(test_file, configuration, backend):
""" Test separation from raw data. """
with tf.Session() as sess:
instruments = MODEL_TO_INST[configuration]
adapter = get_default_audio_adapter()
waveform, _ = adapter.load(test_file)
separator = Separator(configuration, stft_backend=backend)
prediction = separator.separate(waveform, test_file)
assert len(prediction) == len(instruments)
for instrument in instruments:
assert instrument in prediction
for instrument in instruments:
track = prediction[instrument]
assert waveform.shape[:-1] == track.shape[:-1]
assert not np.allclose(waveform, track)
for compared in instruments:
if instrument != compared:
assert not np.allclose(track, prediction[compared])
instruments = MODEL_TO_INST[configuration]
adapter = get_default_audio_adapter()
waveform, _ = adapter.load(test_file)
separator = Separator(configuration, stft_backend=backend, multiprocess=False)
prediction = separator.separate(waveform, test_file)
assert len(prediction) == len(instruments)
for instrument in instruments:
assert instrument in prediction
for instrument in instruments:
track = prediction[instrument]
assert waveform.shape[:-1] == track.shape[:-1]
assert not np.allclose(waveform, track)
for compared in instruments:
if instrument != compared:
assert not np.allclose(track, prediction[compared])



@pytest.mark.parametrize('test_file, configuration, backend', TEST_CONFIGURATIONS)
def test_separate_to_file(test_file, configuration, backend):
""" Test file based separation. """
with tf.Session() as sess:
instruments = MODEL_TO_INST[configuration]
separator = Separator(configuration, stft_backend=backend)
name = splitext(basename(test_file))[0]
with TemporaryDirectory() as directory:
separator.separate_to_file(
test_file,
directory)
for instrument in instruments:
assert exists(join(
directory,
'{}/{}.wav'.format(name, instrument)))
instruments = MODEL_TO_INST[configuration]
separator = Separator(configuration, stft_backend=backend, multiprocess=False)
name = splitext(basename(test_file))[0]
with TemporaryDirectory() as directory:
separator.separate_to_file(
test_file,
directory)
for instrument in instruments:
assert exists(join(
directory,
'{}/{}.wav'.format(name, instrument)))


@pytest.mark.parametrize('test_file, configuration, backend', TEST_CONFIGURATIONS)
def test_filename_format(test_file, configuration, backend):
""" Test custom filename format. """
with tf.Session() as sess:
instruments = MODEL_TO_INST[configuration]
separator = Separator(configuration, stft_backend=backend)
name = splitext(basename(test_file))[0]
with TemporaryDirectory() as directory:
separator.separate_to_file(
test_file,
instruments = MODEL_TO_INST[configuration]
separator = Separator(configuration, stft_backend=backend, multiprocess=False)
name = splitext(basename(test_file))[0]
with TemporaryDirectory() as directory:
separator.separate_to_file(
test_file,
directory,
filename_format='export/{filename}/{instrument}.{codec}')
for instrument in instruments:
assert exists(join(
directory,
filename_format='export/{filename}/{instrument}.{codec}')
for instrument in instruments:
assert exists(join(
directory,
'export/{}/{}.wav'.format(name, instrument)))
'export/{}/{}.wav'.format(name, instrument)))


@pytest.mark.parametrize('test_file, configuration', MODELS_AND_TEST_FILES)
def test_filename_conflict(test_file, configuration):
""" Test error handling with static pattern. """
with tf.Session() as sess:
separator = Separator(configuration)
with TemporaryDirectory() as directory:
with pytest.raises(SpleeterError):
separator.separate_to_file(
test_file,
directory,
filename_format='I wanna be your lover')
separator = Separator(configuration, multiprocess=False)
with TemporaryDirectory() as directory:
with pytest.raises(SpleeterError):
separator.separate_to_file(
test_file,
directory,
filename_format='I wanna be your lover')

0 comments on commit 6e8f470

Please sign in to comment.