MagNET / conftest.py
ekwan16's picture
sync code from github@e853181b4c59e84169cc94394b0c9bbe8a58b077
e16c7ac verified
Raw
History Blame Contribute Delete
2.17 kB
# The magnet/ package tests live in tests/ and need the heavy PyTorch / PyTorch Geometric stack
# (see magnet/requirements.txt), which the default dataset-reader test environment does not
# install. When torch is absent, skip collecting tests/ entirely so the lightweight CI stays green.
# They run locally once the torch stack from magnet/requirements.txt is present.
#
# This is needed (not just the importorskip guards inside the test files) because tests/test_api.py
# and tests/test_magnet.py import torch (and magnet, which imports torch) at module scope, before
# any in-test skip can run.
import os
import sys
# The analysis code lives in analysis/code/ (importable modules) and analysis/code/shared/ (the
# shared utilities). Put both on sys.path so tests anywhere resolve bare imports like `import
# delta22` and `from stats import rmse`, no matter which folder the test file itself sits in.
_HERE = os.path.dirname(os.path.abspath(__file__))
for _p in (os.path.join(_HERE, "analysis", "code"),
os.path.join(_HERE, "analysis", "code", "shared")):
if _p not in sys.path:
sys.path.insert(0, _p)
collect_ignore = []
collect_ignore_glob = []
try:
import torch # noqa: F401
except ImportError:
collect_ignore = ["magnet", "tests"]
collect_ignore_glob = ["magnet/*", "tests/*"]
# The reproduce tests (test_reproduce.py) execute every notebook and take minutes; they are opt-in so
# a plain `pytest` stays fast. Run them with `pytest --run-notebooks` (or `pytest -m reproduce`).
def pytest_addoption(parser):
parser.addoption("--run-notebooks", action="store_true", default=False,
help="run the reproduce tests that execute every analysis notebook")
def pytest_configure(config):
config.addinivalue_line("markers", "reproduce: executes a full analysis notebook (slow, opt-in)")
def pytest_collection_modifyitems(config, items):
import pytest
if config.getoption("--run-notebooks"):
return
skip = pytest.mark.skip(reason="notebook reproduce test; pass --run-notebooks to run")
for item in items:
if "reproduce" in item.keywords:
item.add_marker(skip)