Matplotlib profiling of MBC.
This commit is contained in:
parent
d4b79674ae
commit
b6dadc7789
|
@ -14,7 +14,6 @@ def sidedness(slope: float, intersection: float, p3: Point, flipper: callable, e
|
||||||
return Side.BELOW
|
return Side.BELOW
|
||||||
|
|
||||||
|
|
||||||
@Profiler("solving 1D LP")
|
|
||||||
def solve_1dlp(c, constraints):
|
def solve_1dlp(c, constraints):
|
||||||
c1, c2 = c
|
c1, c2 = c
|
||||||
((a1, a2), b) = constraints[-1]
|
((a1, a2), b) = constraints[-1]
|
||||||
|
@ -36,7 +35,7 @@ def solve_1dlp(c, constraints):
|
||||||
return interval[1], q - (p * interval[1])
|
return interval[1], q - (p * interval[1])
|
||||||
|
|
||||||
|
|
||||||
@Profiler("solving 2D LP")
|
@Profiler("solving LP")
|
||||||
def solve_2dlp(c, constraints):
|
def solve_2dlp(c, constraints):
|
||||||
c1, c2 = c
|
c1, c2 = c
|
||||||
x1 = -10_000 if c1 > 0 else 10_000
|
x1 = -10_000 if c1 > 0 else 10_000
|
||||||
|
@ -88,7 +87,8 @@ def mbc_ch(points: Set[Point], flipper: callable, extra_prune=False, shuffle=Tru
|
||||||
pr = {p for p in points if p.x >= med_x}
|
pr = {p for p in points if p.x >= med_x}
|
||||||
|
|
||||||
# Shuffle
|
# Shuffle
|
||||||
constraints = [((flipper(-p.x), flipper(-1)), flipper(-p.y)) for p in points]
|
with Profiler("flipping constraints"):
|
||||||
|
constraints = [((flipper(-p.x), flipper(-1)), flipper(-p.y)) for p in points]
|
||||||
if shuffle:
|
if shuffle:
|
||||||
with Profiler("shuffling constraints"):
|
with Profiler("shuffling constraints"):
|
||||||
random.shuffle(constraints)
|
random.shuffle(constraints)
|
||||||
|
|
File diff suppressed because one or more lines are too long
64
h2/util.py
64
h2/util.py
|
@ -132,3 +132,67 @@ class Side(Enum):
|
||||||
ON = auto()
|
ON = auto()
|
||||||
ABOVE = auto()
|
ABOVE = auto()
|
||||||
BELOW = auto()
|
BELOW = auto()
|
||||||
|
|
||||||
|
|
||||||
|
def stacked_bar(data, series_labels, category_labels=None,
|
||||||
|
show_values=False, value_format="{}", y_label=None,
|
||||||
|
grid=True, reverse=False):
|
||||||
|
"""
|
||||||
|
Plots a stacked bar chart with the data and labels provided (https://stackoverflow.com/a/50205834).
|
||||||
|
|
||||||
|
Keyword arguments:
|
||||||
|
data -- 2-dimensional numpy array or nested list
|
||||||
|
containing data for each series in rows
|
||||||
|
series_labels -- list of series labels (these appear in
|
||||||
|
the legend)
|
||||||
|
category_labels -- list of category labels (these appear
|
||||||
|
on the x-axis)
|
||||||
|
show_values -- If True then numeric value labels will
|
||||||
|
be shown on each bar
|
||||||
|
value_format -- Format string for numeric value labels
|
||||||
|
(default is "{}")
|
||||||
|
y_label -- Label for y-axis (str)
|
||||||
|
grid -- If True display grid
|
||||||
|
reverse -- If True reverse the order that the
|
||||||
|
series are displayed (left-to-right
|
||||||
|
or right-to-left)
|
||||||
|
"""
|
||||||
|
|
||||||
|
ny = len(data[0])
|
||||||
|
ind = list(range(ny))
|
||||||
|
|
||||||
|
axes = []
|
||||||
|
cum_size = np.zeros(ny)
|
||||||
|
|
||||||
|
data = np.array(data)
|
||||||
|
|
||||||
|
if reverse:
|
||||||
|
data = np.flip(data, axis=1)
|
||||||
|
category_labels = reversed(category_labels)
|
||||||
|
|
||||||
|
for i, row_data in enumerate(data):
|
||||||
|
axes.append(plt.bar(ind, row_data, bottom=cum_size,
|
||||||
|
label=series_labels[i]))
|
||||||
|
cum_size += row_data
|
||||||
|
|
||||||
|
if category_labels:
|
||||||
|
plt.xticks(ind, category_labels)
|
||||||
|
|
||||||
|
if y_label:
|
||||||
|
plt.ylabel(y_label)
|
||||||
|
|
||||||
|
plt.legend()
|
||||||
|
|
||||||
|
if grid:
|
||||||
|
plt.grid()
|
||||||
|
|
||||||
|
if show_values:
|
||||||
|
for axis in axes:
|
||||||
|
for bar in axis:
|
||||||
|
w, h = bar.get_width(), bar.get_height()
|
||||||
|
if h != 0:
|
||||||
|
plt.text(bar.get_x() + w/2, bar.get_y() + h/2,
|
||||||
|
value_format.format(h), ha="center",
|
||||||
|
va="center")
|
||||||
|
|
||||||
|
plt.show()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user