diff --git a/scripts/visualizer.py b/scripts/visualizer.py index 98f16a974..f2652dada 100644 --- a/scripts/visualizer.py +++ b/scripts/visualizer.py @@ -1,9 +1,13 @@ +import math import os import json import glob import logging import shutil import re as _re +from numbers import Number +from typing import Optional, Any + from flask import Flask, render_template, render_template_string, jsonify @@ -60,6 +64,7 @@ def load_evolution_data(checkpoint_folder): if os.path.exists(prog_path): with open(prog_path) as pf: prog = json.load(pf) + sanitize_program_for_visualization(prog) prog["id"] = pid prog["island"] = island_idx nodes.append(prog) @@ -81,6 +86,18 @@ def load_evolution_data(checkpoint_folder): "checkpoint_dir": checkpoint_folder, } +def sanitize_program_for_visualization(program: dict[str, Any]) -> None: + for k, v in program["metrics"].items(): + if not check_json_float(v): + program["metrics"][k] = None + if "parent_metrics" in program["metadata"]: + for k, v in program["metadata"]["parent_metrics"].items(): + if not check_json_float(v): + program["metadata"]["parent_metrics"][k] = None + +def check_json_float(v: Optional[float]) -> bool: + return isinstance(v, Number) and not (math.isinf(v) or math.isnan(v)) + @app.route("/") def index():