Source code for malib.utils.formatter

from malib.utils.typing import AgentInvolveInfo

ignored_key = [
    "action_space",
    "model_config",
    "custom_config",
    "observation_space",
    "registered_name",
]


[docs]def pretty_dict(d, indent=0): res = "\n" for k, v in d.items(): if k in ignored_key: continue res += "\t" * indent + str(k) + "\n" res += pretty_print(v, indent + 1) + "\n" return res
[docs]def pretty_tuple(d, indent=0): pending_str = [] types = set([type(e) for e in d]) for e in d: pending_str.append(pretty_print(e, indent + 1)) if len(types) == 1: res = "(" + pending_str + ")" else: res = "(" + "\n".join(pending_str) + ")\n" return "\t" * indent + res
[docs]def pretty_list(d, indent=0): pending_str = [] types = set([type(e) for e in d]) for e in d: pending_str.append(pretty_print(e, indent + 1)) if len(types) == 1: res = "[" + "".join(pending_str) + "]" else: res = "[" + "\n".join(pending_str) + "]\n" return "\t" * indent + res
[docs]def pretty_print(data, indent=0): if isinstance(data, dict): res = pretty_dict(data, indent) elif isinstance(data, tuple): res = pretty_tuple(data, indent) elif isinstance(data, list): res = pretty_list(data, indent) elif isinstance(data, AgentInvolveInfo): res = "\t" * indent + "AgentInvolveInfo:\n" res += ( "\t" * indent + "populations:\n" + pretty_print(data.populations, indent + 1) ) res += ( "\t" * indent + "trainable_pairs:\n" + pretty_print(data.trainable_pairs, indent + 1) ) else: res = "\t" * indent + str(data) return res
if __name__ == "__main__": a = { "agent-0": {"policy-1": 0.323, "policy-2": 0.4, "policy-3": 0.3}, "agent-1": {"policy-1": 0.3, "policy-2": 0.4, "policy-3": 0.3}, "agent-2": {"policy-1": 0.3, "policy-2": 0.4, "policy-3": 0.3}, } print(pretty_dict(a))