def unpack_coord_spec(spec: Array | tuple) -> tuple[Array, Array]:
# Case: explicit array -> symmetric x=y
if hasattr(spec, "ndim"):
return unpack_coords(spec)
if isinstance(spec, tuple) and len(spec) == 2:
a, b = spec
# Uniform spec: (N, d) or ((Nx, Ny), (dx, dy))
if _is_size_like(a) and _is_scale_like(b):
Nx, Ny = unpack_size(a)
dx, dy = unpack_scale(b)
x = dlu.nd_coords(Nx, dx)
y = dlu.nd_coords(Ny, dy)
return x, y
# Explicit (x, y)
if not _is_size_like(a) and not _is_scale_like(b):
return unpack_coords(spec)
raise TypeError(f"unpack_coord_spec: unsupported spec {type(spec)} value={spec}")