dataeval.utils.thresholds.resolve_threshold

dataeval.utils.thresholds.resolve_threshold(value=None)

Convert a ThresholdLike value to a Threshold instance.

Parameters:
value : ThresholdLike or None, default None

The threshold specification:

  • None: default AdaptiveThreshold()

  • str: named threshold with defaults (e.g. "zscore", "modzscore", "iqr", "constant", "adaptive")

  • float: symmetric multiplier for the default method

  • tuple[float | None, float | None]: asymmetric bounds for the default method

  • tuple[str, ThresholdBounds]: named threshold with bounds, e.g. ("zscore", 2.5) or ("iqr", (1.0, 3.0))

  • tuple[str, ThresholdBounds | None, ThresholdLimits]: named threshold with bounds and limit clamping, e.g. ("zscore", (1.0, 3.5), (0.0, 1.0)). Pass None as bounds to use the class defaults.

  • tuple[ThresholdBounds | None, ThresholdLimits]: default threshold with bounds and limit clamping, e.g. (2.5, (0.0, 1.0)) or (None, (0.0, 1.0)) for default multiplier.

  • Threshold: returned as-is

Returns:

A configured Threshold instance.

Return type:

Threshold

Raises:

ValueError – If a threshold type string does not match any registered threshold subclass.

Examples

>>> resolve_threshold()
AdaptiveThreshold({'lower_multiplier': 3.5, 'upper_multiplier': 3.5})
>>> resolve_threshold("zscore")
ZScoreThreshold({'lower_multiplier': 3.0, 'upper_multiplier': 3.0})
>>> resolve_threshold(2.5)
AdaptiveThreshold({'lower_multiplier': 2.5, 'upper_multiplier': 2.5})
>>> resolve_threshold((None, 5.0))
AdaptiveThreshold({'lower_multiplier': None, 'upper_multiplier': 5.0})
>>> resolve_threshold(("zscore", 2.5))
ZScoreThreshold({'lower_multiplier': 2.5, 'upper_multiplier': 2.5})
>>> resolve_threshold(("iqr", (1.0, 3.0)))
IQRThreshold({'lower_multiplier': 1.0, 'upper_multiplier': 3.0})
>>> resolve_threshold(("constant", (0.0, 1.0)))
ConstantThreshold({'lower': 0.0, 'upper': 1.0})
>>> resolve_threshold(IQRThreshold(lower_multiplier=1.0, upper_multiplier=2.0))
IQRThreshold({'lower_multiplier': 1.0, 'upper_multiplier': 2.0})
>>> resolve_threshold(("zscore", 3.0, (0.0, 1.0)))
ZScoreThreshold({'lower_limit': 0.0, 'upper_limit': 1.0, 'lower_multiplier': 3.0, 'upper_multiplier': 3.0})
>>> resolve_threshold(("zscore", (1.0, 3.5), (0.0, 1.0)))
ZScoreThreshold({'lower_limit': 0.0, 'upper_limit': 1.0, 'lower_multiplier': 1.0, 'upper_multiplier': 3.5})
>>> resolve_threshold(("zscore", None, (0.0, 1.0)))
ZScoreThreshold({'lower_limit': 0.0, 'upper_limit': 1.0, 'lower_multiplier': 3.0, 'upper_multiplier': 3.0})
>>> resolve_threshold(("iqr", (1.0, 2.0), (None, 0.9)))
IQRThreshold({'upper_limit': 0.9, 'lower_multiplier': 1.0, 'upper_multiplier': 2.0})
>>> resolve_threshold((None, (0.0, 1.0)))
AdaptiveThreshold({'lower_limit': 0.0, 'upper_limit': 1.0, 'lower_multiplier': 3.5, 'upper_multiplier': 3.5})
>>> resolve_threshold((2.5, (0.0, 1.0)))
AdaptiveThreshold({'lower_limit': 0.0, 'upper_limit': 1.0, 'lower_multiplier': 2.5, 'upper_multiplier': 2.5})