MoviePlotNode

class PlasmaCalcs.plotting.movies.MoviePlotNode(obj=UNSET, *, parent=None, init_plot=True, **kw_plot_settings)

Bases: PlotSettingsMixin, Tree

tree node storing a MoviePlotElement (in self.obj).

To update repeatedly & save resulting animation, see self.save() or self.get_animator().

To register updatable sub-elements use self.add_child;

when updating self will also update all children.
Subclasses must define:
get_data_at_frame(int) -> dict
INPUTS HERE:
obj: UNSET, None, or MoviePlotElement
the plot element stored in this node.
UNSET –> didn’t call init_plot.
None –> intentionally not storing an element in this node.
parent: None or MoviePlotNode
if provided, the parent of this node. None -> this node has no parent.

init_plot: bool (default: True)

whether to call self.init_plot() immediately, during __init__.
(as a PlotSetting: tells the value of init_plot passed during __init__.)
False –> still must call self.init_plot() before using self(…) or self.updater(…)
(end-user will probably never use init_plot=False; it’s mostly for internal code.)
(might use False if creating MovieImage before defining the associated Axes.)
ignored if obj is None; when obj is None, never call init_plot during __init__.
Additional kwargs can be any PlotSettings; see help(self.plot_settings) for details.

Methods

__call__(frame)

update the plot for the given frame.

__getitem__(i)

returns self.children[i].

__init_subclass__(*args_super, **kw)

appends note about using self.plot_settings, to cls.__doc__.

__iter__()

iterates over self.children.

add_child(child)

adds this child (a Tree) to self.children.

display([show_depth, max_depth, shorthand])

display self in html.

enumerate_flat(*[, include_self])

returns a generator which iterates over all of self's descendants, in depth-first order,

flat(*[, include_self])

returns a generator which iterates over all of self's descendants, in depth-first order.

flat_branches_until(branches_until, *[, ...])

returns a generator which iterates over all of self's descendants, in depth-first order,

get_animator(*[, fps, blit, frames, plt_close])

returns FuncAnimation instance using self as func.

get_data_at_frame(frame)

return dict of data for the given frame, to be used by the MoviePlotElement at self.obj.

get_nframes()

return max of get_nframes_here() for self & all descendants of self.

get_nframes_here()

return the number of frames that could be in the movie, based on this node.

help()

prints a helpful message with examples for how to use this cls

html([show_depth, max_depth, shorthand])

returns html for displaying self and all of self's children.

init_plot()

plot for the first time; save self.obj = result, which should be a MoviePlotElement.

init_plots(*[, plotted_ok])

init_plot for self & all descendants with non-None obj.

make_child(obj)

makes a child of self, with obj as its stored object, and returns the child.

make_children(objs)

make_child(obj) for obj in objs; returns the list of newly made children.

save(filename[, frames, fps, blit])

save the movie to filename.

set_parent(parent, *[, _internal])

sets self.parent = parent.

update_to_frame(frame)

update the plot for the given frame.

_get_frames(value)

gets frames based on value and possibly self.get_nframes() if necessary.

_init_plot_checks()

checks to run before init_plot().

_on_added_child(child)

called immediately after adding a child to self.

_on_added_descendant(descendant)

called immediately after adding a descendant to self (or any of self.children).

_on_adding_ancestor(ancestor)

called immediately before adding an ancestor to self (i.e., self.parent, parent of self.parent, etc)

_on_setting_parent(parent)

called immediately before setting self.parent = parent.

_repr_html_()

returns html string for displaying self.

_shorthand_repr()

returns shorthand repr for this node (without children): "((depth, height, size)) obj".

Attributes

DEFAULT_TREE_SHORTHAND

DEFAULT_TREE_SHOW_DEPTH

DEFAULT_TREE_SHOW_MAX_DEPTH

ani

alias to get_animator

depth

number of layers above self.

fig

the Figure on which self is / will be plotted.

frame

the currently-plotted frame

frames

the frames that could be in the movie.

height

number of layers below self.

parent

parent node of self.

parent_ref

stores parent value, but internally uses weakref to avoid circular references.

plotted

whether this node's element has actually been plotted yet.

plotted_data

the currently plotted data.

size

number of nodes in this tree.

__call__(frame)

update the plot for the given frame. return iterable of all updated artists.

Defining __call__ in this way means self is compatible for direct use by FuncAnimation.
__getitem__(i)

returns self.children[i]. If i is a tuple, index repeatedly, e.g. self[i[0]][i[1]][i[2]]…

classmethod __init_subclass__(*args_super, **kw)

appends note about using self.plot_settings, to cls.__doc__.

