跳转至

Factory

danling.metrics.factory

binary_metrics

Python
binary_metrics(
    *metric_funcs: MetricFunc,
    mode: str = "global",
    ignore_index: int | None = -100,
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics
)

Build task-standard binary metrics.

Parameters:

Name Type Description Default

mode

str

"global" for exact dataset-level metrics, "stream" for streaming batch-averaged metrics.

'global'

*metric_funcs

MetricFunc

Custom metric functions. When provided, defaults are not added.

()

ignore_index

int | None

Value in target to ignore.

-100

distributed

bool

Whether global metrics should synchronise across processes.

True

device

Optional storage device for global artifacts.

None

preprocess

Callable | None

Optional preprocess override passed to the metrics constructor.

None

**metrics

Custom metrics as MetricFunc descriptors.

{}
Source code in danling/metrics/factory.py
Python
def binary_metrics(
    *metric_funcs: MetricFunc,
    mode: str = "global",
    ignore_index: int | None = -100,
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics,
):
    """
    Build task-standard binary metrics.

    Args:
        mode: `"global"` for exact dataset-level metrics, `"stream"` for streaming batch-averaged metrics.
        *metric_funcs: Custom metric functions. When provided, defaults are not added.
        ignore_index: Value in target to ignore.
        distributed: Whether global metrics should synchronise across processes.
        device: Optional storage device for global artifacts.
        preprocess: Optional preprocess override passed to the metrics constructor.
        **metrics: Custom metrics as MetricFunc descriptors.
    """
    lazy_import.check()
    mode = _normalize_mode(mode)

    default_metric_funcs = [
        binary_auroc(ignore_index=ignore_index),
        binary_auprc(ignore_index=ignore_index),
        binary_accuracy(ignore_index=ignore_index),
        binary_f1(ignore_index=ignore_index),
        mcc(task="binary", ignore_index=ignore_index),
    ]
    return _build_metrics(
        mode,
        default_metric_funcs=default_metric_funcs,
        custom_metrics=metrics,
        preprocess=partial(preprocess_binary, ignore_index=ignore_index),
        custom_preprocess=preprocess,
        metric_funcs=metric_funcs,
        distributed=distributed,
        device=device,
    )

multiclass_metrics

Python
multiclass_metrics(
    num_classes: int,
    average: str = "macro",
    *metric_funcs: MetricFunc,
    mode: str = "global",
    ignore_index: int | None = -100,
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics
)

Build task-standard multiclass metrics.

Parameters:

Name Type Description Default

num_classes

int

Number of classes in the task.

required

average

str

Averaging mode for multiclass metrics.

'macro'

mode

str

"global" or "stream".

'global'

*metric_funcs

MetricFunc

Custom metric functions. When provided, defaults are not added.

()

ignore_index

int | None

Value in target to ignore.

-100
Source code in danling/metrics/factory.py
Python
def multiclass_metrics(
    num_classes: int,
    average: str = "macro",
    *metric_funcs: MetricFunc,
    mode: str = "global",
    ignore_index: int | None = -100,
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics,
):
    """
    Build task-standard multiclass metrics.

    Args:
        num_classes: Number of classes in the task.
        average: Averaging mode for multiclass metrics.
        mode: `"global"` or `"stream"`.
        *metric_funcs: Custom metric functions. When provided, defaults are not added.
        ignore_index: Value in target to ignore.
    """
    lazy_import.check()
    mode = _normalize_mode(mode)

    default_metric_funcs = [
        multiclass_auroc(num_classes=num_classes, average=average, ignore_index=ignore_index),
        multiclass_auprc(num_classes=num_classes, average=average, ignore_index=ignore_index),
        multiclass_accuracy(num_classes=num_classes, average=average, ignore_index=ignore_index),
        multiclass_f1_score(num_classes=num_classes, average=average, ignore_index=ignore_index),
        mcc(task="multiclass", num_classes=num_classes, ignore_index=ignore_index),
    ]
    return _build_metrics(
        mode,
        default_metric_funcs=default_metric_funcs,
        custom_metrics=metrics,
        preprocess=partial(preprocess_multiclass, num_classes=num_classes, ignore_index=ignore_index),
        custom_preprocess=preprocess,
        metric_funcs=metric_funcs,
        distributed=distributed,
        device=device,
    )

