Source code for sigima.proc.title_formatting
# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
"""
Title formatting system for computation results
-----------------------------------------------
This module provides a configurable title formatting system for computation results.
It allows different applications (Sigima vs DataLab) to use different title formatting
strategies while maintaining compatibility.
"""
from __future__ import annotations
from typing import Protocol, runtime_checkable
__all__ = [
"PlaceholderTitleFormatter",
"SimpleTitleFormatter",
"TitleFormatter",
"get_default_title_formatter",
"set_default_title_formatter",
]
[docs]
@runtime_checkable
class TitleFormatter(Protocol):
"""Protocol for title formatting strategies used in computation functions.
This protocol allows different title formatting approaches:
- Simple descriptive titles for Sigima-only usage
- Placeholder-based titles for DataLab integration
- Custom formatting for specific use cases
"""
[docs]
def format_1_to_1_title(self, name: str, suffix: str | None = None) -> str:
"""Format title for 1-to-1 computation (single input → single output).
Args:
name: Name of the computation function
suffix: Optional suffix to add to the title
Returns:
Formatted title string
"""
[docs]
def format_n_to_1_title(
self, name: str, n_inputs: int, suffix: str | None = None
) -> str:
"""Format title for n-to-1 computation (multiple inputs → single output).
Args:
name: Name of the computation function
n_inputs: Number of input objects
suffix: Optional suffix to add to the title
Returns:
Formatted title string
"""
[docs]
def format_2_to_1_title(self, name: str, suffix: str | None = None) -> str:
"""Format title for 2-to-1 computation (two inputs → single output).
Args:
name: Name of the computation function
suffix: Optional suffix to add to the title
Returns:
Formatted title string
"""
[docs]
class SimpleTitleFormatter:
"""Simple descriptive title formatter for Sigima-only usage.
Creates human-readable titles without placeholders, suitable for
standalone Sigima usage where object relationships are less critical.
"""
[docs]
def format_1_to_1_title(self, name: str, suffix: str | None = None) -> str:
"""Format title for 1-to-1 computation."""
# Convert function names to human-readable format
readable_name = name.replace("_", " ").title()
base_title = f"{readable_name} Result"
if suffix:
base_title += f" ({suffix})"
return base_title
[docs]
def format_n_to_1_title(
self, name: str, n_inputs: int, suffix: str | None = None
) -> str:
"""Format title for n-to-1 computation."""
readable_name = name.replace("_", " ").title()
base_title = f"{readable_name} of {n_inputs} Objects"
if suffix:
base_title += f" ({suffix})"
return base_title
[docs]
def format_2_to_1_title(self, name: str, suffix: str | None = None) -> str:
"""Format title for 2-to-1 computation."""
if len(name) == 1: # This is an operator
base_title = f"Binary Operation {name}"
else:
readable_name = name.replace("_", " ").title()
base_title = f"{readable_name} Result"
if suffix:
base_title += f" ({suffix})"
return base_title
[docs]
class PlaceholderTitleFormatter:
"""Placeholder-based title formatter compatible with DataLab.
Creates titles with placeholders that can be resolved later by DataLab's
patch_title_with_ids() function.
"""
[docs]
def format_1_to_1_title(self, name: str, suffix: str | None = None) -> str:
"""Format title for 1-to-1 computation with placeholder."""
title = f"{name}({{0}})"
if suffix:
title += "|" + suffix
return title
[docs]
def format_n_to_1_title(
self, name: str, n_inputs: int, suffix: str | None = None
) -> str:
"""Format title for n-to-1 computation with placeholders."""
placeholders = ", ".join(f"{{{i}}}" for i in range(n_inputs))
title = f"{name}({placeholders})"
if suffix:
title += "|" + suffix
return title
[docs]
def format_2_to_1_title(self, name: str, suffix: str | None = None) -> str:
"""Format title for 2-to-1 computation with placeholders."""
if len(name) == 1: # This is an operator
title = f"{{0}}{name}{{1}}"
else:
title = f"{name}({{0}}, {{1}})"
if suffix:
title += "|" + suffix
return title
# Global default title formatter
_default_title_formatter: TitleFormatter = SimpleTitleFormatter()
[docs]
def get_default_title_formatter() -> TitleFormatter:
"""Get the current default title formatter.
Returns:
Current default title formatter
"""
return _default_title_formatter
[docs]
def set_default_title_formatter(formatter: TitleFormatter) -> None:
"""Set the default title formatter.
Args:
formatter: Title formatter to use as default
"""
global _default_title_formatter # pylint: disable=global-statement
_default_title_formatter = formatter