From 3fd62bc1ec8ef18927135c3d9c4f13eb7f76fb6a Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Thu, 7 Jan 2021 10:12:59 +0000 Subject: [PATCH 1/3] add __all__ and 'remove import *' Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> --- monai/apps/__init__.py | 4 +- monai/config/__init__.py | 12 +- monai/config/deviceconfig.py | 10 ++ monai/config/type_definitions.py | 2 + monai/data/__init__.py | 32 +++- monai/data/utils.py | 26 +++ monai/engines/__init__.py | 8 +- monai/engines/utils.py | 2 + monai/handlers/__init__.py | 2 +- monai/inferers/__init__.py | 2 +- monai/metrics/__init__.py | 4 +- monai/metrics/confusion_matrix.py | 2 +- monai/metrics/hausdorff_distance.py | 2 +- monai/metrics/meandice.py | 2 +- monai/metrics/surface_distance.py | 2 +- monai/networks/__init__.py | 13 +- monai/networks/blocks/__init__.py | 2 +- monai/networks/layers/__init__.py | 19 ++- monai/networks/nets/__init__.py | 10 +- monai/networks/nets/classifier.py | 2 + monai/networks/nets/dynunet.py | 3 +- monai/networks/nets/fullyconnectednet.py | 2 + monai/networks/nets/segresnet.py | 3 +- monai/networks/nets/unet.py | 2 + monai/optimizers/__init__.py | 2 +- monai/transforms/__init__.py | 209 +++++++++++++++++++++-- monai/transforms/adaptors.py | 2 + monai/transforms/croppad/array.py | 15 ++ monai/transforms/croppad/dictionary.py | 16 ++ monai/transforms/intensity/array.py | 21 +++ monai/transforms/intensity/dictionary.py | 20 +++ monai/transforms/io/array.py | 2 + monai/transforms/io/dictionary.py | 2 + monai/transforms/post/array.py | 9 + monai/transforms/post/dictionary.py | 10 ++ monai/transforms/spatial/array.py | 22 +++ monai/transforms/spatial/dictionary.py | 17 ++ monai/transforms/utility/array.py | 20 +++ monai/transforms/utility/dictionary.py | 24 +++ monai/transforms/utils.py | 27 +++ monai/utils/__init__.py | 60 ++++++- monai/utils/aliases.py | 2 + monai/utils/decorators.py | 2 + monai/utils/enums.py | 19 +++ monai/utils/misc.py | 20 +++ monai/visualize/__init__.py | 9 +- setup.cfg | 2 +- 47 files changed, 641 insertions(+), 59 deletions(-) diff --git a/monai/apps/__init__.py b/monai/apps/__init__.py index db7f7179ae..59f38cbb6f 100644 --- a/monai/apps/__init__.py +++ b/monai/apps/__init__.py @@ -9,5 +9,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .datasets import * -from .utils import * +from .datasets import CrossValidation, DecathlonDataset, MedNISTDataset +from .utils import check_hash, download_and_extract, download_url, extractall diff --git a/monai/config/__init__.py b/monai/config/__init__.py index 3242bc14eb..251be002f2 100644 --- a/monai/config/__init__.py +++ b/monai/config/__init__.py @@ -9,5 +9,13 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .deviceconfig import * -from .type_definitions import * +from .deviceconfig import ( + USE_COMPILED, + get_gpu_info, + get_system_info, + print_config, + print_debug_info, + print_gpu_info, + print_system_info, +) +from .type_definitions import IndexSelection, KeysCollection diff --git a/monai/config/deviceconfig.py b/monai/config/deviceconfig.py index ac6ad0cbdd..ce7ed70655 100644 --- a/monai/config/deviceconfig.py +++ b/monai/config/deviceconfig.py @@ -38,6 +38,16 @@ psutil, has_psutil = optional_import("psutil") psutil_version = psutil.__version__ if has_psutil else "NOT INSTALLED or UNKNOWN VERSION." +__all__ = [ + "print_config", + "get_system_info", + "print_system_info", + "get_gpu_info", + "print_gpu_info", + "print_debug_info", + "USE_COMPILED", +] + def get_config_values(): """ diff --git a/monai/config/type_definitions.py b/monai/config/type_definitions.py index 0bd217e461..ea0c72576c 100644 --- a/monai/config/type_definitions.py +++ b/monai/config/type_definitions.py @@ -11,6 +11,8 @@ from typing import Collection, Hashable, Iterable, Union +__all__ = ["KeysCollection", "IndexSelection"] + """Commonly used concepts This module provides naming and type specifications for commonly used concepts within the MONAI package. The intent is to explicitly identify information diff --git a/monai/data/__init__.py b/monai/data/__init__.py index 3af820440e..e2bd32861c 100644 --- a/monai/data/__init__.py +++ b/monai/data/__init__.py @@ -22,14 +22,38 @@ ZipDataset, ) from .decathlon_datalist import load_decathlon_datalist, load_decathlon_properties -from .grid_dataset import * -from .image_reader import * +from .grid_dataset import GridPatchDataset, PatchDataset +from .image_reader import ImageReader, ITKReader, NibabelReader, NumpyReader, PILReader from .iterable_dataset import IterableDataset from .nifti_reader import NiftiDataset from .nifti_saver import NiftiSaver from .nifti_writer import write_nifti from .png_saver import PNGSaver from .png_writer import write_png -from .synthetic import * +from .synthetic import create_test_image_2d, create_test_image_3d from .thread_buffer import ThreadBuffer -from .utils import * +from .utils import ( + DistributedSampler, + compute_importance_map, + compute_shape_offset, + correct_nifti_header_if_necessary, + create_file_basename, + dense_patch_slices, + get_random_patch, + get_valid_patch_size, + is_supported_format, + iter_patch, + iter_patch_slices, + json_hashing, + list_data_collate, + partition_dataset, + partition_dataset_classes, + pickle_hashing, + rectify_header_sform_qform, + select_cross_validation_folds, + set_rnd, + sorted_dict, + to_affine_nd, + worker_init_fn, + zoom_affine, +) diff --git a/monai/data/utils.py b/monai/data/utils.py index 78a8ea6b1a..e23b1a467e 100644 --- a/monai/data/utils.py +++ b/monai/data/utils.py @@ -39,6 +39,32 @@ nib, _ = optional_import("nibabel") +__all__ = [ + "get_random_patch", + "iter_patch_slices", + "dense_patch_slices", + "iter_patch", + "get_valid_patch_size", + "list_data_collate", + "worker_init_fn", + "set_rnd", + "correct_nifti_header_if_necessary", + "rectify_header_sform_qform", + "zoom_affine", + "compute_shape_offset", + "to_affine_nd", + "create_file_basename", + "compute_importance_map", + "is_supported_format", + "partition_dataset", + "partition_dataset_classes", + "select_cross_validation_folds", + "DistributedSampler", + "json_hashing", + "pickle_hashing", + "sorted_dict", +] + def get_random_patch( dims: Sequence[int], patch_size: Sequence[int], rand_state: Optional[np.random.RandomState] = None diff --git a/monai/engines/__init__.py b/monai/engines/__init__.py index a7b262cb53..7b926c8469 100644 --- a/monai/engines/__init__.py +++ b/monai/engines/__init__.py @@ -9,7 +9,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .evaluator import * -from .multi_gpu_supervised_trainer import * -from .trainer import * -from .utils import * +from .evaluator import EnsembleEvaluator, Evaluator, SupervisedEvaluator +from .multi_gpu_supervised_trainer import create_multigpu_supervised_evaluator, create_multigpu_supervised_trainer +from .trainer import GanTrainer, SupervisedTrainer, Trainer +from .utils import CommonKeys, GanKeys, default_make_latent, default_prepare_batch, get_devices_spec diff --git a/monai/engines/utils.py b/monai/engines/utils.py index 4944f2e308..d3d4d62c0b 100644 --- a/monai/engines/utils.py +++ b/monai/engines/utils.py @@ -13,6 +13,8 @@ import torch +__all__ = ["CommonKeys", "GanKeys", "get_devices_spec", "default_prepare_batch", "default_make_latent"] + class CommonKeys: """ diff --git a/monai/handlers/__init__.py b/monai/handlers/__init__.py index ce30994625..1df516eaf0 100644 --- a/monai/handlers/__init__.py +++ b/monai/handlers/__init__.py @@ -23,5 +23,5 @@ from .stats_handler import StatsHandler from .surface_distance import SurfaceDistance from .tensorboard_handlers import TensorBoardImageHandler, TensorBoardStatsHandler -from .utils import * +from .utils import all_gather, stopping_fn_from_loss, stopping_fn_from_metric from .validation_handler import ValidationHandler diff --git a/monai/inferers/__init__.py b/monai/inferers/__init__.py index a2ad9540e2..1cdea77b0f 100644 --- a/monai/inferers/__init__.py +++ b/monai/inferers/__init__.py @@ -9,5 +9,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .inferer import * +from .inferer import Inferer, SimpleInferer, SlidingWindowInferer from .utils import sliding_window_inference diff --git a/monai/metrics/__init__.py b/monai/metrics/__init__.py index 88bfedf46a..818413c30d 100644 --- a/monai/metrics/__init__.py +++ b/monai/metrics/__init__.py @@ -10,8 +10,8 @@ # limitations under the License. from .confusion_matrix import ConfusionMatrixMetric, compute_confusion_matrix_metric, get_confusion_matrix -from .hausdorff_distance import * +from .hausdorff_distance import HausdorffDistanceMetric, compute_hausdorff_distance, compute_percent_hausdorff_distance from .meandice import DiceMetric, compute_meandice from .rocauc import compute_roc_auc from .surface_distance import SurfaceDistanceMetric, compute_average_surface_distance -from .utils import * +from .utils import do_metric_reduction, get_mask_edges, get_surface_distance, ignore_background diff --git a/monai/metrics/confusion_matrix.py b/monai/metrics/confusion_matrix.py index 2ef4e8ce65..b9cc92ceeb 100644 --- a/monai/metrics/confusion_matrix.py +++ b/monai/metrics/confusion_matrix.py @@ -14,7 +14,7 @@ import torch -from monai.metrics.utils import * +from monai.metrics.utils import do_metric_reduction, ignore_background from monai.utils import MetricReduction diff --git a/monai/metrics/hausdorff_distance.py b/monai/metrics/hausdorff_distance.py index 54489be8c3..b88cc77c99 100644 --- a/monai/metrics/hausdorff_distance.py +++ b/monai/metrics/hausdorff_distance.py @@ -15,7 +15,7 @@ import numpy as np import torch -from monai.metrics.utils import * +from monai.metrics.utils import do_metric_reduction, get_mask_edges, get_surface_distance, ignore_background from monai.utils import MetricReduction __all__ = ["HausdorffDistanceMetric", "compute_hausdorff_distance", "compute_percent_hausdorff_distance"] diff --git a/monai/metrics/meandice.py b/monai/metrics/meandice.py index b349c8e455..9d27fff56f 100644 --- a/monai/metrics/meandice.py +++ b/monai/metrics/meandice.py @@ -14,7 +14,7 @@ import torch -from monai.metrics.utils import * +from monai.metrics.utils import do_metric_reduction, ignore_background from monai.utils import MetricReduction diff --git a/monai/metrics/surface_distance.py b/monai/metrics/surface_distance.py index f70a8a8f20..9e2f130bd2 100644 --- a/monai/metrics/surface_distance.py +++ b/monai/metrics/surface_distance.py @@ -15,7 +15,7 @@ import numpy as np import torch -from monai.metrics.utils import * +from monai.metrics.utils import do_metric_reduction, get_mask_edges, get_surface_distance, ignore_background from monai.utils import MetricReduction diff --git a/monai/networks/__init__.py b/monai/networks/__init__.py index 2d602c6c75..3c0a68def2 100644 --- a/monai/networks/__init__.py +++ b/monai/networks/__init__.py @@ -9,4 +9,15 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .utils import * +from .utils import ( + eval_mode, + icnr_init, + normal_init, + normalize_transform, + one_hot, + pixelshuffle, + predict_segmentation, + slice_channels, + to_norm_affine, + train_mode, +) diff --git a/monai/networks/blocks/__init__.py b/monai/networks/blocks/__init__.py index 180344f38b..10b13f619c 100644 --- a/monai/networks/blocks/__init__.py +++ b/monai/networks/blocks/__init__.py @@ -25,4 +25,4 @@ SEResNetBottleneck, SEResNeXtBottleneck, ) -from .upsample import * +from .upsample import SubpixelUpsample, Subpixelupsample, SubpixelUpSample, Upsample, UpSample diff --git a/monai/networks/layers/__init__.py b/monai/networks/layers/__init__.py index 9d04cb8f3d..dabec727ac 100644 --- a/monai/networks/layers/__init__.py +++ b/monai/networks/layers/__init__.py @@ -9,8 +9,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .convutils import * -from .factories import * -from .filtering import * -from .simplelayers import * -from .spatial_transforms import * +from .convutils import calculate_out_shape, gaussian_1d, polyval, same_padding, stride_minus_kernel_padding +from .factories import Act, Conv, Dropout, LayerFactory, Norm, Pad, Pool, split_args +from .filtering import BilateralFilter +from .simplelayers import ( + LLTM, + ChannelPad, + Flatten, + GaussianFilter, + HilbertTransform, + Reshape, + SkipConnection, + separable_filtering, +) +from .spatial_transforms import AffineTransform, grid_count, grid_grad, grid_pull, grid_push diff --git a/monai/networks/nets/__init__.py b/monai/networks/nets/__init__.py index 8e985ea9c8..6c7570ebf9 100644 --- a/monai/networks/nets/__init__.py +++ b/monai/networks/nets/__init__.py @@ -11,16 +11,16 @@ from .ahnet import AHNet from .autoencoder import AutoEncoder -from .basic_unet import * -from .classifier import * +from .basic_unet import BasicUNet, BasicUnet, Basicunet +from .classifier import Classifier, Critic, Discriminator from .densenet import DenseNet, densenet121, densenet169, densenet201, densenet264 -from .dynunet import * -from .fullyconnectednet import * +from .dynunet import DynUNet, DynUnet, Dynunet +from .fullyconnectednet import FullyConnectedNet, VarFullyConnectedNet from .generator import Generator from .highresnet import HighResBlock, HighResNet from .regressor import Regressor from .segresnet import SegResNet, SegResNetVAE from .senet import SENet, se_resnet50, se_resnet101, se_resnet152, se_resnext50_32x4d, se_resnext101_32x4d, senet154 -from .unet import * +from .unet import UNet, Unet, unet from .varautoencoder import VarAutoEncoder from .vnet import VNet diff --git a/monai/networks/nets/classifier.py b/monai/networks/nets/classifier.py index 69276ff3d3..92fee4f566 100644 --- a/monai/networks/nets/classifier.py +++ b/monai/networks/nets/classifier.py @@ -17,6 +17,8 @@ from monai.networks.layers.factories import Act, Norm, split_args from monai.networks.nets.regressor import Regressor +__all__ = ["Classifier", "Discriminator", "Critic"] + class Classifier(Regressor): """ diff --git a/monai/networks/nets/dynunet.py b/monai/networks/nets/dynunet.py index 4449b2c068..e8c3b517d9 100644 --- a/monai/networks/nets/dynunet.py +++ b/monai/networks/nets/dynunet.py @@ -12,9 +12,10 @@ from typing import List, Optional, Sequence, Union +import torch import torch.nn as nn -from monai.networks.blocks.dynunet_block import * +from monai.networks.blocks.dynunet_block import UnetBasicBlock, UnetOutBlock, UnetResBlock, UnetUpBlock __all__ = ["DynUNet", "DynUnet", "Dynunet"] diff --git a/monai/networks/nets/fullyconnectednet.py b/monai/networks/nets/fullyconnectednet.py index cd9c18cd96..91377c410c 100644 --- a/monai/networks/nets/fullyconnectednet.py +++ b/monai/networks/nets/fullyconnectednet.py @@ -17,6 +17,8 @@ from monai.networks.blocks import ADN from monai.networks.layers.factories import Act +__all__ = ["FullyConnectedNet", "VarFullyConnectedNet"] + def _get_adn_layer( act: Optional[Union[Tuple, str]], dropout: Optional[Union[Tuple, str, float]], ordering: Optional[str] diff --git a/monai/networks/nets/segresnet.py b/monai/networks/nets/segresnet.py index 9920908ac8..7972d1537f 100644 --- a/monai/networks/nets/segresnet.py +++ b/monai/networks/nets/segresnet.py @@ -13,9 +13,10 @@ import numpy as np import torch +import torch.nn as nn import torch.nn.functional as F -from monai.networks.blocks.segresnet_block import * +from monai.networks.blocks.segresnet_block import ResBlock, get_conv_layer, get_norm_layer, get_upsample_layer from monai.networks.layers.factories import Act, Dropout from monai.utils import UpsampleMode diff --git a/monai/networks/nets/unet.py b/monai/networks/nets/unet.py index 8f8858983b..3626b21a64 100644 --- a/monai/networks/nets/unet.py +++ b/monai/networks/nets/unet.py @@ -19,6 +19,8 @@ from monai.networks.layers.simplelayers import SkipConnection from monai.utils import alias, export +__all__ = ["UNet", "Unet", "unet"] + @export("monai.networks.nets") @alias("Unet") diff --git a/monai/optimizers/__init__.py b/monai/optimizers/__init__.py index 2f5c82f6ca..850627d588 100644 --- a/monai/optimizers/__init__.py +++ b/monai/optimizers/__init__.py @@ -10,4 +10,4 @@ # limitations under the License. from .novograd import Novograd -from .utils import * +from .utils import generate_param_groups diff --git a/monai/transforms/__init__.py b/monai/transforms/__init__.py index ac18c6a713..2f961f4834 100644 --- a/monai/transforms/__init__.py +++ b/monai/transforms/__init__.py @@ -9,18 +9,197 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .adaptors import * -from .compose import * -from .croppad.array import * -from .croppad.dictionary import * -from .intensity.array import * -from .intensity.dictionary import * -from .io.array import * -from .io.dictionary import * -from .post.array import * -from .post.dictionary import * -from .spatial.array import * -from .spatial.dictionary import * -from .utility.array import * -from .utility.dictionary import * -from .utils import * +from .utils import ( # isort:skip + apply_transform, + copypaste_arrays, + create_control_grid, + create_grid, + create_rotate, + create_scale, + create_shear, + create_translate, + extreme_points_to_image, + generate_pos_neg_label_crop_centers, + generate_spatial_bounding_box, + get_extreme_points, + get_largest_connected_component_mask, + img_bounds, + in_bounds, + is_empty, + map_binary_to_indices, + rand_choice, + rescale_array, + rescale_array_int_max, + rescale_instance_array, + resize_center, + weighted_patch_samples, + zero_margins, +) +from .adaptors import FunctionSignature, adaptor, apply_alias, to_kwargs +from .compose import Compose, MapTransform, Randomizable, Transform +from .croppad.array import ( + BorderPad, + BoundingRect, + CenterSpatialCrop, + CropForeground, + DivisiblePad, + RandCropByPosNegLabel, + RandSpatialCrop, + RandSpatialCropSamples, + RandWeightedCrop, + ResizeWithPadOrCrop, + SpatialCrop, + SpatialPad, +) +from .croppad.dictionary import ( + BorderPadd, + BoundingRectd, + CenterSpatialCropd, + CropForegroundd, + DivisiblePadd, + NumpyPadModeSequence, + RandCropByPosNegLabeld, + RandSpatialCropd, + RandSpatialCropSamplesd, + RandWeightedCropd, + ResizeWithPadOrCropd, + SpatialCropd, + SpatialPadd, +) +from .intensity.array import ( + AdjustContrast, + DetectEnvelope, + GaussianSharpen, + GaussianSmooth, + MaskIntensity, + NormalizeIntensity, + RandAdjustContrast, + RandGaussianNoise, + RandGaussianSharpen, + RandGaussianSmooth, + RandHistogramShift, + RandScaleIntensity, + RandShiftIntensity, + ScaleIntensity, + ScaleIntensityRange, + ScaleIntensityRangePercentiles, + ShiftIntensity, + ThresholdIntensity, +) +from .intensity.dictionary import ( + AdjustContrastd, + GaussianSharpend, + GaussianSmoothd, + MaskIntensityd, + NormalizeIntensityd, + RandAdjustContrastd, + RandGaussianNoised, + RandGaussianSharpend, + RandGaussianSmoothd, + RandHistogramShiftd, + RandScaleIntensityd, + RandShiftIntensityd, + ScaleIntensityd, + ScaleIntensityRanged, + ScaleIntensityRangePercentilesd, + ShiftIntensityd, + ThresholdIntensityd, +) +from .io.array import LoadImage, LoadNifti, LoadNumpy, LoadPNG +from .io.dictionary import LoadDatad, LoadImaged, LoadNiftid, LoadNumpyd, LoadPNGd +from .post.array import ( + Activations, + AsDiscrete, + KeepLargestConnectedComponent, + LabelToContour, + MeanEnsemble, + VoteEnsemble, +) +from .post.dictionary import ( + Activationsd, + AsDiscreted, + Ensembled, + KeepLargestConnectedComponentd, + LabelToContourd, + MeanEnsembled, + VoteEnsembled, +) +from .spatial.array import ( + Affine, + AffineGrid, + Flip, + Orientation, + Rand2DElastic, + Rand3DElastic, + RandAffine, + RandAffineGrid, + RandDeformGrid, + RandFlip, + RandRotate, + RandRotate90, + RandZoom, + Resample, + Resize, + Rotate, + Rotate90, + Spacing, + Zoom, +) +from .spatial.dictionary import ( + Flipd, + Orientationd, + Rand2DElasticd, + Rand3DElasticd, + RandAffined, + RandFlipd, + RandRotate90d, + RandRotated, + RandZoomd, + Resized, + Rotate90d, + Rotated, + Spacingd, + Zoomd, +) +from .utility.array import ( + AddChannel, + AddExtremePointsChannel, + AsChannelFirst, + AsChannelLast, + CastToType, + DataStats, + FgBgToIndices, + Identity, + LabelToMask, + Lambda, + RepeatChannel, + SimulateDelay, + SplitChannel, + SqueezeDim, + ToNumpy, + ToTensor, + Transpose, +) +from .utility.dictionary import ( + AddChanneld, + AddExtremePointsChanneld, + AsChannelFirstd, + AsChannelLastd, + CastToTyped, + ConcatItemsd, + ConvertToMultiChannelBasedOnBratsClassesd, + CopyItemsd, + DataStatsd, + DeleteItemsd, + FgBgToIndicesd, + Identityd, + LabelToMaskd, + Lambdad, + RepeatChanneld, + SelectItemsd, + SimulateDelayd, + SplitChanneld, + SqueezeDimd, + ToNumpyd, + ToTensord, +) diff --git a/monai/transforms/adaptors.py b/monai/transforms/adaptors.py index 5e804d81dd..5bf2bf038b 100644 --- a/monai/transforms/adaptors.py +++ b/monai/transforms/adaptors.py @@ -126,6 +126,8 @@ def __call__(self, img, seg): from monai.utils import export as _monai_export +__all__ = ["adaptor", "apply_alias", "to_kwargs", "FunctionSignature"] + @_monai_export("monai.transforms") def adaptor(function, outputs, inputs=None): diff --git a/monai/transforms/croppad/array.py b/monai/transforms/croppad/array.py index 76b3aa36ec..667324d09d 100644 --- a/monai/transforms/croppad/array.py +++ b/monai/transforms/croppad/array.py @@ -28,6 +28,21 @@ ) from monai.utils import Method, NumpyPadMode, ensure_tuple, fall_back_tuple +__all__ = [ + "SpatialPad", + "BorderPad", + "DivisiblePad", + "SpatialCrop", + "CenterSpatialCrop", + "RandSpatialCrop", + "RandSpatialCropSamples", + "CropForeground", + "RandWeightedCrop", + "RandCropByPosNegLabel", + "ResizeWithPadOrCrop", + "BoundingRect", +] + class SpatialPad(Transform): """ diff --git a/monai/transforms/croppad/dictionary.py b/monai/transforms/croppad/dictionary.py index c07934e0df..d2f9f1297a 100644 --- a/monai/transforms/croppad/dictionary.py +++ b/monai/transforms/croppad/dictionary.py @@ -39,6 +39,22 @@ ) from monai.utils import Method, NumpyPadMode, ensure_tuple, ensure_tuple_rep, fall_back_tuple +__all__ = [ + "NumpyPadModeSequence", + "SpatialPadd", + "BorderPadd", + "DivisiblePadd", + "SpatialCropd", + "CenterSpatialCropd", + "RandSpatialCropd", + "RandSpatialCropSamplesd", + "CropForegroundd", + "RandWeightedCropd", + "RandCropByPosNegLabeld", + "ResizeWithPadOrCropd", + "BoundingRectd", +] + NumpyPadModeSequence = Union[Sequence[Union[NumpyPadMode, str]], NumpyPadMode, str] diff --git a/monai/transforms/intensity/array.py b/monai/transforms/intensity/array.py index 1bc8974842..84d25c663f 100644 --- a/monai/transforms/intensity/array.py +++ b/monai/transforms/intensity/array.py @@ -25,6 +25,27 @@ from monai.transforms.utils import rescale_array from monai.utils import PT_BEFORE_1_7, InvalidPyTorchVersionError, dtype_torch_to_numpy, ensure_tuple_size +__all__ = [ + "RandGaussianNoise", + "ShiftIntensity", + "RandShiftIntensity", + "ScaleIntensity", + "RandScaleIntensity", + "NormalizeIntensity", + "ThresholdIntensity", + "ScaleIntensityRange", + "AdjustContrast", + "RandAdjustContrast", + "ScaleIntensityRangePercentiles", + "MaskIntensity", + "DetectEnvelope", + "GaussianSmooth", + "RandGaussianSmooth", + "GaussianSharpen", + "RandGaussianSharpen", + "RandHistogramShift", +] + class RandGaussianNoise(Randomizable, Transform): """ diff --git a/monai/transforms/intensity/dictionary.py b/monai/transforms/intensity/dictionary.py index 9aaf453ca4..d59262229c 100644 --- a/monai/transforms/intensity/dictionary.py +++ b/monai/transforms/intensity/dictionary.py @@ -37,6 +37,26 @@ ) from monai.utils import dtype_torch_to_numpy, ensure_tuple_size +__all__ = [ + "RandGaussianNoised", + "ShiftIntensityd", + "RandShiftIntensityd", + "ScaleIntensityd", + "RandScaleIntensityd", + "NormalizeIntensityd", + "ThresholdIntensityd", + "ScaleIntensityRanged", + "AdjustContrastd", + "RandAdjustContrastd", + "ScaleIntensityRangePercentilesd", + "MaskIntensityd", + "GaussianSmoothd", + "RandGaussianSmoothd", + "GaussianSharpend", + "RandGaussianSharpend", + "RandHistogramShiftd", +] + class RandGaussianNoised(Randomizable, MapTransform): """ diff --git a/monai/transforms/io/array.py b/monai/transforms/io/array.py index 2d6438596c..2f9f0b2814 100644 --- a/monai/transforms/io/array.py +++ b/monai/transforms/io/array.py @@ -29,6 +29,8 @@ nib, _ = optional_import("nibabel") Image, _ = optional_import("PIL.Image") +__all__ = ["LoadImage", "LoadNifti", "LoadPNG", "LoadNumpy"] + class LoadImage(Transform): """ diff --git a/monai/transforms/io/dictionary.py b/monai/transforms/io/dictionary.py index c0d74f66c4..9f7cd821eb 100644 --- a/monai/transforms/io/dictionary.py +++ b/monai/transforms/io/dictionary.py @@ -24,6 +24,8 @@ from monai.transforms.compose import MapTransform from monai.transforms.io.array import LoadImage, LoadNifti, LoadNumpy, LoadPNG +__all__ = ["LoadImaged", "LoadDatad", "LoadNiftid", "LoadPNGd", "LoadNumpyd"] + class LoadImaged(MapTransform): """ diff --git a/monai/transforms/post/array.py b/monai/transforms/post/array.py index c01cefcb74..bf6a431b72 100644 --- a/monai/transforms/post/array.py +++ b/monai/transforms/post/array.py @@ -25,6 +25,15 @@ from monai.transforms.utils import get_largest_connected_component_mask from monai.utils import ensure_tuple +__all__ = [ + "Activations", + "AsDiscrete", + "KeepLargestConnectedComponent", + "LabelToContour", + "MeanEnsemble", + "VoteEnsemble", +] + class Activations(Transform): """ diff --git a/monai/transforms/post/dictionary.py b/monai/transforms/post/dictionary.py index 268f110c6d..779fcdc397 100644 --- a/monai/transforms/post/dictionary.py +++ b/monai/transforms/post/dictionary.py @@ -32,6 +32,16 @@ ) from monai.utils import ensure_tuple_rep +__all__ = [ + "Activationsd", + "AsDiscreted", + "KeepLargestConnectedComponentd", + "LabelToContourd", + "Ensembled", + "MeanEnsembled", + "VoteEnsembled", +] + class Activationsd(MapTransform): """ diff --git a/monai/transforms/spatial/array.py b/monai/transforms/spatial/array.py index f47a837fcf..813abe878e 100644 --- a/monai/transforms/spatial/array.py +++ b/monai/transforms/spatial/array.py @@ -46,6 +46,28 @@ nib, _ = optional_import("nibabel") +__all__ = [ + "Spacing", + "Orientation", + "Flip", + "Resize", + "Rotate", + "Zoom", + "Rotate90", + "RandRotate90", + "RandRotate", + "RandFlip", + "RandZoom", + "AffineGrid", + "RandAffineGrid", + "RandDeformGrid", + "Resample", + "Affine", + "RandAffine", + "Rand2DElastic", + "Rand3DElastic", +] + class Spacing(Transform): """ diff --git a/monai/transforms/spatial/dictionary.py b/monai/transforms/spatial/dictionary.py index 95f7cbabb5..5250bd1550 100644 --- a/monai/transforms/spatial/dictionary.py +++ b/monai/transforms/spatial/dictionary.py @@ -47,6 +47,23 @@ fall_back_tuple, ) +__all__ = [ + "Spacingd", + "Orientationd", + "Rotate90d", + "RandRotate90d", + "Resized", + "RandAffined", + "Rand2DElasticd", + "Rand3DElasticd", + "Flipd", + "RandFlipd", + "Rotated", + "RandRotated", + "Zoomd", + "RandZoomd", +] + GridSampleModeSequence = Union[Sequence[Union[GridSampleMode, str]], GridSampleMode, str] GridSamplePadModeSequence = Union[Sequence[Union[GridSamplePadMode, str]], GridSamplePadMode, str] InterpolateModeSequence = Union[Sequence[Union[InterpolateMode, str]], InterpolateMode, str] diff --git a/monai/transforms/utility/array.py b/monai/transforms/utility/array.py index 842d83226d..79b39b6825 100644 --- a/monai/transforms/utility/array.py +++ b/monai/transforms/utility/array.py @@ -24,6 +24,26 @@ from monai.transforms.utils import extreme_points_to_image, get_extreme_points, map_binary_to_indices from monai.utils import ensure_tuple +__all__ = [ + "Identity", + "AsChannelFirst", + "AsChannelLast", + "AddChannel", + "RepeatChannel", + "SplitChannel", + "CastToType", + "ToTensor", + "ToNumpy", + "Transpose", + "SqueezeDim", + "DataStats", + "SimulateDelay", + "Lambda", + "LabelToMask", + "FgBgToIndices", + "AddExtremePointsChannel", +] + # Generic type which can represent either a numpy.ndarray or a torch.Tensor # Unlike Union can create a dependence between parameter(s) / return(s) NdarrayTensor = TypeVar("NdarrayTensor", np.ndarray, torch.Tensor) diff --git a/monai/transforms/utility/dictionary.py b/monai/transforms/utility/dictionary.py index 65323dd265..8e373329ab 100644 --- a/monai/transforms/utility/dictionary.py +++ b/monai/transforms/utility/dictionary.py @@ -44,6 +44,30 @@ ) from monai.utils import ensure_tuple, ensure_tuple_rep +__all__ = [ + "Identityd", + "AsChannelFirstd", + "AsChannelLastd", + "AddChanneld", + "RepeatChanneld", + "SplitChanneld", + "CastToTyped", + "ToTensord", + "ToNumpyd", + "DeleteItemsd", + "SelectItemsd", + "SqueezeDimd", + "DataStatsd", + "SimulateDelayd", + "CopyItemsd", + "ConcatItemsd", + "Lambdad", + "LabelToMaskd", + "FgBgToIndicesd", + "ConvertToMultiChannelBasedOnBratsClassesd", + "AddExtremePointsChanneld", +] + class Identityd(MapTransform): """ diff --git a/monai/transforms/utils.py b/monai/transforms/utils.py index 1552595d58..f28f95688d 100644 --- a/monai/transforms/utils.py +++ b/monai/transforms/utils.py @@ -23,6 +23,33 @@ measure, _ = optional_import("skimage.measure", "0.14.2", min_version) +__all__ = [ + "rand_choice", + "img_bounds", + "in_bounds", + "is_empty", + "zero_margins", + "rescale_array", + "rescale_instance_array", + "rescale_array_int_max", + "copypaste_arrays", + "resize_center", + "map_binary_to_indices", + "weighted_patch_samples", + "generate_pos_neg_label_crop_centers", + "apply_transform", + "create_grid", + "create_control_grid", + "create_rotate", + "create_shear", + "create_scale", + "create_translate", + "generate_spatial_bounding_box", + "get_largest_connected_component_mask", + "get_extreme_points", + "extreme_points_to_image", +] + def rand_choice(prob: float = 0.5) -> bool: """ diff --git a/monai/utils/__init__.py b/monai/utils/__init__.py index fe36156263..9bb25d723a 100644 --- a/monai/utils/__init__.py +++ b/monai/utils/__init__.py @@ -10,9 +10,57 @@ # limitations under the License. # have to explicitly bring these in here to resolve circular import issues -from .aliases import * -from .decorators import * -from .enums import * -from .misc import * -from .module import * -from .profiling import * +from .aliases import alias, resolve_name +from .decorators import MethodReplacer, RestartGenerator +from .enums import ( + Activation, + Average, + BlendMode, + ChannelMatching, + GridSampleMode, + GridSamplePadMode, + InterpolateMode, + LossReduction, + Method, + MetricReduction, + Normalization, + NumpyPadMode, + PytorchPadMode, + SkipMode, + UpsampleMode, + Weight, +) +from .misc import ( + MAX_SEED, + dtype_numpy_to_torch, + dtype_torch_to_numpy, + ensure_tuple, + ensure_tuple_rep, + ensure_tuple_size, + fall_back_tuple, + first, + get_seed, + is_scalar, + is_scalar_tensor, + issequenceiterable, + list_to_dict, + progress_bar, + set_determinism, + star_zip_with, + zip_with, +) +from .module import ( + PT_BEFORE_1_7, + InvalidPyTorchVersionError, + OptionalImportError, + exact_version, + export, + get_full_type_name, + get_package_version, + get_torch_version_tuple, + has_option, + load_submodules, + min_version, + optional_import, +) +from .profiling import PerfContext, torch_profiler_full, torch_profiler_time_cpu_gpu, torch_profiler_time_end_to_end diff --git a/monai/utils/aliases.py b/monai/utils/aliases.py index 352da99933..5a182862d5 100644 --- a/monai/utils/aliases.py +++ b/monai/utils/aliases.py @@ -21,6 +21,8 @@ alias_lock = threading.RLock() GlobalAliases = {} +all = ["alias", "resolve_name"] + def alias(*names): """ diff --git a/monai/utils/decorators.py b/monai/utils/decorators.py index 8f37f800ad..78b510ad1c 100644 --- a/monai/utils/decorators.py +++ b/monai/utils/decorators.py @@ -11,6 +11,8 @@ from functools import wraps +all = ["RestartGenerator", "MethodReplacer"] + class RestartGenerator: """ diff --git a/monai/utils/enums.py b/monai/utils/enums.py index 9107270d86..7b01f2146b 100644 --- a/monai/utils/enums.py +++ b/monai/utils/enums.py @@ -11,6 +11,25 @@ from enum import Enum +all = [ + "NumpyPadMode", + "GridSampleMode", + "InterpolateMode", + "UpsampleMode", + "BlendMode", + "PytorchPadMode", + "GridSamplePadMode", + "Average", + "MetricReduction", + "LossReduction", + "Weight", + "Normalization", + "Activation", + "ChannelMatching", + "SkipMode", + "Method", +] + class NumpyPadMode(Enum): """ diff --git a/monai/utils/misc.py b/monai/utils/misc.py index 0c5a2492d4..09a1306217 100644 --- a/monai/utils/misc.py +++ b/monai/utils/misc.py @@ -19,6 +19,26 @@ import numpy as np import torch +all = [ + "zip_with", + "star_zip_with", + "first", + "issequenceiterable", + "ensure_tuple", + "ensure_tuple_size", + "ensure_tuple_rep", + "fall_back_tuple", + "is_scalar_tensor", + "is_scalar", + "progress_bar", + "get_seed", + "set_determinism", + "list_to_dict", + "dtype_torch_to_numpy", + "dtype_numpy_to_torch", + "MAX_SEED", +] + _seed = None _flag_deterministic = torch.backends.cudnn.deterministic _flag_cudnn_benchmark = torch.backends.cudnn.benchmark diff --git a/monai/visualize/__init__.py b/monai/visualize/__init__.py index e0c163a953..c821bf42f5 100644 --- a/monai/visualize/__init__.py +++ b/monai/visualize/__init__.py @@ -10,6 +10,11 @@ # limitations under the License. from .visualizer import default_normalizer, default_upsampler # isort:skip -from .class_activation_maps import * -from .img2tensorboard import * +from .class_activation_maps import CAM, GradCAM, GradCAMpp, ModelWithHooks +from .img2tensorboard import ( + add_animated_gif, + add_animated_gif_no_channels, + make_animated_gif_summary, + plot_2d_or_3d_image, +) from .occlusion_sensitivity import OcclusionSensitivity diff --git a/setup.cfg b/setup.cfg index 78cf8db6ca..a4793eebc6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -61,7 +61,7 @@ max-line-length = 120 # C408 ignored because we like the dict keyword argument syntax # E501 is not flexible enough, we're using B950 instead ignore = - E203,E305,E402,E501,E721,E741,F403,F405,F821,F841,F999,W503,W504,C408,E302,W291,E303, + E203,E305,E402,E501,E721,E741,F821,F841,F999,W503,W504,C408,E302,W291,E303, # N812 lowercase 'torch.nn.functional' imported as non lowercase 'F' N812 per-file-ignores = __init__.py: F401 From 86c43cf24f57370fbbc12923d09b0f52e7952cb9 Mon Sep 17 00:00:00 2001 From: Richard Brown <33289025+rijobro@users.noreply.github.com> Date: Thu, 7 Jan 2021 10:27:57 +0000 Subject: [PATCH 2/3] add aliases to __all__ Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> --- monai/transforms/__init__.py | 58 ++++++++++++++++++++++++ monai/transforms/croppad/dictionary.py | 24 ++++++++++ monai/transforms/intensity/dictionary.py | 34 ++++++++++++++ 3 files changed, 116 insertions(+) diff --git a/monai/transforms/__init__.py b/monai/transforms/__init__.py index 2f961f4834..305c27607e 100644 --- a/monai/transforms/__init__.py +++ b/monai/transforms/__init__.py @@ -53,18 +53,42 @@ ) from .croppad.dictionary import ( BorderPadd, + BorderPadD, + BorderPadDict, BoundingRectd, + BoundingRectD, + BoundingRectDict, CenterSpatialCropd, + CenterSpatialCropD, + CenterSpatialCropDict, CropForegroundd, + CropForegroundD, + CropForegroundDict, DivisiblePadd, + DivisiblePadD, + DivisiblePadDict, NumpyPadModeSequence, RandCropByPosNegLabeld, + RandCropByPosNegLabelD, + RandCropByPosNegLabelDict, RandSpatialCropd, + RandSpatialCropD, + RandSpatialCropDict, RandSpatialCropSamplesd, + RandSpatialCropSamplesD, + RandSpatialCropSamplesDict, RandWeightedCropd, + RandWeightedCropD, + RandWeightedCropDict, ResizeWithPadOrCropd, + ResizeWithPadOrCropD, + ResizeWithPadOrCropDict, SpatialCropd, + SpatialCropD, + SpatialCropDict, SpatialPadd, + SpatialPadD, + SpatialPadDict, ) from .intensity.array import ( AdjustContrast, @@ -88,22 +112,56 @@ ) from .intensity.dictionary import ( AdjustContrastd, + AdjustContrastD, + AdjustContrastDict, GaussianSharpend, + GaussianSharpenD, + GaussianSharpenDict, GaussianSmoothd, + GaussianSmoothD, + GaussianSmoothDict, MaskIntensityd, + MaskIntensityD, + MaskIntensityDict, NormalizeIntensityd, + NormalizeIntensityD, + NormalizeIntensityDict, RandAdjustContrastd, + RandAdjustContrastD, + RandAdjustContrastDict, RandGaussianNoised, + RandGaussianNoiseD, + RandGaussianNoiseDict, RandGaussianSharpend, + RandGaussianSharpenD, + RandGaussianSharpenDict, RandGaussianSmoothd, + RandGaussianSmoothD, + RandGaussianSmoothDict, RandHistogramShiftd, + RandHistogramShiftD, + RandHistogramShiftDict, RandScaleIntensityd, + RandScaleIntensityD, + RandScaleIntensityDict, RandShiftIntensityd, + RandShiftIntensityD, + RandShiftIntensityDict, ScaleIntensityd, + ScaleIntensityD, + ScaleIntensityDict, ScaleIntensityRanged, + ScaleIntensityRangeD, + ScaleIntensityRangeDict, ScaleIntensityRangePercentilesd, + ScaleIntensityRangePercentilesD, + ScaleIntensityRangePercentilesDict, ShiftIntensityd, + ShiftIntensityD, + ShiftIntensityDict, ThresholdIntensityd, + ThresholdIntensityD, + ThresholdIntensityDict, ) from .io.array import LoadImage, LoadNifti, LoadNumpy, LoadPNG from .io.dictionary import LoadDatad, LoadImaged, LoadNiftid, LoadNumpyd, LoadPNGd diff --git a/monai/transforms/croppad/dictionary.py b/monai/transforms/croppad/dictionary.py index d2f9f1297a..df87c659ac 100644 --- a/monai/transforms/croppad/dictionary.py +++ b/monai/transforms/croppad/dictionary.py @@ -53,6 +53,30 @@ "RandCropByPosNegLabeld", "ResizeWithPadOrCropd", "BoundingRectd", + "SpatialPadD", + "SpatialPadDict", + "BorderPadD", + "BorderPadDict", + "DivisiblePadD", + "DivisiblePadDict", + "SpatialCropD", + "SpatialCropDict", + "CenterSpatialCropD", + "CenterSpatialCropDict", + "RandSpatialCropD", + "RandSpatialCropDict", + "RandSpatialCropSamplesD", + "RandSpatialCropSamplesDict", + "CropForegroundD", + "CropForegroundDict", + "RandWeightedCropD", + "RandWeightedCropDict", + "RandCropByPosNegLabelD", + "RandCropByPosNegLabelDict", + "ResizeWithPadOrCropD", + "ResizeWithPadOrCropDict", + "BoundingRectD", + "BoundingRectDict", ] NumpyPadModeSequence = Union[Sequence[Union[NumpyPadMode, str]], NumpyPadMode, str] diff --git a/monai/transforms/intensity/dictionary.py b/monai/transforms/intensity/dictionary.py index d59262229c..fa3144d40c 100644 --- a/monai/transforms/intensity/dictionary.py +++ b/monai/transforms/intensity/dictionary.py @@ -55,6 +55,40 @@ "GaussianSharpend", "RandGaussianSharpend", "RandHistogramShiftd", + "RandGaussianNoiseD", + "RandGaussianNoiseDict", + "ShiftIntensityD", + "ShiftIntensityDict", + "RandShiftIntensityD", + "RandShiftIntensityDict", + "ScaleIntensityD", + "ScaleIntensityDict", + "RandScaleIntensityD", + "RandScaleIntensityDict", + "NormalizeIntensityD", + "NormalizeIntensityDict", + "ThresholdIntensityD", + "ThresholdIntensityDict", + "ScaleIntensityRangeD", + "ScaleIntensityRangeDict", + "AdjustContrastD", + "AdjustContrastDict", + "RandAdjustContrastD", + "RandAdjustContrastDict", + "ScaleIntensityRangePercentilesD", + "ScaleIntensityRangePercentilesDict", + "MaskIntensityD", + "MaskIntensityDict", + "GaussianSmoothD", + "GaussianSmoothDict", + "RandGaussianSmoothD", + "RandGaussianSmoothDict", + "GaussianSharpenD", + "GaussianSharpenDict", + "RandGaussianSharpenD", + "RandGaussianSharpenDict", + "RandHistogramShiftD", + "RandHistogramShiftDict", ] From 47d35d448fc405cbd3129dc977d473410cf9aaf0 Mon Sep 17 00:00:00 2001 From: Rich <33289025+rijobro@users.noreply.github.com> Date: Thu, 7 Jan 2021 12:19:05 +0000 Subject: [PATCH 3/3] add to CONTRIBUTING.md Signed-off-by: Richard Brown <33289025+rijobro@users.noreply.github.com> --- CONTRIBUTING.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b3b553b04a..01a4773b5a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -73,6 +73,13 @@ License information: all source code files should start with this paragraph: ``` +##### Exporting modules + +If you intend for any variables/functions/classes to be available outside of the file with the edited functionality, then: + +- Create or append to the `__all__` variable (in the file in which functionality has been added), and +- Add to the `__init__.py` file. + #### Unit testing MONAI tests are located under `tests/`.