from matplotlib import pyplot as plt
from mimiqcircuits.qcsresults import QCSResults
from mimiqcircuits.bitstrings import bitvec_to_int
# define colors for plots
QPERFECTION_COLORS = {
"metallic_seaweed": "#0c7e8f",
"vivid_tangelo": "#EC7016",
"antique_fuchsia": "#A4598D",
"bangladesh_green": "#006E51",
"dark_brown_tangelo": "#96694A",
"rhythm": "#7E6A98",
}
QPERFECT_COLORS = {
"teal": QPERFECTION_COLORS["metallic_seaweed"],
"orange": QPERFECTION_COLORS["vivid_tangelo"],
"purple": QPERFECTION_COLORS["antique_fuchsia"],
"green": QPERFECTION_COLORS["bangladesh_green"],
"brown": QPERFECTION_COLORS["dark_brown_tangelo"],
"violet": QPERFECTION_COLORS["rhythm"],
}
# The colorscheme is taken by https://github.com/joshdick/onedark.vim
# which is released under MIT license with the following notice:
# Copyright (c) 2015 Joshua Dick
MIMIQ_COLORS = {
"black": "#282C34",
"red": "#E06C75",
"green": "#98C379",
"yellow": "#E5C07B",
"blue": "#61AFEF",
"magenta": "#C678DD",
"cyan": "#56B6C2",
"white": "#ABB2BF",
}
def _plothist(outcomes, counts, title, nobitstrings=False):
labels = [hex(bitvec_to_int(arr)) for arr in outcomes]
nbars = len(counts)
nsamples = sum(counts)
fig = plt.figure()
bars = plt.bar(labels, counts)
# alternating colors for bars
for i in range(len(bars)):
color = "yellow" if i % 2 == 0 else "magenta"
bars[i].set_color(color)
if not nobitstrings:
bottom = max(counts) * 0.02
for i, outcome in enumerate(outcomes):
plt.text(
i,
bottom,
outcome.to01(),
ha="center",
rotation=90,
color="black",
size=6,
family="monospace",
)
plt.xticks(rotation=90, fontsize=8)
plt.yticks(rotation=0, fontsize=8)
plt.xlim(-1, nbars)
plt.ylabel(f"counts ({nsamples} samples)")
plt.title(title)
plt.tight_layout()
return fig
[docs]
def plothistogram(results, num_outcomes=15, mimiqstyle=True, nobitstrings=False):
"""Plots the histogram of the obtained classical states' occurrences.
Arguments:
results: a QCSResults object.
num_states (int): the maximum number of bitstrings plotted (default 15)
Raises:
TypeError: If a non QCSResults object is passed.
"""
if not isinstance(results, QCSResults):
raise TypeError("First argument is not a valid QCSResults object")
hist = results.histogram()
outcomes = sorted(hist, key=hist.get, reverse=True)[0:num_outcomes]
counts = [hist[x] for x in outcomes]
title = f"{results.simulator} {results.version} fidelity(min:{min(results.fidelities):.3f}, max:{max(results.fidelities):.3f})"
if not mimiqstyle:
return _plothist(outcomes, counts, title, nobitstrings=nobitstrings)
with plt.style.context("mimiqcircuits.visualization.mimiq"):
fig = _plothist(outcomes, counts, title)
plt.show()
return fig
__all__ = ["plothistogram"]