if “PlotSettings” or “plot_settings” appears in cls.__doc__, do NOT append this note;
assuming instead that this means the doc already mentions how to use plot_settings.
__iter__()

iterates over self.children.

_get_frames(value)

gets frames based on value and possibly self.get_nframes() if necessary.

if result would be None, crash instead.
_init_plot_checks()

checks to run before init_plot().

Here, checks:
- if self.plotted, raise PlottingAmbiguityError.
- if self.obj is None, raise PlottingAmbiguityError.
_on_added_child(child)

called immediately after adding a child to self.

Tracks depth, height, size. This method does not connect any parents or children.
_on_added_descendant(descendant)

called immediately after adding a descendant to self (or any of self.children).

Tracks depth, height, size. This method does not connect any parents or children.
_on_adding_ancestor(ancestor)

called immediately before adding an ancestor to self (i.e., self.parent, parent of self.parent, etc)

Tracks depth, height, size. This method does not connect any parents or children.
_on_setting_parent(parent)

called immediately before setting self.parent = parent.

Tracks depth, height, size. This method does not connect any parents or children.
_repr_html_()

returns html string for displaying self. (this display hook is used by Jupyter automatically.).

Includes self.html() and DEFAULTS.TREE_CSS.

[TODO] apply the css to ONLY this output cell in Jupyter, instead of all output cells…

_shorthand_repr()

returns shorthand repr for this node (without children): “((depth, height, size)) obj”.

add_child(child)

adds this child (a Tree) to self.children. Also, child.set_parent(self).

returns the added child.
property ani

alias to get_animator

property depth

number of layers above self. (parent, parent’s parents, etc.)

depth = 0 for the node with parent = None.
display(show_depth=None, max_depth=None, *, shorthand=None)

display self in html. Includes self.html() and DEFAULTS.TREE_CSS.

show_depth: None or int
max number of layers of tree to show by default (i.e. “not hidden” by default)
None –> use self.DEFAULT_TREE_SHOW_DEPTH if defined else DEFAULTS.TREE_SHOW_DEPTH
max_depth: None or int
max number of layers of tree to render (even if all layers are “not hidden”).
Anything deeper will not be converted to html string.
None –> use self.DEFAULT_TREE_SHOW_MAX_DEPTH if defined else DEFAULTS.TREE_SHOW_MAX_DEPTH
shorthand: None or bool
whether to use shorthand for the “Tree([depth=N, height=N, size=N], obj=…)” part of the repr.
True –> use shorthand; replace that^ with: “((N, N, N)) …”
None –> use self.DEFAULT_TREE_SHORTHAND if defined else DEFAULTS.TREE_SHORTHAND
enumerate_flat(*, include_self=False)

returns a generator which iterates over all of self’s descendants, in depth-first order,

yielding (index, node) pairs, such that self[index] == node.
Note that index will be a tuple with length == node.depth.
if include_self, yield self first, as: ((), self)).
property fig

the Figure on which self is / will be plotted.

flat(*, include_self=False)

returns a generator which iterates over all of self’s descendants, in depth-first order.

if include_self, yield self first.
flat_branches_until(branches_until, *, include_self=False)

returns a generator which iterates over all of self’s descendants, in depth-first order,

but stop looking at descendants on a branch as soon as branches_until(node).
E.g. self.flat_branches_until(lambda node: node.obj==7) will be similar to flat,
but won’t go to any descendants for any node with obj==7.
if include self, yield self first, and check branches_until(self) before continuing.
otherwise, never check branches_until(self).
property frame

the currently-plotted frame

property frames

the frames that could be in the movie.

if set to None, will use self.get_nframes() instead.
if set to a slice, will use range(self.get_nframes())[frames] instead.
get_animator(*, fps=UNSET, blit=UNSET, frames=UNSET, plt_close=True, **kw_func_animation)

returns FuncAnimation instance using self as func.

Use kwarg defaults from self.plot_settings, for any kwargs not provided here.
fps: UNSET, None, or number (default: UNSET)
frames per second.
UNSET –> use DEFAULTS.PLOT.FPS (default: 30).
(Or use value from self.plot_settings, if provided.)
None –> use matplotlib defaults.
blit: UNSET, None, or bool (default: UNSET)
whether to use blitting.
UNSET –> use DEFAULTS.PLOT.BLIT (default: True).
(Or use value from self.plot_settings, if provided.)
if None, use matplotlib defaults.
frames: UNSET, None, int, iterable, or slice (default: UNSET)
passed to FuncAnimation. Tells number of frames or which frames to plot.
If UNSET, use value from self.plot_settings if possible else getattr(self, ‘frames’, None).
if slice, use range(self.get_nframes())[frames], crashing if self doesn’t have ‘get_nframes’.
plt_close: bool
whether to plt.close() before returning the result.
This is useful in Jupyter, where commonly one cell might make a plot,
then call get_animator() to display movie in-line, but not plt.close().
In that case, plt_close=False would display animation & plot
[TODO] use init_func kwarg to avoid calling self twice for frame 0?
get_data_at_frame(frame)

