Source code for triflow.plugins.displays

#!/usr/bin/env python
# coding=utf8
"""This module regroups different displays: function and coroutine written
in order to give extra informationto the user during the simulation
(plot, post-processing...)
"""


[docs]class bokeh_fields_update(): """Display fields data in a interactive Bokeh plot displayed in a jupyter notebook. Parameters ---------- keys : None, optional list of the dependant variables to be displayed line_kwargs : dict of dict dictionnary with vars as key and a dictionnary of keywords arguments passed to the lines plots fig_kwargs : dict of dict dictionnary with vars as key and a dictionnary of keywords arguments passed to the figs plots init_notebook: True, optional if True, initialize the javascript component needed for bokeh. """ # noqa def __init__(self, simul, keys=None, line_kwargs={}, fig_kwargs={}, notebook=True): from bokeh.io import push_notebook, output_notebook from bokeh.plotting import figure, show, ColumnDataSource from bokeh.layouts import Column if notebook: output_notebook() setattr(self, '_push', push_notebook) keys = keys if keys else [ key for key in simul.fielPds._keys if key != 'x'] self._datasource = ColumnDataSource({key: simul.fields[key] for key in list(keys) + ['x']}) figs = {} for key in keys: figs[key] = figure(**fig_kwargs.get(key, {}), title=key) figs[key].line('x', key, source=self._datasource, **line_kwargs.get(key, {})) self._handler = show(Column(*[figs[key] for key in keys]), notebook_handle=True) self._keys = keys def __call__(self, t, fields): for key in self._keys: self._datasource.data[key] = fields[key] self._push(handle=self._handler)
[docs]class bokeh_probes_update(): """Display custom probes in a interactive Bokeh plot displayed in a jupyter notebook. Parameters ---------- probes : dictionnary of callable Dictionnary with {name: callable} used to plot the probes. The signature is the same as in the hooks and return the value we want to plot. line_kwargs : dict of dict dictionnary with vars as key and a dictionnary of keywords arguments passed to the lines plots fig_kwargs : dict of dict dictionnary with vars as key and a dictionnary of keywords arguments passed to the figs plots init_notebook: True, optional if True, initialize the javascript component needed for bokeh. """ # noqa def __init__(self, simul, probes, line_kwargs={}, fig_kwargs={}, notebook=True): from bokeh.io import push_notebook, output_notebook from bokeh.plotting import figure, show, ColumnDataSource from bokeh.layouts import Column if notebook: output_notebook() setattr(self, '_push', push_notebook) self._datasource = ColumnDataSource(dict(t=[simul.t], **{name: [probe(simul.t, simul.fields)] for name, probe in probes.items()})) figs = {} for name, probe in probes.items(): figs[name] = figure(**fig_kwargs.get(name, {}), title=name) figs[name].line('t', name, source=self._datasource, **line_kwargs.get(name, {})) self._handler = show(Column(*[figs[name] for name in probes]), notebook_handle=True) self._probes = probes def __call__(self, t, fields): self._datasource.data['t'].append(t) for name, probe in self._probes.items(): self._datasource.data[name].append(probe(t, fields)) self._push(handle=self._handler)