From c449ea7a022b35c234b888632a41e867e8deb73e Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 20 Apr 2023 21:40:03 +0000 Subject: [PATCH] Auto-update from Github Actions Workflow Deployed from commit c1a964aa29e67d35c1ed3ff7c58158a9325e642a (refs/heads/master) Deployed from commit 9f898ae69ec8d20f4fb6e376af07eba6ee1db542 (refs/heads/master) Deployed from commit ee4da324072e90850aff7f7560e219610fb27737 (refs/heads/master) Deployed from commit 4e8675a6afdeb1a9939c3b0ac2f1747681a69675 (refs/heads/master) Deployed from commit 7fa80c54d8985fdd924d9c1c1c9009c6477ad2ff (refs/heads/master) Deployed from commit 30586731310b3719b020b9939ad2bc46e62b240c (refs/heads/master) Deployed from commit be1a7b7a7f662342e4abf7738d0f6e9e8d20905b (refs/heads/master) Deployed from commit 1fb9d4fe24b410f8be8fff4362db99e002482657 (refs/heads/master) Deployed from commit 191b0e479ee73bc01d697f12007bf5680d3fb9a5 (refs/heads/master) Deployed from commit 2f73bd3c09ef91ec3ad95566b718a1f4a8f784e9 (refs/heads/master) Deployed from commit 49d81272046ed285445e9c5e9cf674725cfe9086 (refs/heads/master) --- master/.buildinfo | 2 +- master/_modules/index.html | 17 +- master/_modules/typhos/alarm.html | 16 +- master/_modules/typhos/cache.html | 82 +- master/_modules/typhos/display.html | 243 +++- master/_modules/typhos/func.html | 50 +- master/_modules/typhos/panel.html | 110 +- master/_modules/typhos/plugins/core.html | 68 +- master/_modules/typhos/plugins/happi.html | 43 +- master/_modules/typhos/positioner.html | 78 +- master/_modules/typhos/suite.html | 186 ++- master/_modules/typhos/textedit.html | 41 +- master/_modules/typhos/tools/console.html | 321 ----- master/_modules/typhos/tools/log.html | 26 +- master/_modules/typhos/tools/plot.html | 26 +- master/_modules/typhos/tweakable.html | 38 +- master/_modules/typhos/utils.html | 411 +++++- master/_modules/typhos/widgets.html | 267 +++- .../typhos.tools.TyphosConsole.rst.txt | 362 ----- master/_sources/release_notes.rst.txt | 5 +- master/_sources/tools.rst.txt | 1 - master/_sources/upcoming_changes.rst.txt | 8 + .../538-remove_typhos_console.rst.txt | 22 + .../556-bld_pyproj_extras.rst.txt | 23 + .../558-fix_py310_benchmark.rst.txt | 23 + .../562-bug_notes_blank_env.rst.txt | 22 + .../565-poslimits.rst.txt | 23 + .../566-screenshot.rst.txt | 27 + .../570-dynamic_fonts.rst.txt | 23 + .../571-width_resizing.rst.txt | 22 + .../template-full.rst.txt | 36 + .../template-short.rst.txt | 22 + master/_static/basic.css | 22 + master/_static/css/theme.css | 2 +- master/_static/documentation_options.js | 5 +- master/_static/pygments.css | 1 + master/_static/searchtools.js | 26 +- master/_static/sphinx_highlight.js | 16 +- master/basic_usage.html | 47 +- master/cli.html | 45 +- master/connections.html | 24 +- master/display.html | 192 +-- .../generated/typhos.tools.TyphosConsole.html | 1180 ----------------- .../typhos.tools.TyphosLogDisplay.html | 27 +- .../typhos.tools.TyphosTimePlot.html | 23 +- master/genindex.html | 52 +- master/index.html | 20 +- master/objects.inv | Bin 3264 -> 3604 bytes master/plugins.html | 54 +- master/py-modindex.html | 16 +- master/python_methods.html | 20 +- master/release_notes.html | 232 ++-- master/save.html | 18 +- master/search.html | 16 +- master/searchindex.js | 2 +- master/templates.html | 26 +- master/tools.html | 32 +- master/upcoming_changes.html | 135 ++ .../538-remove_typhos_console.html | 153 +++ .../556-bld_pyproj_extras.html | 154 +++ .../558-fix_py310_benchmark.html | 154 +++ .../562-bug_notes_blank_env.html | 153 +++ .../upcoming_release_notes/565-poslimits.html | 154 +++ .../566-screenshot.html | 158 +++ .../570-dynamic_fonts.html | 154 +++ .../571-width_resizing.html | 153 +++ .../upcoming_release_notes/template-full.html | 165 +++ .../template-short.html | 153 +++ master/utils.html | 234 ++-- master/widgets.html | 337 ++--- 70 files changed, 4067 insertions(+), 2932 deletions(-) delete mode 100644 master/_modules/typhos/tools/console.html delete mode 100644 master/_sources/generated/typhos.tools.TyphosConsole.rst.txt create mode 100644 master/_sources/upcoming_changes.rst.txt create mode 100644 master/_sources/upcoming_release_notes/538-remove_typhos_console.rst.txt create mode 100644 master/_sources/upcoming_release_notes/556-bld_pyproj_extras.rst.txt create mode 100644 master/_sources/upcoming_release_notes/558-fix_py310_benchmark.rst.txt create mode 100644 master/_sources/upcoming_release_notes/562-bug_notes_blank_env.rst.txt create mode 100644 master/_sources/upcoming_release_notes/565-poslimits.rst.txt create mode 100644 master/_sources/upcoming_release_notes/566-screenshot.rst.txt create mode 100644 master/_sources/upcoming_release_notes/570-dynamic_fonts.rst.txt create mode 100644 master/_sources/upcoming_release_notes/571-width_resizing.rst.txt create mode 100644 master/_sources/upcoming_release_notes/template-full.rst.txt create mode 100644 master/_sources/upcoming_release_notes/template-short.rst.txt delete mode 100644 master/generated/typhos.tools.TyphosConsole.html create mode 100644 master/upcoming_changes.html create mode 100644 master/upcoming_release_notes/538-remove_typhos_console.html create mode 100644 master/upcoming_release_notes/556-bld_pyproj_extras.html create mode 100644 master/upcoming_release_notes/558-fix_py310_benchmark.html create mode 100644 master/upcoming_release_notes/562-bug_notes_blank_env.html create mode 100644 master/upcoming_release_notes/565-poslimits.html create mode 100644 master/upcoming_release_notes/566-screenshot.html create mode 100644 master/upcoming_release_notes/570-dynamic_fonts.html create mode 100644 master/upcoming_release_notes/571-width_resizing.html create mode 100644 master/upcoming_release_notes/template-full.html create mode 100644 master/upcoming_release_notes/template-short.html diff --git a/master/.buildinfo b/master/.buildinfo index 9045ebf5c..a69179c1c 100644 --- a/master/.buildinfo +++ b/master/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 6669a80fb98cbe78ffb6124512fb3cfd +config: 6e274e8a646f28b9b73ada1e1c652dde tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/master/_modules/index.html b/master/_modules/index.html index 7f08653e3..68b652cd1 100644 --- a/master/_modules/index.html +++ b/master/_modules/index.html @@ -3,19 +3,19 @@ - Overview: module code — Typhos 2.4.1 documentation + Overview: module code — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
- 2.4.1 + 2.4.2.dev54+g49d8127
@@ -99,7 +99,6 @@

