Source code for autofit.non_linear.plot.samples_plotters

import logging

import numpy as np

from autonerves import conf

from autofit.non_linear.plot.plot_util import skip_in_test_mode, output_figure

logger = logging.getLogger(__name__)


def _corner_range_from(data):
    """Per-column ``(min, max)`` plot ranges for a corner figure.

    ``corner`` raises "no dynamic range" if any column has zero spread (every
    sample equal). That is a legitimate input — a reduced-iteration run (e.g.
    ``PYAUTO_TEST_MODE=1``) or a parameter that has converged flat — so we hand
    it an explicit per-column range rather than let it crash. Columns with real
    spread keep their ``(min, max)``; degenerate columns are widened to a small
    non-zero window centred on the value so the plot still renders.
    """
    mins = np.asarray(data).min(axis=0)
    maxs = np.asarray(data).max(axis=0)
    plot_range = []
    for lower, upper in zip(mins, maxs):
        if lower == upper:
            pad = max(abs(lower) * 1e-4, 1e-8)
            lower, upper = lower - pad, upper + pad
        plot_range.append((lower, upper))
    return plot_range


[docs] @skip_in_test_mode def corner_cornerpy(samples, path=None, filename="corner", format="show", **kwargs): data = np.asarray(samples.parameter_lists) if data.ndim < 2 or data.shape[0] <= data.shape[1]: logger.info( "corner_cornerpy: skipping corner plot, only %s sample(s) for %s parameter(s) " "(e.g. PYAUTO_TEST_MODE bypass or an early-iteration update).", data.shape[0] if data.ndim >= 1 else 0, data.shape[1] if data.ndim >= 2 else 0, ) return import matplotlib.pylab as pylab config_dict = conf.instance["visualize"]["plots_settings"]["corner_cornerpy"] params = {"font.size": int(config_dict["fontsize"])} pylab.rcParams.update(params) import corner corner.corner( data=data, weight_list=samples.weight_list, labels=samples.model.parameter_labels_with_superscripts_latex, range=_corner_range_from(data), ) output_figure(path=path, filename=filename, format=format)