diff --git a/ignite/contrib/metrics/average_precision.py b/ignite/contrib/metrics/average_precision.py index d90f7e59ee7b..dc2b197156ca 100644 --- a/ignite/contrib/metrics/average_precision.py +++ b/ignite/contrib/metrics/average_precision.py @@ -5,7 +5,7 @@ from ignite.metrics import EpochMetric -def average_precision_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor): +def average_precision_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor) -> float: try: from sklearn.metrics import average_precision_score except ImportError: @@ -45,7 +45,7 @@ def activated_output_transform(output): """ - def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False): + def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False) -> None: super(AveragePrecision, self).__init__( average_precision_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn ) diff --git a/ignite/contrib/metrics/gpu_info.py b/ignite/contrib/metrics/gpu_info.py index 16a39c684bb7..06af656ae343 100644 --- a/ignite/contrib/metrics/gpu_info.py +++ b/ignite/contrib/metrics/gpu_info.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import warnings -from typing import Tuple, Union +from typing import Any, Dict, List, Tuple, Union import torch @@ -34,7 +34,7 @@ class GpuInfo(Metric): event_name=Events.ITERATION_COMPLETED) """ - def __init__(self): + def __init__(self) -> None: try: import pynvml except ImportError: @@ -52,20 +52,20 @@ def __init__(self): self.nvsmi = nvidia_smi.getInstance() super(GpuInfo, self).__init__() - def reset(self): + def reset(self) -> None: pass - def update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: pass - def compute(self): + def compute(self) -> List[Dict[str, Any]]: data = self.nvsmi.DeviceQuery("memory.used, memory.total, utilization.gpu") if len(data) == 0 or ("gpu" not in data): warnings.warn("No GPU information available") return [] return data["gpu"] - def completed(self, engine: Engine, name: str): + def completed(self, engine: Engine, name: str) -> None: data = self.compute() if len(data) < 1: warnings.warn("No GPU information available") @@ -104,5 +104,8 @@ def completed(self, engine: Engine, name: str): # Do not set GPU utilization information pass - def attach(self, engine: Engine, name: str = "gpu", event_name: Union[str, EventEnum] = Events.ITERATION_COMPLETED): + # TODO: see issue https://github.com/pytorch/ignite/issues/1405 + def attach( # type: ignore + self, engine: Engine, name: str = "gpu", event_name: Union[str, EventEnum] = Events.ITERATION_COMPLETED + ) -> None: engine.add_event_handler(event_name, self.completed, name) diff --git a/ignite/contrib/metrics/precision_recall_curve.py b/ignite/contrib/metrics/precision_recall_curve.py index 3138bc94c12f..95016a2eb16d 100644 --- a/ignite/contrib/metrics/precision_recall_curve.py +++ b/ignite/contrib/metrics/precision_recall_curve.py @@ -1,11 +1,11 @@ -from typing import Callable +from typing import Any, Callable, Tuple import torch from ignite.metrics import EpochMetric -def precision_recall_curve_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor): +def precision_recall_curve_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor) -> Tuple[Any, Any, Any]: try: from sklearn.metrics import precision_recall_curve except ImportError: @@ -46,7 +46,7 @@ def activated_output_transform(output): """ - def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False): + def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False) -> None: super(PrecisionRecallCurve, self).__init__( precision_recall_curve_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn ) diff --git a/ignite/contrib/metrics/regression/_base.py b/ignite/contrib/metrics/regression/_base.py index 58b935a352de..b25e574c05be 100644 --- a/ignite/contrib/metrics/regression/_base.py +++ b/ignite/contrib/metrics/regression/_base.py @@ -7,7 +7,7 @@ from ignite.metrics.metric import reinit__is_reduced -def _check_output_shapes(output: Tuple[torch.Tensor, torch.Tensor]): +def _check_output_shapes(output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output if y_pred.shape != y.shape: raise ValueError("Input data shapes should be the same, but given {} and {}".format(y_pred.shape, y.shape)) @@ -21,7 +21,7 @@ def _check_output_shapes(output: Tuple[torch.Tensor, torch.Tensor]): raise ValueError("Input y should have shape (N,) or (N, 1), but given {}".format(y.shape)) -def _check_output_types(output: Tuple[torch.Tensor, torch.Tensor]): +def _check_output_types(output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output if y_pred.dtype not in (torch.float16, torch.float32, torch.float64): raise TypeError("Input y_pred dtype should be float 16, 32 or 64, but given {}".format(y_pred.dtype)) @@ -36,7 +36,7 @@ class _BaseRegression(Metric): # method `_update`. @reinit__is_reduced - def update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: _check_output_shapes(output) _check_output_types(output) y_pred, y = output[0].detach(), output[1].detach() @@ -50,7 +50,7 @@ def update(self, output: Tuple[torch.Tensor, torch.Tensor]): self._update((y_pred, y)) @abstractmethod - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: pass @@ -61,14 +61,14 @@ class _BaseRegressionEpoch(EpochMetric): def __init__( self, compute_fn: Callable, output_transform: Callable = lambda x: x, check_compute_fn: bool = True, - ): + ) -> None: super(_BaseRegressionEpoch, self).__init__( compute_fn=compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn ) - def _check_type(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _check_type(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: _check_output_types(output) super(_BaseRegressionEpoch, self)._check_type(output) - def _check_shape(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _check_shape(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: _check_output_shapes(output) diff --git a/ignite/contrib/metrics/regression/canberra_metric.py b/ignite/contrib/metrics/regression/canberra_metric.py index b44fee22eff4..6616fa023acc 100644 --- a/ignite/contrib/metrics/regression/canberra_metric.py +++ b/ignite/contrib/metrics/regression/canberra_metric.py @@ -26,19 +26,18 @@ class CanberraMetric(_BaseRegression): def __init__( self, output_transform: Callable = lambda x: x, device: Union[str, torch.device] = torch.device("cpu") - ): - self._sum_of_errors = None + ) -> None: super(CanberraMetric, self).__init__(output_transform, device) @reinit__is_reduced - def reset(self): + def reset(self) -> None: self._sum_of_errors = torch.tensor(0.0, device=self._device) - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output errors = torch.abs(y - y_pred) / (torch.abs(y_pred) + torch.abs(y)) self._sum_of_errors += torch.sum(errors).to(self._device) @sync_all_reduce("_sum_of_errors") - def compute(self): + def compute(self) -> float: return self._sum_of_errors.item() diff --git a/ignite/contrib/metrics/regression/fractional_absolute_error.py b/ignite/contrib/metrics/regression/fractional_absolute_error.py index b1dcd9ec0532..f000b10f2688 100644 --- a/ignite/contrib/metrics/regression/fractional_absolute_error.py +++ b/ignite/contrib/metrics/regression/fractional_absolute_error.py @@ -22,19 +22,19 @@ class FractionalAbsoluteError(_BaseRegression): __ https://arxiv.org/abs/1809.03006 """ - def reset(self): + def reset(self) -> None: self._sum_of_errors = 0.0 self._num_examples = 0 - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output errors = 2 * torch.abs(y.view_as(y_pred) - y_pred) / (torch.abs(y_pred) + torch.abs(y.view_as(y_pred))) self._sum_of_errors += torch.sum(errors).item() self._num_examples += y.shape[0] - def compute(self): + def compute(self) -> float: if self._num_examples == 0: raise NotComputableError( - "FractionalAbsoluteError must have at least " "one example before it can be computed." + "FractionalAbsoluteError must have at least one example before it can be computed." ) return self._sum_of_errors / self._num_examples diff --git a/ignite/contrib/metrics/regression/fractional_bias.py b/ignite/contrib/metrics/regression/fractional_bias.py index 10e78b3b3e24..145c18ee8873 100644 --- a/ignite/contrib/metrics/regression/fractional_bias.py +++ b/ignite/contrib/metrics/regression/fractional_bias.py @@ -23,17 +23,17 @@ class FractionalBias(_BaseRegression): """ - def reset(self): + def reset(self) -> None: self._sum_of_errors = 0.0 self._num_examples = 0 - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output errors = 2 * (y.view_as(y_pred) - y_pred) / (y_pred + y.view_as(y_pred)) self._sum_of_errors += torch.sum(errors).item() self._num_examples += y.shape[0] - def compute(self): + def compute(self) -> float: if self._num_examples == 0: raise NotComputableError("FractionalBias must have at least one example before it can be computed.") return self._sum_of_errors / self._num_examples diff --git a/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py b/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py index 92cb057a7db1..ef1ff6ff5012 100644 --- a/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py +++ b/ignite/contrib/metrics/regression/geometric_mean_absolute_error.py @@ -1,4 +1,4 @@ -from typing import Tuple +from typing import Tuple, Union, cast import torch @@ -22,19 +22,19 @@ class GeometricMeanAbsoluteError(_BaseRegression): __ https://arxiv.org/abs/1809.03006 """ - def reset(self): - self._sum_of_errors = 0.0 + def reset(self) -> None: + self._sum_of_errors = 0.0 # type: Union[float, torch.Tensor] self._num_examples = 0 - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output errors = torch.log(torch.abs(y.view_as(y_pred) - y_pred)) self._sum_of_errors += torch.sum(errors) self._num_examples += y.shape[0] - def compute(self): + def compute(self) -> float: if self._num_examples == 0: raise NotComputableError( - "GeometricMeanAbsoluteError must have at " "least one example before it can be computed." + "GeometricMeanAbsoluteError must have at least one example before it can be computed." ) - return torch.exp(self._sum_of_errors / self._num_examples).item() + return torch.exp(cast(torch.Tensor, self._sum_of_errors) / self._num_examples).item() diff --git a/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py b/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py index 043f60956854..2955dba149bd 100644 --- a/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py +++ b/ignite/contrib/metrics/regression/geometric_mean_relative_absolute_error.py @@ -1,4 +1,4 @@ -from typing import Tuple +from typing import Tuple, Union, cast import torch @@ -24,12 +24,12 @@ class GeometricMeanRelativeAbsoluteError(_BaseRegression): """ - def reset(self): - self._sum_y = 0.0 + def reset(self) -> None: + self._sum_y = 0.0 # type: Union[float, torch.Tensor] self._num_examples = 0 - self._sum_of_errors = 0.0 + self._sum_of_errors = 0.0 # type: Union[float, torch.Tensor] - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output self._sum_y += y.sum() self._num_examples += y.shape[0] @@ -38,9 +38,9 @@ def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): denominator = torch.abs(y.view_as(y_pred) - y_mean) self._sum_of_errors += torch.log(numerator / denominator).sum() - def compute(self): + def compute(self) -> float: if self._num_examples == 0: raise NotComputableError( - "GeometricMeanRelativeAbsoluteError must have at least " "one example before it can be computed." + "GeometricMeanRelativeAbsoluteError must have at least one example before it can be computed." ) - return torch.exp(torch.mean(self._sum_of_errors / self._num_examples)).item() + return torch.exp(torch.mean(cast(torch.Tensor, self._sum_of_errors) / self._num_examples)).item() diff --git a/ignite/contrib/metrics/regression/manhattan_distance.py b/ignite/contrib/metrics/regression/manhattan_distance.py index 6c3456e62eb8..444adc4b2e06 100644 --- a/ignite/contrib/metrics/regression/manhattan_distance.py +++ b/ignite/contrib/metrics/regression/manhattan_distance.py @@ -26,18 +26,17 @@ class ManhattanDistance(_BaseRegression): def __init__( self, output_transform: Callable = lambda x: x, device: Union[str, torch.device] = torch.device("cpu") ): - self._sum_of_errors = None super(ManhattanDistance, self).__init__(output_transform, device) @reinit__is_reduced - def reset(self): + def reset(self) -> None: self._sum_of_errors = torch.tensor(0.0, device=self._device) - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output errors = torch.abs(y - y_pred) self._sum_of_errors += torch.sum(errors).to(self._device) @sync_all_reduce("_sum_of_errors") - def compute(self): + def compute(self) -> float: return self._sum_of_errors.item() diff --git a/ignite/contrib/metrics/regression/maximum_absolute_error.py b/ignite/contrib/metrics/regression/maximum_absolute_error.py index a866a5f22bb7..9d8acdf319c6 100644 --- a/ignite/contrib/metrics/regression/maximum_absolute_error.py +++ b/ignite/contrib/metrics/regression/maximum_absolute_error.py @@ -23,16 +23,16 @@ class MaximumAbsoluteError(_BaseRegression): """ - def reset(self): - self._max_of_absolute_errors = -1 + def reset(self) -> None: + self._max_of_absolute_errors = -1 # type: float - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output mae = torch.abs(y_pred - y.view_as(y_pred)).max().item() if self._max_of_absolute_errors < mae: self._max_of_absolute_errors = mae - def compute(self): + def compute(self) -> float: if self._max_of_absolute_errors < 0: raise NotComputableError("MaximumAbsoluteError must have at least one example before it can be computed.") return self._max_of_absolute_errors diff --git a/ignite/contrib/metrics/regression/mean_absolute_relative_error.py b/ignite/contrib/metrics/regression/mean_absolute_relative_error.py index 05f8da5ab549..310aebd64756 100644 --- a/ignite/contrib/metrics/regression/mean_absolute_relative_error.py +++ b/ignite/contrib/metrics/regression/mean_absolute_relative_error.py @@ -23,11 +23,11 @@ class MeanAbsoluteRelativeError(_BaseRegression): """ - def reset(self): + def reset(self) -> None: self._sum_of_absolute_relative_errors = 0.0 self._num_samples = 0 - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output if (y == 0).any(): raise NotComputableError("The ground truth has 0.") @@ -35,9 +35,9 @@ def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): self._sum_of_absolute_relative_errors += torch.sum(absolute_error).item() self._num_samples += y.size()[0] - def compute(self): + def compute(self) -> float: if self._num_samples == 0: raise NotComputableError( - "MeanAbsoluteRelativeError must have at least" "one sample before it can be computed." + "MeanAbsoluteRelativeError must have at least one sample before it can be computed." ) return self._sum_of_absolute_relative_errors / self._num_samples diff --git a/ignite/contrib/metrics/regression/mean_error.py b/ignite/contrib/metrics/regression/mean_error.py index 35761d668fb5..35401fac8c3a 100644 --- a/ignite/contrib/metrics/regression/mean_error.py +++ b/ignite/contrib/metrics/regression/mean_error.py @@ -23,17 +23,17 @@ class MeanError(_BaseRegression): """ - def reset(self): + def reset(self) -> None: self._sum_of_errors = 0.0 self._num_examples = 0 - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output errors = y.view_as(y_pred) - y_pred self._sum_of_errors += torch.sum(errors).item() self._num_examples += y.shape[0] - def compute(self): + def compute(self) -> float: if self._num_examples == 0: raise NotComputableError("MeanError must have at least one example before it can be computed.") return self._sum_of_errors / self._num_examples diff --git a/ignite/contrib/metrics/regression/mean_normalized_bias.py b/ignite/contrib/metrics/regression/mean_normalized_bias.py index 2514dd2e5ce1..406ab43010de 100644 --- a/ignite/contrib/metrics/regression/mean_normalized_bias.py +++ b/ignite/contrib/metrics/regression/mean_normalized_bias.py @@ -23,11 +23,11 @@ class MeanNormalizedBias(_BaseRegression): """ - def reset(self): + def reset(self) -> None: self._sum_of_errors = 0.0 self._num_examples = 0 - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output if (y == 0).any(): @@ -37,7 +37,7 @@ def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): self._sum_of_errors += torch.sum(errors).item() self._num_examples += y.shape[0] - def compute(self): + def compute(self) -> float: if self._num_examples == 0: raise NotComputableError("MeanNormalizedBias must have at least one example before it can be computed.") return self._sum_of_errors / self._num_examples diff --git a/ignite/contrib/metrics/regression/median_absolute_error.py b/ignite/contrib/metrics/regression/median_absolute_error.py index 3551020d0881..f5acdae580fe 100644 --- a/ignite/contrib/metrics/regression/median_absolute_error.py +++ b/ignite/contrib/metrics/regression/median_absolute_error.py @@ -5,7 +5,7 @@ from ignite.contrib.metrics.regression._base import _BaseRegressionEpoch -def median_absolute_error_compute_fn(y_pred: torch.Tensor, y: torch.Tensor): +def median_absolute_error_compute_fn(y_pred: torch.Tensor, y: torch.Tensor) -> float: e = torch.abs(y.view_as(y_pred) - y_pred) return torch.median(e).item() diff --git a/ignite/contrib/metrics/regression/median_absolute_percentage_error.py b/ignite/contrib/metrics/regression/median_absolute_percentage_error.py index 9b048cc9240c..feaa912b0e99 100644 --- a/ignite/contrib/metrics/regression/median_absolute_percentage_error.py +++ b/ignite/contrib/metrics/regression/median_absolute_percentage_error.py @@ -5,7 +5,7 @@ from ignite.contrib.metrics.regression._base import _BaseRegressionEpoch -def median_absolute_percentage_error_compute_fn(y_pred: torch.Tensor, y: torch.Tensor): +def median_absolute_percentage_error_compute_fn(y_pred: torch.Tensor, y: torch.Tensor) -> float: e = torch.abs(y.view_as(y_pred) - y_pred) / torch.abs(y.view_as(y_pred)) return 100.0 * torch.median(e).item() diff --git a/ignite/contrib/metrics/regression/median_relative_absolute_error.py b/ignite/contrib/metrics/regression/median_relative_absolute_error.py index a45889ef9ea2..618d740ff770 100644 --- a/ignite/contrib/metrics/regression/median_relative_absolute_error.py +++ b/ignite/contrib/metrics/regression/median_relative_absolute_error.py @@ -5,7 +5,7 @@ from ignite.contrib.metrics.regression._base import _BaseRegressionEpoch -def median_relative_absolute_error_compute_fn(y_pred: torch.Tensor, y: torch.Tensor): +def median_relative_absolute_error_compute_fn(y_pred: torch.Tensor, y: torch.Tensor) -> float: e = torch.abs(y.view_as(y_pred) - y_pred) / torch.abs(y.view_as(y_pred) - torch.mean(y)) return torch.median(e).item() diff --git a/ignite/contrib/metrics/regression/r2_score.py b/ignite/contrib/metrics/regression/r2_score.py index 2610bac946db..0015da4f6fd5 100644 --- a/ignite/contrib/metrics/regression/r2_score.py +++ b/ignite/contrib/metrics/regression/r2_score.py @@ -24,20 +24,16 @@ class R2Score(_BaseRegression): def __init__( self, output_transform: Callable = lambda x: x, device: Union[str, torch.device] = torch.device("cpu"), ): - self._num_examples = None - self._sum_of_errors = None - self._y_sq_sum = None - self._y_sum = None super(R2Score, self).__init__(output_transform, device) @reinit__is_reduced - def reset(self): + def reset(self) -> None: self._num_examples = 0 self._sum_of_errors = torch.tensor(0.0, device=self._device) self._y_sq_sum = torch.tensor(0.0, device=self._device) self._y_sum = torch.tensor(0.0, device=self._device) - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output self._num_examples += y.shape[0] self._sum_of_errors += torch.sum(torch.pow(y_pred - y, 2)).to(self._device) @@ -46,7 +42,7 @@ def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): self._y_sq_sum += torch.sum(torch.pow(y, 2)).to(self._device) @sync_all_reduce("_num_examples", "_sum_of_errors", "_y_sq_sum", "_y_sum") - def compute(self): + def compute(self) -> float: if self._num_examples == 0: raise NotComputableError("R2Score must have at least one example before it can be computed.") return 1 - self._sum_of_errors.item() / (self._y_sq_sum.item() - (self._y_sum.item() ** 2) / self._num_examples) diff --git a/ignite/contrib/metrics/regression/wave_hedges_distance.py b/ignite/contrib/metrics/regression/wave_hedges_distance.py index c56e93d97344..413f2cc34b0b 100644 --- a/ignite/contrib/metrics/regression/wave_hedges_distance.py +++ b/ignite/contrib/metrics/regression/wave_hedges_distance.py @@ -20,13 +20,13 @@ class WaveHedgesDistance(_BaseRegression): __ https://arxiv.org/abs/1809.03006 """ - def reset(self): + def reset(self) -> None: self._sum_of_errors = 0.0 - def _update(self, output: Tuple[torch.Tensor, torch.Tensor]): + def _update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output errors = torch.abs(y.view_as(y_pred) - y_pred) / torch.max(y_pred, y.view_as(y_pred)) self._sum_of_errors += torch.sum(errors).item() - def compute(self): + def compute(self) -> float: return self._sum_of_errors diff --git a/ignite/contrib/metrics/roc_auc.py b/ignite/contrib/metrics/roc_auc.py index d2230daaf58b..c54492be862f 100644 --- a/ignite/contrib/metrics/roc_auc.py +++ b/ignite/contrib/metrics/roc_auc.py @@ -1,11 +1,11 @@ -from typing import Callable +from typing import Any, Callable, Tuple import torch from ignite.metrics import EpochMetric -def roc_auc_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor): +def roc_auc_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor) -> float: try: from sklearn.metrics import roc_auc_score except ImportError: @@ -16,7 +16,7 @@ def roc_auc_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor): return roc_auc_score(y_true, y_pred) -def roc_auc_curve_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor): +def roc_auc_curve_compute_fn(y_preds: torch.Tensor, y_targets: torch.Tensor) -> Tuple[Any, Any, Any]: try: from sklearn.metrics import roc_curve except ImportError: @@ -57,7 +57,7 @@ def activated_output_transform(output): """ - def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False): + def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False) -> None: super(ROC_AUC, self).__init__( roc_auc_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn ) @@ -93,7 +93,7 @@ def activated_output_transform(output): """ - def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False): + def __init__(self, output_transform: Callable = lambda x: x, check_compute_fn: bool = False) -> None: super(RocCurve, self).__init__( roc_auc_curve_compute_fn, output_transform=output_transform, check_compute_fn=check_compute_fn ) diff --git a/ignite/metrics/epoch_metric.py b/ignite/metrics/epoch_metric.py index 73f9a7343242..0f95ae0b543f 100644 --- a/ignite/metrics/epoch_metric.py +++ b/ignite/metrics/epoch_metric.py @@ -1,5 +1,5 @@ import warnings -from typing import Callable, List, Sequence, Union, cast +from typing import Callable, List, Sequence, Tuple, Union, cast import torch @@ -69,7 +69,7 @@ def reset(self) -> None: self._predictions = [] # type: List[torch.Tensor] self._targets = [] # type: List[torch.Tensor] - def _check_shape(self, output: Sequence[torch.Tensor]) -> None: + def _check_shape(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output if y_pred.ndimension() not in (1, 2): raise ValueError("Predictions should be of shape (batch_size, n_classes) or (batch_size, ).") @@ -81,7 +81,7 @@ def _check_shape(self, output: Sequence[torch.Tensor]) -> None: if not torch.equal(y ** 2, y): raise ValueError("Targets should be binary (0 or 1).") - def _check_type(self, output: Sequence[torch.Tensor]) -> None: + def _check_type(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: y_pred, y = output if len(self._predictions) < 1: return @@ -99,7 +99,7 @@ def _check_type(self, output: Sequence[torch.Tensor]) -> None: ) @reinit__is_reduced - def update(self, output: Sequence[torch.Tensor]) -> None: + def update(self, output: Tuple[torch.Tensor, torch.Tensor]) -> None: self._check_shape(output) y_pred, y = output[0].detach(), output[1].detach() diff --git a/mypy.ini b/mypy.ini index 699768e7680d..bd6d15eabfe1 100644 --- a/mypy.ini +++ b/mypy.ini @@ -3,7 +3,11 @@ files = ignite pretty = True show_error_codes = True -[mypy-ignite.contrib.*] +[mypy-ignite.contrib.handlers.*] + +ignore_errors = True + +[mypy-ignite.contrib.engines.*] ignore_errors = True @@ -13,5 +17,11 @@ ignore_missing_imports = True [mypy-numpy.*] ignore_missing_imports = True +[mypy-sklearn.*] +ignore_missing_imports = True + +[mypy-pynvml.*] +ignore_missing_imports = True + [mypy-torch_xla.*] ignore_missing_imports = True