mim/tests/test_search.py
yancong d84cf6e79c
Support mim train / test / gridsearch in OpenMMLab-2.0 (#160)
* Suport openmmlab-2.0 with the following features:

- import Config from mmengine
- remove extra options for train / test / gridsearch
- create destination directory if dose not exists in `mim donwload`
- add mmengine in `mim list`

* fix ci with the following 2 problems:
- mmcv2.x have not pre-built package for torch1.5.
- patch xxx not found after install (cause by importlib.reload).

* Update mim/commands/download.py

Co-authored-by: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com>

* dev(download): remove echo line

* support openmmlab 1.0 and 2.0

* use tests/data/lenet5_mnist_2.0.py in test case

* use tests/data/lenet5_mnist_2.0.py in test case

Co-authored-by: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com>
2022-09-23 19:16:40 +08:00

128 lines
4.4 KiB
Python

# Copyright (c) OpenMMLab. All rights reserved.
import os.path as osp
from click.testing import CliRunner
from mim.commands.install import cli as install
from mim.commands.search import cli as search
from mim.commands.uninstall import cli as uninstall
from mim.utils import DEFAULT_CACHE_DIR
def setup_module():
runner = CliRunner()
result = runner.invoke(uninstall, ['mmcv-full', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcv', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcls', '--yes'])
assert result.exit_code == 0
def test_search():
runner = CliRunner()
result = runner.invoke(install, ['mmcls', '--yes'])
assert result.exit_code == 0
# mim search mmcls
result = runner.invoke(search, ['mmcls'])
assert result.exit_code == 0
# mim search mmcls --remote
# search master branch
result = runner.invoke(search, ['mmcls', '--remote'])
assert result.exit_code == 0
# mim search mmsegmentation --remote
result = runner.invoke(search, ['mmsegmentation', '--remote'])
assert result.exit_code == 0
# mim search mmaction2 --remote
result = runner.invoke(search, ['mmaction2', '--remote'])
assert result.exit_code == 0
# mim search mmcls==0.11.0 --remote
result = runner.invoke(search, ['mmcls==0.11.0', '--remote'])
assert result.exit_code == 0
# the metadata of mmcls==0.11.0 will be saved in cache
assert osp.exists(osp.join(DEFAULT_CACHE_DIR, 'mmcls-0.11.0.pkl'))
# always test latest mmcls
result = runner.invoke(uninstall, ['mmcls', '--yes'])
assert result.exit_code == 0
result = runner.invoke(install, ['mmcls', '--yes'])
assert result.exit_code == 0
# mim search mmcls --model res
# invalid model
result = runner.invoke(search, ['mmcls', '--model', 'res'])
assert result.exit_code == 1
# mim search mmcls --model resnet
result = runner.invoke(search, ['mmcls', '--model', 'resnet'])
assert result.exit_code == 0
# mim search mmcls --valid-config
result = runner.invoke(search, ['mmcls', '--valid-config'])
assert result.exit_code == 0
# mim search mmcls --config resnet18_b16x8_cifar1
# invalid config
result = runner.invoke(search,
['mmcls', '--config', 'resnet18_b16x8_cifar1'])
assert result.exit_code == 1
# mim search mmcls --config resnet18_b16x8_cifar10
result = runner.invoke(search,
['mmcls', '--config', 'resnet18_8xb16_cifar10'])
assert result.exit_code == 0
# mim search mmcls --dataset cifar-1
# invalid dataset
result = runner.invoke(search, ['mmcls', '--dataset', 'cifar-1'])
assert result.exit_code == 1
# mim search mmcls --dataset cifar-10
result = runner.invoke(search, ['mmcls', '--dataset', 'cifar-10'])
assert result.exit_code == 0
# mim search mmcls --condition 'batch_size>45,epochs>100'
result = runner.invoke(
search, ['mmcls', '--condition', 'batch_size>45,epochs>100'])
assert result.exit_code == 0
# mim search mmcls --condition 'batch_size>45 epochs>100'
result = runner.invoke(
search, ['mmcls', '--condition', 'batch_size>45 epochs>100'])
assert result.exit_code == 0
# mim search mmcls --condition '128<batch_size<=256'
result = runner.invoke(search,
['mmcls', '--condition', '128<batch_size<=256'])
assert result.exit_code == 0
# mim search mmcls --sort epoch
result = runner.invoke(search, ['mmcls', '--sort', 'epoch'])
assert result.exit_code == 0
# mim search mmcls --sort epochs
result = runner.invoke(search, ['mmcls', '--sort', 'epochs'])
assert result.exit_code == 0
# mim search mmcls --sort batch_size epochs
result = runner.invoke(search, ['mmcls', '--sort', 'batch_size', 'epochs'])
assert result.exit_code == 0
# mim search mmcls --field epoch
result = runner.invoke(search, ['mmcls', '--field', 'epoch'])
assert result.exit_code == 0
# mim search mmcls --field epochs
result = runner.invoke(search, ['mmcls', '--field', 'epochs'])
assert result.exit_code == 0
def teardown_module():
runner = CliRunner()
result = runner.invoke(uninstall, ['mmcv-full', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcv', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcls', '--yes'])
assert result.exit_code == 0