in src/lighteval/utils/utils.py [0:0]
def flatten_dict(nested: dict, sep="/") -> dict:
"""Flatten dictionary, list, tuple and concatenate nested keys with separator."""
def clean_markdown(v: str) -> str:
return v.replace("|", "_").replace("\n", "_") if isinstance(v, str) else v # Need this for markdown
def rec(nest: dict, prefix: str, into: dict):
for k, v in sorted(nest.items()):
# if sep in k:
# raise ValueError(f"separator '{sep}' not allowed to be in key '{k}'")
if isinstance(v, dict):
rec(v, prefix + k + sep, into)
elif isinstance(v, (list, tuple)):
for i, vv in enumerate(v):
if isinstance(vv, dict):
rec(vv, prefix + k + sep + str(i) + sep, into)
else:
vv = (
vv.replace("|", "_").replace("\n", "_") if isinstance(vv, str) else vv
) # Need this for markdown
into[prefix + k + sep + str(i)] = vv.tolist() if isinstance(vv, np.ndarray) else vv
elif isinstance(v, np.ndarray):
into[prefix + k + sep + str(i)] = v.tolist()
else:
v = clean_markdown(v)
into[prefix + k] = v
flat = {}
rec(nested, "", flat)
return flat