return dict of data for the given frame, to be used by the MoviePlotElement at self.obj.

get_nframes()

return max of get_nframes_here() for self & all descendants of self.

If any node throws PlottingNframesUnknownError, pretend they said nframes=0.
If all nodes throw PlottingNframesUnknownError, raise the one from self.
get_nframes_here()

return the number of frames that could be in the movie, based on this node.

property height

number of layers below self. (children, children’s children, etc.)

height = 0 for a node with no children.
classmethod help()

prints a helpful message with examples for how to use this cls

html(show_depth=None, max_depth=None, *, shorthand=None)

returns html for displaying self and all of self’s children.

show_depth: None or int
max number of layers of tree to show by default (i.e. “not hidden” by default)
None –> use self.DEFAULT_TREE_SHOW_DEPTH if defined else DEFAULTS.TREE_SHOW_DEPTH
max_depth: None or int
max number of layers of tree to render (even if all layers are “not hidden”).
Anything deeper will not be converted to html string.
None –> use self.DEFAULT_TREE_SHOW_MAX_DEPTH if defined else DEFAULTS.TREE_SHOW_MAX_DEPTH
shorthand: None or bool
whether to use shorthand for the “Tree([depth=N, height=N, size=N], obj=…)” part of the repr.
True –> use shorthand; replace that^ with: “((N, N, N)) …”
None –> use self.DEFAULT_TREE_SHORTHAND if defined else DEFAULTS.TREE_SHORTHAND
init_plot()

plot for the first time; save self.obj = result, which should be a MoviePlotElement.

Should also set self.frame = self.plot_settings[‘init_plot_frame’] (default 0).
init_plots(*, plotted_ok=True)

init_plot for self & all descendants with non-None obj.

plotted_ok: bool
True –> skip node if node.plotted.
False –> call init_plot on all nodes with non-None obj.
make_child(obj)

makes a child of self, with obj as its stored object, and returns the child.

make_children(objs)

make_child(obj) for obj in objs; returns the list of newly made children.

property parent

parent node of self. None if self is root.

When set to a value, calls self.set_parent(value),
which also updates tracking info appropriately, and updates parent’s children.
property parent_ref

stores parent value, but internally uses weakref to avoid circular references.

Users should always use self.parent instead.
property plotted

whether this node’s element has actually been plotted yet.

False before init_plot; True after. Always None if self.obj is None.
property plotted_data

the currently plotted data.

save(filename, frames=UNSET, *, fps=UNSET, blit=UNSET, **kw)

save the movie to filename.

RECOMMENDED:
first, self.save(…, frames=N), with small N (e.g. N=5), to test movie formatting.
Troubleshooting: if movie getting cut off,
try plt.subplots_adjust(bottom=0.2, left=0.2, right=0.8, top=0.8),
or even more extreme values if necessary. (0 is bottom/left edge; 1 is top/right edge.)
frames: UNSET, None, int, iterable, or slice (default: UNSET)
passed to FuncAnimation. Tells number of frames or which frames to plot.
If UNSET, use value from self.plot_settings if possible else getattr(self, ‘frames’, None).
if slice, use range(self.get_nframes())[frames], crashing if self doesn’t have ‘get_nframes’.
fps: UNSET, None, or number (default: UNSET)
frames per second.
UNSET –> use DEFAULTS.PLOT.FPS (default: 30).
(Or use value from self.plot_settings, if provided.)
None –> use matplotlib defaults.
blit: UNSET, None, or bool (default: UNSET)
whether to use blitting.
UNSET –> use DEFAULTS.PLOT.BLIT (default: True).
(Or use value from self.plot_settings, if provided.)
if None, use matplotlib defaults.
additional kwargs passed to FuncAnimation() or FuncAnimation.save().
returns abspath of the saved movie.
set_parent(parent, *, _internal=False)

sets self.parent = parent. Also, parent.add_child(self), unless _internal=True.

Users should use self.parent = parent instead of calling set_parent directly.
property size

number of nodes in this tree. (here and below)

size = 1 for a node with no children.
update_to_frame(frame)

update the plot for the given frame. set self.frame=frame.

also calls update_to_frame for all children.
return iterable of all updated artists.