[ENH]: Consistency of logging #239
80 changed files with 284 additions and 100 deletions
1
docs/changes/newsfragments/239.enh
Normal file
1
docs/changes/newsfragments/239.enh
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Improve logging consistency of components by `Synchon Mandal`_
|
||||||
|
|
@ -23,6 +23,7 @@ DataGrabbers, Preprocessors, Markers, etc., following the *junifer* way.
|
||||||
:caption: Contents:
|
:caption: Contents:
|
||||||
|
|
||||||
extension
|
extension
|
||||||
|
logging
|
||||||
datagrabber
|
datagrabber
|
||||||
marker
|
marker
|
||||||
preprocessor
|
preprocessor
|
||||||
|
|
|
||||||
38
docs/extending/logging.rst
Normal file
38
docs/extending/logging.rst
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
.. include:: ../links.inc
|
||||||
|
|
||||||
|
.. _logging_in_extension:
|
||||||
|
|
||||||
|
Logging in a ``junifer`` extension
|
||||||
|
==================================
|
||||||
|
|
||||||
|
It is important to have proper logging in your code and ``junifer`` makes it trivial to do so for your extensions.
|
||||||
|
|
||||||
|
For DataGrabber:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from junifer.datagrabber import logger
|
||||||
|
|
||||||
|
|
||||||
|
For Preprocessor:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from junifer.preprocess import logger
|
||||||
|
|
||||||
|
|
||||||
|
For Marker:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from junifer.marker import logger
|
||||||
|
|
||||||
|
|
||||||
|
For Storage:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from junifer.storage import logger
|
||||||
|
|
||||||
|
|
||||||
|
Importing the correct logger will give you a properly set up logger which will fit right in with the rest of ``junifer``\'s log output.
|
||||||
|
|
@ -10,6 +10,8 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from ..api.queue_context import GnuParallelLocalAdapter, HTCondorAdapter
|
from ..api.queue_context import GnuParallelLocalAdapter, HTCondorAdapter
|
||||||
from ..datagrabber import BaseDataGrabber
|
from ..datagrabber import BaseDataGrabber
|
||||||
from ..markers import BaseMarker
|
from ..markers import BaseMarker
|
||||||
|
|
@ -27,11 +29,14 @@ from ..typing import (
|
||||||
PreprocessorLike,
|
PreprocessorLike,
|
||||||
StorageLike,
|
StorageLike,
|
||||||
)
|
)
|
||||||
from ..utils import logger, raise_error, warn_with_log, yaml
|
from ..utils import raise_error, warn_with_log, yaml
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["collect", "list_elements", "queue", "reset", "run"]
|
__all__ = ["collect", "list_elements", "queue", "reset", "run"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="api")
|
||||||
|
|
||||||
|
|
||||||
def _get_datagrabber(datagrabber_config: dict) -> DataGrabberLike:
|
def _get_datagrabber(datagrabber_config: dict) -> DataGrabberLike:
|
||||||
"""Get DataGrabber.
|
"""Get DataGrabber.
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,13 @@ from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from ...typing import Elements
|
from ...typing import Elements
|
||||||
from ...utils import logger, make_executable, raise_error, run_ext_cmd
|
from ...utils import make_executable, raise_error, run_ext_cmd
|
||||||
from .queue_context_adapter import (
|
from .queue_context_adapter import (
|
||||||
EnvKind,
|
EnvKind,
|
||||||
EnvShell,
|
EnvShell,
|
||||||
QueueContextAdapter,
|
QueueContextAdapter,
|
||||||
QueueContextEnv,
|
QueueContextEnv,
|
||||||
|
logger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,13 @@ from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from ...typing import Elements
|
from ...typing import Elements
|
||||||
from ...utils import logger, make_executable, raise_error, run_ext_cmd
|
from ...utils import make_executable, raise_error, run_ext_cmd
|
||||||
from .queue_context_adapter import (
|
from .queue_context_adapter import (
|
||||||
EnvKind,
|
EnvKind,
|
||||||
EnvShell,
|
EnvShell,
|
||||||
QueueContextAdapter,
|
QueueContextAdapter,
|
||||||
QueueContextEnv,
|
QueueContextEnv,
|
||||||
|
logger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ else:
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
import structlog
|
||||||
from pydantic import BaseModel, ConfigDict
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
|
||||||
from ...utils import raise_error
|
from ...utils import raise_error
|
||||||
|
|
@ -26,6 +27,9 @@ from ...utils import raise_error
|
||||||
|
|
||||||
__all__ = ["EnvKind", "EnvShell", "QueueContextAdapter", "QueueContextEnv"]
|
__all__ = ["EnvKind", "EnvShell", "QueueContextAdapter", "QueueContextEnv"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="api")
|
||||||
|
|
||||||
|
|
||||||
class EnvKind(str, Enum):
|
class EnvKind(str, Enum):
|
||||||
"""Accepted Python environment kind."""
|
"""Accepted Python environment kind."""
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,17 @@ import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
import structlog
|
||||||
|
|
||||||
from ..typing import Elements
|
from ..typing import Elements
|
||||||
from ..utils import logger, raise_error, warn_with_log, yaml
|
from ..utils import raise_error, warn_with_log, yaml
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["parse_elements", "parse_yaml"]
|
__all__ = ["parse_elements", "parse_yaml"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="cli")
|
||||||
|
|
||||||
|
|
||||||
def parse_yaml(filepath: str | Path) -> dict: # noqa: C901
|
def parse_yaml(filepath: str | Path) -> dict: # noqa: C901
|
||||||
"""Parse YAML.
|
"""Parse YAML.
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import numpy as np
|
||||||
from numpy.typing import ArrayLike
|
from numpy.typing import ArrayLike
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["ANTsCoordinatesWarper"]
|
__all__ = ["ANTsCoordinatesWarper"]
|
||||||
|
|
@ -46,6 +46,9 @@ class ANTsCoordinatesWarper:
|
||||||
The transformed coordinates.
|
The transformed coordinates.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._coordinates import logger
|
||||||
|
|
||||||
logger.debug("Using ANTs for coordinates transformation")
|
logger.debug("Using ANTs for coordinates transformation")
|
||||||
|
|
||||||
# Create element-specific tempdir for storing post-warping assets
|
# Create element-specific tempdir for storing post-warping assets
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,11 @@ from typing import Any
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
import structlog
|
||||||
from junifer_data import get
|
from junifer_data import get
|
||||||
from numpy.typing import ArrayLike
|
from numpy.typing import ArrayLike
|
||||||
|
|
||||||
from ...utils import logger, raise_error
|
from ...utils import raise_error
|
||||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||||
from ..utils import JUNIFER_DATA_PARAMS, get_dataset_path, get_native_warper
|
from ..utils import JUNIFER_DATA_PARAMS, get_dataset_path, get_native_warper
|
||||||
from ._ants_coordinates_warper import ANTsCoordinatesWarper
|
from ._ants_coordinates_warper import ANTsCoordinatesWarper
|
||||||
|
|
@ -21,6 +22,9 @@ from ._fsl_coordinates_warper import FSLCoordinatesWarper
|
||||||
|
|
||||||
__all__ = ["CoordinatesRegistry"]
|
__all__ = ["CoordinatesRegistry"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="data")
|
||||||
|
|
||||||
|
|
||||||
class CoordinatesRegistry(BasePipelineDataRegistry):
|
class CoordinatesRegistry(BasePipelineDataRegistry):
|
||||||
"""Class for coordinates data registry.
|
"""Class for coordinates data registry.
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import numpy as np
|
||||||
from numpy.typing import ArrayLike
|
from numpy.typing import ArrayLike
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["FSLCoordinatesWarper"]
|
__all__ = ["FSLCoordinatesWarper"]
|
||||||
|
|
@ -46,6 +46,9 @@ class FSLCoordinatesWarper:
|
||||||
The transformed coordinates.
|
The transformed coordinates.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._coordinates import logger
|
||||||
|
|
||||||
logger.debug("Using FSL for coordinates transformation")
|
logger.debug("Using FSL for coordinates transformation")
|
||||||
|
|
||||||
# Create element-specific tempdir for storing post-warping assets
|
# Create element-specific tempdir for storing post-warping assets
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, raise_error, run_ext_cmd
|
from ...utils import raise_error, run_ext_cmd
|
||||||
from ..template_spaces import get_template, get_xfm
|
from ..template_spaces import get_template, get_xfm
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -71,6 +71,9 @@ class ANTsMapsWarper:
|
||||||
If ``warp_data`` is None when ``dst="T1w"``.
|
If ``warp_data`` is None when ``dst="T1w"``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._maps import logger
|
||||||
|
|
||||||
# Create element-scoped tempdir so that warped maps is
|
# Create element-scoped tempdir so that warped maps is
|
||||||
# available later as nibabel stores file path reference for
|
# available later as nibabel stores file path reference for
|
||||||
# loading on computation
|
# loading on computation
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
@ -53,6 +53,9 @@ class FSLMapsWarper:
|
||||||
The transformed maps image.
|
The transformed maps image.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._maps import logger
|
||||||
|
|
||||||
logger.debug("Using FSL for maps transformation")
|
logger.debug("Using FSL for maps transformation")
|
||||||
|
|
||||||
# Create element-scoped tempdir so that warped maps is
|
# Create element-scoped tempdir so that warped maps is
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,10 @@ from typing import TYPE_CHECKING, Any, Optional
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
import nilearn.image as nimg
|
import nilearn.image as nimg
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import structlog
|
||||||
from junifer_data import get
|
from junifer_data import get
|
||||||
|
|
||||||
from ...utils import logger, raise_error
|
from ...utils import raise_error
|
||||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
JUNIFER_DATA_PARAMS,
|
JUNIFER_DATA_PARAMS,
|
||||||
|
|
@ -29,6 +30,9 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
__all__ = ["MapsRegistry"]
|
__all__ = ["MapsRegistry"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="data")
|
||||||
|
|
||||||
|
|
||||||
class MapsRegistry(BasePipelineDataRegistry):
|
class MapsRegistry(BasePipelineDataRegistry):
|
||||||
"""Class for maps data registry.
|
"""Class for maps data registry.
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import nibabel as nib
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, raise_error, run_ext_cmd
|
from ...utils import raise_error, run_ext_cmd
|
||||||
from ..template_spaces import get_template, get_xfm
|
from ..template_spaces import get_template, get_xfm
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -92,6 +92,9 @@ class ANTsMaskWarper:
|
||||||
If ``warp_data`` is None when ``dst="T1w"``.
|
If ``warp_data`` is None when ``dst="T1w"``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._masks import logger
|
||||||
|
|
||||||
# Create element-scoped tempdir so that warped mask is
|
# Create element-scoped tempdir so that warped mask is
|
||||||
# available later as nibabel stores file path reference for
|
# available later as nibabel stores file path reference for
|
||||||
# loading on computation
|
# loading on computation
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import nibabel as nib
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
@ -74,6 +74,9 @@ class FSLMaskWarper:
|
||||||
The transformed mask image.
|
The transformed mask image.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._masks import logger
|
||||||
|
|
||||||
logger.debug("Using FSL for mask transformation")
|
logger.debug("Using FSL for mask transformation")
|
||||||
|
|
||||||
# Create element-scoped tempdir so that warped mask is
|
# Create element-scoped tempdir so that warped mask is
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ from typing import (
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
import nilearn.image as nimg
|
import nilearn.image as nimg
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import structlog
|
||||||
from junifer_data import get
|
from junifer_data import get
|
||||||
from nilearn.masking import (
|
from nilearn.masking import (
|
||||||
compute_background_mask,
|
compute_background_mask,
|
||||||
|
|
@ -22,7 +23,7 @@ from nilearn.masking import (
|
||||||
intersect_masks,
|
intersect_masks,
|
||||||
)
|
)
|
||||||
|
|
||||||
from ...utils import logger, raise_error
|
from ...utils import raise_error
|
||||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||||
from ..template_spaces import get_template
|
from ..template_spaces import get_template
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
|
@ -41,6 +42,9 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
__all__ = ["MaskRegistry", "compute_brain_mask"]
|
__all__ = ["MaskRegistry", "compute_brain_mask"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="data")
|
||||||
|
|
||||||
|
|
||||||
def compute_brain_mask(
|
def compute_brain_mask(
|
||||||
target_data: dict[str, Any],
|
target_data: dict[str, Any],
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, raise_error, run_ext_cmd
|
from ...utils import raise_error, run_ext_cmd
|
||||||
from ..template_spaces import get_template, get_xfm
|
from ..template_spaces import get_template, get_xfm
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -71,6 +71,9 @@ class ANTsParcellationWarper:
|
||||||
If ``warp_data`` is None when ``dst="T1w"``.
|
If ``warp_data`` is None when ``dst="T1w"``.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._parcellations import logger
|
||||||
|
|
||||||
# Create element-scoped tempdir so that warped parcellation is
|
# Create element-scoped tempdir so that warped parcellation is
|
||||||
# available later as nibabel stores file path reference for
|
# available later as nibabel stores file path reference for
|
||||||
# loading on computation
|
# loading on computation
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
@ -53,6 +53,9 @@ class FSLParcellationWarper:
|
||||||
The transformed parcellation image.
|
The transformed parcellation image.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# Imported here to avoid circular import
|
||||||
|
from ._parcellations import logger
|
||||||
|
|
||||||
logger.debug("Using FSL for parcellation transformation")
|
logger.debug("Using FSL for parcellation transformation")
|
||||||
|
|
||||||
# Create element-scoped tempdir so that warped parcellation is
|
# Create element-scoped tempdir so that warped parcellation is
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,10 @@ import nibabel as nib
|
||||||
import nilearn.image as nimg
|
import nilearn.image as nimg
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
import structlog
|
||||||
from junifer_data import get
|
from junifer_data import get
|
||||||
|
|
||||||
from ...utils import logger, raise_error, warn_with_log
|
from ...utils import raise_error, warn_with_log
|
||||||
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
from ..pipeline_data_registry_base import BasePipelineDataRegistry
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
JUNIFER_DATA_PARAMS,
|
JUNIFER_DATA_PARAMS,
|
||||||
|
|
@ -36,6 +37,9 @@ __all__ = [
|
||||||
"merge_parcellations",
|
"merge_parcellations",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="data")
|
||||||
|
|
||||||
|
|
||||||
class ParcellationRegistry(BasePipelineDataRegistry):
|
class ParcellationRegistry(BasePipelineDataRegistry):
|
||||||
"""Class for parcellation data registry.
|
"""Class for parcellation data registry.
|
||||||
|
|
@ -58,8 +62,12 @@ class ParcellationRegistry(BasePipelineDataRegistry):
|
||||||
# The built-in parcellations are files that are shipped with the
|
# The built-in parcellations are files that are shipped with the
|
||||||
# junifer-data dataset.
|
# junifer-data dataset.
|
||||||
# Make built-in and external dictionaries for validation later
|
# Make built-in and external dictionaries for validation later
|
||||||
self._builtin = {}
|
self._builtin: dict[
|
||||||
self._external = {}
|
str, dict[str, str | int | Path | list[str] | list[int]]
|
||||||
|
] = {}
|
||||||
|
self._external: dict[
|
||||||
|
str, dict[str, str | int | Path | list[str] | list[int]]
|
||||||
|
] = {}
|
||||||
|
|
||||||
# Add SUIT
|
# Add SUIT
|
||||||
self._builtin.update(
|
self._builtin.update(
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,19 @@ from typing import Any, Union
|
||||||
|
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import structlog
|
||||||
from junifer_data import get
|
from junifer_data import get
|
||||||
from templateflow import api as tflow
|
from templateflow import api as tflow
|
||||||
|
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
from .utils import JUNIFER_DATA_PARAMS, closest_resolution, get_dataset_path
|
from .utils import JUNIFER_DATA_PARAMS, closest_resolution, get_dataset_path
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["get_template", "get_xfm"]
|
__all__ = ["get_template", "get_xfm"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="data")
|
||||||
|
|
||||||
|
|
||||||
def get_xfm(src: str, dst: str) -> Path: # pragma: no cover
|
def get_xfm(src: str, dst: str) -> Path: # pragma: no cover
|
||||||
"""Fetch warp files to convert from ``src`` to ``dst``.
|
"""Fetch warp files to convert from ``src`` to ``dst``.
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,9 @@ from collections.abc import MutableMapping
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import structlog
|
||||||
|
|
||||||
from ..utils import config, logger, raise_error
|
from ..utils import config, raise_error
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|
@ -21,6 +22,8 @@ __all__ = [
|
||||||
"get_native_warper",
|
"get_native_warper",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="data")
|
||||||
|
|
||||||
# junifer-data version constant
|
# junifer-data version constant
|
||||||
JUNIFER_DATA_VERSION = "7"
|
JUNIFER_DATA_VERSION = "7"
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,11 @@ __all__ = [
|
||||||
"DataType",
|
"DataType",
|
||||||
"ConfoundsFormat",
|
"ConfoundsFormat",
|
||||||
"register_confounds_format",
|
"register_confounds_format",
|
||||||
|
"logger",
|
||||||
]
|
]
|
||||||
|
|
||||||
# These 4 need to be in this order, otherwise it is a circular import
|
# These 4 need to be in this order, otherwise it is a circular import
|
||||||
from .base import BaseDataGrabber, DataType
|
from .base import BaseDataGrabber, DataType, logger
|
||||||
from .datalad_base import DataladDataGrabber
|
from .datalad_base import DataladDataGrabber
|
||||||
from .pattern import (
|
from .pattern import (
|
||||||
PatternDataGrabber,
|
PatternDataGrabber,
|
||||||
|
|
|
||||||
|
|
@ -11,16 +11,20 @@ from enum import Enum
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Annotated, Any
|
from typing import Annotated, Any
|
||||||
|
|
||||||
|
import structlog
|
||||||
from aenum import Enum as AEnum
|
from aenum import Enum as AEnum
|
||||||
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field
|
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field
|
||||||
|
|
||||||
from ..pipeline import UpdateMetaMixin
|
from ..pipeline import UpdateMetaMixin
|
||||||
from ..typing import Element, Elements
|
from ..typing import Element, Elements
|
||||||
from ..utils import ensure_list, logger, raise_error
|
from ..utils import ensure_list, raise_error
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["BaseDataGrabber", "DataType"]
|
__all__ = ["BaseDataGrabber", "DataType"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="datagrabber", step="datagrabber")
|
||||||
|
|
||||||
|
|
||||||
class DataType(str, AEnum):
|
class DataType(str, AEnum):
|
||||||
"""Accepted data type."""
|
"""Accepted data type."""
|
||||||
|
|
@ -64,11 +68,16 @@ class BaseDataGrabber(BaseModel, ABC, UpdateMetaMixin):
|
||||||
datadir: Path
|
datadir: Path
|
||||||
|
|
||||||
def model_post_init(self, context: Any): # noqa: D102
|
def model_post_init(self, context: Any): # noqa: D102
|
||||||
logger.debug("Initializing BaseDataGrabber")
|
|
||||||
logger.debug(f"\tdatadir = {self.datadir}")
|
|
||||||
logger.debug(f"\ttypes = {self.types}")
|
|
||||||
# Run extra validation for datagrabbers and fail early if needed
|
# Run extra validation for datagrabbers and fail early if needed
|
||||||
self.validate_datagrabber_params()
|
self.validate_datagrabber_params()
|
||||||
|
# Convert to correct data type
|
||||||
|
self.types = [
|
||||||
|
DataType(t) if isinstance(t, str) else t for t in self.types
|
||||||
|
]
|
||||||
|
logger.info(
|
||||||
|
f"Parameters: {self.model_dump(mode='json')}",
|
||||||
|
component=self.__class__.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
def validate_datagrabber_params(self) -> None:
|
def validate_datagrabber_params(self) -> None:
|
||||||
"""Run extra logical validation for datagrabber.
|
"""Run extra logical validation for datagrabber.
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ from pydantic import AnyUrl, Field, field_validator
|
||||||
from ..api.decorators import register_datagrabber
|
from ..api.decorators import register_datagrabber
|
||||||
from ..pipeline import WorkDirManager
|
from ..pipeline import WorkDirManager
|
||||||
from ..typing import Element
|
from ..typing import Element
|
||||||
from ..utils import config, logger, raise_error, warn_with_log
|
from ..utils import config, raise_error, warn_with_log
|
||||||
from .base import BaseDataGrabber
|
from .base import BaseDataGrabber, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["DataladDataGrabber"]
|
__all__ = ["DataladDataGrabber"]
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,8 @@ from pydantic import Field
|
||||||
|
|
||||||
from ..api.decorators import register_datagrabber
|
from ..api.decorators import register_datagrabber
|
||||||
from ..typing import DataGrabberPatterns, Elements
|
from ..typing import DataGrabberPatterns, Elements
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
from .base import BaseDataGrabber
|
from .base import BaseDataGrabber, logger
|
||||||
from .pattern_validation_mixin import PatternValidationMixin
|
from .pattern_validation_mixin import PatternValidationMixin
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
from pydantic import ConfigDict
|
from pydantic import ConfigDict
|
||||||
|
|
||||||
from ..api.decorators import register_datagrabber
|
from ..api.decorators import register_datagrabber
|
||||||
from ..utils import logger
|
from .base import logger
|
||||||
from .datalad_base import DataladDataGrabber
|
from .datalad_base import DataladDataGrabber
|
||||||
from .pattern import PatternDataGrabber
|
from .pattern import PatternDataGrabber
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@ from collections.abc import Iterator, MutableMapping
|
||||||
|
|
||||||
from aenum import extend_enum
|
from aenum import extend_enum
|
||||||
|
|
||||||
from ..datagrabber import DataType
|
|
||||||
from ..typing import DataGrabberPatterns
|
from ..typing import DataGrabberPatterns
|
||||||
from ..utils import logger, raise_error, warn_with_log
|
from ..utils import raise_error, warn_with_log
|
||||||
|
from .base import DataType, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,18 @@ from pathlib import Path
|
||||||
|
|
||||||
import nibabel as nib
|
import nibabel as nib
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
import structlog
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
from ..api.decorators import register_datareader
|
from ..api.decorators import register_datareader
|
||||||
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
||||||
from ..utils.logging import logger, warn_with_log
|
from ..utils.logging import warn_with_log
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["DefaultDataReader"]
|
__all__ = ["DefaultDataReader"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="datareader", step="datareader")
|
||||||
|
|
||||||
# Map each file extension to a type
|
# Map each file extension to a type
|
||||||
_extensions = {
|
_extensions = {
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,10 @@ __all__ = [
|
||||||
"TemporalSNRParcels",
|
"TemporalSNRParcels",
|
||||||
"TemporalSNRSpheres",
|
"TemporalSNRSpheres",
|
||||||
"BrainPrint",
|
"BrainPrint",
|
||||||
|
"logger",
|
||||||
]
|
]
|
||||||
|
|
||||||
from .base import BaseMarker
|
from .base import BaseMarker, logger
|
||||||
from .ets_rss import RSSETSMarker
|
from .ets_rss import RSSETSMarker
|
||||||
from .maps_aggregation import MapsAggregation
|
from .maps_aggregation import MapsAggregation
|
||||||
from .parcel_aggregation import ParcelAggregation
|
from .parcel_aggregation import ParcelAggregation
|
||||||
|
|
|
||||||
|
|
@ -8,17 +8,21 @@ from abc import ABC, abstractmethod
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
from typing import Any, ClassVar
|
from typing import Any, ClassVar
|
||||||
|
|
||||||
|
import structlog
|
||||||
from pydantic import BaseModel, ConfigDict
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
|
||||||
from ..datagrabber import DataType
|
from ..datagrabber import DataType
|
||||||
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
||||||
from ..storage import StorageType
|
from ..storage import StorageType
|
||||||
from ..typing import MarkerInOutMappings, StorageLike
|
from ..typing import MarkerInOutMappings, StorageLike
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["BaseMarker"]
|
__all__ = ["BaseMarker"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="markers", step="marker")
|
||||||
|
|
||||||
|
|
||||||
class BaseMarker(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
class BaseMarker(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
||||||
"""Abstract base class for marker.
|
"""Abstract base class for marker.
|
||||||
|
|
@ -84,6 +88,9 @@ class BaseMarker(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
||||||
self.validate_marker_params()
|
self.validate_marker_params()
|
||||||
# Set default name if not provided
|
# Set default name if not provided
|
||||||
self.name = self.__class__.__name__ if self.name is None else self.name
|
self.name = self.__class__.__name__ if self.name is None else self.name
|
||||||
|
logger.info(
|
||||||
|
f"Parameters: {self.model_dump(mode='json')}", component=self.name
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def valid_inputs(self) -> list[DataType]:
|
def valid_inputs(self) -> list[DataType]:
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ from ..external.BrainPrint.brainprint.surfaces import surf_to_vtk
|
||||||
from ..pipeline import ExtDep, WorkDirManager
|
from ..pipeline import ExtDep, WorkDirManager
|
||||||
from ..storage import StorageType
|
from ..storage import StorageType
|
||||||
from ..typing import Dependencies, ExternalDependencies, MarkerInOutMappings
|
from ..typing import Dependencies, ExternalDependencies, MarkerInOutMappings
|
||||||
from ..utils import logger, run_ext_cmd
|
from ..utils import run_ext_cmd
|
||||||
from .base import BaseMarker
|
from .base import BaseMarker, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["BrainPrint"]
|
__all__ = ["BrainPrint"]
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...utils import logger, warn_with_log
|
from ...utils import warn_with_log
|
||||||
|
from ..base import logger
|
||||||
from .complexity_base import ComplexityBase
|
from .complexity_base import ComplexityBase
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...utils import logger, warn_with_log
|
from ...utils import warn_with_log
|
||||||
|
from ..base import logger
|
||||||
from .complexity_base import ComplexityBase
|
from .complexity_base import ComplexityBase
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...utils import logger, warn_with_log
|
from ...utils import warn_with_log
|
||||||
|
from ..base import logger
|
||||||
from .complexity_base import ComplexityBase
|
from .complexity_base import ComplexityBase
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...utils import logger, warn_with_log
|
from ...utils import warn_with_log
|
||||||
|
from ..base import logger
|
||||||
from .complexity_base import ComplexityBase
|
from .complexity_base import ComplexityBase
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...utils import logger, warn_with_log
|
from ...utils import warn_with_log
|
||||||
|
from ..base import logger
|
||||||
from .complexity_base import ComplexityBase
|
from .complexity_base import ComplexityBase
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...utils import logger, warn_with_log
|
from ...utils import warn_with_log
|
||||||
|
from ..base import logger
|
||||||
from .complexity_base import ComplexityBase
|
from .complexity_base import ComplexityBase
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ import neurokit2 as nk
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...utils import logger, warn_with_log
|
from ...utils import warn_with_log
|
||||||
|
from ..base import logger
|
||||||
from .complexity_base import ComplexityBase
|
from .complexity_base import ComplexityBase
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ from ..api.decorators import register_marker
|
||||||
from ..datagrabber import DataType
|
from ..datagrabber import DataType
|
||||||
from ..storage import StorageType
|
from ..storage import StorageType
|
||||||
from ..typing import Dependencies, MarkerInOutMappings
|
from ..typing import Dependencies, MarkerInOutMappings
|
||||||
from ..utils import ensure_list, ensure_list_or_none, logger
|
from ..utils import ensure_list, ensure_list_or_none
|
||||||
from .base import BaseMarker
|
from .base import BaseMarker, logger
|
||||||
from .parcel_aggregation import ParcelAggregation
|
from .parcel_aggregation import ParcelAggregation
|
||||||
from .utils import _ets
|
from .utils import _ets
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,9 @@ import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import ExtDep, WorkDirManager
|
from ...pipeline import ExtDep, WorkDirManager
|
||||||
from ...typing import ExternalDependencies
|
from ...typing import ExternalDependencies
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
from ...utils.singleton import Singleton
|
from ...utils.singleton import Singleton
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ from nilearn import image as nimg
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...typing import Dependencies
|
from ...typing import Dependencies
|
||||||
from ...utils import logger
|
|
||||||
from ...utils.singleton import Singleton
|
from ...utils.singleton import Singleton
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ from pydantic import BeforeValidator, PositiveFloat
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...storage import StorageType
|
from ...storage import StorageType
|
||||||
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
||||||
from ...utils import ensure_list_or_none, logger
|
from ...utils import ensure_list_or_none
|
||||||
from ..base import BaseMarker
|
from ..base import BaseMarker, logger
|
||||||
from ._afni_falff import AFNIALFF
|
from ._afni_falff import AFNIALFF
|
||||||
from ._junifer_falff import JuniferALFF
|
from ._junifer_falff import JuniferALFF
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ from typing import Any
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...utils import logger
|
from ..base import logger
|
||||||
from ..maps_aggregation import MapsAggregation
|
from ..maps_aggregation import MapsAggregation
|
||||||
from .falff_base import ALFFBase
|
from .falff_base import ALFFBase
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ from pydantic import BeforeValidator
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...utils import ensure_list, logger
|
from ...utils import ensure_list
|
||||||
|
from ..base import logger
|
||||||
from ..parcel_aggregation import ParcelAggregation
|
from ..parcel_aggregation import ParcelAggregation
|
||||||
from .falff_base import ALFFBase
|
from .falff_base import ALFFBase
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ from pydantic import PositiveFloat
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...utils import logger
|
from ..base import logger
|
||||||
from ..sphere_aggregation import SphereAggregation
|
from ..sphere_aggregation import SphereAggregation
|
||||||
from .falff_base import ALFFBase
|
from .falff_base import ALFFBase
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ from ...api.decorators import register_marker
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...storage import StorageType
|
from ...storage import StorageType
|
||||||
from ...typing import Dependencies, MarkerInOutMappings
|
from ...typing import Dependencies, MarkerInOutMappings
|
||||||
from ...utils import ensure_list_or_none, logger, raise_error
|
from ...utils import ensure_list_or_none, raise_error
|
||||||
from ..base import BaseMarker
|
from ..base import BaseMarker, logger
|
||||||
from ..parcel_aggregation import ParcelAggregation
|
from ..parcel_aggregation import ParcelAggregation
|
||||||
from ..utils import _correlate_dataframes
|
from ..utils import _correlate_dataframes
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ from ..datagrabber import DataType
|
||||||
from ..stats import get_aggfunc_by_name
|
from ..stats import get_aggfunc_by_name
|
||||||
from ..storage import StorageType
|
from ..storage import StorageType
|
||||||
from ..typing import Dependencies, MarkerInOutMappings
|
from ..typing import Dependencies, MarkerInOutMappings
|
||||||
from ..utils import ensure_list_or_none, logger, raise_error, warn_with_log
|
from ..utils import ensure_list_or_none, raise_error, warn_with_log
|
||||||
from .base import BaseMarker
|
from .base import BaseMarker, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["MapsAggregation"]
|
__all__ = ["MapsAggregation"]
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,10 @@ from ..typing import Dependencies, MarkerInOutMappings
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ensure_list,
|
ensure_list,
|
||||||
ensure_list_or_none,
|
ensure_list_or_none,
|
||||||
logger,
|
|
||||||
raise_error,
|
raise_error,
|
||||||
warn_with_log,
|
warn_with_log,
|
||||||
)
|
)
|
||||||
from .base import BaseMarker
|
from .base import BaseMarker, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["ParcelAggregation"]
|
__all__ = ["ParcelAggregation"]
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,9 @@ import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import ExtDep, WorkDirManager
|
from ...pipeline import ExtDep, WorkDirManager
|
||||||
from ...typing import ExternalDependencies
|
from ...typing import ExternalDependencies
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
from ...utils.singleton import Singleton
|
from ...utils.singleton import Singleton
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,9 @@ from nilearn import masking as nmask
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...typing import Dependencies
|
from ...typing import Dependencies
|
||||||
from ...utils import logger, raise_error
|
from ...utils import raise_error
|
||||||
from ...utils.singleton import Singleton
|
from ...utils.singleton import Singleton
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ from pydantic import BeforeValidator
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...storage import StorageType
|
from ...storage import StorageType
|
||||||
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
from ...typing import ConditionalDependencies, MarkerInOutMappings
|
||||||
from ...utils import ensure_list_or_none, logger
|
from ...utils import ensure_list_or_none
|
||||||
from ..base import BaseMarker
|
from ..base import BaseMarker, logger
|
||||||
from ._afni_reho import AFNIReHo
|
from ._afni_reho import AFNIReHo
|
||||||
from ._junifer_reho import JuniferReHo
|
from ._junifer_reho import JuniferReHo
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import numpy as np
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...utils import logger
|
from ..base import logger
|
||||||
from ..maps_aggregation import MapsAggregation
|
from ..maps_aggregation import MapsAggregation
|
||||||
from .reho_base import ReHoBase
|
from .reho_base import ReHoBase
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ from pydantic import BeforeValidator
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...utils import ensure_list, logger
|
from ...utils import ensure_list
|
||||||
|
from ..base import logger
|
||||||
from ..parcel_aggregation import ParcelAggregation
|
from ..parcel_aggregation import ParcelAggregation
|
||||||
from .reho_base import ReHoBase
|
from .reho_base import ReHoBase
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from pydantic import PositiveFloat
|
||||||
|
|
||||||
from ...api.decorators import register_marker
|
from ...api.decorators import register_marker
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...utils import logger
|
from ..base import logger
|
||||||
from ..sphere_aggregation import SphereAggregation
|
from ..sphere_aggregation import SphereAggregation
|
||||||
from .reho_base import ReHoBase
|
from .reho_base import ReHoBase
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ from ..external.nilearn import JuniferNiftiSpheresMasker
|
||||||
from ..stats import get_aggfunc_by_name
|
from ..stats import get_aggfunc_by_name
|
||||||
from ..storage import StorageType
|
from ..storage import StorageType
|
||||||
from ..typing import Dependencies, MarkerInOutMappings
|
from ..typing import Dependencies, MarkerInOutMappings
|
||||||
from ..utils import ensure_list_or_none, logger, raise_error, warn_with_log
|
from ..utils import ensure_list_or_none, raise_error, warn_with_log
|
||||||
from .base import BaseMarker
|
from .base import BaseMarker, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["SphereAggregation"]
|
__all__ = ["SphereAggregation"]
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,17 @@
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
import structlog
|
||||||
|
|
||||||
from ..typing import StorageLike
|
from ..typing import StorageLike
|
||||||
from ..utils import logger, raise_error, warn_with_log
|
from ..utils import raise_error, warn_with_log
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["read_transform"]
|
__all__ = ["read_transform"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="onthefly")
|
||||||
|
|
||||||
|
|
||||||
def read_transform(
|
def read_transform(
|
||||||
storage: StorageLike,
|
storage: StorageLike,
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,19 @@
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from ..datareader import DefaultDataReader
|
from ..datareader import DefaultDataReader
|
||||||
from ..pipeline import DataObjectDumper, PipelineStepMixin, WorkDirManager
|
from ..pipeline import DataObjectDumper, PipelineStepMixin, WorkDirManager
|
||||||
from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
|
from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
|
||||||
from ..utils import config, logger, raise_error
|
from ..utils import config, raise_error
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["MarkerCollection"]
|
__all__ = ["MarkerCollection"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="pipeline")
|
||||||
|
|
||||||
|
|
||||||
class MarkerCollection:
|
class MarkerCollection:
|
||||||
"""Class for marker collection.
|
"""Class for marker collection.
|
||||||
|
|
|
||||||
|
|
@ -8,13 +8,18 @@
|
||||||
import importlib
|
import importlib
|
||||||
from collections.abc import Mapping
|
from collections.abc import Mapping
|
||||||
|
|
||||||
|
import structlog
|
||||||
|
|
||||||
from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
|
from ..typing import DataGrabberLike, MarkerLike, PreprocessorLike, StorageLike
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
from ..utils.singleton import Singleton
|
from ..utils.singleton import Singleton
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["PipelineComponentRegistry"]
|
__all__ = ["PipelineComponentRegistry"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="pipeline")
|
||||||
|
|
||||||
|
|
||||||
class PipelineComponentRegistry(metaclass=Singleton):
|
class PipelineComponentRegistry(metaclass=Singleton):
|
||||||
"""Class for pipeline component registry.
|
"""Class for pipeline component registry.
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ from typing import Any
|
||||||
|
|
||||||
from pydantic import validate_call
|
from pydantic import validate_call
|
||||||
|
|
||||||
from ..utils.logging import raise_error, warn_with_log
|
from ..utils import raise_error, warn_with_log
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["ExtDep", "check_ext_dependencies"]
|
__all__ = ["ExtDep", "check_ext_dependencies"]
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,16 @@ import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from ..utils import logger
|
import structlog
|
||||||
|
|
||||||
from ..utils.singleton import Singleton
|
from ..utils.singleton import Singleton
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["WorkDirManager"]
|
__all__ = ["WorkDirManager"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="pipeline")
|
||||||
|
|
||||||
|
|
||||||
class WorkDirManager(metaclass=Singleton):
|
class WorkDirManager(metaclass=Singleton):
|
||||||
"""Class for working directory manager.
|
"""Class for working directory manager.
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,10 @@ __all__ = [
|
||||||
"SmoothingImpl",
|
"SmoothingImpl",
|
||||||
"TemporalSlicer",
|
"TemporalSlicer",
|
||||||
"TemporalFilter",
|
"TemporalFilter",
|
||||||
|
"logger",
|
||||||
]
|
]
|
||||||
|
|
||||||
from .base import BasePreprocessor
|
from .base import BasePreprocessor, logger
|
||||||
from .confounds import fMRIPrepConfoundRemover, Confounds, Strategy
|
from .confounds import fMRIPrepConfoundRemover, Confounds, Strategy
|
||||||
from .warping import SpaceWarper, SpaceWarpingImpl
|
from .warping import SpaceWarper, SpaceWarpingImpl
|
||||||
from .smoothing import Smoothing, SmoothingImpl
|
from .smoothing import Smoothing, SmoothingImpl
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ from ..data import get_data
|
||||||
from ..datagrabber import DataType
|
from ..datagrabber import DataType
|
||||||
from ..pipeline import WorkDirManager
|
from ..pipeline import WorkDirManager
|
||||||
from ..typing import Dependencies
|
from ..typing import Dependencies
|
||||||
from ..utils import ensure_list_or_none, logger
|
from ..utils import ensure_list_or_none
|
||||||
from .base import BasePreprocessor
|
from .base import BasePreprocessor, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["TemporalFilter"]
|
__all__ = ["TemporalFilter"]
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ from ..api.decorators import register_preprocessor
|
||||||
from ..datagrabber import DataType
|
from ..datagrabber import DataType
|
||||||
from ..pipeline import WorkDirManager
|
from ..pipeline import WorkDirManager
|
||||||
from ..typing import Dependencies
|
from ..typing import Dependencies
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
from .base import BasePreprocessor
|
from .base import BasePreprocessor, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["TemporalSlicer"]
|
__all__ = ["TemporalSlicer"]
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,19 @@ from abc import ABC, abstractmethod
|
||||||
from collections.abc import Sequence
|
from collections.abc import Sequence
|
||||||
from typing import Annotated, Any, ClassVar
|
from typing import Annotated, Any, ClassVar
|
||||||
|
|
||||||
|
import structlog
|
||||||
from pydantic import BaseModel, BeforeValidator, ConfigDict
|
from pydantic import BaseModel, BeforeValidator, ConfigDict
|
||||||
|
|
||||||
from ..datagrabber import DataType
|
from ..datagrabber import DataType
|
||||||
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
from ..pipeline import PipelineStepMixin, UpdateMetaMixin
|
||||||
from ..utils import ensure_list_or_none, logger, raise_error
|
from ..utils import ensure_list_or_none, raise_error
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["BasePreprocessor"]
|
__all__ = ["BasePreprocessor"]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="preprocess", step="preprocessing")
|
||||||
|
|
||||||
|
|
||||||
class BasePreprocessor(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
class BasePreprocessor(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
||||||
"""Abstract base class for preprocessor.
|
"""Abstract base class for preprocessor.
|
||||||
|
|
@ -97,6 +101,10 @@ class BasePreprocessor(BaseModel, ABC, PipelineStepMixin, UpdateMetaMixin):
|
||||||
DataType(t) if isinstance(t, str) else t
|
DataType(t) if isinstance(t, str) else t
|
||||||
for t in self.required_data_types
|
for t in self.required_data_types
|
||||||
]
|
]
|
||||||
|
logger.info(
|
||||||
|
f"Parameters: {self.model_dump(mode='json')}",
|
||||||
|
component=self.__class__.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def valid_inputs(self) -> list[DataType]:
|
def valid_inputs(self) -> list[DataType]:
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@ from ...data import get_data
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...typing import Dependencies
|
from ...typing import Dependencies
|
||||||
from ...utils import ensure_list_or_none, logger, raise_error
|
from ...utils import ensure_list_or_none, raise_error
|
||||||
from ..base import BasePreprocessor
|
from ..base import BasePreprocessor, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["Confounds", "Strategy", "fMRIPrepConfoundRemover"]
|
__all__ = ["Confounds", "Strategy", "fMRIPrepConfoundRemover"]
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import ExtDep, WorkDirManager
|
from ...pipeline import ExtDep, WorkDirManager
|
||||||
from ...typing import Dependencies, ExternalDependencies
|
from ...typing import Dependencies, ExternalDependencies
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["AFNISmoothing"]
|
__all__ = ["AFNISmoothing"]
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ import nibabel as nib
|
||||||
|
|
||||||
from ...pipeline import ExtDep, WorkDirManager
|
from ...pipeline import ExtDep, WorkDirManager
|
||||||
from ...typing import Dependencies, ExternalDependencies
|
from ...typing import Dependencies, ExternalDependencies
|
||||||
from ...utils import logger, run_ext_cmd
|
from ...utils import run_ext_cmd
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["FSLSmoothing"]
|
__all__ = ["FSLSmoothing"]
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ from numpy.typing import ArrayLike
|
||||||
|
|
||||||
from ...pipeline import WorkDirManager
|
from ...pipeline import WorkDirManager
|
||||||
from ...typing import Dependencies
|
from ...typing import Dependencies
|
||||||
from ...utils import logger
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["NilearnSmoothing"]
|
__all__ = ["NilearnSmoothing"]
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ from pydantic import BeforeValidator
|
||||||
from ...api.decorators import register_preprocessor
|
from ...api.decorators import register_preprocessor
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...typing import ConditionalDependencies
|
from ...typing import ConditionalDependencies
|
||||||
from ...utils import ensure_list_or_none, logger
|
from ...utils import ensure_list_or_none
|
||||||
from ..base import BasePreprocessor
|
from ..base import BasePreprocessor, logger
|
||||||
from ._afni_smoothing import AFNISmoothing
|
from ._afni_smoothing import AFNISmoothing
|
||||||
from ._fsl_smoothing import FSLSmoothing
|
from ._fsl_smoothing import FSLSmoothing
|
||||||
from ._nilearn_smoothing import NilearnSmoothing
|
from ._nilearn_smoothing import NilearnSmoothing
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ import numpy as np
|
||||||
from ...data import get_template, get_xfm
|
from ...data import get_template, get_xfm
|
||||||
from ...pipeline import ExtDep, WorkDirManager
|
from ...pipeline import ExtDep, WorkDirManager
|
||||||
from ...typing import Dependencies, ExternalDependencies
|
from ...typing import Dependencies, ExternalDependencies
|
||||||
from ...utils import logger, raise_error, run_ext_cmd
|
from ...utils import raise_error, run_ext_cmd
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["ANTsWarper"]
|
__all__ = ["ANTsWarper"]
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ import numpy as np
|
||||||
|
|
||||||
from ...pipeline import ExtDep, WorkDirManager
|
from ...pipeline import ExtDep, WorkDirManager
|
||||||
from ...typing import Dependencies, ExternalDependencies
|
from ...typing import Dependencies, ExternalDependencies
|
||||||
from ...utils import logger, raise_error, run_ext_cmd
|
from ...utils import raise_error, run_ext_cmd
|
||||||
|
from ..base import logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["FSLWarper"]
|
__all__ = ["FSLWarper"]
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,8 @@ from templateflow import api as tflow
|
||||||
from ...api.decorators import register_preprocessor
|
from ...api.decorators import register_preprocessor
|
||||||
from ...datagrabber import DataType
|
from ...datagrabber import DataType
|
||||||
from ...typing import ConditionalDependencies
|
from ...typing import ConditionalDependencies
|
||||||
from ...utils import ensure_list_or_none, logger, raise_error
|
from ...utils import ensure_list_or_none, raise_error
|
||||||
from ..base import BasePreprocessor
|
from ..base import BasePreprocessor, logger
|
||||||
from ._ants_warper import ANTsWarper
|
from ._ants_warper import ANTsWarper
|
||||||
from ._fsl_warper import FSLWarper
|
from ._fsl_warper import FSLWarper
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,12 @@ from enum import Enum
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import structlog
|
||||||
from pydantic import validate_call
|
from pydantic import validate_call
|
||||||
from scipy.stats import mode, trim_mean
|
from scipy.stats import mode, trim_mean
|
||||||
from scipy.stats.mstats import winsorize
|
from scipy.stats.mstats import winsorize
|
||||||
|
|
||||||
from .utils import logger, raise_error
|
from .utils import raise_error
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|
@ -24,6 +25,9 @@ __all__ = [
|
||||||
"winsorized_mean",
|
"winsorized_mean",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="stats")
|
||||||
|
|
||||||
|
|
||||||
class AggFunc(str, Enum):
|
class AggFunc(str, Enum):
|
||||||
"""Accepted aggregation function names.
|
"""Accepted aggregation function names.
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@ __all__ = [
|
||||||
"PandasBaseFeatureStorage",
|
"PandasBaseFeatureStorage",
|
||||||
"SQLiteFeatureStorage",
|
"SQLiteFeatureStorage",
|
||||||
"Upsert",
|
"Upsert",
|
||||||
|
"logger",
|
||||||
]
|
]
|
||||||
|
|
||||||
from .base import BaseFeatureStorage, MatrixKind, StorageType
|
from .base import BaseFeatureStorage, MatrixKind, StorageType, logger
|
||||||
from .hdf5 import HDF5FeatureStorage
|
from .hdf5 import HDF5FeatureStorage
|
||||||
from .pandas_base import PandasBaseFeatureStorage
|
from .pandas_base import PandasBaseFeatureStorage
|
||||||
from .sqlite import SQLiteFeatureStorage, Upsert
|
from .sqlite import SQLiteFeatureStorage, Upsert
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,10 @@ from typing import Any, ClassVar
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
import structlog
|
||||||
from pydantic import BaseModel, ConfigDict
|
from pydantic import BaseModel, ConfigDict
|
||||||
|
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["BaseFeatureStorage", "MatrixKind", "StorageType"]
|
__all__ = ["BaseFeatureStorage", "MatrixKind", "StorageType"]
|
||||||
|
|
@ -28,6 +29,10 @@ class MatrixKind(str, Enum):
|
||||||
Full = "full"
|
Full = "full"
|
||||||
|
|
||||||
|
|
||||||
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="storage", step="storage")
|
||||||
|
|
||||||
|
|
||||||
class StorageType(str, Enum):
|
class StorageType(str, Enum):
|
||||||
"""Accepted storage type."""
|
"""Accepted storage type."""
|
||||||
|
|
||||||
|
|
@ -79,6 +84,10 @@ class BaseFeatureStorage(BaseModel, ABC):
|
||||||
"does not exist, creating now"
|
"does not exist, creating now"
|
||||||
)
|
)
|
||||||
self.uri.parent.mkdir(parents=True, exist_ok=True)
|
self.uri.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
logger.info(
|
||||||
|
f"Parameters: {self.model_dump(mode='json')}",
|
||||||
|
component=self.__class__.__name__,
|
||||||
|
)
|
||||||
|
|
||||||
def validate_input(self, input_: list[str]) -> None:
|
def validate_input(self, input_: list[str]) -> None:
|
||||||
"""Validate the input to the pipeline step.
|
"""Validate the input to the pipeline step.
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ from ..external.h5io.h5io import (
|
||||||
read_hdf5,
|
read_hdf5,
|
||||||
write_hdf5,
|
write_hdf5,
|
||||||
)
|
)
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
from .base import BaseFeatureStorage, MatrixKind, StorageType
|
from .base import BaseFeatureStorage, MatrixKind, StorageType, logger
|
||||||
from .utils import (
|
from .utils import (
|
||||||
element_to_prefix,
|
element_to_prefix,
|
||||||
matrix_to_vector,
|
matrix_to_vector,
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,8 @@ from sqlalchemy import create_engine, inspect
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
from ..api.decorators import register_storage
|
from ..api.decorators import register_storage
|
||||||
from ..utils import logger, raise_error, warn_with_log
|
from ..utils import raise_error, warn_with_log
|
||||||
from .base import MatrixKind
|
from .base import MatrixKind, logger
|
||||||
from .pandas_base import PandasBaseFeatureStorage
|
from .pandas_base import PandasBaseFeatureStorage
|
||||||
from .utils import (
|
from .utils import (
|
||||||
element_to_prefix,
|
element_to_prefix,
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ from importlib.metadata import PackageNotFoundError, version
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from pydantic import validate_call
|
from pydantic import validate_call
|
||||||
|
|
||||||
from ..utils import logger, raise_error
|
from ..utils import raise_error
|
||||||
from .base import MatrixKind
|
from .base import MatrixKind, logger
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,8 @@ structlog.configure(
|
||||||
cache_logger_on_first_use=True,
|
cache_logger_on_first_use=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = logging.getLogger("junifer")
|
_log = structlog.get_logger("junifer")
|
||||||
|
logger = _log.bind(pkg="utils")
|
||||||
|
|
||||||
# Remove datalad logger handlers to avoid duplicate logging
|
# Remove datalad logger handlers to avoid duplicate logging
|
||||||
_datalad_lgr_hdlrs = datalad.log.lgr.handlers
|
_datalad_lgr_hdlrs = datalad.log.lgr.handlers
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue