Module pyracmon.util

Utility types and functions for internal use.

Expand source code
"""
Utility types and functions for internal use.
"""
from collections.abc import Mapping, Sequence, Callable
from typing import Any, Union, TypeVar
try:
    from typing import TypeAlias
except:
    from typing_extensions import TypeAlias


T = TypeVar('T')


#----------------------------------------------------------------
# Utility Types
#----------------------------------------------------------------
Qualifier: TypeAlias = Callable[[str], str]

PKS = Union[Any, dict[str, Any]]
"""Primary key(s)."""


#----------------------------------------------------------------
# Utility Functions
#----------------------------------------------------------------
def key_to_index(values: Mapping[str, T], ordered_keys: Sequence[str]) -> dict[int, T]:
    """
    Replace keys of a `dict` with its index in ordered list.

    Args:
        values: A dictionary.
        ordered_keys: Ordered keys.
    Returns:
        New dictionary where keys are replaced.
    """
    def index(k):
        if isinstance(k, int):
            return k
        else:
            return ordered_keys.index(k)

    return {index(k):v for k, v in values.items()}

Global variables

var PKS

Primary key(s).

Functions

def key_to_index(values: collections.abc.Mapping[str, ~T], ordered_keys: collections.abc.Sequence[str]) ‑> dict[int, ~T]

Replace keys of a dict with its index in ordered list.

Args

values
A dictionary.
ordered_keys
Ordered keys.

Returns

New dictionary where keys are replaced.

Expand source code
def key_to_index(values: Mapping[str, T], ordered_keys: Sequence[str]) -> dict[int, T]:
    """
    Replace keys of a `dict` with its index in ordered list.

    Args:
        values: A dictionary.
        ordered_keys: Ordered keys.
    Returns:
        New dictionary where keys are replaced.
    """
    def index(k):
        if isinstance(k, int):
            return k
        else:
            return ordered_keys.index(k)

    return {index(k):v for k, v in values.items()}