mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-10 18:17:31 +08:00
175 lines
6.1 KiB
Python
175 lines
6.1 KiB
Python
"""
|
|
Tests for the nerfstudio.plugins.registry module.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
from dataclasses import dataclass, field
|
|
|
|
from nerfstudio.engine.trainer import TrainerConfig
|
|
from nerfstudio.pipelines.base_pipeline import VanillaPipelineConfig
|
|
from nerfstudio.plugins import registry, registry_dataparser
|
|
from nerfstudio.plugins.registry_dataparser import DataParserConfig, DataParserSpecification, discover_dataparsers
|
|
from nerfstudio.plugins.types import MethodSpecification
|
|
|
|
if sys.version_info < (3, 10):
|
|
import importlib_metadata
|
|
else:
|
|
from importlib import metadata as importlib_metadata
|
|
|
|
|
|
@dataclass
|
|
class TestConfigClass(MethodSpecification):
|
|
config: TrainerConfig = TrainerConfig(
|
|
method_name="test-method",
|
|
pipeline=VanillaPipelineConfig(),
|
|
optimizers={},
|
|
)
|
|
description: str = "Test description"
|
|
|
|
|
|
def TestConfigFunc():
|
|
return TestConfigClass()
|
|
|
|
|
|
TestConfig = TestConfigClass()
|
|
|
|
|
|
def test_discover_methods():
|
|
"""Tests if a custom method gets properly registered using the discover_methods method"""
|
|
entry_points_backup = registry.entry_points
|
|
|
|
def entry_points(group=None):
|
|
return importlib_metadata.EntryPoints(
|
|
[
|
|
importlib_metadata.EntryPoint(
|
|
name="test", value="test_registry:TestConfig", group="nerfstudio.method_configs"
|
|
)
|
|
]
|
|
).select(group=group)
|
|
|
|
try:
|
|
# Mock importlib entry_points
|
|
registry.entry_points = entry_points
|
|
|
|
# Discover plugins
|
|
methods, _ = registry.discover_methods()
|
|
assert "test-method" in methods
|
|
config = methods["test-method"]
|
|
assert isinstance(config, TrainerConfig)
|
|
finally:
|
|
# Revert mock
|
|
registry.entry_points = entry_points_backup
|
|
|
|
|
|
def _test_discover_methods_from_environment_variable(method):
|
|
"""Tests if a custom method from env variable gets properly registered using the discover_methods method"""
|
|
old_env = None
|
|
try:
|
|
old_env = os.environ.get("NERFSTUDIO_METHOD_CONFIGS", None)
|
|
method_key = f"{method}-env"
|
|
os.environ["NERFSTUDIO_METHOD_CONFIGS"] = f"{method_key}=test_registry:{method}"
|
|
|
|
# Discover plugins
|
|
methods, _ = registry.discover_methods()
|
|
assert method_key in methods
|
|
config = methods[method_key]
|
|
assert isinstance(config, TrainerConfig)
|
|
finally:
|
|
# Revert mock
|
|
if old_env is not None:
|
|
os.environ["NERFSTUDIO_METHOD_CONFIGS"] = old_env
|
|
else:
|
|
del os.environ["NERFSTUDIO_METHOD_CONFIGS"]
|
|
|
|
|
|
def test_discover_methods_from_environment_variable_class():
|
|
"""Tests if a custom method class from env variable gets properly registered using the discover_methods method"""
|
|
_test_discover_methods_from_environment_variable("TestConfigClass")
|
|
|
|
|
|
def test_discover_methods_from_environment_variable_function():
|
|
"""Tests if a custom method function from env variable gets properly registered using the discover_methods method"""
|
|
_test_discover_methods_from_environment_variable("TestConfigFunc")
|
|
|
|
|
|
def test_discover_methods_from_environment_variable_instance():
|
|
"""Tests if a custom method instance from env variable gets properly registered using the discover_methods method"""
|
|
_test_discover_methods_from_environment_variable("TestConfig")
|
|
|
|
|
|
@dataclass
|
|
class TestDataparserConfigClass(DataParserSpecification):
|
|
config: DataParserConfig = field(default_factory=DataParserConfig)
|
|
description: str = "Test description"
|
|
|
|
|
|
def TestDataparserConfigFunc():
|
|
return TestDataparserConfigClass()
|
|
|
|
|
|
TestDataparserConfig = TestDataparserConfigClass()
|
|
|
|
|
|
def test_discover_dataparser():
|
|
"""Tests if a custom method gets properly registered using the discover_dataparsers method"""
|
|
entry_points_backup = registry_dataparser.entry_points
|
|
|
|
def entry_points(group=None):
|
|
return importlib_metadata.EntryPoints(
|
|
[
|
|
importlib_metadata.EntryPoint(
|
|
name="test", value="test_registry:TestDataparserConfig", group="nerfstudio.dataparser_configs"
|
|
)
|
|
]
|
|
).select(group=group)
|
|
|
|
try:
|
|
# Mock importlib entry_points
|
|
registry_dataparser.entry_points = entry_points
|
|
|
|
# Discover plugins
|
|
dataparsers, _ = discover_dataparsers()
|
|
assert "test" in dataparsers
|
|
config = dataparsers["test"]
|
|
assert isinstance(config, DataParserConfig)
|
|
finally:
|
|
# Revert mock
|
|
registry_dataparser.entry_points = entry_points_backup
|
|
|
|
|
|
def _test_discover_dataparsers_from_environment_variable(method):
|
|
"""Tests if a custom method from env variable gets properly registered using the discover_dataparsers method"""
|
|
old_env = None
|
|
try:
|
|
old_env = os.environ.get("NERFSTUDIO_DATAPARSER_CONFIGS", None)
|
|
method_key = f"{method}-env"
|
|
os.environ["NERFSTUDIO_DATAPARSER_CONFIGS"] = f"{method_key}=test_registry:{method}"
|
|
|
|
# Discover plugins
|
|
dataparsers, _ = discover_dataparsers()
|
|
assert method_key in dataparsers
|
|
config = dataparsers[method_key]
|
|
assert isinstance(config, DataParserConfig)
|
|
finally:
|
|
# Revert mock
|
|
if old_env is not None:
|
|
os.environ["NERFSTUDIO_DATAPARSER_CONFIGS"] = old_env
|
|
else:
|
|
del os.environ["NERFSTUDIO_DATAPARSER_CONFIGS"]
|
|
|
|
|
|
def test_discover_dataparsers_from_environment_variable_class():
|
|
"""Tests if a custom dataparser class from env variable gets properly registered using the discover_methods method"""
|
|
_test_discover_dataparsers_from_environment_variable("TestDataparserConfigClass")
|
|
|
|
|
|
def test_discover_dataparsers_from_environment_variable_function():
|
|
"""Tests if a custom dataparser function from env variable gets properly registered using the discover_methods method"""
|
|
_test_discover_dataparsers_from_environment_variable("TestDataparserConfigFunc")
|
|
|
|
|
|
def test_discover_dataparsers_from_environment_variable_instance():
|
|
"""Tests if a custom dataparser instance from env variable gets properly registered using the discover_methods method"""
|
|
_test_discover_dataparsers_from_environment_variable("TestDataparserConfig")
|