multilabel_metrics

Python
multilabel_metrics(
    num_labels: int,
    average: str = "macro",
    *metric_funcs: MetricFunc,
    mode: str = "global",
    ignore_index: int | None = -100,
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics
)

Build task-standard multilabel metrics.

Parameters:

Name Type Description Default

num_labels

int

Number of labels in the task.

required

average

str

Averaging mode for multilabel metrics.

'macro'

mode

str

"global" or "stream".

'global'

*metric_funcs

MetricFunc

Custom metric functions. When provided, defaults are not added.

()

ignore_index

int | None

Value in target to ignore.

-100
Source code in danling/metrics/factory.py
Python
def multilabel_metrics(
    num_labels: int,
    average: str = "macro",
    *metric_funcs: MetricFunc,
    mode: str = "global",
    ignore_index: int | None = -100,
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics,
):
    """
    Build task-standard multilabel metrics.

    Args:
        num_labels: Number of labels in the task.
        average: Averaging mode for multilabel metrics.
        mode: `"global"` or `"stream"`.
        *metric_funcs: Custom metric functions. When provided, defaults are not added.
        ignore_index: Value in target to ignore.
    """
    lazy_import.check()
    mode = _normalize_mode(mode)

    default_metric_funcs = [
        multilabel_auroc(num_labels=num_labels, average=average, ignore_index=ignore_index),
        multilabel_auprc(num_labels=num_labels, average=average, ignore_index=ignore_index),
        multilabel_accuracy(num_labels=num_labels, average=average, ignore_index=ignore_index),
        multilabel_f1_score(num_labels=num_labels, average=average, ignore_index=ignore_index),
        mcc(task="multilabel", num_labels=num_labels, ignore_index=ignore_index),
    ]
    return _build_metrics(
        mode,
        default_metric_funcs=default_metric_funcs,
        custom_metrics=metrics,
        preprocess=partial(preprocess_multilabel, num_labels=num_labels, ignore_index=ignore_index),
        custom_preprocess=preprocess,
        metric_funcs=metric_funcs,
        distributed=distributed,
        device=device,
    )

regression_metrics

Python
regression_metrics(
    num_outputs: int = 1,
    ignore_nan: bool = True,
    *metric_funcs: MetricFunc,
    mode: str = "global",
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics
)

Build task-standard regression metrics.

Parameters:

Name Type Description Default

num_outputs

int

Number of regression outputs.

1

ignore_nan

bool

Whether to mask NaNs in targets.

True

mode

str

"global" or "stream".

'global'

*metric_funcs

MetricFunc

Custom metric functions. When provided, defaults are not added.

()
Source code in danling/metrics/factory.py
Python
def regression_metrics(
    num_outputs: int = 1,
    ignore_nan: bool = True,
    *metric_funcs: MetricFunc,
    mode: str = "global",
    distributed: bool = True,
    device=None,
    preprocess: Callable | None = None,
    **metrics,
):
    """
    Build task-standard regression metrics.

    Args:
        num_outputs: Number of regression outputs.
        ignore_nan: Whether to mask NaNs in targets.
        mode: `"global"` or `"stream"`.
        *metric_funcs: Custom metric functions. When provided, defaults are not added.
    """
    lazy_import.check()
    mode = _normalize_mode(mode)

    default_metric_funcs = [
        pearson(),
        spearman(),
        r2_score(),
        mse(num_outputs=num_outputs),
        rmse(num_outputs=num_outputs),
    ]
    return _build_metrics(
        mode,
        default_metric_funcs=default_metric_funcs,
        custom_metrics=metrics,
        preprocess=partial(preprocess_regression, num_outputs=num_outputs, ignore_nan=ignore_nan),
        custom_preprocess=preprocess,
        metric_funcs=metric_funcs,
        distributed=distributed,
        device=device,
    )