Cachování koláčů

Není potřeba je kreslit pořád dokolečka.
master
LEdoian 2 years ago
parent 18baf6dd37
commit 9633fdd1d5

@ -6,7 +6,8 @@ from datetime import date, time, datetime, timedelta
from dataclasses import dataclass from dataclasses import dataclass
from glob import glob from glob import glob
from typing import Sequence from typing import Sequence
from functools import reduce from functools import reduce, cache
from bisect import bisect_right
VOLICU_CELKEM = 8_245_962 VOLICU_CELKEM = 8_245_962
OKRSKU_CELKEM = 14_857 OKRSKU_CELKEM = 14_857
@ -129,13 +130,7 @@ def frametime_to_realtime(t):
delta *= 18 delta *= 18
return START + delta return START + delta
from bisect import bisect_right def visualize_data(data: KolacovaData):
def data_for_timestamp(ts) -> KolacovaData:
idx = bisect_right(casy, ts)
return po_sekundach[casy[idx-1]] # bisect_right vrací konzistentně hodnotu o jedna větší, než potřebujeme.
def visualize_data(data):
# Tady se provede ta vizualizace, kterou děláme pořád dokolečka. # Tady se provede ta vizualizace, kterou děláme pořád dokolečka.
# FIXME: zase jsem to zkopíroval :-P # FIXME: zase jsem to zkopíroval :-P
plt.clf() plt.clf()
@ -186,16 +181,21 @@ def visualize_data(data):
# save # save
return plt.gcf() return plt.gcf()
# Jen kvůli cachování výsledků…
@cache
def figure_podle_casu(ts: datetime):
return visualize_data(po_sekundach[ts])
# https://zulko.github.io/moviepy/getting_started/working_with_matplotlib.html # https://zulko.github.io/moviepy/getting_started/working_with_matplotlib.html
from moviepy.editor import VideoClip from moviepy.editor import VideoClip
from moviepy.video.io.bindings import mplfig_to_npimage from moviepy.video.io.bindings import mplfig_to_npimage
def make_frame(t): def make_frame(t):
# wtf is t? # wtf is t?
data: KolacovaData ts = START + timedelta(seconds = t*18)
#data = data_for_timestamp(frametime_to_realtime(t)) idx = bisect_right(casy, ts) - 1
data = data_for_timestamp(START + timedelta(seconds=t)*18) fig = figure_podle_casu(casy[idx])
fig = visualize_data(data)
return mplfig_to_npimage(fig) return mplfig_to_npimage(fig)
def make_anim(): def make_anim():

Loading…
Cancel
Save