Source code for sisl.viz.plot

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
from __future__ import annotations

from sisl.messages import deprecate
from sisl.nodes import Workflow

from .figure import BACKENDS


[docs] class Plot(Workflow): """Base class for all plots""" def __getattr__(self, key): if key != "nodes": # From the backend input, we find out which class is the figure going to be # (even if no figure has been created yet or the latest figure was from a different backend) # Then we check if the attribute will be available there. If it will, we update the plot and # get the attribute on the updated plot. # This is so that things like `plot.show()` work as expected. # It has the downside that `.get()` is called even when for example a method of the figure is # retreived to get its docs (e.g. in the helper messages of jupyter notebooks) selected_backend = self.inputs.get("backend") figure_cls = BACKENDS.get(selected_backend) if figure_cls is not None and ( hasattr(figure_cls, key) or figure_cls.fig_has_attr(key) ): return getattr(self.nodes.output.get(), key) else: raise AttributeError( f"'{key}' not found in {self.__class__.__name__} with backend '{selected_backend}'" ) else: return super().__getattr__(key)
[docs] def merge(self, *others, **kwargs): from .plots.merged import merge_plots return merge_plots(self, *others, **kwargs)
[docs] def update_settings(self, *args, **kwargs): deprecate( "f{self.__class__.__name__}.update_settings is deprecated. Please use update_inputs.", "0.15", "0.16", ) return self.update_inputs(*args, **kwargs)
[docs] @classmethod def plot_class_key(cls) -> str: return cls.__name__.replace("Plot", "").lower()