All modules for which code is available

  • typhos.positioner
  • typhos.suite
  • typhos.textedit
  • -
  • typhos.tools.console
  • typhos.tools.log
  • typhos.tools.plot
  • typhos.tweakable
  • diff --git a/master/_modules/typhos/alarm.html b/master/_modules/typhos/alarm.html index 65719dd48..f47de49c6 100644 --- a/master/_modules/typhos/alarm.html +++ b/master/_modules/typhos/alarm.html @@ -3,19 +3,19 @@ - typhos.alarm — Typhos 2.4.1 documentation + typhos.alarm — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    diff --git a/master/_modules/typhos/cache.html b/master/_modules/typhos/cache.html index 913f9a7b6..e00af48f9 100644 --- a/master/_modules/typhos/cache.html +++ b/master/_modules/typhos/cache.html @@ -3,19 +3,19 @@ - typhos.cache — Typhos 2.4.1 documentation + typhos.cache — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -111,7 +111,9 @@

    Source code for typhos.cache

     _GLOBAL_DISPLAY_PATH_CACHE = None
     
     
    -
    [docs]def get_global_describe_cache(): +
    +[docs] +def get_global_describe_cache(): """Get the _GlobalDescribeCache singleton.""" global _GLOBAL_DESCRIBE_CACHE if _GLOBAL_DESCRIBE_CACHE is None: @@ -119,7 +121,10 @@

    Source code for typhos.cache

         return _GLOBAL_DESCRIBE_CACHE
    -
    [docs]def get_global_widget_type_cache(): + +
    +[docs] +def get_global_widget_type_cache(): """Get the _GlobalWidgetTypeCache singleton.""" global _GLOBAL_WIDGET_TYPE_CACHE if _GLOBAL_WIDGET_TYPE_CACHE is None: @@ -127,7 +132,10 @@

    Source code for typhos.cache

         return _GLOBAL_WIDGET_TYPE_CACHE
    -
    [docs]def get_global_display_path_cache(): + +
    +[docs] +def get_global_display_path_cache(): """Get the _GlobalDisplayPathCache singleton.""" global _GLOBAL_DISPLAY_PATH_CACHE if _GLOBAL_DISPLAY_PATH_CACHE is None: @@ -135,7 +143,10 @@

    Source code for typhos.cache

         return _GLOBAL_DISPLAY_PATH_CACHE
    -
    [docs]class _GlobalDescribeCache(QtCore.QObject): + +
    +[docs] +class _GlobalDescribeCache(QtCore.QObject): """ Cache of ophyd object descriptions. @@ -167,12 +178,15 @@

    Source code for typhos.cache

     
             self.connect_thread.start()
     
    -
    [docs] def clear(self): +
    +[docs] + def clear(self): """Clear the cache.""" self.connect_thread.clear() self.cache.clear() self._in_process.clear()
    + def _describe(self, obj): """Retrieve the description of ``obj``.""" try: @@ -214,7 +228,9 @@

    Source code for typhos.cache

                 utils.ThreadPoolWorker(func)
             )
     
    -
    [docs] def get(self, obj): +
    +[docs] + def get(self, obj): """ To access a description, call this method. If available, it will be returned immediately. Otherwise, upon connection and successful @@ -235,10 +251,14 @@

    Source code for typhos.cache

             except KeyError:
                 # Add the object, waiting for a connection update to determine
                 # widget types
    -            self.connect_thread.add_object(obj)
    + self.connect_thread.add_object(obj)
    +
    + -
    [docs]class _GlobalWidgetTypeCache(QtCore.QObject): +
    +[docs] +class _GlobalWidgetTypeCache(QtCore.QObject): """ Cache of ophyd object Typhos widget types. @@ -269,10 +289,13 @@

    Source code for typhos.cache

             self.describe_cache.new_description.connect(self._new_description,
                                                         QtCore.Qt.QueuedConnection)
     
    -
    [docs] def clear(self): +
    +[docs] + def clear(self): """Clear the cache.""" self.cache.clear()
    + @QtCore.Slot(object, dict) def _new_description(self, obj, desc): """New description: determine widget types and update the cache.""" @@ -286,7 +309,9 @@

    Source code for typhos.cache

             self.cache[obj] = item
             self.widgets_determined.emit(obj, item)
     
    -
    [docs] def get(self, obj): +
    +[docs] + def get(self, obj): """ To access widget types, call this method. If available, it will be returned immediately. Otherwise, upon connection and successful @@ -310,7 +335,9 @@

    Source code for typhos.cache

                 desc = self.describe_cache.get(obj)
                 if desc is not None:
                     # In certain scenarios (such as testing) this might happen
    -                self._new_description(obj, desc)
    + self._new_description(obj, desc)
    +
    + # The default stale cached_path threshold time, in seconds: @@ -399,7 +426,9 @@

    Source code for typhos.cache

                     yield self.path / pattern
     
     
    -
    [docs]class _GlobalDisplayPathCache: +
    +[docs] +class _GlobalDisplayPathCache: """ A cache for all configured display paths. @@ -413,13 +442,18 @@

    Source code for typhos.cache

             for path in utils.DISPLAY_PATHS:
                 self.add_path(path)
     
    -
    [docs] def update(self): +
    +[docs] + def update(self): """Force a reload of all paths in the cache.""" logger.debug('Clearing global path cache.') for path in self.paths: path.cache = None
    -
    [docs] def add_path(self, path): + +
    +[docs] + def add_path(self, path): """ Add a path to be searched during ``glob``. @@ -433,7 +467,9 @@

    Source code for typhos.cache

             path = _CachedPath(
                 path, stale_threshold=TYPHOS_DISPLAY_PATH_CACHE_TIME)
             if path not in self.paths:
    -            self.paths.append(path)
    + self.paths.append(path)
    +
    +
    diff --git a/master/_modules/typhos/display.html b/master/_modules/typhos/display.html index 8626a6c3a..7f69d5268 100644 --- a/master/_modules/typhos/display.html +++ b/master/_modules/typhos/display.html @@ -3,19 +3,19 @@ - typhos.display — Typhos 2.4.1 documentation + typhos.display — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -111,6 +111,7 @@

    Source code for typhos.display

     from . import panel as typhos_panel
     from . import utils, web, widgets
     from .jira import TyphosJiraIssueWidget
    +from .notes import TyphosNotesEdit
     from .plugins.core import register_signal
     
     logger = logging.getLogger(__name__)
    @@ -152,7 +153,9 @@ 

    Source code for typhos.display

                                  for f in files]
     
     
    -
    [docs]def normalize_display_type( +
    +[docs] +def normalize_display_type( display_type: Union[DisplayTypes, str, int] ) -> DisplayTypes: """ @@ -184,6 +187,7 @@

    Source code for typhos.display

                 )
    + def normalize_scroll_option( scroll_option: Union[ScrollOptions, str, int] ) -> ScrollOptions: @@ -216,7 +220,9 @@

    Source code for typhos.display

                 )
     
     
    -
    [docs]class TyphosToolButton(QtWidgets.QToolButton): +
    +[docs] +class TyphosToolButton(QtWidgets.QToolButton): """ Base class for tool buttons used in the TyphosDisplaySwitcher. @@ -251,11 +257,16 @@

    Source code for typhos.display

             if menu:
                 menu.exec_(QtGui.QCursor.pos())
     
    -
    [docs] def generate_context_menu(self): +
    +[docs] + def generate_context_menu(self): """Context menu request: override in subclasses.""" return None
    -
    [docs] @classmethod + +
    +[docs] + @classmethod def get_icon(cls, icon=None): """ Get a QIcon, if specified, or fall back to the default. @@ -271,7 +282,10 @@

    Source code for typhos.display

                 return pydm.utilities.IconFont().icon(icon)
             return icon
    -
    [docs] def open_context_menu(self, ev): + +
    +[docs] + def open_context_menu(self, ev): """ Open the instance-specific context menu. @@ -281,10 +295,14 @@

    Source code for typhos.display

             """
             menu = self.generate_context_menu()
             if menu:
    -            menu.exec_(self.mapToGlobal(ev.pos()))
    + menu.exec_(self.mapToGlobal(ev.pos()))
    +
    + -
    [docs]class TyphosDisplayConfigButton(TyphosToolButton): +
    +[docs] +class TyphosDisplayConfigButton(TyphosToolButton): """ The configuration button used in the :class:`TyphosDisplaySwitcher`. @@ -302,11 +320,16 @@

    Source code for typhos.display

             self.templates = None
             self.device_display = None
     
    -
    [docs] def set_device_display(self, device_display): +
    +[docs] + def set_device_display(self, device_display): """Typhos callback: set the :class:`TyphosDeviceDisplay`.""" self.device_display = device_display
    -
    [docs] def create_kind_filter_menu(self, panels, base_menu, *, only): + +
    +[docs] + def create_kind_filter_menu(self, panels, base_menu, *, only): """ Create the "Kind" filter menu. @@ -344,7 +367,10 @@

    Source code for typhos.display

                                           for panel in panels))
                 action.triggered.connect(selected)
    -
    [docs] def create_name_filter_menu(self, panels, base_menu): + +
    +[docs] + def create_name_filter_menu(self, panels, base_menu): """ Create the name-based filtering menu. @@ -381,7 +407,10 @@

    Source code for typhos.display

             action.setDefaultWidget(line_edit)
             base_menu.addAction(action)
    -
    [docs] def hide_empty(self, search=True): + +
    +[docs] + def hide_empty(self, search=True): """ Wrap hide_empty calls for use with search functions and action clicks. @@ -396,7 +425,10 @@

    Source code for typhos.display

                     show_empty(self.device_display)
                 hide_empty(self.device_display, process_widget=False)
    -
    [docs] def create_hide_empty_menu(self, panels, base_menu): + +
    +[docs] + def create_hide_empty_menu(self, panels, base_menu): """ Create the hide empty filtering menu. @@ -426,7 +458,10 @@

    Source code for typhos.display

             action.setChecked(self.device_display.hideEmpty)
             action.triggered.connect(handle_menu)
    -
    [docs] def generate_context_menu(self): + +
    +[docs] + def generate_context_menu(self): """ Generate the custom context menu. @@ -473,10 +508,14 @@

    Source code for typhos.display

                 action = base_menu.addAction('&Copy to clipboard')
                 action.triggered.connect(display.copy_to_clipboard)
     
    -        return base_menu
    + return base_menu
    +
    + -
    [docs]class TyphosDisplaySwitcherButton(TyphosToolButton): +
    +[docs] +class TyphosDisplaySwitcherButton(TyphosToolButton): """A button which switches the TyphosDeviceDisplay template on click.""" template_selected = QtCore.Signal(pathlib.Path) @@ -503,7 +542,9 @@

    Source code for typhos.display

     
             self.template_selected.emit(template)
     
    -
    [docs] def generate_context_menu(self): +
    +[docs] + def generate_context_menu(self): """Context menu request.""" if not self.templates: return @@ -516,10 +557,14 @@

    Source code for typhos.display

                 action = menu.addAction(template.name)
                 action.triggered.connect(selected)
     
    -        return menu
    + return menu
    +
    -
    [docs]class TyphosDisplaySwitcher(QtWidgets.QFrame, widgets.TyphosDesignerMixin): + +
    +[docs] +class TyphosDisplaySwitcher(QtWidgets.QFrame, widgets.TyphosDesignerMixin): """Display switcher set of buttons for use with a TyphosDeviceDisplay.""" template_selected = QtCore.Signal(pathlib.Path) @@ -571,7 +616,9 @@

    Source code for typhos.display

             if self.device_display is not None:
                 self.device_display.force_template = template
     
    -
    [docs] def set_device_display(self, display): +
    +[docs] + def set_device_display(self, display): """Typhos hook for setting the associated device display.""" self.device_display = display @@ -580,12 +627,19 @@

    Source code for typhos.display

                 self.buttons[template_type].templates = templates
             self.config_button.set_device_display(display)
    -
    [docs] def add_device(self, device): + +
    +[docs] + def add_device(self, device): """Typhos hook for setting the associated device.""" - ...
    + ...
    +
    + -
    [docs]class TyphosTitleLabel(QtWidgets.QLabel): +
    +[docs] +class TyphosTitleLabel(QtWidgets.QLabel): """ A label class intended for use as a standardized title. @@ -598,12 +652,16 @@

    Source code for typhos.display

     
         toggle_requested = QtCore.Signal()
     
    -
    [docs] def mousePressEvent(self, event): +
    +[docs] + def mousePressEvent(self, event): """Overridden qt hook for a mouse press.""" if event.button() == Qt.LeftButton: self.toggle_requested.emit() - super().mousePressEvent(event)
    + super().mousePressEvent(event)
    +
    + class TyphosHelpToggleButton(TyphosToolButton): @@ -862,7 +920,9 @@

    Source code for typhos.display

                 self.hide_help()
     
     
    -
    [docs]class TyphosDisplayTitle(QtWidgets.QFrame, widgets.TyphosDesignerMixin): +
    +[docs] +class TyphosDisplayTitle(QtWidgets.QFrame, widgets.TyphosDesignerMixin): """ Standardized Typhos Device Display title. @@ -895,10 +955,13 @@

    Source code for typhos.display

             self.underline.setFrameShadow(self.underline.Plain)
             self.underline.setLineWidth(10)
     
    +        self.notes_edit = TyphosNotesEdit()
    +
             self.grid_layout = QtWidgets.QGridLayout()
             self.grid_layout.addWidget(self.label, 0, 0)
    -        self.grid_layout.addWidget(self.switcher, 0, 1, Qt.AlignRight)
    -        self.grid_layout.addWidget(self.underline, 1, 0, 1, 2)
    +        self.grid_layout.addWidget(self.switcher, 0, 2, Qt.AlignRight)
    +        self.grid_layout.addWidget(self.notes_edit, 0, 1, Qt.AlignLeft)
    +        self.grid_layout.addWidget(self.underline, 1, 0, 1, 3)
     
             self.help = TyphosHelpFrame()
             if utils.HELP_WEB_ENABLED:
    @@ -934,7 +997,9 @@ 

    Source code for typhos.display

             self.show_switcher = show_switcher
             self.show_underline = show_underline
     
    -
    [docs] def toggle_help(self, show): +
    +[docs] + def toggle_help(self, show): """Toggle the help visibility.""" if self.help is None: return @@ -943,7 +1008,10 @@

    Source code for typhos.display

             if self.help.parent() is None:
                 self.grid_layout.addWidget(self.help, 2, 0, 1, 2)
    -
    [docs] def pop_out_help(self): + +
    +[docs] + def pop_out_help(self): """Pop out the help widget.""" if self.help is None: return @@ -954,6 +1022,7 @@

    Source code for typhos.display

             self.help.show()
             self.help.raise_()
    + @Property(bool) def show_switcher(self): """Get or set whether to show the display switcher.""" @@ -964,14 +1033,20 @@

    Source code for typhos.display

             self._show_switcher = bool(value)
             self.switcher.setVisible(self._show_switcher)
     
    -
    [docs] def add_device(self, device): +
    +[docs] + def add_device(self, device): """Typhos hook for setting the associated device.""" if not self.label.text(): self.label.setText(device.name) + if not self.notes_edit.text(): + self.notes_edit.setup_data(device.name) + if self.help is not None: self.help.add_device(device)
    + @QtCore.Property(bool) def show_underline(self): """Get or set whether to show the underline.""" @@ -982,7 +1057,9 @@

    Source code for typhos.display

             self._show_underline = bool(value)
             self.underline.setVisible(self._show_underline)
     
    -
    [docs] def set_device_display(self, display): +
    +[docs] + def set_device_display(self, display): """Typhos callback: set the :class:`TyphosDeviceDisplay`.""" self.device_display = display @@ -991,6 +1068,7 @@

    Source code for typhos.display

     
             self.label.toggle_requested.connect(toggle)
    + # Make designable properties from the title label available here as well label_alignment = forward_property('label', QtWidgets.QLabel, 'alignment') label_font = forward_property('label', QtWidgets.QLabel, 'font') @@ -1023,7 +1101,10 @@

    Source code for typhos.display

                                                   'midLineWidth')
    -
    [docs]class TyphosDeviceDisplay(utils.TyphosBase, widgets.TyphosDesignerMixin, + +
    +[docs] +class TyphosDeviceDisplay(utils.TyphosBase, widgets.TyphosDesignerMixin, _DisplayTypes): """ Main display for a single ophyd Device. @@ -1076,6 +1157,7 @@

    Source code for typhos.display

     
         device_count_threshold = 0
         signal_count_threshold = 30
    +    template_changed = QtCore.Signal(object)
     
         def __init__(
             self,
    @@ -1270,7 +1352,9 @@ 

    Source code for typhos.display

             except ValueError:
                 ...
     
    -
    [docs] def get_best_template(self, display_type, macros): +
    +[docs] + def get_best_template(self, display_type, macros): """ Get the best template for the given display type. @@ -1291,6 +1375,7 @@

    Source code for typhos.display

             logger.warning("No templates available for display type: %s",
                            self._display_type)
    + def _remove_display(self): """Remove the display widget, readying for a new template.""" display_widget = self._display_widget @@ -1302,7 +1387,9 @@

    Source code for typhos.display

     
             self._display_widget = None
     
    -
    [docs] def load_best_template(self): +
    +[docs] + def load_best_template(self): """Load the best available template for the current display type.""" if self.layout() is None: # If we are not fully initialized yet do not try and add anything @@ -1369,7 +1456,21 @@

    Source code for typhos.display

             self._move_display_to_layout(self._display_widget)
     
             self._update_children()
    -        utils.reload_widget_stylesheet(self)
    + utils.reload_widget_stylesheet(self) + self.updateGeometry() + self.template_changed.emit(template)
    + + +
    +[docs] + def minimumSizeHint(self) -> QtCore.QSize: + if self._scroll_area is None: + return super().minimumSizeHint() + return QtCore.QSize( + self._scroll_area.viewportSizeHint().width(), + super().minimumSizeHint().height(), + )
    + @property def display_widget(self): @@ -1451,7 +1552,9 @@

    Source code for typhos.display

             result.update(**(macros or {}))
             return result
     
    -
    [docs] def add_device(self, device, macros=None): +
    +[docs] + def add_device(self, device, macros=None): """ Add a Device and signals to the TyphosDeviceDisplay. @@ -1486,9 +1589,15 @@

    Source code for typhos.display

                 register_signal(component_walk.item)
             self._searched = False
             self.macros = self._build_macros_from_device(device, macros=macros)
    -        self.load_best_template()
    + self.load_best_template() + + if not self.windowTitle(): + self.setWindowTitle(getattr(device, "name", ""))
    + -
    [docs] def search_for_templates(self): +
    +[docs] + def search_for_templates(self): """Search the filesystem for device-specific templates.""" device = self.device if not device: @@ -1535,7 +1644,10 @@

    Source code for typhos.display

                      if templ not in template_list]
                 )
    -
    [docs] @classmethod + +
    +[docs] + @classmethod def suggest_composite_screen(cls, device_cls): """ Suggest to use the composite screen for the given class. @@ -1571,7 +1683,10 @@

    Source code for typhos.display

             )
             return composite
    -
    [docs] @classmethod + +
    +[docs] + @classmethod def from_device(cls, device, template=None, macros=None, **kwargs): """ Create a new TyphosDeviceDisplay from a Device. @@ -1600,7 +1715,10 @@

    Source code for typhos.display

             display.add_device(device, macros=macros)
             return display
    -
    [docs] @classmethod + +
    +[docs] + @classmethod def from_class(cls, klass, *, template=None, macros=None, **kwargs): """ Create a new TyphosDeviceDisplay from a Device class. @@ -1634,6 +1752,7 @@

    Source code for typhos.display

     
             return cls.from_device(obj, template=template, macros=macros)
    + @classmethod def _get_specific_screens(cls, device_cls): """ @@ -1650,7 +1769,9 @@

    Source code for typhos.display

                 if not utils.is_standard_template(template)
             ]
     
    -
    [docs] def to_image(self): +
    +[docs] + def to_image(self): """ Return the entire display as a QtGui.QImage. @@ -1662,7 +1783,10 @@

    Source code for typhos.display

             if self._display_widget is not None:
                 return utils.widget_to_image(self._display_widget)
    -
    [docs] @Slot() + +
    +[docs] + @Slot() def copy_to_clipboard(self): """Copy the display image to the clipboard.""" image = self.to_image() @@ -1670,6 +1794,7 @@

    Source code for typhos.display

                 clipboard = QtGui.QGuiApplication.clipboard()
                 clipboard.setImage(image)
    + @Slot(object) def _tx(self, value): """Receive information from happi channel.""" @@ -1685,7 +1810,10 @@

    Source code for typhos.display

             )
    -
    [docs]def toggle_display(widget, force_state=None): + +
    +[docs] +def toggle_display(widget, force_state=None): """ Toggle the visibility of all :class:`TyphosSignalPanel` in a display. @@ -1710,7 +1838,10 @@

    Source code for typhos.display

             panel.setVisible(state)
    -
    [docs]def show_empty(widget): + +
    +[docs] +def show_empty(widget): """ Recursively shows all panels and widgets, empty or not. @@ -1725,7 +1856,10 @@

    Source code for typhos.display

         toggle_display(widget, force_state=True)
    -
    [docs]def hide_empty(widget, process_widget=True): + +
    +[docs] +def hide_empty(widget, process_widget=True): """ Recursively hide empty panels and widgets. @@ -1766,6 +1900,7 @@

    Source code for typhos.display

             elif isinstance(widget, typhos_panel.TyphosSignalPanel):
                 overall_status = bool(widget._panel_layout.visible_elements)
             widget.setVisible(overall_status)
    +
    diff --git a/master/_modules/typhos/func.html b/master/_modules/typhos/func.html index 37afd51fe..4b3375fce 100644 --- a/master/_modules/typhos/func.html +++ b/master/_modules/typhos/func.html @@ -3,19 +3,19 @@ - typhos.func — Typhos 2.4.1 documentation + typhos.func — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -530,7 +530,9 @@

    Source code for typhos.func

             return QSize(175, 100)
     
     
    -
    [docs]class FunctionPanel(TogglePanel): +
    +[docs] +class FunctionPanel(TogglePanel): """ Function Panel. @@ -562,7 +564,9 @@

    Source code for typhos.func

             for method in methods:
                 self.add_method(method)
     
    -
    [docs] def add_method(self, func, *args, **kwargs): +
    +[docs] + def add_method(self, func, *args, **kwargs): """ Add a :class:`.FunctionDisplay`. @@ -585,10 +589,14 @@

    Source code for typhos.func

             # the first added method that the panel is visible
             self.show_contents(True)
             self.contents.layout().insertWidget(len(self.methods),
    -                                            widget)
    + widget)
    +
    + -
    [docs]class TyphosMethodButton(QPushButton, TyphosDesignerMixin): +
    +[docs] +class TyphosMethodButton(QPushButton, TyphosDesignerMixin): """ QPushButton to access a method of a Device. @@ -607,7 +615,9 @@

    Source code for typhos.func

             self.clicked.connect(self.execute)
             self.devices = list()
     
    -
    [docs] def add_device(self, device): +
    +[docs] + def add_device(self, device): """ Add a new device to the widget. @@ -618,6 +628,7 @@

    Source code for typhos.func

             logger.debug("Adding device %s ...", device.name)
             self.devices.append(device)
    + @Property(str) def method_name(self): """Name of method on provided Device to execute.""" @@ -638,7 +649,9 @@

    Source code for typhos.func

         def use_status(self, value):
             self._use_status = value
     
    -
    [docs] @Slot() +
    +[docs] + @Slot() def execute(self): """Execute the method given by ``method_name``.""" if not self.devices: @@ -691,12 +704,17 @@

    Source code for typhos.func

                 logger.debug("Starting TyphosStatusThread ...")
                 self._status_thread.start()
    -
    [docs] @classmethod + +
    +[docs] + @classmethod def from_device(cls, device, parent=None): """Create a TyphosMethodButton from a device.""" instance = cls(parent=parent) instance.add_device(device) - return instance
    + return instance
    +
    +
    diff --git a/master/_modules/typhos/panel.html b/master/_modules/typhos/panel.html index a0734863a..e2442a02f 100644 --- a/master/_modules/typhos/panel.html +++ b/master/_modules/typhos/panel.html @@ -3,19 +3,19 @@ - typhos.panel — Typhos 2.4.1 documentation + typhos.panel — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -171,7 +171,9 @@

    Source code for typhos.panel

         """
     
     
    -
    [docs]class SignalPanel(QtWidgets.QGridLayout): +
    +[docs] +class SignalPanel(QtWidgets.QGridLayout): """ Basic panel layout for :class:`ophyd.Signal` and other ophyd objects. @@ -331,7 +333,9 @@

    Source code for typhos.panel

                 label.setToolTip(tooltip)
             return label
     
    -
    [docs] def add_signal(self, signal, name=None, *, tooltip=None): +
    +[docs] + def add_signal(self, signal, name=None, *, tooltip=None): """ Add a signal to the panel. @@ -388,6 +392,7 @@

    Source code for typhos.panel

             self._connect_signal(signal)
             return row
    + def _connect_signal(self, signal): """Instantiate widgets for the given signal using the global cache.""" monitor = get_global_widget_type_cache() @@ -433,7 +438,9 @@

    Source code for typhos.panel

     
             return row
     
    -
    [docs] def label_text_from_attribute(self, attr, dotted_name): +
    +[docs] + def label_text_from_attribute(self, attr, dotted_name): """ Get label text for a given attribute. @@ -443,7 +450,10 @@

    Source code for typhos.panel

             """
             return dotted_name
    -
    [docs] def add_row(self, *widgets, **kwargs): + +
    +[docs] + def add_row(self, *widgets, **kwargs): """ Add ``widgets`` to the next row. @@ -468,6 +478,7 @@

    Source code for typhos.panel

     
             return row
    + def _update_row(self, row, widgets, **kwargs): """ Update ``row`` to contain ``widgets``. @@ -497,7 +508,9 @@

    Source code for typhos.panel

                 colspan = self.NUM_COLS - last_column
                 self.addWidget(last_widget, row, last_column, 1, colspan, **kwargs)
     
    -
    [docs] def add_pv(self, read_pv, name, write_pv=None): +
    +[docs] + def add_pv(self, read_pv, name, write_pv=None): """ Add a row, given PV names. @@ -526,6 +539,7 @@

    Source code for typhos.panel

                 sig = EpicsSignalRO(read_pv, name=name)
             return self.add_signal(sig, name)
    + @staticmethod def _apply_name_filter(filter_by, *items): """ @@ -618,7 +632,9 @@

    Source code for typhos.panel

                 del self.signal_name_to_info[signal_name]
             self._connect_signal(signal)
     
    -
    [docs] def filter_signals(self, kinds, name_filter=None): +
    +[docs] + def filter_signals(self, kinds, name_filter=None): """ Filter signals based on the given kinds. @@ -637,6 +653,7 @@

    Source code for typhos.panel

                 self._set_visible(name, visible)
     
             self.update()
    + # utils.dump_grid_layout(self) @property @@ -644,7 +661,9 @@

    Source code for typhos.panel

             """Get the current filter settings from the owner widget."""
             return self.parent().filter_settings
     
    -
    [docs] def add_device(self, device): +
    +[docs] + def add_device(self, device): """Typhos hook for adding a new device.""" self.clear() self._devices.append(device) @@ -662,6 +681,7 @@

    Source code for typhos.panel

     
             self.setSizeConstraint(self.SetMinimumSize)
    + def _maybe_add_signal(self, device, attr, dotted_name, component): """ With the filter settings, add either the signal or a component stub. @@ -712,15 +732,21 @@

    Source code for typhos.panel

     
             return self._add_component(device, attr, dotted_name, component)
     
    -
    [docs] def clear(self): +
    +[docs] + def clear(self): """Clear the SignalPanel.""" logger.debug("Clearing layout %r ...", self) utils.clear_layout(self) self._devices.clear() - self.signal_name_to_info.clear()
    + self.signal_name_to_info.clear()
    +
    -
    [docs]class TyphosSignalPanel(TyphosBase, TyphosDesignerMixin, SignalOrder): + +
    +[docs] +class TyphosSignalPanel(TyphosBase, TyphosDesignerMixin, SignalOrder): """ Panel of Signals for a given device, using :class:`SignalPanel`. @@ -832,7 +858,9 @@

    Source code for typhos.panel

                 self._signal_order = value
                 self._update_panel()
     
    -
    [docs] def add_device(self, device): +
    +[docs] + def add_device(self, device): """Typhos hook for adding a new device.""" self.devices.clear() super().add_device(device) @@ -840,11 +868,17 @@

    Source code for typhos.panel

             self._panel_layout.add_device(device)
             self._update_panel()
    -
    [docs] def set_device_display(self, display): + +
    +[docs] + def set_device_display(self, display): """Typhos hook for when the TyphosDeviceDisplay is associated.""" self.display = display
    -
    [docs] def generate_context_menu(self): + +
    +[docs] + def generate_context_menu(self): """Generate a context menu for this TyphosSignalPanel.""" menu = QtWidgets.QMenu(parent=self) menu.addSection('Kinds') @@ -858,7 +892,10 @@

    Source code for typhos.panel

                 action.triggered.connect(selected)
             return menu
    -
    [docs] def open_context_menu(self, ev): + +
    +[docs] + def open_context_menu(self, ev): """ Open a context menu when the Default Context Menu is requested. @@ -867,10 +904,14 @@

    Source code for typhos.panel

             ev : QEvent
             """
             menu = self.generate_context_menu()
    -        menu.exec_(self.mapToGlobal(ev.pos()))
    + menu.exec_(self.mapToGlobal(ev.pos()))
    +
    -
    [docs]class CompositeSignalPanel(SignalPanel): + +
    +[docs] +class CompositeSignalPanel(SignalPanel): """ Composite panel layout for :class:`ophyd.Signal` and other ophyd objects. @@ -905,12 +946,17 @@

    Source code for typhos.panel

             super().__init__(signals=None)
             self._containers = {}
     
    -
    [docs] def label_text_from_attribute(self, attr, dotted_name): +
    +[docs] + def label_text_from_attribute(self, attr, dotted_name): """Get label text for a given attribute.""" # For a hierarchical signal panel, use only the attribute name. return attr
    -
    [docs] def add_sub_device(self, device, name): + +
    +[docs] + def add_sub_device(self, device, name): """ Add a sub-device to the next row. @@ -931,7 +977,10 @@

    Source code for typhos.panel

             self.add_row(container)
             container.add_device(device)
    -
    [docs] def add_device(self, device): + +
    +[docs] + def add_device(self, device): """Typhos hook for adding a new device.""" # TODO: note that this does not call super # super().add_device(device) @@ -948,6 +997,7 @@

    Source code for typhos.panel

                 else:
                     self._maybe_add_signal(device, attr, attr, component)
    + @property def visible_elements(self): """Return all visible signals and components.""" @@ -960,7 +1010,10 @@

    Source code for typhos.panel

             return sigs
    -
    [docs]class TyphosCompositeSignalPanel(TyphosSignalPanel): + +
    +[docs] +class TyphosCompositeSignalPanel(TyphosSignalPanel): """ Hierarchical panel for a device, using :class:`CompositeSignalPanel`. @@ -974,6 +1027,7 @@

    Source code for typhos.panel

         """
     
         _panel_class = CompositeSignalPanel
    +
    diff --git a/master/_modules/typhos/plugins/core.html b/master/_modules/typhos/plugins/core.html index 508cf7a27..a9e0edd55 100644 --- a/master/_modules/typhos/plugins/core.html +++ b/master/_modules/typhos/plugins/core.html @@ -3,19 +3,19 @@ - typhos.plugins.core — Typhos 2.4.1 documentation + typhos.plugins.core — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -105,7 +105,9 @@

    Source code for typhos.plugins.core

     signal_registry = dict()
     
     
    -
    [docs]def register_signal(signal): +
    +[docs] +def register_signal(signal): """ Add a new Signal to the registry. @@ -147,7 +149,10 @@

    Source code for typhos.plugins.core

             signal_registry[name] = signal
    -
    [docs]class SignalConnection(PyDMConnection): + +
    +[docs] +class SignalConnection(PyDMConnection): """ Connection to monitor an Ophyd Signal. @@ -184,7 +189,9 @@

    Source code for typhos.plugins.core

             # Add listener
             self.add_listener(channel)
     
    -
    [docs] def cast(self, value): +
    +[docs] + def cast(self, value): """ Cast a value to the correct Python type based on ``signal_type``. @@ -211,7 +218,10 @@

    Source code for typhos.plugins.core

                 value = self.signal_type(value)
             return value
    -
    [docs] @Slot(int) + +
    +[docs] + @Slot(int) @Slot(float) @Slot(str) @Slot(np.ndarray) @@ -231,7 +241,10 @@

    Source code for typhos.plugins.core

                 logger.exception("Unable to put %r to %s", new_val, self.address)
                 raise_to_operator(exc)
    -
    [docs] def send_new_value(self, value=None, **kwargs): + +
    +[docs] + def send_new_value(self, value=None, **kwargs): """ Update the UI with a new value from the Signal. """ @@ -242,7 +255,10 @@

    Source code for typhos.plugins.core

                 logger.exception("Unable to update %r with value %r.",
                                  self.signal.name, value)
    -
    [docs] def send_new_meta( + +
    +[docs] + def send_new_meta( self, connected=None, write_access=None, @@ -280,7 +296,10 @@

    Source code for typhos.plugins.core

                 severity = AlarmSeverity.NO_ALARM
             self.new_severity_signal.emit(severity)
    -
    [docs] def add_listener(self, channel): + +
    +[docs] + def add_listener(self, channel): """ Add a listener channel to this connection. @@ -315,7 +334,10 @@

    Source code for typhos.plugins.core

                         logger.debug("%s has no value_signal for type %s",
                                      channel.address, _typ)
    -
    [docs] def remove_listener(self, channel, destroying=False, **kwargs): + +
    +[docs] + def remove_listener(self, channel, destroying=False, **kwargs): """ Remove a listener channel from this connection. @@ -335,13 +357,20 @@

    Source code for typhos.plugins.core

             super().remove_listener(channel, destroying=destroying, **kwargs)
             logger.debug("Successfully removed %r", channel)
    -
    [docs] def close(self): + +
    +[docs] + def close(self): """Unsubscribe from the Ophyd signal.""" self.signal.unsubscribe(self.value_cid) - self.signal.unsubscribe(self.meta_cid)
    + self.signal.unsubscribe(self.meta_cid)
    +
    -
    [docs]class SignalPlugin(PyDMPlugin): + +
    +[docs] +class SignalPlugin(PyDMPlugin): """Plugin registered with PyDM to handle SignalConnection.""" protocol = 'sig' connection_class = SignalConnection @@ -361,6 +390,7 @@

    Source code for typhos.plugins.core

             except Exception:
                 logger.exception("Unable to create a connection to %r",
                                  channel)
    +
    diff --git a/master/_modules/typhos/plugins/happi.html b/master/_modules/typhos/plugins/happi.html index 5245db457..28349c42d 100644 --- a/master/_modules/typhos/plugins/happi.html +++ b/master/_modules/typhos/plugins/happi.html @@ -3,19 +3,19 @@ - typhos.plugins.happi — Typhos 2.4.1 documentation + typhos.plugins.happi — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -104,7 +104,9 @@

    Source code for typhos.plugins.happi

     logger = logging.getLogger(__name__)
     
     
    -
    [docs]def register_client(client): +
    +[docs] +def register_client(client): """ Register a Happi Client to be used with the DataPlugin. @@ -114,7 +116,10 @@

    Source code for typhos.plugins.happi

         HappiClientState.client = client
    -
    [docs]class HappiConnection(PyDMConnection): + +
    +[docs] +class HappiConnection(PyDMConnection): """A PyDMConnection to the Happi Database.""" tx = QtCore.Signal(dict) @@ -122,7 +127,9 @@

    Source code for typhos.plugins.happi

             super().__init__(channel, address, protocol=protocol, parent=parent)
             self.add_listener(channel)
     
    -
    [docs] def add_listener(self, channel): +
    +[docs] + def add_listener(self, channel): """Add a new channel to the existing connection.""" super().add_listener(channel) # Connect our channel to the signal @@ -145,14 +152,21 @@

    Source code for typhos.plugins.happi

             # Send the device and metdata to all of our subscribers
             self.tx.emit({'obj': obj, 'md': md})
    -
    [docs] def remove_listener(self, channel, destroying=False, **kwargs): + +
    +[docs] + def remove_listener(self, channel, destroying=False, **kwargs): """Remove a channel from the database connection.""" super().remove_listener(channel, destroying=destroying, **kwargs) if not destroying: - self.tx.disconnect(channel.tx_slot)
    + self.tx.disconnect(channel.tx_slot)
    +
    -
    [docs]class HappiPlugin(PyDMPlugin): + +
    +[docs] +class HappiPlugin(PyDMPlugin): protocol = 'happi' connection_class = HappiConnection @@ -171,6 +185,7 @@

    Source code for typhos.plugins.happi

                                  exc, channel.address)
             except Exception:
                 logger.exception("Unable to load %r from happi", channel.address)
    +
    diff --git a/master/_modules/typhos/positioner.html b/master/_modules/typhos/positioner.html index 99fad5206..42fbeff63 100644 --- a/master/_modules/typhos/positioner.html +++ b/master/_modules/typhos/positioner.html @@ -3,19 +3,19 @@ - typhos.positioner — Typhos 2.4.1 documentation + typhos.positioner — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -95,14 +95,16 @@

    Source code for typhos.positioner

     from pydm.widgets.channel import PyDMChannel
     from qtpy import QtCore, QtWidgets, uic
     
    -from . import utils, widgets
    +from . import dynamic_font, utils, widgets
     from .alarm import KindLevel, _KindLevel
     from .status import TyphosStatusThread
     
     logger = logging.getLogger(__name__)
     
     
    -
    [docs]class TyphosPositionerWidget( +
    +[docs] +class TyphosPositionerWidget( utils.TyphosBase, widgets.TyphosDesignerMixin, _KindLevel, @@ -207,6 +209,8 @@

    Source code for typhos.positioner

             self.show_expert_button = False
             self._after_set_moving(False)
     
    +        dynamic_font.patch_widget(self.ui.user_readback, pad_percent=0.01)
    +
         def _clear_status_thread(self):
             """Clear a previous status thread."""
             if self._status_thread is None:
    @@ -279,7 +283,9 @@ 

    Source code for typhos.positioner

         def combo_set(self, index):
             self.set()
     
    -
    [docs] @QtCore.Slot() +
    +[docs] + @QtCore.Slot() def set(self): """Set the device to the value configured by ``ui.set_value``""" if not self.device: @@ -297,7 +303,10 @@

    Source code for typhos.positioner

                 utils.reload_widget_stylesheet(self, cascade=True)
                 utils.raise_to_operator(exc)
    -
    [docs] def tweak(self, offset): + +
    +[docs] + def tweak(self, offset): """Tweak by the given ``offset``.""" try: setpoint = self._get_position() + float(offset) @@ -308,7 +317,10 @@

    Source code for typhos.positioner

             self.ui.set_value.setText(str(setpoint))
             self.set()
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() def positive_tweak(self): """Tweak positive by the amount listed in ``ui.tweak_value``""" try: @@ -316,7 +328,10 @@

    Source code for typhos.positioner

             except Exception:
                 logger.exception('Tweak failed')
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() def negative_tweak(self): """Tweak negative by the amount listed in ``ui.tweak_value``""" try: @@ -324,14 +339,20 @@

    Source code for typhos.positioner

             except Exception:
                 logger.exception('Tweak failed')
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() def stop(self): """Stop device""" for device in self.devices: # success=True means expected stop device.stop(success=True)
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() def clear_error(self): """ Clear the error messages from the device and screen. @@ -352,6 +373,7 @@

    Source code for typhos.positioner

                 self._last_move = None
             utils.reload_widget_stylesheet(self, cascade=True)
    + def _get_position(self): if not self._readback: raise Exception("No Device configured for widget!") @@ -404,7 +426,11 @@

    Source code for typhos.positioner

             except Exception:
                 ...
             else:
    -            if low_limit < high_limit:
    +            if low_limit is None or high_limit is None:
    +                # Some devices may erroneously report `None` limits.
    +                # TyphosPositioner will hide the limit labels in this scenario.
    +                ...
    +            elif low_limit < high_limit:
                     self.ui.low_limit.setText(str(low_limit))
                     self.ui.high_limit.setText(str(high_limit))
                     return
    @@ -474,7 +500,9 @@ 

    Source code for typhos.positioner

             except Exception:
                 ...
     
    -
    [docs] def add_device(self, device): +
    +[docs] + def add_device(self, device): """Add a device to the widget""" # Add device to cache self.devices.clear() # only one device allowed @@ -510,6 +538,7 @@

    Source code for typhos.positioner

             self.ui.alarm_circle.clear_all_alarm_configs()
             self.ui.alarm_circle.add_device(device)
    + @QtCore.Property(bool, designable=False) def moving(self): """ @@ -681,11 +710,14 @@

    Source code for typhos.positioner

             if kind_level != self.alarmKindLevel:
                 self.ui.alarm_circle.kindLevel = kind_level
     
    -
    [docs] def move_changed(self): +
    +[docs] + def move_changed(self): """Called when a move is begun""" logger.debug("Begin showing move in TyphosPositionerWidget") self.moving = True
    + def _set_status_text(self, text, *, max_length=60): """Set the status text label to ``text``.""" if len(text) >= max_length: @@ -733,7 +765,9 @@

    Source code for typhos.positioner

                     self._initialized = True
                     self.ui.set_value.setText(text)
     
    -
    [docs] def update_alarm_text(self, alarm_level): +
    +[docs] + def update_alarm_text(self, alarm_level): """ Label the alarm circle with a short text bit. """ @@ -748,7 +782,9 @@

    Source code for typhos.positioner

                 text = 'no conn'
             else:
                 text = 'invalid'
    -        self.ui.alarm_label.setText(text)
    + self.ui.alarm_label.setText(text)
    +
    + def clear_error_in_background(device): diff --git a/master/_modules/typhos/suite.html b/master/_modules/typhos/suite.html index 7908415a0..f2b196517 100644 --- a/master/_modules/typhos/suite.html +++ b/master/_modules/typhos/suite.html @@ -3,19 +3,19 @@ - typhos.suite — Typhos 2.4.1 documentation + typhos.suite — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -95,8 +95,10 @@

    Source code for typhos.suite

     
     import logging
     import os
    +import pathlib
     import textwrap
     from functools import partial
    +from typing import Optional, Union
     
     import ophyd
     import pcdsutils.qt
    @@ -107,7 +109,7 @@ 

    Source code for typhos.suite

     
     from . import utils, widgets
     from .display import DisplayTypes, ScrollOptions, TyphosDeviceDisplay
    -from .tools import TyphosConsole, TyphosLogDisplay, TyphosTimePlot
    +from .tools import TyphosLogDisplay, TyphosTimePlot
     from .utils import TyphosBase, clean_attr, clean_name, flatten_tree, save_suite
     
     logger = logging.getLogger(__name__)
    @@ -288,7 +290,9 @@ 

    Source code for typhos.suite

             )
     
     
    -
    [docs]class TyphosSuite(TyphosBase): +
    +[docs] +class TyphosSuite(TyphosBase): """ This suite combines tools and devices into a single widget. @@ -328,9 +332,10 @@

    Source code for typhos.suite

         DEFAULT_TITLE = 'Typhos Suite'
         DEFAULT_TITLE_DEVICE = 'Typhos Suite - {device.name}'
     
    -    default_tools = {'Log': TyphosLogDisplay,
    -                     'StripTool': TyphosTimePlot,
    -                     'Console': TyphosConsole}
    +    default_tools = {
    +        "Log": TyphosLogDisplay,
    +        "StripTool": TyphosTimePlot,
    +    }
     
         def __init__(
             self,
    @@ -382,7 +387,9 @@ 

    Source code for typhos.suite

             self.default_display_type = default_display_type
             self.scroll_option = scroll_option
     
    -
    [docs] def add_subdisplay(self, name, display, category): +
    +[docs] + def add_subdisplay(self, name, display, category): """ Add an arbitrary widget to the tree of available widgets and tools. @@ -404,7 +411,10 @@

    Source code for typhos.suite

             parameter = SidebarParameter(value=display, name=name)
             self._add_to_sidebar(parameter, category)
    -
    [docs] def add_lazy_subdisplay( + +
    +[docs] + def add_lazy_subdisplay( self, name: str, display_class: type[QtWidgets.QWidget], category: str ): """ @@ -431,6 +441,7 @@

    Source code for typhos.suite

             )
             self._add_to_sidebar(parameter, category)
    + @property def top_level_groups(self): """ @@ -447,7 +458,9 @@

    Source code for typhos.suite

                     root.child(idx).param
                     for idx in range(root.childCount())}
     
    -
    [docs] def add_tool(self, name: str, tool: type[QtWidgets.QWidget]): +
    +[docs] + def add_tool(self, name: str, tool: type[QtWidgets.QWidget]): """ Add a widget to the toolbar. @@ -467,13 +480,16 @@

    Source code for typhos.suite

             """
             self.add_lazy_subdisplay(name, tool, "Tools")
    -
    [docs] def get_subdisplay(self, display): + +
    +[docs] + def get_subdisplay(self, display): """ Get a subdisplay by name or contained device. Parameters ---------- - display :str or Device + display : str or Device Name of screen or device Returns @@ -511,22 +527,34 @@

    Source code for typhos.suite

                 display.setValue(subdisplay)
             return subdisplay
    -
    [docs] @QtCore.Slot(str) + +
    +[docs] + @QtCore.Slot(str) @QtCore.Slot(object) - def show_subdisplay(self, widget): + def show_subdisplay( + self, + widget: Union[QtWidgets.QWidget, SidebarParameter, str], + ) -> QtWidgets.QWidget: """ Open a display in the dock system. Parameters ---------- - widget: QWidget, SidebarParameter or str + widget : QWidget, SidebarParameter or str If given a ``SidebarParameter`` from the tree, the widget will be shown and the sidebar item update. Otherwise, the information is passed to :meth:`.get_subdisplay` + + Returns + ------- + widget : QWidget + The subdisplay that was shown. """ # Grab true widget if not isinstance(widget, QtWidgets.QWidget): widget = self.get_subdisplay(widget) + # Setup the dock dock = widgets.SubDisplay(self) # Set sidebar properly @@ -549,9 +577,26 @@

    Source code for typhos.suite

                 )
                 self._content_frame.layout().setAlignment(
                     dock, QtCore.Qt.AlignTop
    -            )
    + ) + + self._new_template() + if isinstance(widget, TyphosDeviceDisplay): + widget.template_changed.connect(self._new_template) + return widget
    -
    [docs] @QtCore.Slot(str) + + def _new_template(self, template: Optional[pathlib.Path] = None) -> None: + """Hook for when a new template is selected in a sub-display.""" + if self.parent() is not None: + return + + new_width = self.minimumSizeHint().width() + if self.width() < new_width: + self.resize(new_width, self.height()) + +
    +[docs] + @QtCore.Slot(str) @QtCore.Slot(object) def embed_subdisplay(self, widget): """Embed a display in the dock system.""" @@ -574,7 +619,10 @@

    Source code for typhos.suite

             self.embedded_dock.widget().layout().insertWidget(widget_count - 1,
                                                               widget)
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() @QtCore.Slot(object) def hide_subdisplay(self, widget): """ @@ -614,7 +662,10 @@

    Source code for typhos.suite

             else:
                 widget.hide()
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() def hide_subdisplays(self): """Hide all open displays.""" # Grab children from devices @@ -622,6 +673,7 @@

    Source code for typhos.suite

                 for param in flatten_tree(group)[1:]:
                     self.hide_subdisplay(param)
    + @property def tools(self): """Tools loaded into the suite.""" @@ -644,7 +696,9 @@

    Source code for typhos.suite

     
             self.setWindowTitle(title_fmt.format(self=self, device=device))
     
    -
    [docs] def add_device(self, device, children=True, category='Devices'): +
    +[docs] + def add_device(self, device, children=True, category='Devices'): """ Add a device to the suite. @@ -677,7 +731,10 @@

    Source code for typhos.suite

                     logger.exception("Unable to add %s to tool %s",
                                      device.name, type(tool))
    -
    [docs] @classmethod + +
    +[docs] + @classmethod def from_device( cls, device: Device, @@ -741,7 +798,10 @@

    Source code for typhos.suite

                                     show_displays=show_displays,
                                     **kwargs)
    -
    [docs] @classmethod + +
    +[docs] + @classmethod def from_devices( cls, devices: list[Device], @@ -826,7 +886,10 @@

    Source code for typhos.suite

                                      device.name)
             return suite
    -
    [docs] def save(self): + +
    +[docs] + def save(self): """ Save suite settings to a file using :meth:`typhos.utils.save_suite`. @@ -853,9 +916,73 @@

    Source code for typhos.suite

             else:
                 logger.debug("No filename chosen")
    + # Add the template to the docstring save.__doc__ += textwrap.indent('\n' + utils.saved_template, '\t\t') +
    +[docs] + def save_screenshot( + self, + filename: str, + ) -> bool: + """Save a screenshot of this widget to ``filename``.""" + + image = utils.take_widget_screenshot(self) + if image is None: + logger.warning("Failed to take screenshot") + return False + + logger.info( + "Saving screenshot of suite titled '%s' to '%s'", + self.windowTitle(), filename, + ) + image.save(filename) + return True
    + + +
    +[docs] + def save_device_screenshots( + self, + filename_format: str, + ) -> dict[str, str]: + """Save screenshot(s) of devices to ``filename_format``.""" + + filenames = {} + for device in self.devices: + display = self.get_subdisplay(device) + + if hasattr(display, "to_image"): + image = display.to_image() + else: + # This is a fallback for if/when we don't have a TyphosDisplay + image = utils.take_widget_screenshot(display) + + suite_title = self.windowTitle() + widget_title = display.windowTitle() + if image is None: + logger.warning( + "Failed to take screenshot of device: %s in %s", + device.name, suite_title, + ) + continue + + filename = filename_format.format( + suite_title=suite_title, + widget_title=widget_title, + device=device, + name=device.name, + ) + logger.info( + "Saving screenshot of '%s': '%s' to '%s'", + suite_title, widget_title, filename, + ) + image.save(filename) + filenames[device.name] = filename + return filenames
    + + def _get_sidebar(self, widget): items = {} for group in self.top_level_groups.values(): @@ -908,6 +1035,7 @@

    Source code for typhos.suite

                     parameter, parameter.sigEmbed, self.embed_subdisplay, parameter
                 )
             return parameter
    +
    diff --git a/master/_modules/typhos/textedit.html b/master/_modules/typhos/textedit.html index 4f264a7e4..102289548 100644 --- a/master/_modules/typhos/textedit.html +++ b/master/_modules/typhos/textedit.html @@ -3,19 +3,19 @@ - typhos.textedit — Typhos 2.4.1 documentation + typhos.textedit — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -105,7 +105,9 @@

    Source code for typhos.textedit

     logger = logging.getLogger(__name__)
     
     
    -
    [docs]@variety.uses_key_handlers +
    +[docs] +@variety.uses_key_handlers @variety.use_for_variety_write('text-multiline') class TyphosTextEdit(QtWidgets.QWidget, PyDMWritableWidget): """ @@ -163,12 +165,15 @@

    Source code for typhos.textedit

         def _send_clicked(self):
             self.send_value()
     
    -
    [docs] def value_changed(self, value): +
    +[docs] + def value_changed(self, value): """Receive and update the TyphosTextEdit for a new channel value.""" self._raw_value = value super().value_changed(self._from_wire(value)) self.set_display()
    + def _to_wire(self, text=None): """TextEdit text -> numpy array.""" if text is None: @@ -188,7 +193,9 @@

    Source code for typhos.textedit

         def _set_text(self, text):
             return self._text_edit.setText(text)
     
    -
    [docs] def send_value(self): +
    +[docs] + def send_value(self): """Emit a :attr:`send_value_signal` to update channel value.""" send_value = self._to_wire() @@ -203,7 +210,10 @@

    Source code for typhos.textedit

     
             self._text_edit.document().setModified(False)
    -
    [docs] def write_access_changed(self, new_write_access): + +
    +[docs] + def write_access_changed(self, new_write_access): """ Change the TyphosTextEdit to read only if write access is denied """ @@ -212,7 +222,10 @@

    Source code for typhos.textedit

             self._send_button.setVisible(new_write_access)
             self._revert_button.setVisible(new_write_access)
    -
    [docs] def set_display(self): + +
    +[docs] + def set_display(self): """Set the text display of the TyphosTextEdit.""" if self.value is None or self._text_edit.document().isModified(): return @@ -220,6 +233,7 @@

    Source code for typhos.textedit

             self._display_text = str(self.value)
             self._set_text(self._display_text)
    + variety_metadata = variety.create_variety_property() def _reinterpret_text(self): @@ -242,6 +256,7 @@

    Source code for typhos.textedit

             if format_ != 'plain':
                 logger.warning('Non-plain formats not yet implemented.')
             self._reinterpret_text()
    +
    diff --git a/master/_modules/typhos/tools/console.html b/master/_modules/typhos/tools/console.html deleted file mode 100644 index 6bfd268ef..000000000 --- a/master/_modules/typhos/tools/console.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - typhos.tools.console — Typhos 2.4.1 documentation - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -

    Source code for typhos.tools.console

    -import logging
    -import threading
    -
    -from qtconsole.manager import QtKernelManager
    -from qtconsole.rich_jupyter_widget import RichJupyterWidget
    -from qtpy import QtCore, QtWidgets
    -
    -from .. import utils
    -
    -logger = logging.getLogger(__name__)
    -
    -
    -def _make_jupyter_widget_with_kernel(kernel_name):
    -    """
    -    Start a kernel, connect to it, and create a RichJupyterWidget to use it.
    -
    -    Parameters
    -    ----------
    -    kernel_name : str
    -        Kernel name to use.
    -    """
    -    kernel_manager = QtKernelManager(kernel_name=kernel_name)
    -    kernel_manager.start_kernel()
    -
    -    kernel_client = kernel_manager.client()
    -    kernel_client.start_channels()
    -
    -    jupyter_widget = RichJupyterWidget()
    -    jupyter_widget.kernel_manager = kernel_manager
    -    jupyter_widget.kernel_client = kernel_client
    -    return jupyter_widget
    -
    -
    -
    [docs]class TyphosConsole(utils.TyphosBase): - """ - IPython Widget for Typhos Display. - - This widget handles starting a ``JupyterKernel`` and connecting an IPython - console in which the user can type Python commands. It is important to note - that the kernel in which commands are executed is a completely separate - process. This protects the user against locking themselves out of the GUI, - but makes it difficult to pass the Device.. - - To get around this caveat, this widget uses ``happi`` to pass the Device - between the processes. This is not a strict requirement, but if ``happi`` - is not installed, users will need to create a custom ``add_device`` method - if they want their devices loaded in both the GUI and console. - """ - - device_added = QtCore.Signal(object) - kernel_ready = QtCore.Signal() - kernel_shut_down = QtCore.Signal() - -
    [docs] def __init__(self, parent=None): - super().__init__(parent=parent) - self._shutting_down = False - - # Setup widget - self.jupyter_widget = _make_jupyter_widget_with_kernel('python3') - self.jupyter_widget.syntax_style = 'monokai' - self.jupyter_widget.set_default_style(colors='Linux') - self.jupyter_widget.kernel_manager.kernel_restarted.connect( - self._handle_kernel_restart - ) - - # Setup kernel readiness checks - self._ready_lock = threading.Lock() - self._kernel_is_ready = False - self._pending_devices = [] - self._pending_commands = [] - - self._device_history = set() - - self._check_readiness_timer = QtCore.QTimer() - self._check_readiness_timer.setInterval(100) - self._check_readiness_timer.timeout.connect(self._wait_for_readiness) - self._check_readiness_timer.start() - self.kernel_ready.connect(self._add_pending_devices) - - # Set the layout - self.setLayout(QtWidgets.QHBoxLayout()) - self.layout().setContentsMargins(0, 0, 0, 0) - self.layout().addWidget(self.jupyter_widget) - - # Ensure we shutdown the kernel - app = QtWidgets.QApplication.instance() - app.aboutToQuit.connect(lambda: self.shutdown(block=True)) - - self.device_added.connect(self._add_device_history)
    - - @property - def kernel_is_ready(self): - """Is the Jupyter kernel ready?""" - return self.kernel_is_alive and self._kernel_is_read - - @property - def kernel_is_alive(self): - """Is the Jupyter kernel alive and not shutting down?""" - return (self.jupyter_widget.kernel_manager.is_alive() and - not self._shutting_down) - - def _add_pending_devices(self): - """Add devices that were requested prior to the kernel being ready.""" - with self._ready_lock: - self._kernel_is_ready = True - - for command in self._pending_commands: - self.execute(command) - - for device in self._pending_devices: - self._add_device(device) - - self._pending_commands = [] - self._pending_devices = [] - - def _wait_for_readiness(self): - """Wait for the kernel to show the prompt.""" - - def looks_ready(text): - return any(line.startswith('In ') for line in text.splitlines()) - - if looks_ready(self._plain_text): - self.kernel_ready.emit() - self._check_readiness_timer.stop() - - def sizeHint(self): - default = super().sizeHint() - default.setWidth(600) - return default - - def shutdown(self, *, block=False): - """Shutdown the Jupyter Kernel.""" - client = self.jupyter_widget.kernel_client - if self._shutting_down: - logger.debug("Kernel is already shutting down") - return - - self._shutting_down = True - logger.debug("Stopping Jupyter Client") - - def cleanup(): - self.jupyter_widget.kernel_manager.shutdown_kernel() - self.kernel_shut_down.emit() - - client.stop_channels() - if block: - cleanup() - else: - QtCore.QTimer.singleShot(0, cleanup) - - def add_device(self, device): - # Add the device after a short delay to allow the console widget time - # to get initialized - with self._ready_lock: - if not self._kernel_is_ready: - self._pending_devices.append(device) - return - - self._add_device(device) - - @property - def _plain_text(self): - """ - Text in the console. - """ - return self.jupyter_widget._control.toPlainText() - - def execute(self, script, *, echo=True, check_readiness=True): - """ - Execute some code in the console. - """ - if echo: - # Can't seem to get `interactive` or `hidden=False` working: - script = '\n'.join((f"print({repr(script)})", script)) - - if check_readiness: - with self._ready_lock: - if not self._kernel_is_ready: - self._pending_commands.append(script) - return - - self.jupyter_widget.kernel_client.execute(script) - - def _add_device(self, device): - try: - script = utils.code_from_device(device) - self.execute(script) - except Exception: - # Prevent traceback from being displayed - logger.error("Unable to add device %r to TyphosConsole.", - device.name) - else: - self.device_added.emit(device) - - def _handle_kernel_restart(self): - logger.debug('Kernel was restarted.') - for dev in self._device_history: - self.add_device(dev) - - def _add_device_history(self, device): - self._device_history.add(device)
    -
    - -
    -
    -
    - -
    - -
    -

    © Copyright 2023, SLAC National Accelerator Laboratory.

    -
    - - Built with Sphinx using a - theme - provided by Read the Docs. - - -
    -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/master/_modules/typhos/tools/log.html b/master/_modules/typhos/tools/log.html index 8aef1cf69..46e20ea0b 100644 --- a/master/_modules/typhos/tools/log.html +++ b/master/_modules/typhos/tools/log.html @@ -3,19 +3,19 @@ - typhos.tools.log — Typhos 2.4.1 documentation + typhos.tools.log — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -96,9 +96,13 @@

    Source code for typhos.tools.log

     from ..utils import TyphosBase
     
     
    -
    [docs]class TyphosLogDisplay(TyphosBase): +
    +[docs] +class TyphosLogDisplay(TyphosBase): """Typhos Logging Display.""" -
    [docs] def __init__(self, level=logging.INFO, parent=None): +
    +[docs] + def __init__(self, level=logging.INFO, parent=None): super().__init__(parent=parent) # Set the logname to be non-existant so that we do not attach to the # root logger. This causes issue if this widget is closed before the @@ -109,6 +113,7 @@

    Source code for typhos.tools.log

             self.setLayout(QVBoxLayout())
             self.layout().addWidget(self.logdisplay)
    + def add_device(self, device): """Add a device to the logging display.""" super().add_device(device) @@ -121,6 +126,7 @@

    Source code for typhos.tools.log

                 device.log.setLevel(logging.NOTSET)
                 logger = getattr(device.log, 'logger', device.log)
                 logger.addHandler(self.logdisplay.handler)
    +
    diff --git a/master/_modules/typhos/tools/plot.html b/master/_modules/typhos/tools/plot.html index f921a1e1a..0db229d95 100644 --- a/master/_modules/typhos/tools/plot.html +++ b/master/_modules/typhos/tools/plot.html @@ -3,19 +3,19 @@ - typhos.tools.plot — Typhos 2.4.1 documentation + typhos.tools.plot — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -106,7 +106,9 @@

    Source code for typhos.tools.plot

     logger = logging.getLogger(__name__)
     
     
    -
    [docs]class TyphosTimePlot(utils.TyphosBase): +
    +[docs] +class TyphosTimePlot(utils.TyphosBase): """ Generalized widget for plotting Ophyd signals. @@ -118,7 +120,9 @@

    Source code for typhos.tools.plot

         parent : QWidget
         """
     
    -
    [docs] def __init__(self, parent=None): +
    +[docs] + def __init__(self, parent=None): super().__init__(parent=parent) # Setup layout self.setLayout(QVBoxLayout()) @@ -148,6 +152,7 @@

    Source code for typhos.tools.plot

             cache.new_description.connect(self._new_description,
                                           Qt.QueuedConnection)
    + @property def channel_to_curve(self): """ @@ -271,6 +276,7 @@

    Source code for typhos.tools.plot

                 desc = cache.get(signal)
                 if desc is not None:
                     self._new_description(signal, desc)
    +
    diff --git a/master/_modules/typhos/tweakable.html b/master/_modules/typhos/tweakable.html index 52518d894..0bc0ae60e 100644 --- a/master/_modules/typhos/tweakable.html +++ b/master/_modules/typhos/tweakable.html @@ -3,19 +3,19 @@ - typhos.tweakable — Typhos 2.4.1 documentation + typhos.tweakable — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -104,7 +104,9 @@

    Source code for typhos.tweakable

     logger = logging.getLogger(__name__)
     
     
    -
    [docs]@variety.uses_key_handlers +
    +[docs] +@variety.uses_key_handlers @variety.use_for_variety_write('scalar-tweakable') class TyphosTweakable(utils.TyphosBase): # TODO rearrange package: widgets.TyphosDesignerMixin): @@ -150,7 +152,9 @@

    Source code for typhos.tweakable

     
             variety._warn_unhandled_kwargs(self, kwargs)
     
    -
    [docs] def tweak(self, offset): +
    +[docs] + def tweak(self, offset): """Tweak by the given ``offset``.""" try: setpoint = float(self.readback.text()) + float(offset) @@ -161,7 +165,10 @@

    Source code for typhos.tweakable

             self.ui.setpoint.setText(str(setpoint))
             self.ui.setpoint.send_value()
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() def positive_tweak(self): """Tweak positive by the amount listed in ``ui.tweak_value``""" try: @@ -169,13 +176,18 @@

    Source code for typhos.tweakable

             except Exception:
                 logger.exception('Tweak failed')
    -
    [docs] @QtCore.Slot() + +
    +[docs] + @QtCore.Slot() def negative_tweak(self): """Tweak negative by the amount listed in ``ui.tweak_value``""" try: self.tweak(-float(self.tweak_value.text())) except Exception: - logger.exception('Tweak failed')
    + logger.exception('Tweak failed')
    +
    +
    diff --git a/master/_modules/typhos/utils.html b/master/_modules/typhos/utils.html index 9c0aae592..c4231482e 100644 --- a/master/_modules/typhos/utils.html +++ b/master/_modules/typhos/utils.html @@ -3,19 +3,19 @@ - typhos.utils — Typhos 2.4.1 documentation + typhos.utils — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -110,7 +110,7 @@

    Source code for typhos.utils

     import threading
     import weakref
     from types import MethodType
    -from typing import Iterable
    +from typing import Generator, Iterable, Optional
     
     import entrypoints
     import ophyd
    @@ -252,7 +252,9 @@ 

    Source code for typhos.utils

                 return self._value
     
     
    -
    [docs]def channel_from_signal(signal, read=True): +
    +[docs] +def channel_from_signal(signal, read=True): """ Create a PyDM address from arbitrary signal type """ @@ -276,7 +278,10 @@

    Source code for typhos.utils

         return channel_name(signal.name, protocol='sig')
    -
    [docs]def is_signal_ro(signal): + +
    +[docs] +def is_signal_ro(signal): """ Return whether the signal is read-only, based on its class. @@ -286,21 +291,30 @@

    Source code for typhos.utils

         return isinstance(signal, (SignalRO, EpicsSignalRO, ophyd.sim.SynSignalRO))
    -
    [docs]def channel_name(pv, protocol='ca'): + +
    +[docs] +def channel_name(pv, protocol='ca'): """ Create a valid PyDM channel from a PV name """ return protocol + '://' + pv
    -
    [docs]def clean_attr(attr): + +
    +[docs] +def clean_attr(attr): """ Create a nicer, human readable alias from a Python attribute name """ return attr.replace('.', ' ').replace('_', ' ')
    -
    [docs]def clean_name(device, strip_parent=True): + +
    +[docs] +def clean_name(device, strip_parent=True): """ Create a human readable name for a device @@ -325,7 +339,10 @@

    Source code for typhos.utils

         return clean_attr(name)
    -
    [docs]def use_stylesheet( + +
    +[docs] +def use_stylesheet( dark: bool = False, widget: QtWidgets.QWidget | None = None, ) -> None: @@ -368,7 +385,10 @@

    Source code for typhos.utils

         widget.setStyleSheet(style)
    -
    [docs]def compose_stylesheets(stylesheets: Iterable[str | pathlib.Path]) -> str: + +
    +[docs] +def compose_stylesheets(stylesheets: Iterable[str | pathlib.Path]) -> str: """ Combine multiple qss stylesheets into one qss stylesheet. @@ -416,7 +436,10 @@

    Source code for typhos.utils

         return "\n".join(reversed(style_parts))
    -
    [docs]def apply_standard_stylesheets( + +
    +[docs] +def apply_standard_stylesheets( dark: bool = False, paths: Iterable[str] | None = None, include_pydm: bool = True, @@ -475,14 +498,20 @@

    Source code for typhos.utils

         widget.setStyleSheet(compose_stylesheets(stylesheets))
    -
    [docs]def random_color(): + +
    +[docs] +def random_color(): """Return a random hex color description""" return QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
    -
    [docs]class TyphosLoading(QtWidgets.QLabel): + +
    +[docs] +class TyphosLoading(QtWidgets.QLabel): """ A QLabel with an animation for loading status. @@ -513,7 +542,9 @@

    Source code for typhos.utils

     
             self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
     
    -
    [docs] def contextMenuEvent(self, event): +
    +[docs] + def contextMenuEvent(self, event): menu = QtWidgets.QMenu(parent=self) def copy_to_clipboard(*, text): @@ -534,6 +565,7 @@

    Source code for typhos.utils

     
             menu.exec_(self.mapToGlobal(event.pos()))
    + def _handle_timeout(self): self._animation.stop() self.setMovie(None) @@ -549,6 +581,7 @@

    Source code for typhos.utils

             self._animation.setScaledSize(self._icon_size)
    + class TyphosObject: def __init__(self, *args, **kwargs): self.devices = list() @@ -599,7 +632,9 @@

    Source code for typhos.utils

             return instance
     
     
    -
    [docs]class WeakPartialMethodSlot: +
    +[docs] +class WeakPartialMethodSlot: """ A PyQt-compatible slot for a partial method. @@ -684,7 +719,10 @@

    Source code for typhos.utils

             return method(*self.partial_args, **self.partial_kwargs)
    -
    [docs]class TyphosBase(TyphosObject, QWidget): + +
    +[docs] +class TyphosBase(TyphosObject, QWidget): """Base widget for all Typhos widgets that interface with devices""" _weak_partials_: list[WeakPartialMethodSlot] @@ -724,7 +762,10 @@

    Source code for typhos.utils

             self._weak_partials_.append(slot)
    -
    [docs]def make_identifier(name): + +
    +[docs] +def make_identifier(name): """Make a Python string into a valid Python identifier""" # That was easy if name.isidentifier(): @@ -742,7 +783,10 @@

    Source code for typhos.utils

         return name
    -
    [docs]def flatten_tree(param): + +
    +[docs] +def flatten_tree(param): """Flatten a tree of parameters""" tree = [param] for child in param.childs: @@ -750,7 +794,10 @@

    Source code for typhos.utils

         return tree
    -
    [docs]def clear_layout(layout): + +
    +[docs] +def clear_layout(layout): """Clear a QLayout""" while layout.count(): child = layout.takeAt(0) @@ -760,7 +807,10 @@

    Source code for typhos.utils

                 clear_layout(child.layout())
    -
    [docs]def reload_widget_stylesheet(widget, cascade=False): + +
    +[docs] +def reload_widget_stylesheet(widget, cascade=False): """Reload the stylesheet of the provided widget""" widget.style().unpolish(widget) widget.style().polish(widget) @@ -771,7 +821,10 @@

    Source code for typhos.utils

                     reload_widget_stylesheet(child, cascade=True)
    -
    [docs]def save_suite(suite, file_or_buffer): + +
    +[docs] +def save_suite(suite, file_or_buffer): """ Create a file capable of relaunching the TyphosSuite @@ -792,7 +845,10 @@

    Source code for typhos.utils

         handle.write(saved_template.format(devices=devices))
    -
    [docs]def load_suite(path, cfg=None): + +
    +[docs] +def load_suite(path, cfg=None): """" Load a file saved via Typhos @@ -822,6 +878,7 @@

    Source code for typhos.utils

             raise AttributeError("Imported module has no 'create_suite' method!")
    + saved_template = """\ import sys import typhos.cli @@ -836,7 +893,9 @@

    Source code for typhos.utils

     """
     
     
    -
    [docs]@contextlib.contextmanager +
    +[docs] +@contextlib.contextmanager def no_device_lazy_load(): ''' Context manager which disables the ophyd.device.Device @@ -850,7 +909,10 @@

    Source code for typhos.utils

             Device.lazy_wait_for_connection = old_val
    -
    [docs]def pyqt_class_from_enum(enum): + +
    +[docs] +def pyqt_class_from_enum(enum): ''' Create an inheritable base class from a Python Enum, which can also be used for Q_ENUMS. @@ -859,6 +921,7 @@

    Source code for typhos.utils

         return type(enum.__name__, (object, ), enum_dict)
    + def _get_template_filenames_for_class(class_, view_type, *, include_mro=True): ''' Yields all possible template filenames that can be used for the class, in @@ -877,13 +940,18 @@

    Source code for typhos.utils

                 break
     
     
    -
    [docs]def remove_duplicate_items(list_): +
    +[docs] +def remove_duplicate_items(list_): 'Return a de-duplicated list/tuple of items in `list_`, retaining order' cls = type(list_) return cls(sorted(set(list_), key=list_.index))
    -
    [docs]def is_standard_template(template): + +
    +[docs] +def is_standard_template(template): """ Is the template a core one provided with typhos? @@ -895,7 +963,10 @@

    Source code for typhos.utils

         return common_path == ui_core_dir
    -
    [docs]def find_templates_for_class(cls, view_type, paths, *, extensions=None, + +
    +[docs] +def find_templates_for_class(cls, view_type, paths, *, extensions=None, include_mro=True): ''' Given a class `cls` and a view type (such as 'detailed'), search `paths` @@ -941,7 +1012,10 @@

    Source code for typhos.utils

                             yield match
    -
    [docs]def find_file_in_paths(filename, *, paths=None): + +
    +[docs] +def find_file_in_paths(filename, *, paths=None): ''' Search for filename ``filename`` in the list of paths ``paths`` @@ -978,7 +1052,10 @@

    Source code for typhos.utils

                     yield match
    -
    [docs]def get_device_from_fake_class(cls): + +
    +[docs] +def get_device_from_fake_class(cls): """ Return the non-fake class, given a fake class @@ -1004,7 +1081,10 @@

    Source code for typhos.utils

         return actual_class
    -
    [docs]def is_fake_device_class(cls): + +
    +[docs] +def is_fake_device_class(cls): """ Is ``cls`` a fake device from :func:`ophyd.sim.make_fake_device`? """ @@ -1015,7 +1095,10 @@

    Source code for typhos.utils

         return True
    -
    [docs]def code_from_device_repr(device): + +
    +[docs] +def code_from_device_repr(device): """ Return code to create a device from its ``repr`` information. @@ -1026,7 +1109,7 @@

    Source code for typhos.utils

         try:
             module = device.__module__
         except AttributeError:
    -        raise ValueError('Device class must be in a module') from None
    +        raise ValueError('Device class must be in a module') from None
     
         class_name = device.__class__.__name__
         if module == '__main__':
    @@ -1066,7 +1149,10 @@ 

    Source code for typhos.utils

     '''
    -
    [docs]def code_from_device(device): + +
    +[docs] +def code_from_device(device): """ Generate code required to load ``device`` in another process """ @@ -1084,7 +1170,10 @@

    Source code for typhos.utils

     '''
    -
    [docs]@contextlib.contextmanager + +
    +[docs] +@contextlib.contextmanager def subscription_context(*objects, callback, event_type=None, run=True): ''' [Context manager] Subscribe to a specific event from all objects @@ -1122,7 +1211,10 @@

    Source code for typhos.utils

                     ...
    -
    [docs]def get_all_signals_from_device(device, include_lazy=False, filter_by=None): + +
    +[docs] +def get_all_signals_from_device(device, include_lazy=False, filter_by=None): ''' Get all signals in a given device @@ -1153,7 +1245,10 @@

    Source code for typhos.utils

             return _get_signals()
    -
    [docs]@contextlib.contextmanager + +
    +[docs] +@contextlib.contextmanager def subscription_context_device(device, callback, event_type=None, run=True, *, include_lazy=False, filter_by=None): ''' @@ -1183,6 +1278,7 @@

    Source code for typhos.utils

             yield obj_to_cid
    + class _ConnectionStatus: def __init__(self, callback): self.connected = set() @@ -1268,7 +1364,9 @@

    Source code for typhos.utils

             )
     
     
    -
    [docs]@contextlib.contextmanager +
    +[docs] +@contextlib.contextmanager def connection_status_monitor(*signals, callback): ''' [Context manager] Monitor connection status from a number of signals @@ -1297,7 +1395,10 @@

    Source code for typhos.utils

             yield status
    -
    [docs]class DeviceConnectionMonitorThread(QtCore.QThread): + +
    +[docs] +class DeviceConnectionMonitorThread(QtCore.QThread): ''' Monitor connection status in a background thread @@ -1326,7 +1427,9 @@

    Source code for typhos.utils

     
             atexit.register(self.stop)
     
    -
    [docs] def stop(self, *, wait_ms: int = 1000): +
    +[docs] + def stop(self, *, wait_ms: int = 1000): """ Stop the background thread and clean up. @@ -1343,21 +1446,28 @@

    Source code for typhos.utils

             if wait_ms > 0:
                 self.wait(msecs=wait_ms)
    + def callback(self, obj, connected, **kwargs): self._update_event.set() self.connection_update.emit(obj, connected, kwargs) -
    [docs] def run(self): +
    +[docs] + def run(self): signals = get_all_signals_from_device( self.device, include_lazy=self.include_lazy) with connection_status_monitor(*signals, callback=self.callback): while not self.isInterruptionRequested(): self._update_event.clear() - self._update_event.wait(timeout=0.25)
    + self._update_event.wait(timeout=0.25)
    +
    + -
    [docs]class ObjectConnectionMonitorThread(QtCore.QThread): +
    +[docs] +class ObjectConnectionMonitorThread(QtCore.QThread): ''' Monitor connection status in a background thread @@ -1380,7 +1490,9 @@

    Source code for typhos.utils

     
             atexit.register(self.stop)
     
    -
    [docs] def stop(self, *, wait_ms: int = 1000): +
    +[docs] + def stop(self, *, wait_ms: int = 1000): """ Stop the background thread and clean up. @@ -1397,6 +1509,7 @@

    Source code for typhos.utils

             if wait_ms > 0:
                 self.wait(msecs=wait_ms)
    + def clear(self): if self.status: self.status.clear() @@ -1423,7 +1536,9 @@

    Source code for typhos.utils

             self._update_event.set()
             self.connection_update.emit(obj, connected, kwargs)
     
    -
    [docs] def run(self): +
    +[docs] + def run(self): self.lock.acquire() try: with connection_status_monitor( @@ -1436,10 +1551,14 @@

    Source code for typhos.utils

                         self._update_event.wait(timeout=0.25)
             finally:
                 if self.lock.locked():
    -                self.lock.release()
    + self.lock.release()
    +
    -
    [docs]class ThreadPoolWorker(QtCore.QRunnable): + +
    +[docs] +class ThreadPoolWorker(QtCore.QRunnable): ''' Worker thread helper @@ -1459,13 +1578,17 @@

    Source code for typhos.utils

             self.args = args
             self.kwargs = kwargs
     
    -
    [docs] @QtCore.Slot() +
    +[docs] + @QtCore.Slot() def run(self): try: self.func(*self.args, **self.kwargs) except Exception: logger.exception('Failed to run %s(*%s, **%r) in thread pool', - self.func, self.args, self.kwargs)
    + self.func, self.args, self.kwargs)
    +
    + def _get_top_level_components(device_cls): @@ -1473,7 +1596,9 @@

    Source code for typhos.utils

         return list(device_cls._sig_attrs.items())
     
     
    -
    [docs]def find_parent_with_class(widget, cls=QWidget): +
    +[docs] +def find_parent_with_class(widget, cls=QWidget): """ Finds the first parent of a widget that is an instance of ``klass`` @@ -1493,7 +1618,10 @@

    Source code for typhos.utils

         return None
    -
    [docs]def dump_grid_layout(layout, rows=None, cols=None, *, cell_width=60): + +
    +[docs] +def dump_grid_layout(layout, rows=None, cols=None, *, cell_width=60): """ Dump the layout of a :class:`QtWidgets.QGridLayout` to ``file``. @@ -1544,13 +1672,19 @@

    Source code for typhos.utils

             return file.getvalue()
    -
    [docs]@contextlib.contextmanager + +
    +[docs] +@contextlib.contextmanager def nullcontext(): """Stand-in for py3.7's contextlib.nullcontext""" yield
    -
    [docs]def get_component(obj): + +
    +[docs] +def get_component(obj): """ Get the component that made the given object. @@ -1570,7 +1704,10 @@

    Source code for typhos.utils

         return getattr(type(obj.parent), obj.attr_name, None)
    -
    [docs]def get_variety_metadata(cpt): + +
    +[docs] +def get_variety_metadata(cpt): """ Get "variety" metadata from a component or signal. @@ -1591,7 +1728,10 @@

    Source code for typhos.utils

         return getattr(cpt, '_variety_metadata', {})
    -
    [docs]def widget_to_image(widget, fill_color=QtCore.Qt.transparent): + +
    +[docs] +def widget_to_image(widget, fill_color=QtCore.Qt.transparent): """ Paint the given widget in a new QtGui.QImage. @@ -1612,10 +1752,13 @@

    Source code for typhos.utils

         return image
    + _connect_slots_unpatched = None -
    [docs]def patch_connect_slots(): +
    +[docs] +def patch_connect_slots(): """ Patches QtCore.QMetaObject.connectSlotsByName to catch SystemErrors. """ @@ -1643,7 +1786,10 @@

    Source code for typhos.utils

         QtCore.QMetaObject.connectSlotsByName = connect_slots_patch
    -
    diff --git a/master/_modules/typhos/widgets.html b/master/_modules/typhos/widgets.html index e73242d0b..dd849b28b 100644 --- a/master/_modules/typhos/widgets.html +++ b/master/_modules/typhos/widgets.html @@ -3,19 +3,19 @@ - typhos.widgets — Typhos 2.4.1 documentation + typhos.widgets — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -33,7 +33,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -112,7 +112,7 @@

    Source code for typhos.widgets

     from qtpy.QtWidgets import (QAction, QDialog, QDockWidget, QPushButton,
                                 QToolBar, QVBoxLayout, QWidget)
     
    -from . import plugins, utils, variety
    +from . import dynamic_font, plugins, utils, variety
     from .textedit import TyphosTextEdit  # noqa: F401
     from .tweakable import TyphosTweakable  # noqa: F401
     from .variety import use_for_variety_read, use_for_variety_write
    @@ -122,7 +122,9 @@ 

    Source code for typhos.widgets

     EXPONENTIAL_UNITS = ['mtorr', 'torr', 'kpa', 'pa']
     
     
    -
    [docs]class SignalWidgetInfo( +
    +[docs] +class SignalWidgetInfo( collections.namedtuple( 'SignalWidgetInfo', 'read_cls read_kwargs write_cls write_kwargs' @@ -145,7 +147,9 @@

    Source code for typhos.widgets

             The setpoint widget initialization keyword arguments.
         """
     
    -
    [docs] @classmethod +
    +[docs] + @classmethod def from_signal(cls, obj, desc=None): """ Create a `SignalWidgetInfo` given an object and its description. @@ -173,7 +177,9 @@

    Source code for typhos.widgets

             else:
                 write_cls, write_kwargs = widget_type_from_description(obj, desc)
     
    -        return cls(read_cls, read_kwargs, write_cls, write_kwargs)
    + return cls(read_cls, read_kwargs, write_cls, write_kwargs)
    +
    + class TogglePanel(QWidget): @@ -240,7 +246,9 @@

    Source code for typhos.widgets

                     self.contents.hide()
     
     
    -
    [docs]@use_for_variety_write('enum') +
    +[docs] +@use_for_variety_write('enum') @use_for_variety_write('text-enum') class TyphosComboBox(pydm.widgets.PyDMEnumComboBox): """ @@ -267,15 +275,22 @@

    Source code for typhos.widgets

                 self._ophyd_enum_strings = tuple(enum_strs)
                 self.enum_strings_changed(enum_strs)
     
    -
    [docs] def enum_strings_changed(self, new_enum_strings): +
    +[docs] + def enum_strings_changed(self, new_enum_strings): current_idx = self.currentIndex() super().enum_strings_changed( tuple(self._ophyd_enum_strings or new_enum_strings) ) self.value_changed(current_idx)
    -
    [docs] def wheelEvent(self, event: QtGui.QWheelEvent): - event.ignore()
    + +
    +[docs] + def wheelEvent(self, event: QtGui.QWheelEvent): + event.ignore()
    +
    + class NoScrollComboBox(QtWidgets.QComboBox): @@ -286,7 +301,9 @@

    Source code for typhos.widgets

             event.ignore()
     
     
    -
    [docs]@use_for_variety_write('scalar') +
    +[docs] +@use_for_variety_write('scalar') @use_for_variety_write('text') class TyphosLineEdit(pydm.widgets.PyDMLineEdit): """ @@ -347,7 +364,9 @@

    Source code for typhos.widgets

                 (value, timestamp or datetime.datetime.now())
             )
     
    -
    [docs] def send_value(self): +
    +[docs] + def send_value(self): """ Update channel value while recording setpoint history """ @@ -356,6 +375,7 @@

    Source code for typhos.widgets

             self._add_history_item(value)
             return retval
    + def _create_history_menu(self): if not self._setpoint_history: return None @@ -383,7 +403,9 @@

    Source code for typhos.widgets

     
             return history_menu
     
    -
    [docs] def widget_ctx_menu(self): +
    +[docs] + def widget_ctx_menu(self): menu = super().widget_ctx_menu() if self._setpoint_history_count > 0: self._history_menu = self._create_history_menu() @@ -393,7 +415,10 @@

    Source code for typhos.widgets

     
             return menu
    -
    [docs] def unit_changed(self, new_unit): + +
    +[docs] + def unit_changed(self, new_unit): """ Callback invoked when the Channel has new unit value. This callback also triggers an update_format_string call so the @@ -410,10 +435,14 @@

    Source code for typhos.widgets

             super().unit_changed(new_unit)
             default = (self.displayFormat == DisplayFormat.Default)
             if new_unit.lower() in EXPONENTIAL_UNITS and default:
    -            self.displayFormat = DisplayFormat.Exponential
    + self.displayFormat = DisplayFormat.Exponential
    +
    + -
    [docs]@use_for_variety_read('array-nd') +
    +[docs] +@use_for_variety_read('array-nd') @use_for_variety_read('command-enum') @use_for_variety_read('command-setpoint-tracks-readback') @use_for_variety_read('enum') @@ -459,12 +488,17 @@

    Source code for typhos.widgets

                 self._ophyd_enum_strings = tuple(enum_strs)
                 self.enum_strings_changed(enum_strs)
     
    -
    [docs] def enum_strings_changed(self, new_enum_strings): +
    +[docs] + def enum_strings_changed(self, new_enum_strings): super().enum_strings_changed( tuple(self._ophyd_enum_strings or new_enum_strings) )
    -
    [docs] def unit_changed(self, new_unit): + +
    +[docs] + def unit_changed(self, new_unit): """ Callback invoked when the Channel has new unit value. This callback also triggers an update_format_string call so the @@ -481,10 +515,26 @@

    Source code for typhos.widgets

             super().unit_changed(new_unit)
             default = (self.displayFormat == DisplayFormat.Default)
             if new_unit.lower() in EXPONENTIAL_UNITS and default:
    -            self.displayFormat = DisplayFormat.Exponential
    + self.displayFormat = DisplayFormat.Exponential
    + + @Property(bool, "dynamicFontSize") + def dynamic_font_size(self) -> bool: + """Dynamically adjust the font size""" + return dynamic_font.is_patched(self) -
    [docs]class TyphosSidebarItem(ParameterItem): + @dynamic_font_size.setter + def dynamic_font_size(self, value: bool): + if value: + dynamic_font.patch_widget(self) + else: + dynamic_font.unpatch_widget(self)
    + + + +
    +[docs] +class TyphosSidebarItem(ParameterItem): """ Class to display a Device or Tool in the sidebar @@ -516,21 +566,30 @@

    Source code for typhos.widgets

             if self.param.embeddable:
                 self.toolbar.insertAction(self.hide_action, self.embed_action)
     
    -
    [docs] def open_requested(self, triggered): +
    +[docs] + def open_requested(self, triggered): """Request to open display for sidebar item""" self.param.sigOpen.emit(self) self._mark_shown()
    -
    [docs] def embed_requested(self, triggered): + +
    +[docs] + def embed_requested(self, triggered): """Request to open embedded display for sidebar item""" self.param.sigEmbed.emit(self) self._mark_shown()
    -
    [docs] def hide_requested(self, triggered): + +
    +[docs] + def hide_requested(self, triggered): """Request to hide display for sidebar item""" self.param.sigHide.emit(self) self._mark_hidden()
    + def _mark_shown(self): self.open_action.setEnabled(False) self.embed_action.setEnabled(False) @@ -541,22 +600,32 @@

    Source code for typhos.widgets

             self.embed_action.setEnabled(True)
             self.hide_action.setEnabled(False)
     
    -
    [docs] def treeWidgetChanged(self): +
    +[docs] + def treeWidgetChanged(self): """Update the widget when add to a QTreeWidget""" super().treeWidgetChanged() tree = self.treeWidget() if tree is None: return - tree.setItemWidget(self, 1, self.toolbar)
    + tree.setItemWidget(self, 1, self.toolbar)
    +
    + -
    [docs]class SubDisplay(QDockWidget): +
    +[docs] +class SubDisplay(QDockWidget): """QDockWidget modified to emit a signal when closed""" closing = Signal() -
    [docs] def closeEvent(self, evt): +
    +[docs] + def closeEvent(self, evt): self.closing.emit() - super().closeEvent(evt)
    + super().closeEvent(evt)
    +
    + class HappiChannel(pydm.widgets.channel.PyDMChannel, QObject): @@ -588,7 +657,9 @@

    Source code for typhos.widgets

                              "Ignoring for now ...", self)
     
     
    -
    [docs]class TyphosDesignerMixin(pydm.widgets.base.PyDMWidget): +
    +[docs] +class TyphosDesignerMixin(pydm.widgets.base.PyDMWidget): """ A mixin class used to display Typhos widgets in the Qt designer. """ @@ -636,7 +707,10 @@

    Source code for typhos.widgets

             self.add_device(value['obj'])
    -
    [docs]class SignalDialogButton(QPushButton): + +
    +[docs] +class SignalDialogButton(QPushButton): """QPushButton to launch a QDialog with a PyDMWidget""" text = NotImplemented icon = NotImplemented @@ -651,11 +725,16 @@

    Source code for typhos.widgets

             self.channel = init_channel
             self.setIconSize(QSize(15, 15))
     
    -
    [docs] def widget(self, channel): +
    +[docs] + def widget(self, channel): """Return a widget created with channel""" raise NotImplementedError
    -
    [docs] def show_dialog(self): + +
    +[docs] + def show_dialog(self): """Show the channel in a QDialog""" # Dialog Creation if not self.dialog: @@ -676,10 +755,14 @@

    Source code for typhos.widgets

                 self.dialog.close()
             # Show the dialog
             logger.debug("Showing QDialog for %r", self.channel)
    -        self.dialog.show()
    + self.dialog.show()
    +
    + -
    [docs]@use_for_variety_read('array-image') +
    +[docs] +@use_for_variety_read('array-image') class ImageDialogButton(SignalDialogButton): """ QPushButton to show a 2-d array. @@ -691,13 +774,19 @@

    Source code for typhos.widgets

         icon = "fa5s.camera"
         parent_widget_class = QtWidgets.QMainWindow
     
    -
    [docs] def widget(self): +
    +[docs] + def widget(self): """Create PyDMImageView""" return pydm.widgets.PyDMImageView( - parent=self, image_channel=self.channel)
    + parent=self, image_channel=self.channel)
    +
    + -
    [docs]@use_for_variety_read('array-timeseries') +
    +[docs] +@use_for_variety_read('array-timeseries') @use_for_variety_read('array-histogram') # TODO: histogram settings? class WaveformDialogButton(SignalDialogButton): """ @@ -710,14 +799,20 @@

    Source code for typhos.widgets

         icon = "fa5s.chart-line"
         parent_widget_class = QtWidgets.QMainWindow
     
    -
    [docs] def widget(self): +
    +[docs] + def widget(self): """Create PyDMWaveformPlot""" return pydm.widgets.PyDMWaveformPlot( - init_y_channels=[self.channel], parent=self)
    + init_y_channels=[self.channel], parent=self)
    +
    + # @variety.uses_key_handlers -
    [docs]@use_for_variety_write('command') +
    +[docs] +@use_for_variety_write('command') @use_for_variety_write('command-proc') @use_for_variety_write('command-setpoint-tracks-readback') # TODO class TyphosCommandButton(pydm.widgets.PyDMPushButton): @@ -743,10 +838,13 @@

    Source code for typhos.widgets

     
         variety_metadata = variety.create_variety_property()
     
    -
    [docs] def enum_strings_changed(self, new_enum_strings): +
    +[docs] + def enum_strings_changed(self, new_enum_strings): return super().enum_strings_changed( self._forced_enum_strings or new_enum_strings)
    + def _update_variety_metadata(self, *, value, enum_strings=None, enum_dict=None, tags=None, **kwargs): self.pressValue = value @@ -770,7 +868,10 @@

    Source code for typhos.widgets

                 self.setText(self.default_label)
    -
    [docs]@variety.uses_key_handlers + +
    +[docs] +@variety.uses_key_handlers @use_for_variety_write('command-enum') class TyphosCommandEnumButton(pydm.widgets.enum_button.PyDMEnumButton): """ @@ -796,10 +897,13 @@

    Source code for typhos.widgets

     
         variety_metadata = variety.create_variety_property()
     
    -
    [docs] def enum_strings_changed(self, new_enum_strings): +
    +[docs] + def enum_strings_changed(self, new_enum_strings): return super().enum_strings_changed( self._forced_enum_strings or new_enum_strings)
    + def _update_variety_metadata(self, *, value, enum_strings=None, enum_dict=None, tags=None, **kwargs): enum_strings = variety.get_enum_strings(enum_strings, enum_dict) @@ -810,7 +914,10 @@

    Source code for typhos.widgets

             variety._warn_unhandled_kwargs(self, kwargs)
    -
    [docs]@use_for_variety_read('bitmask') + +
    +[docs] +@use_for_variety_read('bitmask') @variety.uses_key_handlers class TyphosByteIndicator(pydm.widgets.PyDMByteIndicator): """ @@ -859,6 +966,7 @@

    Source code for typhos.widgets

             variety._warn_unhandled_kwargs(self, kwargs)
    + @use_for_variety_read('command') @use_for_variety_read('command-proc') class TyphosCommandIndicator(pydm.widgets.PyDMByteIndicator): @@ -872,17 +980,25 @@

    Source code for typhos.widgets

             self.circles = True
     
     
    -
    [docs]class ClickableBitIndicator(pydm.widgets.byte.PyDMBitIndicator): +
    +[docs] +class ClickableBitIndicator(pydm.widgets.byte.PyDMBitIndicator): """A bit indicator that emits `clicked` when clicked.""" clicked = Signal() -
    [docs] def mousePressEvent(self, event: QtGui.QMouseEvent): +
    +[docs] + def mousePressEvent(self, event: QtGui.QMouseEvent): super().mousePressEvent(event) if event.button() == Qt.LeftButton: - self.clicked.emit()
    + self.clicked.emit()
    +
    -
    [docs]@use_for_variety_write('bitmask') + +
    +[docs] +@use_for_variety_write('bitmask') class TyphosByteSetpoint(TyphosByteIndicator, pydm.widgets.base.PyDMWritableWidget): """ @@ -919,7 +1035,9 @@

    Source code for typhos.widgets

             self._requests_pending[bit] = not old_value
             self.send_value_signal[int].emit(self._get_setpoint_from_requests())
     
    -
    [docs] def value_changed(self, value): +
    +[docs] + def value_changed(self, value): """Receive and update the TyphosTextEdit for a new channel value.""" for bit, request in list(self._requests_pending.items()): mask = 1 << bit @@ -929,6 +1047,7 @@

    Source code for typhos.widgets

     
             super().value_changed(value)
    + @Property(int, designable=True) def numBits(self): """ @@ -963,7 +1082,10 @@

    Source code for typhos.widgets

             self.labels = self.labels + new_labels
    -
    [docs]@variety.uses_key_handlers + +
    +[docs] +@variety.uses_key_handlers @use_for_variety_write('scalar-range') class TyphosScalarRange(pydm.widgets.PyDMSlider): """ @@ -1079,14 +1201,20 @@

    Source code for typhos.widgets

                 finally:
                     self._mute_internal_slider_changes = False
     
    -
    [docs] def connection_changed(self, connected): +
    +[docs] + def connection_changed(self, connected): ret = super().connection_changed(connected) if connected: self.delta_value = self._delta_value - return ret
    + return ret
    +
    + -
    [docs]@variety.uses_key_handlers +
    +[docs] +@variety.uses_key_handlers @use_for_variety_write('array-tabular') class TyphosArrayTable(pydm.widgets.PyDMWaveformTable): """ @@ -1104,7 +1232,9 @@

    Source code for typhos.widgets

     
         variety_metadata = variety.create_variety_property()
     
    -
    [docs] def value_changed(self, value): +
    +[docs] + def value_changed(self, value): try: len(value) except TypeError: @@ -1119,6 +1249,7 @@

    Source code for typhos.widgets

     
             return super().value_changed(value)
    + def _calculate_size(self, padding=5): width = self.verticalHeader().width() + padding for col in range(self.columnCount()): @@ -1147,6 +1278,7 @@

    Source code for typhos.widgets

             variety._warn_unhandled_kwargs(self, kwargs)
    + def _get_scalar_widget_class(desc, variety_md, read_only): """ From a given description, return the widget to use. @@ -1204,7 +1336,9 @@

    Source code for typhos.widgets

     DIRECT_CONTROL_LAYERS = {"pyepics", "caproto"}
     
     
    -
    [docs]def widget_type_from_description(signal, desc, read_only=False): +
    +[docs] +def widget_type_from_description(signal, desc, read_only=False): """ Determine which widget class should be used for the given signal @@ -1277,7 +1411,10 @@

    Source code for typhos.widgets

         return widget_cls, kwargs
    -
    [docs]def determine_widget_type(signal, read_only=False): + +
    +[docs] +def determine_widget_type(signal, read_only=False): """ Determine which widget class should be used for the given signal. @@ -1306,7 +1443,10 @@

    Source code for typhos.widgets

         return widget_type_from_description(signal, desc, read_only=read_only)
    -
    [docs]def create_signal_widget(signal, read_only=False, tooltip=None): + +
    +[docs] +def create_signal_widget(signal, read_only=False, tooltip=None): """ Factory for creating a PyDMWidget from a signal @@ -1340,6 +1480,7 @@

    Source code for typhos.widgets

             widget.setToolTip(tooltip)
     
         return widget
    +
    diff --git a/master/_sources/generated/typhos.tools.TyphosConsole.rst.txt b/master/_sources/generated/typhos.tools.TyphosConsole.rst.txt deleted file mode 100644 index 424edfa16..000000000 --- a/master/_sources/generated/typhos.tools.TyphosConsole.rst.txt +++ /dev/null @@ -1,362 +0,0 @@ -typhos.tools.TyphosConsole -========================== - -.. currentmodule:: typhos.tools - -.. autoclass:: TyphosConsole - - - .. automethod:: __init__ - - - .. rubric:: Methods - - .. autosummary:: - - ~TyphosConsole.__init__ - ~TyphosConsole.acceptDrops - ~TyphosConsole.accessibleDescription - ~TyphosConsole.accessibleName - ~TyphosConsole.actionEvent - ~TyphosConsole.actions - ~TyphosConsole.activateWindow - ~TyphosConsole.addAction - ~TyphosConsole.addActions - ~TyphosConsole.add_device - ~TyphosConsole.adjustSize - ~TyphosConsole.autoFillBackground - ~TyphosConsole.backgroundRole - ~TyphosConsole.baseSize - ~TyphosConsole.blockSignals - ~TyphosConsole.changeEvent - ~TyphosConsole.childAt - ~TyphosConsole.childEvent - ~TyphosConsole.children - ~TyphosConsole.childrenRect - ~TyphosConsole.childrenRegion - ~TyphosConsole.clearFocus - ~TyphosConsole.clearMask - ~TyphosConsole.close - ~TyphosConsole.closeEvent - ~TyphosConsole.colorCount - ~TyphosConsole.connectNotify - ~TyphosConsole.contentsMargins - ~TyphosConsole.contentsRect - ~TyphosConsole.contextMenuEvent - ~TyphosConsole.contextMenuPolicy - ~TyphosConsole.create - ~TyphosConsole.createWindowContainer - ~TyphosConsole.cursor - ~TyphosConsole.customEvent - ~TyphosConsole.deleteLater - ~TyphosConsole.depth - ~TyphosConsole.destroy - ~TyphosConsole.devType - ~TyphosConsole.devicePixelRatio - ~TyphosConsole.devicePixelRatioF - ~TyphosConsole.devicePixelRatioFScale - ~TyphosConsole.disconnect - ~TyphosConsole.disconnectNotify - ~TyphosConsole.dragEnterEvent - ~TyphosConsole.dragLeaveEvent - ~TyphosConsole.dragMoveEvent - ~TyphosConsole.dropEvent - ~TyphosConsole.dumpObjectInfo - ~TyphosConsole.dumpObjectTree - ~TyphosConsole.dynamicPropertyNames - ~TyphosConsole.effectiveWinId - ~TyphosConsole.ensurePolished - ~TyphosConsole.enterEvent - ~TyphosConsole.event - ~TyphosConsole.eventFilter - ~TyphosConsole.execute - ~TyphosConsole.find - ~TyphosConsole.findChild - ~TyphosConsole.findChildren - ~TyphosConsole.focusInEvent - ~TyphosConsole.focusNextChild - ~TyphosConsole.focusNextPrevChild - ~TyphosConsole.focusOutEvent - ~TyphosConsole.focusPolicy - ~TyphosConsole.focusPreviousChild - ~TyphosConsole.focusProxy - ~TyphosConsole.focusWidget - ~TyphosConsole.font - ~TyphosConsole.fontInfo - ~TyphosConsole.fontMetrics - ~TyphosConsole.foregroundRole - ~TyphosConsole.frameGeometry - ~TyphosConsole.frameSize - ~TyphosConsole.from_device - ~TyphosConsole.geometry - ~TyphosConsole.getContentsMargins - ~TyphosConsole.grab - ~TyphosConsole.grabGesture - ~TyphosConsole.grabKeyboard - ~TyphosConsole.grabMouse - ~TyphosConsole.grabShortcut - ~TyphosConsole.graphicsEffect - ~TyphosConsole.graphicsProxyWidget - ~TyphosConsole.hasFocus - ~TyphosConsole.hasHeightForWidth - ~TyphosConsole.hasMouseTracking - ~TyphosConsole.hasTabletTracking - ~TyphosConsole.height - ~TyphosConsole.heightForWidth - ~TyphosConsole.heightMM - ~TyphosConsole.hide - ~TyphosConsole.hideEvent - ~TyphosConsole.inherits - ~TyphosConsole.initPainter - ~TyphosConsole.inputMethodEvent - ~TyphosConsole.inputMethodHints - ~TyphosConsole.inputMethodQuery - ~TyphosConsole.insertAction - ~TyphosConsole.insertActions - ~TyphosConsole.installEventFilter - ~TyphosConsole.isActiveWindow - ~TyphosConsole.isAncestorOf - ~TyphosConsole.isEnabled - ~TyphosConsole.isEnabledTo - ~TyphosConsole.isFullScreen - ~TyphosConsole.isHidden - ~TyphosConsole.isLeftToRight - ~TyphosConsole.isMaximized - ~TyphosConsole.isMinimized - ~TyphosConsole.isModal - ~TyphosConsole.isRightToLeft - ~TyphosConsole.isSignalConnected - ~TyphosConsole.isVisible - ~TyphosConsole.isVisibleTo - ~TyphosConsole.isWidgetType - ~TyphosConsole.isWindow - ~TyphosConsole.isWindowModified - ~TyphosConsole.isWindowType - ~TyphosConsole.keyPressEvent - ~TyphosConsole.keyReleaseEvent - ~TyphosConsole.keyboardGrabber - ~TyphosConsole.killTimer - ~TyphosConsole.layout - ~TyphosConsole.layoutDirection - ~TyphosConsole.leaveEvent - ~TyphosConsole.locale - ~TyphosConsole.logicalDpiX - ~TyphosConsole.logicalDpiY - ~TyphosConsole.lower - ~TyphosConsole.mapFrom - ~TyphosConsole.mapFromGlobal - ~TyphosConsole.mapFromParent - ~TyphosConsole.mapTo - ~TyphosConsole.mapToGlobal - ~TyphosConsole.mapToParent - ~TyphosConsole.mask - ~TyphosConsole.maximumHeight - ~TyphosConsole.maximumSize - ~TyphosConsole.maximumWidth - ~TyphosConsole.metaObject - ~TyphosConsole.metric - ~TyphosConsole.minimumHeight - ~TyphosConsole.minimumSize - ~TyphosConsole.minimumSizeHint - ~TyphosConsole.minimumWidth - ~TyphosConsole.mouseDoubleClickEvent - ~TyphosConsole.mouseGrabber - ~TyphosConsole.mouseMoveEvent - ~TyphosConsole.mousePressEvent - ~TyphosConsole.mouseReleaseEvent - ~TyphosConsole.move - ~TyphosConsole.moveEvent - ~TyphosConsole.moveToThread - ~TyphosConsole.nativeEvent - ~TyphosConsole.nativeParentWidget - ~TyphosConsole.nextInFocusChain - ~TyphosConsole.normalGeometry - ~TyphosConsole.objectName - ~TyphosConsole.overrideWindowFlags - ~TyphosConsole.overrideWindowState - ~TyphosConsole.paintEngine - ~TyphosConsole.paintEvent - ~TyphosConsole.paintingActive - ~TyphosConsole.palette - ~TyphosConsole.parent - ~TyphosConsole.parentWidget - ~TyphosConsole.physicalDpiX - ~TyphosConsole.physicalDpiY - ~TyphosConsole.pos - ~TyphosConsole.previousInFocusChain - ~TyphosConsole.property - ~TyphosConsole.pyqtConfigure - ~TyphosConsole.raise_ - ~TyphosConsole.receivers - ~TyphosConsole.rect - ~TyphosConsole.releaseKeyboard - ~TyphosConsole.releaseMouse - ~TyphosConsole.releaseShortcut - ~TyphosConsole.removeAction - ~TyphosConsole.removeEventFilter - ~TyphosConsole.render - ~TyphosConsole.repaint - ~TyphosConsole.resize - ~TyphosConsole.resizeEvent - ~TyphosConsole.restoreGeometry - ~TyphosConsole.saveGeometry - ~TyphosConsole.screen - ~TyphosConsole.scroll - ~TyphosConsole.sender - ~TyphosConsole.senderSignalIndex - ~TyphosConsole.setAcceptDrops - ~TyphosConsole.setAccessibleDescription - ~TyphosConsole.setAccessibleName - ~TyphosConsole.setAttribute - ~TyphosConsole.setAutoFillBackground - ~TyphosConsole.setBackgroundRole - ~TyphosConsole.setBaseSize - ~TyphosConsole.setContentsMargins - ~TyphosConsole.setContextMenuPolicy - ~TyphosConsole.setCursor - ~TyphosConsole.setDisabled - ~TyphosConsole.setEnabled - ~TyphosConsole.setFixedHeight - ~TyphosConsole.setFixedSize - ~TyphosConsole.setFixedWidth - ~TyphosConsole.setFocus - ~TyphosConsole.setFocusPolicy - ~TyphosConsole.setFocusProxy - ~TyphosConsole.setFont - ~TyphosConsole.setForegroundRole - ~TyphosConsole.setGeometry - ~TyphosConsole.setGraphicsEffect - ~TyphosConsole.setHidden - ~TyphosConsole.setInputMethodHints - ~TyphosConsole.setLayout - ~TyphosConsole.setLayoutDirection - ~TyphosConsole.setLocale - ~TyphosConsole.setMask - ~TyphosConsole.setMaximumHeight - ~TyphosConsole.setMaximumSize - ~TyphosConsole.setMaximumWidth - ~TyphosConsole.setMinimumHeight - ~TyphosConsole.setMinimumSize - ~TyphosConsole.setMinimumWidth - ~TyphosConsole.setMouseTracking - ~TyphosConsole.setObjectName - ~TyphosConsole.setPalette - ~TyphosConsole.setParent - ~TyphosConsole.setProperty - ~TyphosConsole.setShortcutAutoRepeat - ~TyphosConsole.setShortcutEnabled - ~TyphosConsole.setSizeIncrement - ~TyphosConsole.setSizePolicy - ~TyphosConsole.setStatusTip - ~TyphosConsole.setStyle - ~TyphosConsole.setStyleSheet - ~TyphosConsole.setTabOrder - ~TyphosConsole.setTabletTracking - ~TyphosConsole.setToolTip - ~TyphosConsole.setToolTipDuration - ~TyphosConsole.setUpdatesEnabled - ~TyphosConsole.setVisible - ~TyphosConsole.setWhatsThis - ~TyphosConsole.setWindowFilePath - ~TyphosConsole.setWindowFlag - ~TyphosConsole.setWindowFlags - ~TyphosConsole.setWindowIcon - ~TyphosConsole.setWindowIconText - ~TyphosConsole.setWindowModality - ~TyphosConsole.setWindowModified - ~TyphosConsole.setWindowOpacity - ~TyphosConsole.setWindowRole - ~TyphosConsole.setWindowState - ~TyphosConsole.setWindowTitle - ~TyphosConsole.sharedPainter - ~TyphosConsole.show - ~TyphosConsole.showEvent - ~TyphosConsole.showFullScreen - ~TyphosConsole.showMaximized - ~TyphosConsole.showMinimized - ~TyphosConsole.showNormal - ~TyphosConsole.shutdown - ~TyphosConsole.signalsBlocked - ~TyphosConsole.size - ~TyphosConsole.sizeHint - ~TyphosConsole.sizeIncrement - ~TyphosConsole.sizePolicy - ~TyphosConsole.stackUnder - ~TyphosConsole.startTimer - ~TyphosConsole.statusTip - ~TyphosConsole.style - ~TyphosConsole.styleSheet - ~TyphosConsole.tabletEvent - ~TyphosConsole.testAttribute - ~TyphosConsole.thread - ~TyphosConsole.timerEvent - ~TyphosConsole.toolTip - ~TyphosConsole.toolTipDuration - ~TyphosConsole.tr - ~TyphosConsole.underMouse - ~TyphosConsole.ungrabGesture - ~TyphosConsole.unsetCursor - ~TyphosConsole.unsetLayoutDirection - ~TyphosConsole.unsetLocale - ~TyphosConsole.update - ~TyphosConsole.updateGeometry - ~TyphosConsole.updateMicroFocus - ~TyphosConsole.updatesEnabled - ~TyphosConsole.visibleRegion - ~TyphosConsole.whatsThis - ~TyphosConsole.wheelEvent - ~TyphosConsole.width - ~TyphosConsole.widthMM - ~TyphosConsole.winId - ~TyphosConsole.window - ~TyphosConsole.windowFilePath - ~TyphosConsole.windowFlags - ~TyphosConsole.windowHandle - ~TyphosConsole.windowIcon - ~TyphosConsole.windowIconText - ~TyphosConsole.windowModality - ~TyphosConsole.windowOpacity - ~TyphosConsole.windowRole - ~TyphosConsole.windowState - ~TyphosConsole.windowTitle - ~TyphosConsole.windowType - ~TyphosConsole.x - ~TyphosConsole.y - - - - - - .. rubric:: Attributes - - .. autosummary:: - - ~TyphosConsole.DrawChildren - ~TyphosConsole.DrawWindowBackground - ~TyphosConsole.IgnoreMask - ~TyphosConsole.PdmDepth - ~TyphosConsole.PdmDevicePixelRatio - ~TyphosConsole.PdmDevicePixelRatioScaled - ~TyphosConsole.PdmDpiX - ~TyphosConsole.PdmDpiY - ~TyphosConsole.PdmHeight - ~TyphosConsole.PdmHeightMM - ~TyphosConsole.PdmNumColors - ~TyphosConsole.PdmPhysicalDpiX - ~TyphosConsole.PdmPhysicalDpiY - ~TyphosConsole.PdmWidth - ~TyphosConsole.PdmWidthMM - ~TyphosConsole.customContextMenuRequested - ~TyphosConsole.destroyed - ~TyphosConsole.device_added - ~TyphosConsole.kernel_is_alive - ~TyphosConsole.kernel_is_ready - ~TyphosConsole.kernel_ready - ~TyphosConsole.kernel_shut_down - ~TyphosConsole.objectNameChanged - ~TyphosConsole.staticMetaObject - ~TyphosConsole.windowIconChanged - ~TyphosConsole.windowIconTextChanged - ~TyphosConsole.windowTitleChanged - - \ No newline at end of file diff --git a/master/_sources/release_notes.rst.txt b/master/_sources/release_notes.rst.txt index c0745b581..d2b0f1c15 100644 --- a/master/_sources/release_notes.rst.txt +++ b/master/_sources/release_notes.rst.txt @@ -1,6 +1,5 @@ -================= - Release History -================= +Release History +############### v2.4.1 (2023-4-4) ================= diff --git a/master/_sources/tools.rst.txt b/master/_sources/tools.rst.txt index 84a55a3c8..a9c4060eb 100644 --- a/master/_sources/tools.rst.txt +++ b/master/_sources/tools.rst.txt @@ -26,6 +26,5 @@ Tool Classes .. autosummary:: :toctree: generated - TyphosConsole TyphosLogDisplay TyphosTimePlot diff --git a/master/_sources/upcoming_changes.rst.txt b/master/_sources/upcoming_changes.rst.txt new file mode 100644 index 000000000..1323597c0 --- /dev/null +++ b/master/_sources/upcoming_changes.rst.txt @@ -0,0 +1,8 @@ +Upcoming Changes +################ + +.. toctree:: + :maxdepth: 1 + :glob: + + upcoming_release_notes/[0-9]* diff --git a/master/_sources/upcoming_release_notes/538-remove_typhos_console.rst.txt b/master/_sources/upcoming_release_notes/538-remove_typhos_console.rst.txt new file mode 100644 index 000000000..a9f7a4834 --- /dev/null +++ b/master/_sources/upcoming_release_notes/538-remove_typhos_console.rst.txt @@ -0,0 +1,22 @@ +538 remove_typhos_console +######################### + +API Changes +----------- +- The deprecated ``TyphosConsole`` has been removed as discussed in issue #538. + +Features +-------- +- N/A + +Bugfixes +-------- +- N/A + +Maintenance +----------- +- N/A + +Contributors +------------ +- klauer diff --git a/master/_sources/upcoming_release_notes/556-bld_pyproj_extras.rst.txt b/master/_sources/upcoming_release_notes/556-bld_pyproj_extras.rst.txt new file mode 100644 index 000000000..91c37357a --- /dev/null +++ b/master/_sources/upcoming_release_notes/556-bld_pyproj_extras.rst.txt @@ -0,0 +1,23 @@ +556 bld_pyproj_extras +##################### + +API Changes +----------- +- N/A + +Features +-------- +- N/A + +Bugfixes +-------- +- N/A + +Maintenance +----------- +- Add pre-release notes scripts +- Update build requirements to use pip-provided extras for documentation and test builds + +Contributors +------------ +- tangkong diff --git a/master/_sources/upcoming_release_notes/558-fix_py310_benchmark.rst.txt b/master/_sources/upcoming_release_notes/558-fix_py310_benchmark.rst.txt new file mode 100644 index 000000000..307d70b88 --- /dev/null +++ b/master/_sources/upcoming_release_notes/558-fix_py310_benchmark.rst.txt @@ -0,0 +1,23 @@ +558 fix_py310_benchmark +####################### + +API Changes +----------- +- N/A + +Features +-------- +- N/A + +Bugfixes +-------- +- Fix issues with running the CLI benchmarks in certain + conda installs, particularly python>=3.10. + +Maintenance +----------- +- N/A + +Contributors +------------ +- zllentz diff --git a/master/_sources/upcoming_release_notes/562-bug_notes_blank_env.rst.txt b/master/_sources/upcoming_release_notes/562-bug_notes_blank_env.rst.txt new file mode 100644 index 000000000..aba9968de --- /dev/null +++ b/master/_sources/upcoming_release_notes/562-bug_notes_blank_env.rst.txt @@ -0,0 +1,22 @@ +562 bug_notes_blank_env +####################### + +API Changes +----------- +- N/A + +Features +-------- +- N/A + +Bugfixes +-------- +- Creates new notes file if requested note file does not exist + +Maintenance +----------- +- N/A + +Contributors +------------ +- tangkong diff --git a/master/_sources/upcoming_release_notes/565-poslimits.rst.txt b/master/_sources/upcoming_release_notes/565-poslimits.rst.txt new file mode 100644 index 000000000..f48a75531 --- /dev/null +++ b/master/_sources/upcoming_release_notes/565-poslimits.rst.txt @@ -0,0 +1,23 @@ +565 poslimits +############# + +API Changes +----------- +- N/A + +Features +-------- +- N/A + +Bugfixes +-------- +- Avoid uncaught ``TypeError`` when ``None`` is present in a positioner + ``.limits``. + +Maintenance +----------- +- N/A + +Contributors +------------ +- klauer diff --git a/master/_sources/upcoming_release_notes/566-screenshot.rst.txt b/master/_sources/upcoming_release_notes/566-screenshot.rst.txt new file mode 100644 index 000000000..e882cc8cc --- /dev/null +++ b/master/_sources/upcoming_release_notes/566-screenshot.rst.txt @@ -0,0 +1,27 @@ +566 screenshot +################# + +API Changes +----------- +- Added ``TyphosSuite.save_screenshot`` which takes a screenshot of the entire + suite as-displayed. +- Added ``TyphosSuite.save_device_screenshots`` which takes individual + screenshots of each device display in the suite and saves them to the + provided formatted filename. + +Features +-------- +- Add ``typhos --screenshot filename_pattern`` to take screenshots of typhos + displays prior to exiting early (in combination with ``--exit-after``). + +Bugfixes +-------- +- N/A + +Maintenance +----------- +- N/A + +Contributors +------------ +- klauer diff --git a/master/_sources/upcoming_release_notes/570-dynamic_fonts.rst.txt b/master/_sources/upcoming_release_notes/570-dynamic_fonts.rst.txt new file mode 100644 index 000000000..076b116e4 --- /dev/null +++ b/master/_sources/upcoming_release_notes/570-dynamic_fonts.rst.txt @@ -0,0 +1,23 @@ +570 dynamic_fontsize +#################### + +API Changes +----------- +- N/A + +Features +-------- +- Added dynamic font sizer utility which can work with some Qt-provided widgets + as well as PyDM widgets. + +Bugfixes +-------- +- N/A + +Maintenance +----------- +- N/A + +Contributors +------------ +- klauer diff --git a/master/_sources/upcoming_release_notes/571-width_resizing.rst.txt b/master/_sources/upcoming_release_notes/571-width_resizing.rst.txt new file mode 100644 index 000000000..391cc12e0 --- /dev/null +++ b/master/_sources/upcoming_release_notes/571-width_resizing.rst.txt @@ -0,0 +1,22 @@ +571 width_resizing +################## + +API Changes +----------- +- N/A + +Features +-------- +- N/A + +Bugfixes +-------- +- typhos suites will now resize in width to fit device displays. + +Maintenance +----------- +- N/A + +Contributors +------------ +- klauer diff --git a/master/_sources/upcoming_release_notes/template-full.rst.txt b/master/_sources/upcoming_release_notes/template-full.rst.txt new file mode 100644 index 000000000..9f86b87e2 --- /dev/null +++ b/master/_sources/upcoming_release_notes/template-full.rst.txt @@ -0,0 +1,36 @@ +IssueNumber Title +################# + +Update the title above with your issue number and a 1-2 word title. +Your filename should be issuenumber-title.rst, substituting appropriately. + +Make sure to fill out any section that represents changes you have made, +or replace the default bullet point with N/A. + +API Changes +----------- +- List backwards-incompatible changes here. + Changes to PVs don't count as API changes for this library, + but changing method and component names or changing default behavior does. + +Features +-------- +- List new updates that add utility to many classes, + provide a new base classes, add options to helper methods, etc. + +Bugfixes +-------- +- List bug fixes that are not covered in the above sections. + +Maintenance +----------- +- List anything else. The intent is to accumulate changes + that the average user does not need to worry about. + +Contributors +------------ +- List your github username and anyone else who made significant + code or conceptual contributions to the PR. You don't need to + add reviewers unless their suggestions lead to large rewrites. + These will be used in the release notes to give credit and to + notify you when your code is being tagged. diff --git a/master/_sources/upcoming_release_notes/template-short.rst.txt b/master/_sources/upcoming_release_notes/template-short.rst.txt new file mode 100644 index 000000000..5e544ecf5 --- /dev/null +++ b/master/_sources/upcoming_release_notes/template-short.rst.txt @@ -0,0 +1,22 @@ +IssueNumber Title +################# + +API Changes +----------- +- N/A + +Features +-------- +- N/A + +Bugfixes +-------- +- N/A + +Maintenance +----------- +- N/A + +Contributors +------------ +- N/A diff --git a/master/_static/basic.css b/master/_static/basic.css index 7577acb1a..30fee9d0f 100644 --- a/master/_static/basic.css +++ b/master/_static/basic.css @@ -237,6 +237,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -670,6 +674,16 @@ dd { margin-left: 30px; } +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + dl > dd:last-child, dl > dd:last-child > :last-child { margin-bottom: 0; @@ -738,6 +752,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { diff --git a/master/_static/css/theme.css b/master/_static/css/theme.css index c03c88f06..19a446a0e 100644 --- a/master/_static/css/theme.css +++ b/master/_static/css/theme.css @@ -1,4 +1,4 @@ html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/master/_static/documentation_options.js b/master/_static/documentation_options.js index fba58fdc6..dbbffd6e7 100644 --- a/master/_static/documentation_options.js +++ b/master/_static/documentation_options.js @@ -1,6 +1,5 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2.4.1', +const DOCUMENTATION_OPTIONS = { + VERSION: '2.4.2.dev54+g49d8127', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/master/_static/pygments.css b/master/_static/pygments.css index 691aeb82d..0d49244ed 100644 --- a/master/_static/pygments.css +++ b/master/_static/pygments.css @@ -17,6 +17,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #FF0000 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #00A000 } /* Generic.Inserted */ diff --git a/master/_static/searchtools.js b/master/_static/searchtools.js index 97d56a74d..7918c3fab 100644 --- a/master/_static/searchtools.js +++ b/master/_static/searchtools.js @@ -57,12 +57,12 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -const _displayItem = (item, searchTerms) => { +const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; const [docName, title, anchor, descr, score, _filename] = item; @@ -75,20 +75,24 @@ const _displayItem = (item, searchTerms) => { if (dirname.match(/\/index\/$/)) dirname = dirname.substring(0, dirname.length - 6); else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; + requestUrl = contentRoot + dirname; linkUrl = requestUrl; } else { // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; + requestUrl = contentRoot + docName + docFileSuffix; linkUrl = docName + docLinkSuffix; } let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; linkEl.innerHTML = title; - if (descr) + if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) @@ -97,6 +101,9 @@ const _displayItem = (item, searchTerms) => { listItem.appendChild( Search.makeSearchSummary(data, searchTerms) ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); }); Search.output.appendChild(listItem); }; @@ -115,14 +122,15 @@ const _finishSearch = (resultCount) => { const _displayNextItem = ( results, resultCount, - searchTerms + searchTerms, + highlightTerms, ) => { // results left, load the summary and display it // this is intended to be dynamic (don't sub resultsCount) if (results.length) { - _displayItem(results.pop(), searchTerms); + _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), 5 ); } @@ -360,7 +368,7 @@ const Search = { // console.info("search results:", Search.lastresults); // print the results - _displayNextItem(results, results.length, searchTerms); + _displayNextItem(results, results.length, searchTerms, highlightTerms); }, /** diff --git a/master/_static/sphinx_highlight.js b/master/_static/sphinx_highlight.js index aae669d7e..8a96c69a1 100644 --- a/master/_static/sphinx_highlight.js +++ b/master/_static/sphinx_highlight.js @@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => { } span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); parent.insertBefore( span, parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), + rest, node.nextSibling ) ); node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); if (isInSVG) { const rect = document.createElementNS( @@ -140,5 +145,10 @@ const SphinxHighlight = { }, }; -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/master/basic_usage.html b/master/basic_usage.html index 994f4b250..612e15b63 100644 --- a/master/basic_usage.html +++ b/master/basic_usage.html @@ -4,19 +4,19 @@ - How it Works — Typhos 2.4.1 documentation + How it Works — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -36,7 +36,7 @@ Typhos
    - 2.4.1 + 2.4.2.dev54+g49d8127
    @@ -105,7 +105,7 @@
    -

    How it Works

    +

    How it Works

    Typhos has three major building blocks that combine into the final display seen by the operator:

      @@ -135,7 +135,7 @@

      How it Works -

      Interpreting a Device

      +

      Interpreting a Device

      Typhos interprets the internal structure of the ophyd.Device to create the PyDM user interface, so the most intuitive way to configure the created display is to include components on the device itself. This also has the advantage @@ -150,7 +150,7 @@

      Interpreting a Device

    -

    Using Happi

    +

    Using Happi

    While happi is not a requirement for using typhos, it is recommended. For more information, visit the GitHub repository. The main purpose of the package is to store information on our @@ -190,7 +190,7 @@

    Using Happi -

    Signals of Devices

    +

    Signals of Devices

    When making a custom screen, you can access signals associated with your device in several ways, in order of suggested use:

      @@ -217,7 +217,7 @@

      Signals of Devices -

      Display Signals

      +

      Display Signals

      The first thing we’ll talk about is showing a group of signals associated with our motor object in a basic form called a TyphosSignalPanel. Simply inspecting the device reveals a few @@ -237,16 +237,15 @@

      Display Signals# Important signals, all hints will be found here as well In [5]: motor.read() Out[5]: -OrderedDict([('motor', {'value': 0, 'timestamp': 1680647484.2487311}), - ('motor_setpoint', - {'value': 0, 'timestamp': 1680647484.2487297})]) +OrderedDict([('motor', {'value': 0, 'timestamp': 1693444163.089247}), + ('motor_setpoint', {'value': 0, 'timestamp': 1693444163.089246})]) # Configuration information In [6]: motor.read_configuration() Out[6]: -OrderedDict([('motor_velocity', {'value': 1, 'timestamp': 1680647484.2491562}), +OrderedDict([('motor_velocity', {'value': 1, 'timestamp': 1693444163.089849}), ('motor_acceleration', - {'value': 1, 'timestamp': 1680647484.2491765})]) + {'value': 1, 'timestamp': 1693444163.0898693})])

    The TyphosSignalPanel will render these, allowing us to select a @@ -268,7 +267,7 @@

    Display SignalsSignal represents.

    -

    Filling Templates

    +

    Filling Templates

    Taking this concept further, instead of filling a single panel TyphosDeviceDisplay allows a template to be created with a multitude of widgets and panels. Typhos will find widgets that accept devices, but do @@ -287,7 +286,7 @@

    Filling Templates -

    The TyphosSuite

    +

    The TyphosSuite

    A complete application can be made by loading the TyphosSuite. Below is the complete code from start to finish required to create the suite. Look at the TyphosSuited.default_tools to control which typhos.tools are @@ -309,7 +308,7 @@

    The TyphosSuite -

    Using the StyleSheet

    +

    Using the StyleSheet

    Typhos ships with two stylesheets to improve the look and feel of the widgets. When invoking typhos from the CLI as normal, you can pass the --dark flag to use the dark stylesheet instead of the light mode, @@ -338,7 +337,7 @@

    Using the StyleSheet

    -

    Using the Documentation Widget

    +

    Using the Documentation Widget

    Typhos has a built-in documentation helper, which allows for the in-line linking and display of a user-provided website.

    To inform Typhos how to load documentation specific to your facility, please @@ -364,7 +363,7 @@

    Using the Documentation Widget -

    Using the Jira Bug Reporting Widget

    +

    Using the Jira Bug Reporting Widget

    Typhos has an optional built-in widget to generate Jira user stories/bug reports.

    A prerequisite to this support is, of course, a working Jira installation @@ -383,7 +382,7 @@

    Using the Jira Bug Reporting Widget -

    Launching the Examples

    +

    Launching the Examples

    There are example screens in the typhos.examples submodule. After installing typhos, you can launch them as follows:

      diff --git a/master/cli.html b/master/cli.html index a0dc31977..9d7690d88 100644 --- a/master/cli.html +++ b/master/cli.html @@ -4,19 +4,19 @@ - Command Line Utilities — Typhos 2.4.1 documentation + Command Line Utilities — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -36,7 +36,7 @@ Typhos
      - 2.4.1 + 2.4.2.dev54+g49d8127
      @@ -91,18 +91,19 @@
      -

      Command Line Utilities

      +

      Command Line Utilities

      This module defines the typhos command line utility

      -
      usage: __main__.py [-h] [--layout LAYOUT] [--cols COLS]
      -                   [--display-type DISPLAY_TYPE] [--scrollable SCROLLABLE]
      -                   [--size SIZE] [--hide-displays] [--happi-cfg HAPPI_CFG]
      -                   [--fake-device] [--version] [--verbose] [--dark]
      -                   [--stylesheet-override STYLESHEET_OVERRIDE]
      -                   [--stylesheet-add STYLESHEET_ADD]
      -                   [--profile-modules [PROFILE_MODULES ...]]
      -                   [--profile-output PROFILE_OUTPUT]
      -                   [--benchmark [BENCHMARK ...]] [--exit-after EXIT_AFTER]
      -                   [devices ...]
      +
      usage: sphinx-build [-h] [--layout LAYOUT] [--cols COLS]
      +                    [--display-type DISPLAY_TYPE] [--scrollable SCROLLABLE]
      +                    [--size SIZE] [--hide-displays] [--happi-cfg HAPPI_CFG]
      +                    [--fake-device] [--version] [--verbose] [--dark]
      +                    [--stylesheet-override STYLESHEET_OVERRIDE]
      +                    [--stylesheet-add STYLESHEET_ADD]
      +                    [--profile-modules [PROFILE_MODULES ...]]
      +                    [--profile-output PROFILE_OUTPUT]
      +                    [--benchmark [BENCHMARK ...]] [--exit-after EXIT_AFTER]
      +                    [--screenshot SCREENSHOT_FILENAME]
      +                    [devices ...]
       
       Create a TyphosSuite for device/s stored in a Happi Database
       
      @@ -166,6 +167,12 @@
         --exit-after EXIT_AFTER
                               (For profiling purposes) Exit typhos after the
                               provided number of seconds
      +  --screenshot SCREENSHOT_FILENAME
      +                        Save screenshot(s) of all contained
      +                        TyphosDeviceDisplay instances to this filename pattern
      +                        prior to exiting early. This name may contain f-string
      +                        style variables, including: suite_title, widget_title,
      +                        device, and name.
       
      diff --git a/master/connections.html b/master/connections.html index 56b432012..a4ed08b4d 100644 --- a/master/connections.html +++ b/master/connections.html @@ -4,19 +4,19 @@ - Application Connections — Typhos 2.4.1 documentation + Application Connections — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -36,7 +36,7 @@ Typhos
      - 2.4.1 + 2.4.2.dev54+g49d8127
      @@ -98,9 +98,9 @@
      -

      Application Connections

      +

      Application Connections

      -

      Ophyd Signals

      +

      Ophyd Signals

      Typhos takes advantage of the flexible data plugin system contained within PyDM and the abstraction of the “control layer” within Ophyd. In the SignalPanel, objects signals are queried for their type. If these are @@ -126,7 +126,7 @@

      Ophyd SignalsSignalPanel, but maybe useful if you would like to use the SignalPlugin directly.

      -

      Inclusion of Metadata

      +

      Inclusion of Metadata

      In many cases just knowing the value of a signal is not enough to accurately display it. Extra pieces of information such as the units and precision of information can provide a richer operator experience. Typhos counts on this @@ -154,7 +154,7 @@

      Inclusion of Metadata

      -

      Happi Plugin

      +

      Happi Plugin

      The PyDM Plugin interface makes no mandate about the type of signals that we connect to our widgets. The HappiPlugin and corresponding HappiChannel contains alternative signals in order to send entire ophyd diff --git a/master/display.html b/master/display.html index 6a0f1a813..001aa4ab7 100644 --- a/master/display.html +++ b/master/display.html @@ -4,19 +4,19 @@ - Suite and Displays — Typhos 2.4.1 documentation + Suite and Displays — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -36,7 +36,7 @@ Typhos

      - 2.4.1 + 2.4.2.dev54+g49d8127
      @@ -74,6 +74,8 @@
    • TyphosSuite.hide_subdisplay()
    • TyphosSuite.hide_subdisplays()
    • TyphosSuite.save()
    • +
    • TyphosSuite.save_device_screenshots()
    • +
    • TyphosSuite.save_screenshot()
    • TyphosSuite.show_subdisplay()
    • TyphosSuite.tools
    • TyphosSuite.top_level_groups
    • @@ -100,6 +102,7 @@
    • TyphosDeviceDisplay.hideEmpty
    • TyphosDeviceDisplay.load_best_template()
    • TyphosDeviceDisplay.macros
    • +
    • TyphosDeviceDisplay.minimumSizeHint()
    • TyphosDeviceDisplay.scroll_option
    • TyphosDeviceDisplay.search_for_templates()
    • TyphosDeviceDisplay.suggest_composite_screen()
    • @@ -176,7 +179,7 @@
      -

      Suite and Displays

      +

      Suite and Displays

      Typhos has two major widgets that users are expected to interface with. The first is the TyphosDeviceDisplay, which shows device information, and TyphosSuite which contains multiple devices and tools. This is the @@ -185,10 +188,10 @@

      Suite and Displays -

      TyphosSuite

      +

      TyphosSuite

      -class typhos.TyphosSuite(parent: QtWidgets.QWidget | None = None, *, pin: bool = False, content_layout: QtWidgets.QLayout | None = None, default_display_type: DisplayTypes = DisplayTypes.detailed_screen, scroll_option: ScrollOptions = ScrollOptions.auto)[source]
      +class typhos.TyphosSuite(parent: QtWidgets.QWidget | None = None, *, pin: bool = False, content_layout: QtWidgets.QLayout | None = None, default_display_type: DisplayTypes = DisplayTypes.detailed_screen, scroll_option: ScrollOptions = ScrollOptions.auto)[source]

      This suite combines tools and devices into a single widget.

      A ParameterTree is contained in a QPopBar which shows tools and the hierarchy of a device along with options to @@ -212,7 +215,7 @@

      TyphosSuite
      -default_tools
      +default_tools

      The default tools to use in the suite. In the form of {'tool_name': ToolClass}.

      @@ -224,7 +227,7 @@

      TyphosSuite
      -add_device(device, children=True, category='Devices')[source]
      +add_device(device, children=True, category='Devices')[source]

      Add a device to the suite.

      Parameters:
      @@ -240,7 +243,7 @@

      TyphosSuite
      -add_lazy_subdisplay(name: str, display_class: type[PyQt5.QtWidgets.QWidget], category: str)[source]
      +add_lazy_subdisplay(name: str, display_class: type[QWidget], category: str)[source]

      Add an arbitrary widget to the tree of available widgets and tools.

      Parameters:
      @@ -256,7 +259,7 @@

      TyphosSuite
      -add_subdisplay(name, display, category)[source]
      +add_subdisplay(name, display, category)[source]

      Add an arbitrary widget to the tree of available widgets and tools.

      Parameters:
      @@ -272,7 +275,7 @@

      TyphosSuite
      -add_tool(name: str, tool: type[PyQt5.QtWidgets.QWidget])[source]
      +add_tool(name: str, tool: type[QWidget])[source]

      Add a widget to the toolbar.

      Shortcut for:

      suite.add_subdisplay(name, tool, category='Tools')
      @@ -290,13 +293,13 @@ 

      TyphosSuite
      -embed_subdisplay(widget)[source]
      +embed_subdisplay(widget)[source]

      Embed a display in the dock system.

      -classmethod from_device(device: Device, parent: QtWidgets.QWidget | None = None, tools: dict[str, type] | None | DEFAULT_TOOLS = <object object>, pin: bool = False, content_layout: QtWidgets.QLayout | None = None, default_display_type: DisplayTypes = DisplayTypes.detailed_screen, scroll_option: ScrollOptions = ScrollOptions.auto, show_displays: bool = True, **kwargs) TyphosSuite[source]
      +classmethod from_device(device: Device, parent: QtWidgets.QWidget | None = None, tools: dict[str, type] | None | DEFAULT_TOOLS = <object object>, pin: bool = False, content_layout: QtWidgets.QLayout | None = None, default_display_type: DisplayTypes = DisplayTypes.detailed_screen, scroll_option: ScrollOptions = ScrollOptions.auto, show_displays: bool = True, **kwargs) TyphosSuite[source]

      Create a new TyphosSuite from an ophyd.Device.

      Parameters:
      @@ -328,7 +331,7 @@

      TyphosSuite
      -classmethod from_devices(devices: list[Device], parent: QtWidgets.QWidget | None = None, tools: dict[str, type] | None | DEFAULT_TOOLS = <object object>, pin: bool = False, content_layout: QtWidgets.QLayout | None = None, default_display_type: DisplayTypes = DisplayTypes.detailed_screen, scroll_option: ScrollOptions = ScrollOptions.auto, show_displays: bool = True, **kwargs) TyphosSuite[source]
      +classmethod from_devices(devices: list[Device], parent: QtWidgets.QWidget | None = None, tools: dict[str, type] | None | DEFAULT_TOOLS = <object object>, pin: bool = False, content_layout: QtWidgets.QLayout | None = None, default_display_type: DisplayTypes = DisplayTypes.detailed_screen, scroll_option: ScrollOptions = ScrollOptions.auto, show_displays: bool = True, **kwargs) TyphosSuite[source]

      Create a new TyphosSuite from an iterator of ophyd.Device

      Parameters:
      @@ -360,7 +363,7 @@

      TyphosSuite
      -get_subdisplay(display)[source]
      +get_subdisplay(display)[source]

      Get a subdisplay by name or contained device.

      Parameters:
      @@ -382,7 +385,7 @@

      TyphosSuite
      -hide_subdisplay(widget)[source]
      +hide_subdisplay(widget)[source]

      Hide a visible subdisplay.

      Parameters:
      @@ -395,13 +398,13 @@

      TyphosSuite
      -hide_subdisplays()[source]
      +hide_subdisplays()[source]

      Hide all open displays.

      -save()[source]
      +save()[source]

      Save suite settings to a file using typhos.utils.save_suite().

      A QFileDialog will be used to query the user for the desired location of the created Python file

      @@ -420,9 +423,21 @@

      TyphosSuite +
      +save_device_screenshots(filename_format: str) dict[str, str][source]
      +

      Save screenshot(s) of devices to filename_format.

      +

      + +
      +
      +save_screenshot(filename: str) bool[source]
      +

      Save a screenshot of this widget to filename.

      +
      +
      -show_subdisplay(widget)[source]
      +show_subdisplay(widget: QWidget | SidebarParameter | str) QWidget[source]

      Open a display in the dock system.

      Parameters:
      @@ -430,18 +445,24 @@

      TyphosSuiteget_subdisplay()

      +
      Returns:
      +

      widget – The subdisplay that was shown.

      +
      +
      Return type:
      +

      QWidget

      +

      -property tools
      +property tools

      Tools loaded into the suite.

      -property top_level_groups
      +property top_level_groups

      Get top-level groups.

      This is of the form:

      {'name': QGroupParameterItem}
      @@ -453,10 +474,10 @@ 

      TyphosSuite -

      TyphosDeviceDisplay

      +

      TyphosDeviceDisplay

      -class typhos.TyphosDeviceDisplay(parent: QWidget | None = None, *, scrollable: bool | None = None, composite_heuristics: bool = True, embedded_templates: list[str] | None = None, detailed_templates: list[str] | None = None, engineering_templates: list[str] | None = None, display_type: DisplayTypes | str | int = 'detailed_screen', scroll_option: ScrollOptions | str | int = 'auto', nested: bool = False)[source]
      +class typhos.TyphosDeviceDisplay(parent: QWidget | None = None, *, scrollable: bool | None = None, composite_heuristics: bool = True, embedded_templates: list[str] | None = None, detailed_templates: list[str] | None = None, engineering_templates: list[str] | None = None, display_type: DisplayTypes | str | int = 'detailed_screen', scroll_option: ScrollOptions | str | int = 'auto', nested: bool = False)[source]

      Main display for a single ophyd Device.

      This contains the widgets for all of the root devices signals, and any methods you would like to display. By typhos convention, the base @@ -486,13 +507,13 @@

      TyphosDeviceDisplay
      -TemplateEnum
      +TemplateEnum

      alias of DisplayTypes

      -add_device(device, macros=None)[source]
      +add_device(device, macros=None)[source]

      Add a Device and signals to the TyphosDeviceDisplay.

      The full dictionary of macros is built with the following order of precedence:

      @@ -517,61 +538,61 @@

      TyphosDeviceDisplay
      -composite_heuristics
      +composite_heuristics

      Allow composite screen to be suggested first by heuristics.

      -copy_to_clipboard()[source]
      +copy_to_clipboard()[source]

      Copy the display image to the clipboard.

      -property current_template
      +property current_template

      Get the current template being displayed.

      -property device
      +property device

      Get the device associated with this Device Display.

      -device_class
      +device_class

      Get the full class with module name of loaded device.

      -device_name
      +device_name

      Get the name of the loaded device.

      -display_type
      +display_type

      Get or set the current display type.

      -property display_widget
      +property display_widget

      Get the widget generated from the template.

      -force_template
      +force_template

      Force a specific template.

      -classmethod from_class(klass, *, template=None, macros=None, **kwargs)[source]
      +classmethod from_class(klass, *, template=None, macros=None, **kwargs)[source]

      Create a new TyphosDeviceDisplay from a Device class.

      Loads the signals in to the appropriate positions and sets the title to a cleaned version of the device name.

      @@ -592,7 +613,7 @@

      TyphosDeviceDisplay
      -classmethod from_device(device, template=None, macros=None, **kwargs)[source]
      +classmethod from_device(device, template=None, macros=None, **kwargs)[source]

      Create a new TyphosDeviceDisplay from a Device.

      Loads the signals in to the appropriate positions and sets the title to a cleaned version of the device name

      @@ -610,7 +631,7 @@

      TyphosDeviceDisplay
      -get_best_template(display_type, macros)[source]
      +get_best_template(display_type, macros)[source]

      Get the best template for the given display type.

      Parameters:
      @@ -624,37 +645,42 @@

      TyphosDeviceDisplay
      -hideEmpty
      +hideEmpty

      Toggle hiding or showing empty panels.

      -load_best_template()[source]
      +load_best_template()[source]

      Load the best available template for the current display type.

      -property macros
      +property macros

      Get or set the macros for the display.

      +
      +
      +minimumSizeHint(self) QSize[source]
      +
      +
      -scroll_option
      +scroll_option

      Place the display in a scrollable area.

      -search_for_templates()[source]
      +search_for_templates()[source]

      Search the filesystem for device-specific templates.

      -classmethod suggest_composite_screen(device_cls)[source]
      +classmethod suggest_composite_screen(device_cls)[source]

      Suggest to use the composite screen for the given class.

      Returns:
      @@ -668,7 +694,7 @@

      TyphosDeviceDisplay
      -to_image()[source]
      +to_image()[source]

      Return the entire display as a QtGui.QImage.

      Returns:
      @@ -684,10 +710,10 @@

      TyphosDeviceDisplay -

      Standardized Display Title

      +

      Standardized Display Title

      -class typhos.display.TyphosDisplayTitle(title='${name}', *, show_switcher=True, show_underline=True, parent=None)[source]
      +class typhos.display.TyphosDisplayTitle(title='${name}', *, show_switcher=True, show_underline=True, parent=None)[source]

      Standardized Typhos Device Display title.

      Parameters:
      @@ -701,37 +727,37 @@

      Standardized Display Title
      -add_device(device)[source]
      +add_device(device)[source]

      Typhos hook for setting the associated device.

      -pop_out_help()[source]
      +pop_out_help()[source]

      Pop out the help widget.

      -set_device_display(display)[source]
      +set_device_display(display)[source]

      Typhos callback: set the TyphosDeviceDisplay.

      -show_switcher
      +show_switcher

      Get or set whether to show the display switcher.

      -show_underline
      +show_underline

      Get or set whether to show the underline.

      -toggle_help(show)[source]
      +toggle_help(show)[source]

      Toggle the help visibility.

      @@ -739,17 +765,17 @@

      Standardized Display Title
      -class typhos.display.TyphosDisplaySwitcher(parent=None, **kwargs)[source]
      +class typhos.display.TyphosDisplaySwitcher(parent=None, **kwargs)[source]

      Display switcher set of buttons for use with a TyphosDeviceDisplay.

      -add_device(device)[source]
      +add_device(device)[source]

      Typhos hook for setting the associated device.

      -set_device_display(display)[source]
      +set_device_display(display)[source]

      Typhos hook for setting the associated device display.

      @@ -757,11 +783,11 @@

      Standardized Display Title
      -class typhos.display.TyphosTitleLabel[source]
      +class typhos.display.TyphosTitleLabel[source]

      A label class intended for use as a standardized title.

      -toggle_requested
      +toggle_requested

      A Qt signal indicating that the user clicked on the title. By default, this hides any nested panels underneath the title.

      @@ -773,17 +799,17 @@

      Standardized Display Title
      -mousePressEvent(event)[source]
      +mousePressEvent(event)[source]

      Overridden qt hook for a mouse press.

      -

      Tool buttons

      +

      Tool buttons

      -class typhos.display.TyphosToolButton(icon=None, *, parent=None)[source]
      +class typhos.display.TyphosToolButton(icon=None, *, parent=None)[source]

      Base class for tool buttons used in the TyphosDisplaySwitcher.

      Parameters:
      @@ -795,7 +821,7 @@

      Tool buttons
      -DEFAULT_ICON
      +DEFAULT_ICON

      The default icon from fontawesome to use.

      Type:
      @@ -806,13 +832,13 @@

      Tool buttons
      -generate_context_menu()[source]
      +generate_context_menu()[source]

      Context menu request: override in subclasses.

      -classmethod get_icon(icon=None)[source]
      +classmethod get_icon(icon=None)[source]

      Get a QIcon, if specified, or fall back to the default.

      Parameters:
      @@ -824,7 +850,7 @@

      Tool buttons
      -open_context_menu(ev)[source]
      +open_context_menu(ev)[source]

      Open the instance-specific context menu.

      Parameters:
      @@ -837,11 +863,11 @@

      Tool buttons
      -class typhos.display.TyphosDisplaySwitcherButton(display_type, *, parent=None)[source]
      +class typhos.display.TyphosDisplaySwitcherButton(display_type, *, parent=None)[source]

      A button which switches the TyphosDeviceDisplay template on click.

      -generate_context_menu()[source]
      +generate_context_menu()[source]

      Context menu request.

      @@ -849,12 +875,12 @@

      Tool buttons
      -class typhos.display.TyphosDisplayConfigButton(icon=None, *, parent=None)[source]
      +class typhos.display.TyphosDisplayConfigButton(icon=None, *, parent=None)[source]

      The configuration button used in the TyphosDisplaySwitcher.

      This uses the common “vertical ellipse” icon by default.

      -create_hide_empty_menu(panels, base_menu)[source]
      +create_hide_empty_menu(panels, base_menu)[source]

      Create the hide empty filtering menu.

      Parameters:
      @@ -868,7 +894,7 @@

      Tool buttons
      -create_kind_filter_menu(panels, base_menu, *, only)[source]
      +create_kind_filter_menu(panels, base_menu, *, only)[source]

      Create the “Kind” filter menu.

      Parameters:
      @@ -884,7 +910,7 @@

      Tool buttons
      -create_name_filter_menu(panels, base_menu)[source]
      +create_name_filter_menu(panels, base_menu)[source]

      Create the name-based filtering menu.

      Parameters:
      @@ -898,7 +924,7 @@

      Tool buttons
      -generate_context_menu()[source]
      +generate_context_menu()[source]

      Generate the custom context menu.

      Embedded
       Detailed
      @@ -917,7 +943,7 @@ 

      Tool buttons
      -hide_empty(search=True)[source]
      +hide_empty(search=True)[source]

      Wrap hide_empty calls for use with search functions and action clicks.

      Parameters:
      @@ -929,7 +955,7 @@

      Tool buttons
      -set_device_display(device_display)[source]
      +set_device_display(device_display)[source]

      Typhos callback: set the TyphosDeviceDisplay.

      @@ -938,10 +964,10 @@

      Tool buttons -

      Utilities

      +

      Utilities

      -typhos.display.normalize_display_type(display_type: DisplayTypes | str | int) DisplayTypes[source]
      +typhos.display.normalize_display_type(display_type: DisplayTypes | str | int) DisplayTypes[source]

      Normalize a given display type.

      Parameters:
      @@ -961,7 +987,7 @@

      Utilities
      -typhos.display.hide_empty(widget, process_widget=True)[source]
      +typhos.display.hide_empty(widget, process_widget=True)[source]

      Recursively hide empty panels and widgets.

      Parameters:
      @@ -977,7 +1003,7 @@

      Utilities
      -typhos.display.show_empty(widget)[source]
      +typhos.display.show_empty(widget)[source]

      Recursively shows all panels and widgets, empty or not.

      Parameters:
      @@ -988,7 +1014,7 @@

      Utilities
      -typhos.display.toggle_display(widget, force_state=None)[source]
      +typhos.display.toggle_display(widget, force_state=None)[source]

      Toggle the visibility of all TyphosSignalPanel in a display.

      Parameters:
      diff --git a/master/generated/typhos.tools.TyphosConsole.html b/master/generated/typhos.tools.TyphosConsole.html deleted file mode 100644 index 5a060e5ac..000000000 --- a/master/generated/typhos.tools.TyphosConsole.html +++ /dev/null @@ -1,1180 +0,0 @@ - - - - - - - typhos.tools.TyphosConsole — Typhos 2.4.1 documentation - - - - - - - - - - - - - - - - - - -
      - - -
      - -
      -
      -
      - -
      -
      -
      -
      - -
      -

      typhos.tools.TyphosConsole

      -
      -
      -class typhos.tools.TyphosConsole(parent=None)[source]
      -

      IPython Widget for Typhos Display.

      -

      This widget handles starting a JupyterKernel and connecting an IPython -console in which the user can type Python commands. It is important to note -that the kernel in which commands are executed is a completely separate -process. This protects the user against locking themselves out of the GUI, -but makes it difficult to pass the Device..

      -

      To get around this caveat, this widget uses happi to pass the Device -between the processes. This is not a strict requirement, but if happi -is not installed, users will need to create a custom add_device method -if they want their devices loaded in both the GUI and console.

      -
      -
      -__init__(parent=None)[source]
      -
      - -

      Methods

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      __init__([parent])

      acceptDrops(self)

      accessibleDescription(self)

      accessibleName(self)

      actionEvent(self, a0)

      actions(self)

      activateWindow(self)

      addAction(self, action)

      addActions(self, actions)

      add_device(device)

      Add a new device to the widget

      adjustSize(self)

      autoFillBackground(self)

      backgroundRole(self)

      baseSize(self)

      blockSignals(self, b)

      changeEvent(self, a0)

      childAt(-> QWidget)

      childEvent(self, a0)

      children(self)

      childrenRect(self)

      childrenRegion(self)

      clearFocus(self)

      clearMask(self)

      close(self)

      closeEvent(self, a0)

      colorCount(self)

      connectNotify(self, signal)

      contentsMargins(self)

      contentsRect(self)

      contextMenuEvent(self, a0)

      contextMenuPolicy(self)

      create(self[, window, initializeWindow, ...])

      createWindowContainer(window[, parent, flags])

      cursor(self)

      customEvent(self, a0)

      deleteLater(self)

      depth(self)

      destroy(self[, destroyWindow, destroySubWindows])

      devType(self)

      devicePixelRatio(self)

      devicePixelRatioF(self)

      devicePixelRatioFScale()

      disconnect(-> bool)

      disconnectNotify(self, signal)

      dragEnterEvent(self, a0)

      dragLeaveEvent(self, a0)

      dragMoveEvent(self, a0)

      dropEvent(self, a0)

      dumpObjectInfo(self)

      dumpObjectTree(self)

      dynamicPropertyNames(self)

      effectiveWinId(self)

      ensurePolished(self)

      enterEvent(self, a0)

      event(self, a0)

      eventFilter(self, a0, a1)

      execute(script, *[, echo, check_readiness])

      Execute some code in the console.

      find(a0)

      findChild(-> QObject)

      findChildren(...)

      focusInEvent(self, a0)

      focusNextChild(self)

      focusNextPrevChild(self, next)

      focusOutEvent(self, a0)

      focusPolicy(self)

      focusPreviousChild(self)

      focusProxy(self)

      focusWidget(self)

      font(self)

      fontInfo(self)

      fontMetrics(self)

      foregroundRole(self)

      frameGeometry(self)

      frameSize(self)

      from_device(device[, parent])

      Create a new instance of the widget for a Device

      geometry(self)

      getContentsMargins(self)

      grab(self[, rectangle])

      grabGesture(self, type[, flags])

      grabKeyboard(self)

      grabMouse()

      grabShortcut(self, key[, context])

      graphicsEffect(self)

      graphicsProxyWidget(self)

      hasFocus(self)

      hasHeightForWidth(self)

      hasMouseTracking(self)

      hasTabletTracking(self)

      height(self)

      heightForWidth(self, a0)

      heightMM(self)

      hide(self)

      hideEvent(self, a0)

      inherits(self, classname)

      initPainter(self, painter)

      inputMethodEvent(self, a0)

      inputMethodHints(self)

      inputMethodQuery(self, a0)

      insertAction(self, before, action)

      insertActions(self, before, actions)

      installEventFilter(self, a0)

      isActiveWindow(self)

      isAncestorOf(self, child)

      isEnabled(self)

      isEnabledTo(self, a0)

      isFullScreen(self)

      isHidden(self)

      isLeftToRight(self)

      isMaximized(self)

      isMinimized(self)

      isModal(self)

      isRightToLeft(self)

      isSignalConnected(self, signal)

      isVisible(self)

      isVisibleTo(self, a0)

      isWidgetType(self)

      isWindow(self)

      isWindowModified(self)

      isWindowType(self)

      keyPressEvent(self, a0)

      keyReleaseEvent(self, a0)

      keyboardGrabber()

      killTimer(self, id)

      layout(self)

      layoutDirection(self)

      leaveEvent(self, a0)

      locale(self)

      logicalDpiX(self)

      logicalDpiY(self)

      lower(self)

      mapFrom(self, a0, a1)

      mapFromGlobal(self, a0)

      mapFromParent(self, a0)

      mapTo(self, a0, a1)

      mapToGlobal(self, a0)

      mapToParent(self, a0)

      mask(self)

      maximumHeight(self)

      maximumSize(self)

      maximumWidth(self)

      metaObject(self)

      metric(self, a0)

      minimumHeight(self)

      minimumSize(self)

      minimumSizeHint(self)

      minimumWidth(self)

      mouseDoubleClickEvent(self, a0)

      mouseGrabber()

      mouseMoveEvent(self, a0)

      mousePressEvent(self, a0)

      mouseReleaseEvent(self, a0)

      move()

      moveEvent(self, a0)

      moveToThread(self, thread)

      nativeEvent(self, eventType, message)

      nativeParentWidget(self)

      nextInFocusChain(self)

      normalGeometry(self)

      objectName(self)

      overrideWindowFlags(self, type)

      overrideWindowState(self, state)

      paintEngine(self)

      paintEvent(self, a0)

      paintingActive(self)

      palette(self)

      parent(self)

      parentWidget(self)

      physicalDpiX(self)

      physicalDpiY(self)

      pos(self)

      previousInFocusChain(self)

      property(self, name)

      pyqtConfigure(...)

      Each keyword argument is either the name of a Qt property or a Qt signal.

      raise_(self)

      receivers(self, signal)

      rect(self)

      releaseKeyboard(self)

      releaseMouse(self)

      releaseShortcut(self, id)

      removeAction(self, action)

      removeEventFilter(self, a0)

      render(, sourceRegion, flags, ...)

      repaint(-> None - -> None)

      resize()

      resizeEvent(self, a0)

      restoreGeometry(self, geometry)

      saveGeometry(self)

      screen(self)

      scroll()

      sender(self)

      senderSignalIndex(self)

      setAcceptDrops(self, on)

      setAccessibleDescription(self, description)

      setAccessibleName(self, name)

      setAttribute(self, attribute[, on])

      setAutoFillBackground(self, enabled)

      setBackgroundRole(self, a0)

      setBaseSize()

      setContentsMargins()

      setContextMenuPolicy(self, policy)

      setCursor(self, a0)

      setDisabled(self, a0)

      setEnabled(self, a0)

      setFixedHeight(self, h)

      setFixedSize()

      setFixedWidth(self, w)

      setFocus()

      setFocusPolicy(self, policy)

      setFocusProxy(self, a0)

      setFont(self, a0)

      setForegroundRole(self, a0)

      setGeometry()

      setGraphicsEffect(self, effect)

      setHidden(self, hidden)

      setInputMethodHints(self, hints)

      setLayout(self, a0)

      setLayoutDirection(self, direction)

      setLocale(self, locale)

      setMask()

      setMaximumHeight(self, maxh)

      setMaximumSize()

      setMaximumWidth(self, maxw)

      setMinimumHeight(self, minh)

      setMinimumSize()

      setMinimumWidth(self, minw)

      setMouseTracking(self, enable)

      setObjectName(self, name)

      setPalette(self, a0)

      setParent()

      setProperty(self, name, value)

      setShortcutAutoRepeat(self, id[, enabled])

      setShortcutEnabled(self, id[, enabled])

      setSizeIncrement()

      setSizePolicy()

      setStatusTip(self, a0)

      setStyle(self, a0)

      setStyleSheet(self, styleSheet)

      setTabOrder(a0, a1)

      setTabletTracking(self, enable)

      setToolTip(self, a0)

      setToolTipDuration(self, msec)

      setUpdatesEnabled(self, enable)

      setVisible(self, visible)

      setWhatsThis(self, a0)

      setWindowFilePath(self, filePath)

      setWindowFlag(self, a0[, on])

      setWindowFlags(self, type)

      setWindowIcon(self, icon)

      setWindowIconText(self, a0)

      setWindowModality(self, windowModality)

      setWindowModified(self, a0)

      setWindowOpacity(self, level)

      setWindowRole(self, a0)

      setWindowState(self, state)

      setWindowTitle(self, a0)

      sharedPainter(self)

      show(self)

      showEvent(self, a0)

      showFullScreen(self)

      showMaximized(self)

      showMinimized(self)

      showNormal(self)

      shutdown(*[, block])

      Shutdown the Jupyter Kernel.

      signalsBlocked(self)

      size(self)

      sizeHint(self)

      sizeIncrement(self)

      sizePolicy(self)

      stackUnder(self, a0)

      startTimer(self, interval[, timerType])

      statusTip(self)

      style(self)

      styleSheet(self)

      tabletEvent(self, a0)

      testAttribute(self, attribute)

      thread(self)

      timerEvent(self, a0)

      toolTip(self)

      toolTipDuration(self)

      tr(self, sourceText[, disambiguation, n])

      underMouse(self)

      ungrabGesture(self, type)

      unsetCursor(self)

      unsetLayoutDirection(self)

      unsetLocale(self)

      update(-> None - -> None)

      updateGeometry(self)

      updateMicroFocus(self)

      updatesEnabled(self)

      visibleRegion(self)

      whatsThis(self)

      wheelEvent(self, a0)

      width(self)

      widthMM(self)

      winId(self)

      window(self)

      windowFilePath(self)

      windowFlags(self)

      windowHandle(self)

      windowIcon(self)

      windowIconText(self)

      windowModality(self)

      windowOpacity(self)

      windowRole(self)

      windowState(self)

      windowTitle(self)

      windowType(self)

      x(self)

      y(self)

      -

      Attributes

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

      DrawChildren

      DrawWindowBackground

      IgnoreMask

      PdmDepth

      PdmDevicePixelRatio

      PdmDevicePixelRatioScaled

      PdmDpiX

      PdmDpiY

      PdmHeight

      PdmHeightMM

      PdmNumColors

      PdmPhysicalDpiX

      PdmPhysicalDpiY

      PdmWidth

      PdmWidthMM

      customContextMenuRequested

      QPoint) [signal]

      destroyed

      typing.Optional[QObject] = None) [signal]

      device_added

      kernel_is_alive

      Is the Jupyter kernel alive and not shutting down?

      kernel_is_ready

      Is the Jupyter kernel ready?

      kernel_ready

      kernel_shut_down

      objectNameChanged

      str) [signal]

      staticMetaObject

      windowIconChanged

      QIcon) [signal]

      windowIconTextChanged

      str) [signal]

      windowTitleChanged

      str) [signal]

      -
      - -
      - - -
      -
      - -
      -
      -
      -
      - - - - \ No newline at end of file diff --git a/master/generated/typhos.tools.TyphosLogDisplay.html b/master/generated/typhos.tools.TyphosLogDisplay.html index 7c10ddac5..c596def65 100644 --- a/master/generated/typhos.tools.TyphosLogDisplay.html +++ b/master/generated/typhos.tools.TyphosLogDisplay.html @@ -4,24 +4,24 @@ - typhos.tools.TyphosLogDisplay — Typhos 2.4.1 documentation + typhos.tools.TyphosLogDisplay — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + - + @@ -36,7 +36,7 @@ Typhos
      - 2.4.1 + 2.4.2.dev54+g49d8127
      @@ -51,7 +51,6 @@
    • How it Works
    • Supported Tools
      • Tool Classes
          -
        • typhos.tools.TyphosConsole
        • typhos.tools.TyphosLogDisplay @@ -103,14 +102,14 @@
          -

          typhos.tools.TyphosLogDisplay

          +

          typhos.tools.TyphosLogDisplay

          -class typhos.tools.TyphosLogDisplay(level=20, parent=None)[source]
          +class typhos.tools.TyphosLogDisplay(level=20, parent=None)[source]

          Typhos Logging Display.

          -__init__(level=20, parent=None)[source]
          +__init__(level=20, parent=None)[source]

          Methods

          @@ -1120,7 +1119,7 @@

          typhos.tools.TyphosLogDisplay - +

          diff --git a/master/generated/typhos.tools.TyphosTimePlot.html b/master/generated/typhos.tools.TyphosTimePlot.html index 79850e7b7..0076f8c8d 100644 --- a/master/generated/typhos.tools.TyphosTimePlot.html +++ b/master/generated/typhos.tools.TyphosTimePlot.html @@ -4,19 +4,19 @@ - typhos.tools.TyphosTimePlot — Typhos 2.4.1 documentation + typhos.tools.TyphosTimePlot — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -36,7 +36,7 @@ Typhos
          - 2.4.1 + 2.4.2.dev54+g49d8127
          @@ -51,7 +51,6 @@
        • How it Works
        • Supported Tools
          • Tool Classes
              -
            • typhos.tools.TyphosConsole
            • typhos.tools.TyphosLogDisplay
            • typhos.tools.TyphosTimePlot
                -
              • force_template (typhos.TyphosDeviceDisplay attribute) +
              • FrameOnEditFilter (class in typhos.utils)
              • from_class() (typhos.TyphosDeviceDisplay class method)
              • @@ -536,6 +540,8 @@

                M

              • make_identifier() (in module typhos.utils)
              • method_name (typhos.TyphosMethodButton attribute) +
              • +
              • minimumSizeHint() (typhos.TyphosDeviceDisplay method)
              • module @@ -683,6 +689,10 @@

                S

                + -
              • set_display() (typhos.textedit.TyphosTextEdit method) +
              • +
              • set_edit_style() (typhos.utils.FrameOnEditFilter static method) +
              • +
              • set_no_edit_style() (typhos.utils.FrameOnEditFilter static method)
              • setpoint_attribute (typhos.TyphosPositionerWidget attribute)
              • @@ -726,12 +740,12 @@

                S

              • show_expert_button (typhos.TyphosPositionerWidget attribute)
              • +
                • show_switcher (typhos.display.TyphosDisplayTitle attribute)
                • show_underline (typhos.display.TyphosDisplayTitle attribute) @@ -788,6 +802,10 @@

                  S

                  T

                  + -
                    -
                  • TyphosConsole (class in typhos.tools)
                  • TyphosDesignerMixin (class in typhos.widgets)
                  • diff --git a/master/index.html b/master/index.html index 54c94ab00..54bf17964 100644 --- a/master/index.html +++ b/master/index.html @@ -4,19 +4,19 @@ - Typhos — Typhos 2.4.1 documentation + Typhos — Typhos 2.4.2.dev54+g49d8127 documentation - - - - - - + + + + + + @@ -35,7 +35,7 @@ Typhos
                    - 2.4.1 + 2.4.2.dev54+g49d8127
                    @@ -90,7 +90,7 @@
                    -

                    Typhos

                    +

                    Typhos

                    EPICS is a flexible and powerful controls system to access to experimental information, however, the relation and meaning of process variables is often obscure. Many of the user interfaces for EPICS information reflect this, as @@ -114,7 +114,7 @@

                    Typhos