test_hub.py 1.59 KB
Newer Older
1
import os
2
import shutil
3
import sys
4
5
import tempfile

Anirudh's avatar
Anirudh committed
6
import pytest
7
import torch.hub as hub
8
9
10
11
12
13
14
15
16


def sum_of_model_parameters(model):
    s = 0
    for p in model.parameters():
        s += p.sum()
    return s


17
SUM_OF_PRETRAINED_RESNET18_PARAMS = -12703.9931640625
18
19


20
@pytest.mark.skipif("torchvision" in sys.modules, reason="TestHub must start without torchvision imported")
Anirudh's avatar
Anirudh committed
21
class TestHub:
22
23
24
25
26
27
28
    # Only run this check ONCE before all tests start.
    # - If torchvision is imported before all tests start, e.g. we might find _C.so
    #   which doesn't exist in downloaded zip but in the installed wheel.
    # - After the first test is run, torchvision is already in sys.modules due to
    #   Python cache as we run all hub tests in the same python process.

    def test_load_from_github(self):
29
        hub_model = hub.load("pytorch/vision", "resnet18", pretrained=True, progress=False)
Anirudh's avatar
Anirudh committed
30
        assert sum_of_model_parameters(hub_model).item() == pytest.approx(SUM_OF_PRETRAINED_RESNET18_PARAMS)
31
32
33
34

    def test_set_dir(self):
        temp_dir = tempfile.gettempdir()
        hub.set_dir(temp_dir)
35
        hub_model = hub.load("pytorch/vision", "resnet18", pretrained=True, progress=False)
Anirudh's avatar
Anirudh committed
36
        assert sum_of_model_parameters(hub_model).item() == pytest.approx(SUM_OF_PRETRAINED_RESNET18_PARAMS)
37
38
        assert os.path.exists(temp_dir + "/pytorch_vision_master")
        shutil.rmtree(temp_dir + "/pytorch_vision_master")
39
40

    def test_list_entrypoints(self):
41
42
        entry_lists = hub.list("pytorch/vision", force_reload=True)
        assert "resnet18" in entry_lists
43
44
45


if __name__ == "__main__":
Anirudh's avatar
Anirudh committed
46
    pytest.main([__file__])