Shortcuts

Source code for connectomics.models.architectures

"""
Architecture module for connectomics models.

Provides:
- Registry system for architecture management
- Base model interface with deep supervision support
- MONAI model wrappers (BasicUNet, UNet, UNETR, SwinUNETR)
- Future: MedNeXt model wrappers

Usage:
    from connectomics.models.architectures import (
        register_architecture,
        list_architectures,
        ConnectomicsModel,
    )

    # List available models
    print(list_architectures())

    # Register custom model
    @register_architecture('my_model')
    def build_my_model(cfg):
        return MyModel(cfg)
"""

import logging

# Import base model
from .base import ConnectomicsModel

# Import registry functions
from .registry import (
    get_architecture_builder,
    get_architecture_info,
    is_architecture_available,
    list_architectures,
    register_architecture,
    unregister_architecture,
)

# Import MONAI models to trigger registration
try:
    from . import monai_models  # noqa: F401

    _MONAI_AVAILABLE = True
except ImportError:
    _MONAI_AVAILABLE = False

# Import MedNeXt models to trigger registration
try:
    from . import mednext_models  # noqa: F401

    _MEDNEXT_AVAILABLE = True
except ImportError:
    _MEDNEXT_AVAILABLE = False

# Import RSUNet models (always available - pure PyTorch)
from . import rsunet  # noqa: F401

# Import nnUNet models to trigger registration
try:
    from . import nnunet_models  # noqa: F401

    _NNUNET_AVAILABLE = True
except ImportError:
    _NNUNET_AVAILABLE = False


# Check what's available
[docs]def get_available_architectures() -> dict: """ Get information about available architectures and their dependencies. Returns: Dictionary with: - 'monai': List of MONAI architectures (if available) - 'mednext': List of MedNeXt architectures (if available) - 'all': List of all registered architectures """ all_archs = list_architectures() info = { "all": all_archs, "monai": [a for a in all_archs if a.startswith("monai_")] if _MONAI_AVAILABLE else [], "mednext": [a for a in all_archs if a.startswith("mednext")] if _MEDNEXT_AVAILABLE else [], "rsunet": [a for a in all_archs if a.startswith("rsunet")], "nnunet": [a for a in all_archs if a.startswith("nnunet")] if _NNUNET_AVAILABLE else [], } return info
__all__ = [ # Registry "register_architecture", "get_architecture_builder", "list_architectures", "is_architecture_available", "unregister_architecture", "get_architecture_info", # Base model "ConnectomicsModel", # Utilities "get_available_architectures", "print_available_architectures", ]