render in-memory caching

This commit is contained in:
AF 2023-07-31 12:50:28 +00:00
parent 8a70a793ed
commit 975d6d9bd2
5 changed files with 99 additions and 21 deletions

View File

@ -11,6 +11,16 @@ RUN python3 /code/metrics.py
RUN git fetch && git checkout 936f41735a4f7913e49fb16c44e89901bf703568
RUN python3 /code/metrics.py
RUN git fetch && git checkout f13a1382f8781231e01d375a13041884c87ddf0c
RUN python3 /code/metrics.py
RUN git fetch && git checkout ce65688e47b07f14ef2861971f64296c2197e778
RUN python3 /code/metrics.py
RUN git fetch && git checkout 7f1d72898ddd9ab40bf91e553f70a023a64fe647
RUN python3 /code/metrics.py
FROM python:3.11
RUN python3 -m pip install matplotlib
WORKDIR /code/

View File

@ -77,6 +77,7 @@ def render_ploc():
plt.plot(X, Yc * (k := Yp[0] / Yc[0]), fmt, label=f"c/d x{round(k, 1)}", c="C1", **kwargs)
plt.plot(X, Yb * (k := Yp[0] / Yb[0]), fmt, label=f"blank x{round(k, 1)}", c="C2", **kwargs)
plt.legend()
plt.ylim(bottom=0)
plt.savefig("/code/ploc.png")

View File

@ -11,7 +11,7 @@ ENV SRCPATTERN="*.cs"
FROM metrics-base as metrics-radn
RUN git clone https://gitea.parrrate.ru/PTV/radn-rs.git
WORKDIR /code/radn-rs/
RUN git fetch && git checkout 936f41735a4f7913e49fb16c44e89901bf703568
RUN git fetch && git checkout 7f1d72898ddd9ab40bf91e553f70a023a64fe647
FROM metrics-base as metrics-mdbook
RUN git clone https://github.com/rust-lang/mdBook.git

View File

@ -21,7 +21,7 @@ for i, commit in enumerate(reversed(commits)):
lines = path.read_bytes().splitlines()
lines = (line.strip() for line in lines)
lines = (line for line in lines if line)
# lines = set(lines)
lines = set(lines)
current_ctr.update(lines)
added = current_ctr - last_ctr
deleted = last_ctr - current_ctr

View File

@ -1,13 +1,14 @@
import json
from functools import cache
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import hsv_to_rgb
from scipy.io import wavfile
plt.rcParams["figure.figsize"] = [18, 9]
plt.style.use("dark_background")
plt.subplots_adjust(left=0.05, right=0.99, top=0.95, bottom=0.05)
plt.margins(x=0.025)
with open("metrics.json", "r") as file:
@ -19,35 +20,101 @@ with open("metrics.json", "r") as file:
def render_ploc():
X, Y, Ya, Yd = np.array(entries).transpose()
plt.clf()
plt.plot(X, Y)
plt.fill_between(X, Y, Y - Ya, alpha=0.5, color="green")
plt.fill_between(X, Y, Y + Yd, alpha=0.5, color="red")
plt.plot(X, Y, linewidth=1.0)
plt.fill_between(
X,
Y - Ya,
Y,
alpha=0.5,
color="green",
linewidth=0.0,
)
plt.fill_between(
X,
Y,
Y + Yd,
alpha=0.5,
color="red",
linewidth=0.0,
)
plt.ylim(bottom=0)
plt.savefig("/code/metrics/metrics.png")
def render_cors(*, px, pc):
M = len(cors)
N = len(cors[0])
Y = np.array(cors)
@cache
def get_m():
return len(cors)
@cache
def get_n():
return len(cors[0])
@cache
def get_y():
return np.array(cors)
@cache
def _get_x(px: bool):
if px:
X = abs(np.diff(Y, axis=1, prepend=0)).sum(axis=0).cumsum()
return abs(np.diff(get_y(), axis=1, prepend=0)).sum(axis=0).cumsum()
else:
X = np.arange(N)
assert Y.shape == (M, N)
W = Y.max(axis=1)
I = W.cumsum()
assert I.shape == (M,)
plt.clf()
return np.arange(get_n())
def get_x(*, px: bool):
return _get_x(px)
@cache
def get_w():
return get_y().max(axis=1)
@cache
def _get_z(pc: bool):
M = get_m()
if pc:
Z = (I - W / 2) / I.max() * M
W = get_w()
I = W.cumsum()
assert I.shape == (M,)
return (I - W / 2) / I.max() * M
else:
Z = np.arange(M)
colours = hsv_to_rgb(np.array([3.0 * Z / M % 1, 0.4 + Z * 0, 0.6 + 0.15 * (Z / M)]).transpose())
return np.arange(M)
def get_z(*, pc: bool):
return _get_z(pc)
@cache
def _get_c(pc: bool):
M = get_m()
Z = get_z(pc=pc)
W = get_w()
return hsv_to_rgb(np.array([3.0 * Z / M % 1, 0.4 + Z * 0, 0.6 + 0.15 * (Z / M)]).transpose())
def get_c(*, pc: bool):
return _get_c(pc)
def render_cors(*, px, pc):
M = get_m()
N = get_n()
Y = get_y()
X = get_x(px=px)
assert Y.shape == (M, N)
plt.clf()
C = get_c(pc=pc)
plt.stackplot(
X,
Y,
colors=colours,
colors=C,
aa=False,
linewidth=0.0,
)
plt.savefig(f"/code/metrics/metrics-px{int(px)}-pc{int(pc)}.png")