Source code for sierra.plugins.prod.graphs.inter.heatmap
#
# Copyright 2024 John Harwell, All rights reserved.
#
# SPDX-License-Identifier: MIT
#
"""Generate heatmaps *across* multiple :term:`Experiments <Experiment>`."""
# Core packages
import typing as tp
import logging
# 3rd party packages
import json
import yaml
import strictyaml
# Project packages
from sierra.core import types, batchroot, graphs
from sierra.core.graphs import bcbridge, schema
_logger = logging.getLogger(__name__)
[docs]
def generate(
cmdopts: types.Cmdopts,
pathset: batchroot.PathSet,
targets: list[types.YAMLDict],
info: bcbridge.GraphInfo,
) -> None:
"""
Generate heatmaps from: term:`Processed Output Data` files.
"""
large_text = cmdopts["plot_large_text"]
_logger.info(
"Heatmaps from <batch_root>/%s",
pathset.stat_interexp_root.relative_to(pathset.root),
)
# For each category of heatmaps we are generating
for category in targets:
# For each graph in each category
for graph in category:
# Only try to create heatmaps (duh)
if graph["type"] != "heatmap":
continue
_logger.trace("\n" + json.dumps(graph, indent=4))
try:
loaded = strictyaml.load(yaml.dump(graph), schema.heatmap).data
except strictyaml.YAMLError as e:
_logger.critical("Non-conformant heatmap YAML: %s", e)
raise
graph_pathset = graphs.PathSet(
input_root=pathset.stat_interexp_root,
output_root=pathset.graph_interexp_root,
batchroot=pathset.root,
model_root=None,
)
# 2025-06-05 [JRH]: We always write stage {3,4} output data files as
# .csv because that is currently SIERRA's 'native' format; this may
# change in the future.
graphs.heatmap(
pathset=graph_pathset,
input_stem=loaded["dest_stem"],
output_stem=loaded["dest_stem"],
medium="storage.csv",
title=loaded.get("title", None),
xlabel=info.xlabel,
ylabel=info.ylabel,
xticklabels=info.xticklabels,
yticklabels=info.yticklabels,
xticks=info.xticks,
yticks=info.yticks,
zlabel=loaded.get("zlabel", ""),
backend=loaded.get("backend", cmdopts["graphs_backend"]),
colnames=(
loaded.get("x", "x"),
loaded.get("y", "y"),
loaded.get("z", "z"),
),
large_text=large_text,
)
__all__ = ["generate"]