Source code for kspecdr.utils.fiber

"""Fiber-related helpers."""

from typing import Any, Dict

import numpy as np


[docs] def parse_fib_overrides(args: Dict[str, Any]) -> Dict[int, str]: """ Parse FIB<no> arguments into a fiber type override map. Returns ------- dict Mapping of 1-based fiber number to single-character type code. """ overrides: Dict[int, str] = {} for key, value in args.items(): if not isinstance(key, str) or not key.startswith("FIB"): continue suffix = key[3:] if not suffix.isdigit(): continue fibno = int(suffix) if fibno <= 0: continue if value is None: continue ftype = str(value).strip() if not ftype: continue overrides[fibno] = ftype[0].upper() return overrides
[docs] def get_override_from_args(args: Dict[str, Any]) -> Dict[int, str]: """ Return cached overrides from args or parse and cache them. """ if args is None: return {} overrides = args.get("_FIB_TYPE_OVERRIDES") if overrides is None: overrides = parse_fib_overrides(args) args["_FIB_TYPE_OVERRIDES"] = overrides return overrides
[docs] def apply_fiber_overrides( fiber_types: np.ndarray, overrides: Dict[int, str] ) -> np.ndarray: """ Apply 1-based fiber overrides to a fiber type array. """ if fiber_types is None or not overrides: return fiber_types for fibno, ftype in overrides.items(): idx = fibno - 1 if 0 <= idx < len(fiber_types): fiber_types[idx] = ftype return fiber_types