From 43e656afe1df36d0aeca2c2f2659746a77fd2b72 Mon Sep 17 00:00:00 2001 From: janezlapajne Date: Tue, 17 Sep 2024 14:08:10 +0200 Subject: [PATCH] refactor: Refactor code to add missing __all__ attributes --- siapy/core/configs.py | 6 ++++++ siapy/core/exceptions.py | 11 +++++++++++ siapy/core/logger.py | 2 ++ siapy/core/types.py | 15 +++++++++++++-- siapy/datasets/helpers.py | 6 ++++++ siapy/datasets/schemas.py | 6 ++++++ siapy/datasets/tabular.py | 4 ++++ siapy/entities/images.py | 6 ++++++ siapy/entities/imagesets.py | 4 ++++ siapy/entities/pixels.py | 4 ++++ siapy/entities/shapes.py | 9 ++++++++- siapy/entities/signatures.py | 5 +++++ siapy/features/features.py | 7 +++++++ siapy/features/helpers.py | 5 +++++ siapy/features/spectral_indices.py | 5 +++++ siapy/models/metrics.py | 5 +++++ siapy/optimizers/configs.py | 6 ++++++ siapy/optimizers/optimizers.py | 4 ++++ siapy/optimizers/parameters.py | 7 +++++++ siapy/optimizers/scorers.py | 4 ++++ siapy/transformations/corregistrator.py | 7 +++++++ siapy/transformations/image.py | 9 +++++++++ siapy/utils/enums.py | 4 ++++ siapy/utils/evaluators.py | 5 +++++ siapy/utils/general.py | 12 ++++++++++++ siapy/utils/images.py | 10 ++++++++++ siapy/utils/plots.py | 8 ++++++++ siapy/utils/validators.py | 7 +++++++ 28 files changed, 180 insertions(+), 3 deletions(-) diff --git a/siapy/core/configs.py b/siapy/core/configs.py index 717b440..8cbc171 100644 --- a/siapy/core/configs.py +++ b/siapy/core/configs.py @@ -1,5 +1,11 @@ from pathlib import Path +__all__ = [ + "BASE_DIR", + "SIAPY_DIR", + "TEST_DATA_DIR", +] + BASE_DIR = Path(__file__).parent.parent.parent.absolute() SIAPY_DIR = Path(BASE_DIR, "siapy") TEST_DATA_DIR = Path(BASE_DIR, "tests", "data") diff --git a/siapy/core/exceptions.py b/siapy/core/exceptions.py index c261c2e..5178272 100644 --- a/siapy/core/exceptions.py +++ b/siapy/core/exceptions.py @@ -1,5 +1,16 @@ from typing import Any +__all__ = [ + "SiapyError", + "InvalidFilepathError", + "InvalidInputError", + "InvalidTypeError", + "ProcessingError", + "ConfigurationError", + "MethodNotImplementedError", + "DirectInitializationError", +] + class SiapyError(Exception): """Base exception for SiaPy library.""" diff --git a/siapy/core/logger.py b/siapy/core/logger.py index 4ac3c02..96277a5 100644 --- a/siapy/core/logger.py +++ b/siapy/core/logger.py @@ -1,3 +1,5 @@ import logging +__all__ = ["logger"] + logger = logging.getLogger("siapy") diff --git a/siapy/core/types.py b/siapy/core/types.py index 3bfe698..c87e8bf 100644 --- a/siapy/core/types.py +++ b/siapy/core/types.py @@ -1,11 +1,22 @@ +from typing import Any, Sequence + import numpy as np +import pandas as pd import spectral as sp from PIL.Image import Image -import pandas as pd -from typing import Sequence, Any from siapy.entities import SpectralImage, SpectralImageSet +__all__ = [ + "SpectralType", + "ImageType", + "ImageSizeType", + "ImageDataType", + "ImageContainerType", + "ArrayLike1dType", + "ArrayLike2dType", +] + SpectralType = sp.io.envi.BilFile | sp.io.envi.BipFile | sp.io.envi.BsqFile ImageType = SpectralImage | np.ndarray | Image ImageSizeType = int | tuple[int, int] diff --git a/siapy/datasets/helpers.py b/siapy/datasets/helpers.py index ddc755c..234f082 100644 --- a/siapy/datasets/helpers.py +++ b/siapy/datasets/helpers.py @@ -5,6 +5,12 @@ if TYPE_CHECKING: from .schemas import ClassificationTarget, RegressionTarget, TabularDatasetData +__all__ = [ + "generate_classification_target", + "generate_regression_target", + "merge_signals_from_multiple_cameras", +] + def generate_classification_target( dataframe: pd.DataFrame, diff --git a/siapy/datasets/schemas.py b/siapy/datasets/schemas.py index aedd992..e54560e 100644 --- a/siapy/datasets/schemas.py +++ b/siapy/datasets/schemas.py @@ -8,6 +8,12 @@ from .helpers import generate_classification_target, generate_regression_target +__all__ = [ + "ClassificationTarget", + "RegressionTarget", + "TabularDatasetData", +] + class Target(BaseModel, ABC): model_config = ConfigDict(arbitrary_types_allowed=True) diff --git a/siapy/datasets/tabular.py b/siapy/datasets/tabular.py index ce377c9..d8bb996 100644 --- a/siapy/datasets/tabular.py +++ b/siapy/datasets/tabular.py @@ -10,6 +10,10 @@ from siapy.datasets.schemas import TabularDatasetData from siapy.entities import Signatures, SpectralImage, SpectralImageSet +__all__ = [ + "TabularDataset", +] + class MetaDataEntity(BaseModel): image_idx: int diff --git a/siapy/entities/images.py b/siapy/entities/images.py index 02b22aa..a39f559 100644 --- a/siapy/entities/images.py +++ b/siapy/entities/images.py @@ -18,6 +18,12 @@ from .pixels import Pixels +__all__ = [ + "GeometricShapes", + "SpectralImage", +] + + @dataclass class GeometricShapes: def __init__( diff --git a/siapy/entities/imagesets.py b/siapy/entities/imagesets.py index b904505..f04e2ff 100644 --- a/siapy/entities/imagesets.py +++ b/siapy/entities/imagesets.py @@ -10,6 +10,10 @@ from .images import SpectralImage +__all__ = [ + "SpectralImageSet", +] + @dataclass class SpectralImageSet: diff --git a/siapy/entities/pixels.py b/siapy/entities/pixels.py index 6dc877d..04f3ca5 100644 --- a/siapy/entities/pixels.py +++ b/siapy/entities/pixels.py @@ -5,6 +5,10 @@ import numpy as np import pandas as pd +__all__ = [ + "Pixels", +] + class Coordinates(NamedTuple): U: Annotated[str, "u - x coordinate on the image"] = "u" diff --git a/siapy/entities/shapes.py b/siapy/entities/shapes.py index 1486b7e..414e6a9 100644 --- a/siapy/entities/shapes.py +++ b/siapy/entities/shapes.py @@ -9,10 +9,17 @@ from .pixels import Pixels +__all__ = [ + "Shape", + "Rectangle", + "Point", + "FreeDraw", +] + SHAPE_TYPE_RECTANGLE = "rectangle" SHAPE_TYPE_POINT = "point" SHAPE_TYPE_FREEDRAW = "freedraw" -ShapeType = Literal[SHAPE_TYPE_RECTANGLE, SHAPE_TYPE_POINT, SHAPE_TYPE_FREEDRAW] # type: ignore +ShapeType = Literal[SHAPE_TYPE_RECTANGLE, SHAPE_TYPE_POINT, SHAPE_TYPE_FREEDRAW] @dataclass diff --git a/siapy/entities/signatures.py b/siapy/entities/signatures.py index 8ea820e..201c358 100644 --- a/siapy/entities/signatures.py +++ b/siapy/entities/signatures.py @@ -9,6 +9,11 @@ from .pixels import Pixels +__all__ = [ + "Signatures", + "Signals", +] + @dataclass class Signals: diff --git a/siapy/features/features.py b/siapy/features/features.py index 81458b2..e9bdb2c 100644 --- a/siapy/features/features.py +++ b/siapy/features/features.py @@ -10,6 +10,13 @@ from siapy.features.spectral_indices import compute_spectral_indices from siapy.utils.general import set_random_seed +__all__ = [ + "AutoFeatClassification", + "AutoFeatRegression", + "AutoSpectralIndicesClassification", + "AutoSpectralIndicesRegression", +] + class AutoFeatClassification(AutoFeatClassifier): def __init__( diff --git a/siapy/features/helpers.py b/siapy/features/helpers.py index 3d33d42..0294972 100644 --- a/siapy/features/helpers.py +++ b/siapy/features/helpers.py @@ -8,6 +8,11 @@ from siapy.core.exceptions import InvalidInputError +__all__ = [ + "FeatureSelectorConfig", + "feature_selector_factory", +] + class FeatureSelectorConfig(BaseModel): k_features: Annotated[ diff --git a/siapy/features/spectral_indices.py b/siapy/features/spectral_indices.py index b159e90..f53aa7a 100644 --- a/siapy/features/spectral_indices.py +++ b/siapy/features/spectral_indices.py @@ -14,6 +14,11 @@ ) import spyndex # type: ignore +__all__ = [ + "get_spectral_indices", + "compute_spectral_indices", +] + def _convert_str_to_list(bands_acronym: Any) -> Any: if isinstance(bands_acronym, str): diff --git a/siapy/models/metrics.py b/siapy/models/metrics.py index 3310daa..5e78c0b 100644 --- a/siapy/models/metrics.py +++ b/siapy/models/metrics.py @@ -16,6 +16,11 @@ from siapy.core.exceptions import InvalidInputError +__all__ = [ + "calculate_classification_metrics", + "calculate_regression_metrics", +] + def normalized_RMSE( y_true: np.ndarray, diff --git a/siapy/optimizers/configs.py b/siapy/optimizers/configs.py index 95ee95a..25105b7 100644 --- a/siapy/optimizers/configs.py +++ b/siapy/optimizers/configs.py @@ -6,6 +6,12 @@ from siapy.optimizers.parameters import TrialParameters from siapy.optimizers.scorers import Scorer +__all__ = [ + "CreateStudyConfig", + "OptimizeStudyConfig", + "TabularOptimizerConfig", +] + class CreateStudyConfig(BaseModel): model_config = ConfigDict(arbitrary_types_allowed=True) diff --git a/siapy/optimizers/optimizers.py b/siapy/optimizers/optimizers.py index 9887c8f..0c9056b 100644 --- a/siapy/optimizers/optimizers.py +++ b/siapy/optimizers/optimizers.py @@ -14,6 +14,10 @@ IntParameter, ) +__all__ = [ + "TabularOptimizer", +] + class TabularOptimizer: def __init__( diff --git a/siapy/optimizers/parameters.py b/siapy/optimizers/parameters.py index f59183e..b9a35cb 100644 --- a/siapy/optimizers/parameters.py +++ b/siapy/optimizers/parameters.py @@ -3,6 +3,13 @@ from pydantic import BaseModel +__all__ = [ + "FloatParameter", + "IntParameter", + "CategoricalParameter", + "TrialParameters", +] + class FloatParameter(BaseModel): name: str diff --git a/siapy/optimizers/scorers.py b/siapy/optimizers/scorers.py index 3613535..e1b8e76 100644 --- a/siapy/optimizers/scorers.py +++ b/siapy/optimizers/scorers.py @@ -9,6 +9,10 @@ from siapy.utils.evaluators import ScorerFuncType, cross_validation, hold_out_validation from siapy.utils.general import initialize_object +__all__ = [ + "Scorer", +] + class Scorer: def __init__(self, scorer): diff --git a/siapy/transformations/corregistrator.py b/siapy/transformations/corregistrator.py index ac4107c..4efad7b 100644 --- a/siapy/transformations/corregistrator.py +++ b/siapy/transformations/corregistrator.py @@ -3,6 +3,13 @@ from siapy.entities.pixels import Pixels +__all__ = [ + "map_affine_approx_2d", + "affine_matx_2d", + "align", + "transform", +] + def map_affine_approx_2d(points_ref: np.ndarray, points_mov: np.ndarray) -> np.ndarray: """Affine transformation""" diff --git a/siapy/transformations/image.py b/siapy/transformations/image.py index 71ba298..76af609 100644 --- a/siapy/transformations/image.py +++ b/siapy/transformations/image.py @@ -7,6 +7,15 @@ from siapy.core.types import ImageSizeType, ImageType from siapy.utils.validators import validate_image_size, validate_image_to_numpy +__all__ = [ + "add_gaussian_noise", + "random_crop", + "random_mirror", + "random_rotation", + "rescale", + "area_normalization", +] + def add_gaussian_noise( image: ImageType, diff --git a/siapy/utils/enums.py b/siapy/utils/enums.py index fa1ff70..4bc990c 100644 --- a/siapy/utils/enums.py +++ b/siapy/utils/enums.py @@ -1,5 +1,9 @@ from enum import Enum, auto +__all__ = [ + "InteractiveButtonsEnum", +] + class InteractiveButtonsEnum(Enum): SAVE = auto() diff --git a/siapy/utils/evaluators.py b/siapy/utils/evaluators.py index f3a6a43..2474ac2 100644 --- a/siapy/utils/evaluators.py +++ b/siapy/utils/evaluators.py @@ -15,6 +15,11 @@ from .validators import check_model_prediction_methods +__all__ = [ + "cross_validation", + "hold_out_validation", +] + ScorerFuncType = Callable[[BaseEstimator, ArrayLike2dType, ArrayLike1dType], float] diff --git a/siapy/utils/general.py b/siapy/utils/general.py index ae7cdea..2ea709a 100644 --- a/siapy/utils/general.py +++ b/siapy/utils/general.py @@ -12,6 +12,18 @@ from siapy.core import logger from siapy.core.exceptions import InvalidInputError +__all__ = [ + "initialize_object", + "initialize_function", + "ensure_dir", + "get_number_cpus", + "dict_zip", + "get_increasing_seq_indices", + "set_random_seed", + "get_classmethods", + "match_iterable_items_by_regex", +] + def initialize_object( module: types.ModuleType | Any, diff --git a/siapy/utils/images.py b/siapy/utils/images.py index 80a9bca..80323fe 100644 --- a/siapy/utils/images.py +++ b/siapy/utils/images.py @@ -11,6 +11,16 @@ from siapy.transformations.image import rescale from siapy.utils.validators import validate_image_to_numpy +__all__ = [ + "save_image", + "create_image", + "merge_images_by_specter", + "convert_radiance_image_to_reflectance", + "calculate_correction_factor_from_panel", + "blockfy_image", + "calculate_image_background_percentage", +] + def save_image( image: Annotated[np.ndarray, "The image to save."], diff --git a/siapy/utils/plots.py b/siapy/utils/plots.py index 99600a5..28b564f 100644 --- a/siapy/utils/plots.py +++ b/siapy/utils/plots.py @@ -16,6 +16,14 @@ from siapy.utils.enums import InteractiveButtonsEnum from siapy.utils.validators import validate_image_to_numpy_3channels +__all__ = [ + "pixels_select_click", + "pixels_select_lasso", + "display_image_with_areas", + "display_multiple_images_with_areas", + "display_signals", +] + def pixels_select_click(image: ImageType) -> Pixels: image_display = validate_image_to_numpy_3channels(image) diff --git a/siapy/utils/validators.py b/siapy/utils/validators.py index 6b47d10..78d2732 100644 --- a/siapy/utils/validators.py +++ b/siapy/utils/validators.py @@ -10,6 +10,13 @@ from siapy.core.types import ImageSizeType, ImageType from siapy.entities import SpectralImage +__all__ = [ + "validate_image_to_numpy_3channels", + "validate_image_to_numpy", + "validate_image_size", + "check_model_prediction_methods", +] + def validate_image_to_numpy_3channels(image: ImageType) -> np.ndarray: if isinstance(image, SpectralImage):