diff --git a/index.html b/index.html index 68824936..f817419e 100644 --- a/index.html +++ b/index.html @@ -1,9 +1,9 @@ - + -

Go to the default documentation.

+

Go to the default documentation.

\ No newline at end of file diff --git a/v1.4.0/.buildinfo b/v1.4.0/.buildinfo new file mode 100644 index 00000000..183b7732 --- /dev/null +++ b/v1.4.0/.buildinfo @@ -0,0 +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: 4425060f6718333fb04bed90dae4b8d7 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/v1.4.0/.nojekyll b/v1.4.0/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/v1.4.0/_modules/atef/check.html b/v1.4.0/_modules/atef/check.html new file mode 100644 index 00000000..93c10758 --- /dev/null +++ b/v1.4.0/_modules/atef/check.html @@ -0,0 +1,1124 @@ + + + + + + atef.check — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for atef.check

+"""
+Dataclasses for describing comparisons.  Comparisons generally subclass ``Comparison``,
+which hold ``Value`` and ``DynamicValue`` objects.  Comparisons involving
+``DynamicValue`` must be prepared before comparisons can be run.
+"""
+
+from __future__ import annotations
+
+import concurrent.futures
+import logging
+from dataclasses import asdict, dataclass, field
+from itertools import zip_longest
+from typing import Any, Generator, Iterable, List, Optional, Sequence
+
+import numpy as np
+import ophyd
+
+from . import reduce, serialization, util
+from .cache import DataCache
+from .enums import Severity
+from .exceptions import (ComparisonError, ComparisonException,
+                         ComparisonWarning, DynamicValueError,
+                         UnpreparedComparisonException)
+from .result import Result, successful_result
+from .type_hints import Number, PrimitiveType
+
+logger = logging.getLogger(__name__)
+
+
+def _is_in_range(
+    value: Number, low: Number, high: Number, inclusive: bool = True
+) -> bool:
+    """Is `value` in the range of low to high?"""
+    if inclusive:
+        return low <= value <= high
+    return low < value < high
+
+
+def _raise_for_severity(severity: Severity, reason: str):
+    if severity == Severity.success:
+        return True
+    if severity == Severity.warning:
+        raise ComparisonWarning(reason)
+    raise ComparisonError(reason)
+
+
+
+[docs] +@dataclass +class Value: + """A primitive (static) value with optional metadata.""" + #: The value for comparison. + value: PrimitiveType + #: A description of what the value represents. + description: str = "" + #: Relative tolerance value. + rtol: Optional[Number] = None + #: Absolute tolerance value. + atol: Optional[Number] = None + #: Severity to set on a match (if applicable). + severity: Severity = Severity.success + + def __str__(self) -> str: + if self.rtol is not None or self.atol is not None: + rtol = f"rtol={self.rtol}" if self.rtol is not None else "" + atol = f"atol={self.atol}" if self.atol is not None else "" + tolerance = " within " + ", ".join(tol for tol in (rtol, atol) if tol) + else: + tolerance = "" + + # Since "success" is likely implicit here, only specify the resulting + # severity in the description when it's not "success": + # at2l0.blade_01.state.state not equal to 0 + # (for a result of success): Filter is moving + # becomes + # at2l0.blade_01.state.state not equal to 0: Filter is moving + if self.severity == Severity.success: + value_desc = f"{self.value}{tolerance}" + else: + value_desc = f"{self.value}{tolerance} (for a result of {self.severity.name})" + + if self.description: + return f"{value_desc}: {self.description}" + return value_desc + +
+[docs] + def get(self) -> PrimitiveType: + """Get the value from this container.""" + return self.value
+ + +
+[docs] + def compare(self, value: PrimitiveType) -> bool: + """Compare the provided value with this one, using tolerance settings.""" + if ((self.rtol is not None or self.atol is not None) + and not isinstance(value, (str, bool))): + return np.isclose( + value, self.value, + rtol=(self.rtol or 0.0), + atol=(self.atol or 0.0) + ) + + return value == self.value
+
+ + + +
+[docs] +@dataclass +@serialization.as_tagged_union +class DynamicValue: + """ + A primitive value from an external source that may change over time. + This necessarily picks up a runtime performance cost and getting + the value is not guaranteed to be successful. If unsuccessful, + this will raise a DynamicValueError from the original exception. + + Includes settings for reduction of multiple samples. + + Value will be cached on preparation, and this value used for comparisons + """ + #: Value is now optional, and will be filled in when prepared + value: Optional[PrimitiveType] = None + + #: Period over which the value will be read + reduce_period: Optional[Number] = None + + #: Reduce collected samples by this reduce method + reduce_method: reduce.ReduceMethod = reduce.ReduceMethod.average + + #: If applicable, request and compare string values rather than the default + string: Optional[bool] = None + + def __str__(self) -> str: + kwds = (f"{key}={value}" for key, value in asdict(self).items() + if (value is not None)) + return f"{type(self).__name__}({', '.join(kwds)}) [{self.value}]" + +
+[docs] + def get(self) -> PrimitiveType: + """ + Return the cached value from `prepare`, or raise a `DynamicValueError` if there is no such value. + """ + if self.value is not None: + return self.value + else: + raise DynamicValueError('Dynamic value has not been prepared.')
+ + +
+[docs] + async def prepare(self, cache: DataCache) -> None: + """ + Implement in child class to get the current value from source. + Should set the self.value + """ + raise NotImplementedError()
+
+ + + +
+[docs] +@dataclass +class EpicsValue(DynamicValue): + """ + A primitive value sourced from an EPICS PV. + This will create and cache an EpicsSignalRO object, and defer + to that signal's get handling. + """ + # as of 3.10, use kw_only=True to allow mandatory arguments after the inherited + # optional ones. Until then, these must have a default + #: The EPICS PV to use. + pvname: str = '' + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Prepare the EpicsValue. Accesses the EPICS PV using the data + cache provided. + + Parameters + ---------- + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Raises + ------ + DynamicValueError + if the EpicsValue does not have a pv specified + """ + if not self.pvname: + raise DynamicValueError('No PV specified') + + if cache is None: + cache = DataCache() + + data = await cache.get_pv_data( + self.pvname.strip(), + reduce_period=self.reduce_period, + reduce_method=self.reduce_method, + string=self.string or False, + ) + self.value = data
+
+ + + +
+[docs] +@dataclass +class HappiValue(DynamicValue): + """ + A primitive value sourced from a specific happi device signal. + This will query happi to cache a Signal object, and defer to + that signal's get handling. + """ + #: The name of the device to use. + device_name: str = '' + #: The attr name of the signal to get from. + signal_attr: str = '' + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Prepare the HappiValue. Accesses the specified device and component + from the happi database. + + Parameters + ---------- + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Raises + ------ + DynamicValueError + if the EpicsValue does not have a pv specified + """ + if not self.device_name or not self.signal_attr: + raise DynamicValueError('Happi value is unspecified') + + if cache is None: + cache = DataCache() + + device = util.get_happi_device_by_name(self.device_name) + signal = getattr(device, self.signal_attr) + data = await cache.get_signal_data( + signal, + reduce_period=self.reduce_period, + reduce_method=self.reduce_method, + string=self.string or False, + ) + self.value = data
+
+ + + +
+[docs] +@dataclass +class ValueRange: + """A range of primitive values with optional metadata.""" + #: The low value for comparison. + low: Number + #: The high value for comparison. + high: Number + #: Should the low and high values be included in the range? + inclusive: bool = True + #: Check if inside the range. + in_range: bool = True + #: A description of what the value represents. + description: str = "" + #: Severity to set on a match (if applicable). + severity: Severity = Severity.success + + def __str__(self) -> str: + open_paren, close_paren = "[]" if self.inclusive else "()" + inside = "inside" if self.in_range else "outside" + range_desc = f"{inside} {open_paren}{self.low}, {self.high}{close_paren}" + value_desc = f"{range_desc} -> {self.severity.name}" + if self.description: + return f"{self.description} ({value_desc})" + return value_desc + +
+[docs] + def compare(self, value: Number) -> bool: + """Compare the provided value with this range.""" + in_range = _is_in_range( + value, low=self.low, high=self.high, inclusive=self.inclusive + ) + if self.in_range: + # Normal functionality - is value in the range? + return in_range + + # Inverted - is value outside of the range? + return not in_range
+
+ + + +
+[docs] +@dataclass +@serialization.as_tagged_union +class Comparison: + """ + Base class for all atef value comparisons. + + Subclasses of Comparison will be serialized as a tagged union. This means + that the subclass name will be used as an identifier for the generated + serialized dictionary (and JSON object). + """ + # Short name to use in the UI + name: Optional[str] = None + + #: Description tied to this comparison. + description: Optional[str] = None + + #: Invert the comparison's result. Normally, a valid comparison - that is, + #: one that evaluates to True - is considered successful. When `invert` is + #: set, such a comparison would be considered a failure. + invert: bool = False + + #: Period over which the comparison will occur, where multiple samples + #: may be acquired prior to a result being available. + reduce_period: Optional[Number] = None + + #: Reduce collected samples by this reduce method. + reduce_method: reduce.ReduceMethod = reduce.ReduceMethod.average + + #: If applicable, request and compare string values rather than the default + #: specified. + string: Optional[bool] = None + + #: If the comparison fails, use this result severity. + severity_on_failure: Severity = Severity.error + + #: If disconnected and unable to perform the comparison, set this + #: result severity. + if_disconnected: Severity = Severity.error + + def __post_init__(self): + self.is_prepared: bool = False + + def __call__(self, value: Any) -> Optional[Result]: + """Run the comparison against ``value``.""" + return self.compare(value) + +
+[docs] + def describe(self) -> str: + """ + Human-readable description of the comparison operation itself. + + To be implemented by subclass. + """ + raise NotImplementedError()
+ + + def _compare(self, value: PrimitiveType) -> bool: + """ + Compare a non-None value using the configured settings. + + To be implemented by subclass. + """ + raise NotImplementedError() + + def __str__(self) -> str: + try: + return self.describe() + except Exception as ex: + return ( + f"{self.__class__.__name__}.describe() failure " + f"({ex.__class__.__name__}: {ex})" + ) + +
+[docs] + def compare(self, value: Any, identifier: Optional[str] = None) -> Result: + """ + Compare the provided value using the comparator's settings. + + Parameters + ---------- + value : + The value to compare. + + identifier : str, optional + An identifier that goes along with the provided value. Used for + severity result descriptions. + """ + if not self.is_prepared: + raise UnpreparedComparisonException( + f"Comparison {self} was not prepared." + ) + + if value is None: + return Result( + severity=self.if_disconnected, + reason="Value unset (i.e., disconnected)", + ) + + identifier_prefix = f"{identifier} " if identifier else "" + + try: + passed = self._compare(value) + except ComparisonException as ex: + return Result( + severity=ex.severity, + reason=f"{identifier_prefix}Value {value!r} {ex.severity.name}: {ex}", + ) + except Exception as ex: + return Result( + severity=Severity.internal_error, + reason=( + f"{identifier_prefix}Value {value!r} " + f"raised {ex.__class__.__name__}: {ex}" + ), + ) + + if self.invert: + passed = not passed + + # Some comparisons may be done with array values; require that + # all match for a success here: + if isinstance(passed, Iterable): + passed = all(passed) + + if passed: + return successful_result() + + desc = f"{identifier_prefix}{self.describe()}" + return Result( + severity=self.severity_on_failure, + reason=( + f"{desc}: value of {value}" + ), + )
+ + +
+[docs] + def get_data_for_signal(self, signal: ophyd.Signal) -> Any: + """ + Get data for the given signal, according to the string and data + reduction settings. + + Parameters + ---------- + signal : ophyd.Signal + The signal. + + Returns + ------- + Any + The acquired data. + + Raises + ------ + TimeoutError + If the get operation times out. + """ + return reduce.get_data_for_signal( + signal, + reduce_period=self.reduce_period, + reduce_method=self.reduce_method, + string=self.string or False, + )
+ + +
+[docs] + async def get_data_for_signal_async( + self, + signal: ophyd.Signal, + *, + executor: Optional[concurrent.futures.Executor] = None + ) -> Any: + """ + Get data for the given signal, according to the string and data + reduction settings. + + Parameters + ---------- + signal : ophyd.Signal + The signal. + executor : concurrent.futures.Executor, optional + The executor to run the synchronous call in. Defaults to + the loop-defined default executor. + + Returns + ------- + Any + The acquired data. + + Raises + ------ + TimeoutError + If the get operation times out. + """ + return await reduce.get_data_for_signal_async( + signal, + reduce_period=self.reduce_period, + reduce_method=self.reduce_method, + string=self.string or False, + executor=executor, + )
+ + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Implement in subclass to grab and cache dynamic values. + This is expected to set self.is_prepared to True if + successful. + """ + # TODO: think about renaming this method, collides with PreparedComparison + # Why would we have to prepare the comparison AND make a prepared comparison? + raise NotImplementedError()
+
+ + + +
+[docs] +@dataclass +class BasicDynamic(Comparison): + value_dynamic: Optional[DynamicValue] = None + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Prepare this comparison's value data. If a value_dynamic is specified, + prepare its data + + Parameters + ---------- + cache : DataCache, optional + The data cache instance, if available. + """ + if self.value_dynamic is not None: + await self.value_dynamic.prepare(cache) + self.value = self.value_dynamic.get() + self.is_prepared = True
+
+ + + +
+[docs] +@dataclass +class Equals(BasicDynamic): + value: PrimitiveType = 0.0 + rtol: Optional[Number] = None + atol: Optional[Number] = None + + @property + def _value(self) -> Value: + return Value( + value=self.value, + rtol=self.rtol, + atol=self.atol, + description=self.description or "", + ) + +
+[docs] + def describe(self) -> str: + """Describe the equality comparison in words.""" + comparison = "equal to" if not self.invert else "not equal to" + if self.value_dynamic is None: + dynamic = " " + else: + dynamic = f" {self.value_dynamic}" + return f"{comparison}{dynamic}{self._value}"
+ + + def _compare(self, value: PrimitiveType) -> bool: + return self._value.compare(value)
+ + + +
+[docs] +@dataclass +class NotEquals(BasicDynamic): + # Less confusing shortcut for `Equals(..., invert=True)` + value: PrimitiveType = 0 + rtol: Optional[Number] = None + atol: Optional[Number] = None + + @property + def _value(self) -> Value: + return Value( + value=self.value, + rtol=self.rtol, + atol=self.atol, + description=self.description or "", + ) + +
+[docs] + def describe(self) -> str: + """Describe the equality comparison in words.""" + comparison = "equal to" if self.invert else "not equal to" + if self.value_dynamic is None: + dynamic = " " + else: + dynamic = f" {self.value_dynamic} " + return f"{comparison}{dynamic}{self._value}"
+ + + def _compare(self, value: PrimitiveType) -> bool: + return not self._value.compare(value)
+ + + +
+[docs] +@dataclass +class ValueSet(Comparison): + """A set of values with corresponding severities and descriptions.""" + # Review: really a "value sequence"/list as the first ones have priority, + # but that sounds like a vector version of "Value" above; better ideas? + values: Sequence[Value] = field(default_factory=list) + values_dynamic: Sequence[Optional[DynamicValue]] = field(default_factory=list) + +
+[docs] + def describe(self) -> str: + """Describe the equality comparison in words.""" + accumulated_values = [] + for value, dynamic in zip_longest(self.values, self.values_dynamic): + if dynamic is None: + accumulated_values.append(value) + else: + accumulated_values.append(dynamic) + values = "\n".join( + str(value) + for value in accumulated_values + ) + + return f"Any of:\n{values}"
+ + + def _compare(self, value: PrimitiveType) -> bool: + for compare_value in self.values: + if compare_value.compare(value): + _raise_for_severity( + compare_value.severity, reason=f"== {compare_value}" + ) + return True + return False + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Prepare this comparison's value data. If a value_dynamic is specified, + prepare its data + + Parameters + ---------- + cache : DataCache, optional + The data cache instance, if available. + """ + # TODO revisit this logic, seems to overwrite normal values. + # How are these populated? is there a value for every dynamic? + for value, dynamic in zip(self.values, self.values_dynamic): + if dynamic is not None: + await dynamic.prepare(cache) + value.value = dynamic.get() + self.is_prepared = True
+
+ + + +
+[docs] +@dataclass +class AnyValue(Comparison): + """Comparison passes if the value is in the ``values`` list.""" + values: List[PrimitiveType] = field(default_factory=list) + values_dynamic: List[Optional[DynamicValue]] = field(default_factory=list) + +
+[docs] + def describe(self) -> str: + """Describe the comparison in words.""" + accumulated_values = [] + for value, dynamic in zip_longest(self.values, self.values_dynamic): + if dynamic is None: + accumulated_values.append(value) + else: + accumulated_values.append(dynamic) + values = ", ".join(str(value) for value in accumulated_values) + return f"one of {values}"
+ + + def _compare(self, value: PrimitiveType) -> bool: + return value in self.values + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Prepare this comparison's value data. Prepares each DynamicValue in the + value_dynamic list, if specified. + + Parameters + ---------- + cache : DataCache, optional + The data cache instance, if available. + """ + for index, dynamic in enumerate(self.values_dynamic): + if dynamic is not None: + await dynamic.prepare(cache) + self.values[index] = dynamic.get() + self.is_prepared = True
+
+ + + +
+[docs] +@dataclass +class AnyComparison(Comparison): + """Comparison passes if *any* contained comparison passes.""" + comparisons: List[Comparison] = field(default_factory=list) + +
+[docs] + def describe(self) -> str: + """Describe the comparison in words.""" + comparisons = "\n".join( + comparison.describe() + for comparison in self.comparisons + ) + return f"any of:\n{comparisons}"
+ + + def _compare(self, value: PrimitiveType) -> bool: + return any( + comparison._compare(value) + for comparison in self.comparisons + ) + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Prepare this comparison's value data. Prepares all comparisons contained + in this comparison. + + Parameters + ---------- + cache : DataCache, optional + The data cache instance, if available. + """ + # TODO make sure all comparisons have a prepare? Or allow for case where + # non-dynamic comparisons that don't have prepare + for comp in self.comparisons: + await comp.prepare(cache) + self.is_prepared = True
+ + +
+[docs] + def children(self) -> List[Comparison]: + """Return children of this group, as a tree view might expect""" + return self.comparisons
+ + +
+[docs] + def replace_comparison( + self, + old_comp: Comparison, + new_comp: Comparison, + ) -> None: + """ + Replace ``old_comp`` with ``new_comp`` in this dataclass. + A common method for all dataclasses that hold comparisons. + + Parameters + ---------- + old_comp : Comparison + Comparsion to replace + new_comp : Comparison + Comparison to replace ``old_comp`` with + """ + util.replace_in_list( + old=old_comp, + new=new_comp, + item_list=self.comparisons, + )
+
+ + + +
+[docs] +@dataclass +class Greater(BasicDynamic): + """Comparison: value > self.value.""" + value: Number = 0 + +
+[docs] + def describe(self) -> str: + return f"> {self.value_dynamic or self.value}: {self.description}"
+ + + def _compare(self, value: Number) -> bool: + return value > self.value
+ + + +
+[docs] +@dataclass +class GreaterOrEqual(BasicDynamic): + """Comparison: value >= self.value.""" + value: Number = 0 + +
+[docs] + def describe(self) -> str: + return f">= {self.value_dynamic or self.value}: {self.description}"
+ + + def _compare(self, value: Number) -> bool: + return value >= self.value
+ + + +
+[docs] +@dataclass +class Less(BasicDynamic): + """Comparison: value < self.value.""" + value: Number = 0 + +
+[docs] + def describe(self) -> str: + return f"< {self.value_dynamic or self.value}: {self.description}"
+ + + def _compare(self, value: Number) -> bool: + return value < self.value
+ + + +
+[docs] +@dataclass +class LessOrEqual(BasicDynamic): + """Comparison: value <= self.value.""" + value: Number = 0 + +
+[docs] + def describe(self) -> str: + return f"<= {self.value_dynamic or self.value}: {self.description}"
+ + + def _compare(self, value: Number) -> bool: + return value <= self.value
+ + + +
+[docs] +@dataclass +class Range(Comparison): + """ + A range comparison. + + Notes + ----- + If the following inequality holds, the range comparison will succeed: + + low < value < high (inclusive=False) + low <= value <= high (inclusive=True) + + Additionally, warning levels may be specified. These should be configured + such that: + + low <= warn_low <= warn_high <= high + + With these warning levels configured, a warning will be raised when the + value falls within the following ranges. For ``inclusive=False``:: + + low < value < warn_low + warn_high < value < high + + or, when ``inclusive=True``: + + low <= value <= warn_low + warn_high <= value <= high + """ + #: The low end of the range, which must be <= high. + low: Number = 0 + low_dynamic: Optional[DynamicValue] = None + #: The high end of the range, which must be >= low. + high: Number = 0 + high_dynamic: Optional[DynamicValue] = None + #: The low end of the warning range, which must be <= warn_high. + warn_low: Optional[Number] = None + warn_low_dynamic: Optional[DynamicValue] = None + #: The high end of the warning range, which must be >= warn_low. + warn_high: Optional[Number] = None + warn_high_dynamic: Optional[DynamicValue] = None + #: Should the low and high values be included in the range? + inclusive: bool = True + + @property + def ranges(self) -> Generator[ValueRange, None, None]: + yield ValueRange( + low=self.low, + high=self.high, + description=self.description or "", + inclusive=self.inclusive, + in_range=False, + severity=self.severity_on_failure, + ) + + if self.warn_low is not None and self.warn_high is not None: + yield ValueRange( + low=self.low, + high=self.warn_low, + description=self.description or "", + inclusive=self.inclusive, + in_range=True, + severity=Severity.warning, + ) + yield ValueRange( + low=self.warn_high, + high=self.high, + description=self.description or "", + inclusive=self.inclusive, + in_range=True, + severity=Severity.warning, + ) + +
+[docs] + def describe(self) -> str: + text = "\n".join(str(range_) for range_ in self.ranges) + if self.low_dynamic is not None: + text.append(f"\n Dynamic low value: {self.low_dynamic}") + if self.high_dynamic is not None: + text.append(f"\n Dynamic high value: {self.high_dynamic}") + if self.warn_low_dynamic is not None: + text.append(f"\n Dynamic warn_low value: {self.warn_low_dynamic}") + if self.warn_high_dynamic is not None: + text.append( + f"\n Dynamic warn_high value: {self.warn_high_dynamic}" + ) + return text
+ + + def _compare(self, value: Number) -> bool: + for range_ in self.ranges: + if range_.compare(value): + _raise_for_severity(range_.severity, str(range_)) + + return True + +
+[docs] + async def prepare(self, cache: Optional[DataCache] = None) -> None: + """ + Prepare this comparison's value data. If a value_dynamic is specified, + prepare its data. Prepares the high/low limits along with dynamic high/low + warning values if they exist + + Parameters + ---------- + cache : DataCache, optional + The data cache instance, if available. + """ + if self.low_dynamic is not None: + await self.low_dynamic.prepare(cache) + self.low = self.low_dynamic.get() + if self.high_dynamic is not None: + await self.high_dynamic.prepare(cache) + self.high = self.high_dynamic.get() + if self.warn_low_dynamic is not None: + await self.warn_low_dynamic.prepare(cache) + self.warn_low = self.warn_low_dynamic.get() + if self.warn_high_dynamic is not None: + await self.warn_high_dynamic.prepare(cache) + self.warn_high = self.warn_high_dynamic.get() + self.is_prepared = True
+
+ + + +ALL_COMPARISONS = [Equals, NotEquals, Greater, GreaterOrEqual, Less, LessOrEqual, + Range, ValueSet, AnyValue, AnyComparison] +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/_modules/atef/config.html b/v1.4.0/_modules/atef/config.html new file mode 100644 index 00000000..810e979f --- /dev/null +++ b/v1.4.0/_modules/atef/config.html @@ -0,0 +1,2038 @@ + + + + + + atef.config — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for atef.config

+"""
+Contains "Configuration" dataclasses for organizing ``Comparisons``.
+Also contains "Prepared" variants of ``Comparison`` and ``Configuration`` classes,
+which link ``Comparisons`` to specific identifiers and hold ``Result`` objects.
+"""
+
+from __future__ import annotations
+
+import asyncio
+import json
+import logging
+import pathlib
+from dataclasses import dataclass, field
+from typing import (Any, Dict, Generator, List, Literal, Optional, Sequence,
+                    Tuple, Union, cast, get_args)
+
+import apischema
+import happi
+import ophyd
+import yaml
+from ophyd.signal import ConnectionTimeoutError
+
+from atef.result import _summarize_result_severity
+
+from . import serialization, tools, util
+from .cache import DataCache
+from .check import Comparison
+from .enums import GroupResultMode, Severity
+from .exceptions import PreparedComparisonException
+from .result import Result, incomplete_result
+from .type_hints import AnyPath
+from .yaml_support import init_yaml_support
+
+logger = logging.getLogger(__name__)
+
+
+
+[docs] +@dataclass +@serialization.as_tagged_union +class Configuration: + """ + Configuration base class for shared settings between all configurations. + + Subclasses of Comparison will be serialized as a tagged union. This means + that the subclass name will be used as an identifier for the generated + serialized dictionary (and JSON object). + """ + + #: Name tied to this configuration. + name: Optional[str] = None + #: Description tied to this configuration. + description: Optional[str] = None + #: Tags tied to this configuration. + tags: Optional[List[str]] = None + +
+[docs] + def children(self) -> List[Any]: + """Return children of this group, as a tree view might expect""" + return []
+ + +
+[docs] + def replace_comparison( + self, + old_comp: Comparison, + new_comp: Comparison, + comp_attrs: Optional[List[str]] = None + ) -> None: + """ + Replace ``old_comp`` with ``new_comp`` in this dataclass, wherever it is. + Looks through ``shared``, then any of the attributes in ``comp_attrs`` + + Parameters + ---------- + old_comp : Comparison + Comparison to be replaced + new_comp : Comparison + Comparison to replace ``old_comp`` with + comp_attrs : Optional[List[str]], optional + Attribute names in the dataclass to check, by default None + """ + comp_attrs = comp_attrs or [] + if not any(hasattr(self, attr) for attr in comp_attrs + ["shared"]): + return + + try: + util.replace_in_list( + old=old_comp, + new=new_comp, + item_list=self.shared, + ) + except ValueError: + for attr in comp_attrs: + for comp_list in getattr(self, attr, {}).values(): + try: + util.replace_in_list( + old=old_comp, + new=new_comp, + item_list=comp_list, + ) + except ValueError: + continue + else: + break
+ + +
+[docs] + def move_comparison( + self, + comp: Comparison, + new_attr: str, + comp_attrs: List[str], + ) -> None: + if not any(hasattr(self, att) for att in comp_attrs + ["shared"]): + logger.debug('cannot find a requested attr in dataclass') + return + + # remove from all attrs + util.remove_by_id(self.shared, comp) + for attr in comp_attrs: + for comp_list in getattr(self, attr, {}).values(): + util.remove_by_id(comp_list, comp) + + # place into new_attr + if new_attr == "shared": + self.shared.append(comp) + else: + for attr in comp_attrs: + attr_dict = getattr(self, attr, {}) + if new_attr in attr_dict: + attr_dict[new_attr].append(comp)
+
+ + + +
+[docs] +@dataclass +class ConfigurationGroup(Configuration): + """ + Configuration group. + """ + #: Configurations underneath this group. + configs: List[Configuration] = field(default_factory=list) + #: Values that can be reused in comparisons underneath this group. + values: Dict[str, Any] = field(default_factory=dict) + #: Result mode. + mode: GroupResultMode = GroupResultMode.all_ + +
+[docs] + def walk_configs(self) -> Generator[AnyConfiguration, None, None]: + for config in self.configs: + # `config` is stored as Configuration due to the tagged union; + # however we never yield Configuration instances, just subclasses + # thereof: + config = cast(AnyConfiguration, config) + yield config + if isinstance(config, ConfigurationGroup): + yield from config.walk_configs()
+ + +
+[docs] + def children(self) -> List[Configuration]: + """Return children of this group, as a tree view might expect""" + return self.configs
+
+ + + +
+[docs] +@dataclass +class DeviceConfiguration(Configuration): + """ + A configuration that is built to check one or more devices. + + Identifiers are by default assumed to be attribute (component) names of the + devices. Identifiers may refer to components on the device + (``"component"`` would mean to access each device's ``.component``) or may + refer to any level of sub-device components (``"sub_device.component"`` + would mean to access each device's ``.sub_device`` and that sub-device's + ``.a`` component). + """ + #: The device names. + devices: List[str] = field(default_factory=list) + #: Device attribute name to comparison list. + by_attr: Dict[str, List[Comparison]] = field(default_factory=dict) + #: Comparisons to be run on *all* identifiers in the `by_attr` dictionary. + shared: List[Comparison] = field(default_factory=list) + +
+[docs] + def children(self) -> List[Comparison]: + """Return children of this group, as a tree view might expect""" + return ([comp for comp_list in self.by_attr.values() for comp in comp_list] + + self.shared)
+ + +
+[docs] + def replace_comparison( + self, + old_comp: Comparison, + new_comp: Comparison, + comp_attrs: Optional[List[str]] = None + ) -> None: + """ + Replace ``old_comp`` with ``new_comp`` in this dataclass, wherever it is. + Looks through ``shared``, then any of the attributes in ``comp_attrs`` + + Parameters + ---------- + old_comp : Comparison + Comparison to be replaced + new_comp : Comparison + Comparison to replace ``old_comp`` with + comp_attrs : Optional[List[str]], optional + Attribute names in the dataclass to check, by default ['by_attr'] if + no value is provided + """ + if comp_attrs is None: + comp_attrs = ['by_attr'] + super().replace_comparison(old_comp, new_comp, comp_attrs)
+ + +
+[docs] + def move_comparison( + self, + comp: Comparison, + new_attr: str, + comp_attrs: Optional[List[str]] = None + ) -> None: + super().move_comparison(comp, new_attr, comp_attrs=['by_attr'])
+
+ + + +
+[docs] +@dataclass +class PVConfiguration(Configuration): + """ + A configuration that is built to check live EPICS PVs. + """ + #: PV name to comparison list. + by_pv: Dict[str, List[Comparison]] = field(default_factory=dict) + #: Comparisons to be run on *all* PVs in the `by_pv` dictionary. + shared: List[Comparison] = field(default_factory=list) + +
+[docs] + def children(self) -> List[Comparison]: + """Return children of this group, as a tree view might expect""" + return ([comp for comp_list in self.by_pv.values() for comp in comp_list] + + self.shared)
+ + +
+[docs] + def replace_comparison( + self, + old_comp: Comparison, + new_comp: Comparison, + comp_attrs: Optional[List[str]] = None + ) -> None: + """ + Replace ``old_comp`` with ``new_comp`` in this dataclass, wherever it is. + Looks through ``shared``, then any of the attributes in ``comp_attrs`` + + Parameters + ---------- + old_comp : Comparison + Comparison to be replaced + new_comp : Comparison + Comparison to replace ``old_comp`` with + comp_attrs : Optional[List[str]], optional + Attribute names in the dataclass to check, by default ['by_pv'] if + no value is provided + """ + if comp_attrs is None: + comp_attrs = ['by_pv'] + super().replace_comparison(old_comp, new_comp, comp_attrs)
+ + +
+[docs] + def move_comparison( + self, + comp: Comparison, + new_attr: str, + comp_attrs: Optional[List[str]] = None + ) -> None: + super().move_comparison(comp, new_attr, comp_attrs=['by_pv'])
+
+ + + +
+[docs] +@dataclass +class ToolConfiguration(Configuration): + """ + A configuration unrelated to PVs or Devices which verifies status via some + tool. + + Comparisons can optionally be run on the tool's results. + """ + #: The tool and its settings. Subclasses such as "Ping" are expected + #: here. + tool: tools.Tool = field(default_factory=tools.Ping) + #: Result attribute name to comparison list. + by_attr: Dict[str, List[Comparison]] = field(default_factory=dict) + #: Comparisons to be run on *all* identifiers in the `by_attr` dictionary. + shared: List[Comparison] = field(default_factory=list) + +
+[docs] + def children(self) -> List[Comparison]: + """Return children of this group, as a tree view might expect""" + return ([comp for comp_list in self.by_attr.values() for comp in comp_list] + + self.shared)
+ + +
+[docs] + def replace_comparison( + self, + old_comp: Comparison, + new_comp: Comparison, + comp_attrs: Optional[List[str]] = None + ) -> None: + """ + Replace ``old_comp`` with ``new_comp`` in this dataclass, wherever it is. + Looks through ``shared``, then any of the attributes in ``comp_attrs`` + + Parameters + ---------- + old_comp : Comparison + Comparison to be replaced + new_comp : Comparison + Comparison to replace ``old_comp`` with + comp_attrs : Optional[List[str]], optional + Attribute names in the dataclass to check, by default ['by_attr'] if + no value is provided + """ + if comp_attrs is None: + comp_attrs = ['by_attr'] + super().replace_comparison(old_comp, new_comp, comp_attrs)
+ + +
+[docs] + def move_comparison( + self, + comp: Comparison, + new_attr: str, + comp_attrs: Optional[List[str]] = None + ) -> None: + super().move_comparison(comp, new_attr, comp_attrs=['by_attr'])
+
+ + + +AnyConfiguration = Union[ + PVConfiguration, + DeviceConfiguration, + ToolConfiguration, + ConfigurationGroup, +] + + +
+[docs] +@dataclass +class ConfigurationFile: + """ + A configuration file comprised of a number of devices/PV configurations. + """ + #: atef configuration file version information. + version: Literal[0] = field(default=0, metadata=apischema.metadata.required) + #: Top-level configuration group. + root: ConfigurationGroup = field(default_factory=ConfigurationGroup) + +
+[docs] + def walk_configs(self) -> Generator[AnyConfiguration, None, None]: + """ + Walk configurations defined in this file. This includes the "root" + node. + + Yields + ------ + AnyConfiguration + """ + yield self.root + yield from self.root.walk_configs()
+ + +
+[docs] + def children(self) -> List[ConfigurationGroup]: + """Return children of this group, as a tree view might expect""" + return [self.root]
+ + +
+[docs] + def get_by_device(self, name: str) -> Generator[DeviceConfiguration, None, None]: + """Get all configurations that match the device name.""" + for config in self.walk_configs(): + if isinstance(config, DeviceConfiguration): + if name in config.devices: + yield config
+ + +
+[docs] + def get_by_pv( + self, pvname: str + ) -> Generator[PVConfiguration, None, None]: + """Get all configurations + IdentifierAndComparison that match the PV name.""" + for config in self.walk_configs(): + if isinstance(config, PVConfiguration): + if pvname in config.by_pv: + yield config
+ + +
+[docs] + def get_by_tag(self, *tags: str) -> Generator[Configuration, None, None]: + """Get all configurations that match the tag name.""" + if not tags: + return + + tag_set = set(tags) + for config in self.walk_configs(): + if tag_set.intersection(set(config.tags or [])): + yield config
+ + +
+[docs] + @classmethod + def from_filename(cls, filename: AnyPath) -> ConfigurationFile: + """Load a configuration file from a file. Dispatches based on file type""" + path = pathlib.Path(filename) + if path.suffix.lower() == '.json': + config = ConfigurationFile.from_json(path) + else: + config = ConfigurationFile.from_yaml(path) + return config
+ + +
+[docs] + @classmethod + def from_json(cls, filename: AnyPath) -> ConfigurationFile: + """Load a configuration file from JSON.""" + with open(filename) as fp: + serialized_config = json.load(fp) + return apischema.deserialize(cls, serialized_config)
+ + +
+[docs] + @classmethod + def from_yaml(cls, filename: AnyPath) -> ConfigurationFile: + """Load a configuration file from yaml.""" + with open(filename) as fp: + serialized_config = yaml.safe_load(fp) + return apischema.deserialize(cls, serialized_config)
+ + +
+[docs] + def to_json(self): + """Dump this configuration file to a JSON-compatible dictionary.""" + return apischema.serialize(ConfigurationFile, self, exclude_defaults=True)
+ + +
+[docs] + def to_yaml(self): + """Dump this configuration file to yaml.""" + init_yaml_support() + return yaml.dump(self.to_json())
+
+ + + +
+[docs] +@dataclass +class PreparedFile: + #: The data cache to use for the preparation step. + cache: DataCache = field(repr=False) + #: The corresponding configuration file information. + file: ConfigurationFile + #: The happi client instance. + client: happi.Client + #: The comparisons defined in the top-level file. + root: PreparedGroup + +
+[docs] + @classmethod + def from_config( + cls, + file: ConfigurationFile, + *, + client: Optional[happi.Client] = None, + cache: Optional[DataCache] = None, + ) -> PreparedFile: + """ + Prepare a ConfigurationFile for running. + + If available, provide an instantiated happi Client and a data + cache. If unspecified, a configuration-derived happi Client will + be instantiated and a new data cache will be utilized. + + The provided cache (or a new one) will be utilized for every + configuration/comparison in the file. + + Parameters + ---------- + file : ConfigurationFile + The configuration file instance. + client : happi.Client, optional + A happi Client instance. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + """ + if client is None: + client = util.get_happi_client() + + if cache is None: + cache = DataCache() + + prepared_root = PreparedGroup.from_config( + file.root, + client=client, + cache=cache, + parent=None, + ) + prepared_file = PreparedFile( + file=file, + cache=cache, + client=client, + root=prepared_root, + ) + prepared_root.parent = prepared_file + return prepared_file
+ + +
+[docs] + async def fill_cache(self, parallel: bool = True) -> Optional[List[asyncio.Task]]: + """ + Fill the DataCache. + + Parameters + ---------- + parallel : bool, optional + By default, fill the cache in parallel with multiple asyncio tasks. + If False, fill the cache sequentially. + + Returns + ------- + List[asyncio.Task] or None + The tasks created when in parallel mode. + """ + if not parallel: + for prepared in self.walk_comparisons(): + await prepared.get_data_async() + return None + + tasks = [] + for prepared in self.walk_comparisons(): + task = asyncio.create_task(prepared.get_data_async()) + tasks.append(task) + + return tasks
+ + +
+[docs] + def walk_comparisons(self) -> Generator[PreparedComparison, None, None]: + """Walk through the prepared comparisons.""" + yield from self.root.walk_comparisons()
+ + +
+[docs] + def walk_groups( + self, + ) -> Generator[AnyPreparedConfiguration, None, None]: + """Walk through the prepared groups.""" + yield self.root + yield from self.root.walk_groups()
+ + +
+[docs] + def children(self) -> List[PreparedGroup]: + """Return children of this group, as a tree view might expect""" + return [self.root]
+ + +
+[docs] + async def compare(self) -> Result: + """Run all comparisons and return a combined result.""" + return await self.root.compare()
+
+ + + +
+[docs] +@dataclass +class FailedConfiguration: + """ + A Configuration that failed to be prepared for running. + """ + #: The data cache to use for the preparation step. + parent: Optional[PreparedGroup] + #: Configuration instance. + config: AnyConfiguration + #: The result with a severity. + result: Result + #: Exception that was caught, if available. + exception: Optional[Exception] = None
+ + + +
+[docs] +@dataclass +class PreparedConfiguration: + """ + Base class for a Configuration that has been prepared to run. + """ + #: The data cache to use for the preparation step. + cache: DataCache = field(repr=False) + #: The hierarchical parent of this step. + parent: Optional[PreparedGroup] = None + #: The comparisons to be run on the given devices. + comparisons: List[Union[PreparedSignalComparison, PreparedToolComparison]] = field( + default_factory=list + ) + #: The comparisons that failed to be prepared. + prepare_failures: List[PreparedComparisonException] = field(default_factory=list) + #: The result of all comparisons. + combined_result: Result = field(default_factory=incomplete_result) + +
+[docs] + @classmethod + def from_config( + cls, + config: AnyConfiguration, + parent: Optional[PreparedGroup] = None, + *, + client: Optional[happi.Client] = None, + cache: Optional[DataCache] = None, + ) -> Union[ + PreparedPVConfiguration, + PreparedDeviceConfiguration, + PreparedToolConfiguration, + PreparedGroup, + FailedConfiguration, + ]: + """ + Prepare a Configuration for running. + + If available, provide an instantiated happi Client and a data + cache. If unspecified, a configuration-derived happi Client will + be instantiated and a new data cache will be utilized. + + It is recommended to share a data cache on a per-configuration file + basis. + + Parameters + ---------- + config : {PV,Device,Tool}Configuration or ConfigurationGroup + The configuration. + client : happi.Client, optional + A happi Client instance. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + """ + if cache is None: + cache = DataCache() + + try: + if isinstance(config, PVConfiguration): + return PreparedPVConfiguration.from_config( + config=config, + cache=cache, + parent=parent, + ) + if isinstance(config, ToolConfiguration): + return PreparedToolConfiguration.from_config( + cache=cache, + config=config, + parent=parent, + ) + if isinstance(config, DeviceConfiguration): + return PreparedDeviceConfiguration.from_config( + cache=cache, + config=config, + client=client, + parent=parent, + ) + if isinstance(config, ConfigurationGroup): + return PreparedGroup.from_config( + config, + cache=cache, + client=client, + parent=parent, + ) + raise NotImplementedError(f"Configuration type unsupported: {type(config)}") + except PreparedComparisonException as ex: + return FailedConfiguration( + config=config, + parent=parent, + exception=ex, + result=Result( + severity=Severity.internal_error, + reason=( + f"Failed to instantiate configuration: {ex}. " + f"Configuration is: {config.name} ({config.description or ''!r})" + ), + ), + ) + except Exception as ex: + return FailedConfiguration( + config=config, + parent=parent, + exception=ex, + result=Result( + severity=Severity.internal_error, + reason=( + f"Failed to instantiate configuration: {ex}. " + f"Configuration is: {config.name} ({config.description or ''!r})" + ), + ), + )
+ + +
+[docs] + def walk_comparisons(self) -> Generator[PreparedComparison, None, None]: + """Walk through the prepared comparisons.""" + yield from self.comparisons
+ + +
+[docs] + async def compare(self) -> Result: + """Run all comparisons and return a combined result.""" + results = [] + for config in self.comparisons: + if isinstance(config, PreparedComparison): + results.append(await config.compare()) + + if self.prepare_failures: + result = Result( + severity=Severity.error, + reason="At least one configuration failed to initialize", + ) + else: + severity = _summarize_result_severity(GroupResultMode.all_, results) + result = Result(severity=severity) + + self.combined_result = result + return result
+ + + @property + def result(self) -> Result: + """Re-compute the combined result and return it""" + # read results without running steps + results = [] + for config in self.comparisons: + results.append(config.result) + + if self.prepare_failures: + result = Result( + severity=Severity.error, + reason="At least one configuration failed to initialize", + ) + else: + severity = _summarize_result_severity(GroupResultMode.all_, results) + result = Result(severity=severity) + self.combined_result = result + return result
+ + + +
+[docs] +@dataclass +class PreparedGroup(PreparedConfiguration): + #: The corresponding group from the configuration file. + config: ConfigurationGroup = field(default_factory=ConfigurationGroup) + #: The hierarhical parent of this group. If this is the root group, + #: 'parent' may be a PreparedFile. + parent: Optional[Union[PreparedGroup, PreparedFile]] = field(default=None, repr=False) + #: The configs defined in the group. + configs: List[AnyPreparedConfiguration] = field(default_factory=list) + #: The configs that failed to prepare. + prepare_failures: List[FailedConfiguration] = field(default_factory=list) + +
+[docs] + def get_value_by_name(self, name: str) -> Any: + """ + Get a value defined in this group or in any ancestor. The first found + is returned. + + Parameters + ---------- + name : str + The key name for the ``variables`` dictionary. + + Returns + ------- + Any + Value defined for the given key. + + Raises + ------ + KeyError + If the key is not defined on this group or any ancestor group. + """ + if name in self.config.values: + return self.config.values[name] + if self.parent is not None and isinstance(self.parent, PreparedGroup): + return self.parent.get_value_by_name(name) + raise KeyError("No value defined for key: {key}")
+ + +
+[docs] + @classmethod + def from_config( + cls, + group: ConfigurationGroup, + parent: Optional[Union[PreparedGroup, PreparedFile]] = None, + *, + client: Optional[happi.Client] = None, + cache: Optional[DataCache] = None, + ) -> PreparedGroup: + """ + Prepare a ConfigurationGroup for running. + + If available, provide an instantiated happi Client and a data + cache. If unspecified, a configuration-derived happi Client will + be instantiated and a new data cache will be utilized. + + The provided cache (or a new one) will be utilized for every + configuration/comparison in the file. + + Parameters + ---------- + group : ConfigurationGroup + The configuration group instance. + parent : PreparedGroup or PreparedFile, optional + The parent instance of the group. If this is the root + configuration, the parent may be a PreparedFile. + client : happi.Client, optional + A happi Client instance. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + """ + + if client is None: + client = util.get_happi_client() + + if cache is None: + cache = DataCache() + + prepared = cls( + cache=cache, + config=group, + parent=parent, + configs=[], + ) + + for config in group.configs: + prepared_conf = PreparedConfiguration.from_config( + config=cast(AnyConfiguration, config), + parent=prepared, + client=client, + cache=cache, + ) + if isinstance(prepared_conf, FailedConfiguration): + prepared.prepare_failures.append(prepared_conf) + else: + prepared.configs.append(prepared_conf) + + return prepared
+ + + @property + def subgroups(self) -> List[PreparedGroup]: + """ + Direct descendent subgroups in this group. + + Returns + ------- + List[PreparedGroup] + """ + return [ + config + for config in self.configs + if isinstance(config, PreparedGroup) + ] + +
+[docs] + def walk_groups( + self, + ) -> Generator[AnyPreparedConfiguration, None, None]: + """Walk through the prepared groups.""" + for config in self.configs: + if isinstance(config, get_args(AnyPreparedConfiguration)): + yield config + if isinstance(config, PreparedGroup): + yield from config.walk_groups()
+ + +
+[docs] + def walk_comparisons(self) -> Generator[PreparedComparison, None, None]: + """Walk through the prepared comparisons.""" + for config in self.configs: + yield from config.walk_comparisons()
+ + +
+[docs] + async def compare(self) -> Result: + """Run all comparisons and return a combined result.""" + results = [] + for config in self.configs: + if isinstance(config, PreparedConfiguration): + results.append(await config.compare()) + + if self.prepare_failures: + result = Result( + severity=Severity.error, + reason="At least one configuration failed to initialize", + ) + else: + severity = _summarize_result_severity(self.config.mode, results) + result = Result( + severity=severity + ) + self.combined_result = result + return result
+ + + @property + def result(self) -> Result: + """Re-compute the combined result and return it""" + # read results without running steps + results = [] + for config in self.configs: + if isinstance(config, PreparedConfiguration): + results.append(config.result) + + if self.prepare_failures: + result = Result( + severity=Severity.error, + reason="At least one configuration failed to initialize", + ) + else: + severity = _summarize_result_severity(self.config.mode, results) + result = Result( + severity=severity + ) + self.combined_result = result + return result
+ + + +
+[docs] +@dataclass +class PreparedDeviceConfiguration(PreparedConfiguration): + #: The configuration settings. + config: DeviceConfiguration = field(default_factory=DeviceConfiguration) + #: The device the comparisons apply to. + devices: List[ophyd.Device] = field(default_factory=list) + #: The comparisons to be run on the given devices. + comparisons: List[PreparedSignalComparison] = field(default_factory=list) + #: The comparisons that failed to be prepared. + prepare_failures: List[PreparedComparisonException] = field(default_factory=list) + +
+[docs] + @classmethod + def from_device( + cls, + device: Union[ophyd.Device, Sequence[ophyd.Device]], + by_attr: Dict[str, List[Comparison]], + shared: Optional[List[Comparison]] = None, + parent: Optional[PreparedGroup] = None, + cache: Optional[DataCache] = None, + client: Optional[happi.Client] = None, + ) -> PreparedDeviceConfiguration: + """ + Create a PreparedDeviceConfiguration given a device and some checks. + + Parameters + ---------- + device : Union[ophyd.Device, Sequence[ophyd.Device]] + The device or devices to check. + by_attr : Dict[str, List[Comparison]] + Device attribute name to comparison list. + shared : List[Comparison], optional + Comparisons to be run on *all* signals identified in the `by_attr` + dictionary. + parent : PreparedGroup, optional + The parent group, if applicable. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + client : happi.Client, optional + A happi Client, if available. + + Returns + ------- + PreparedDeviceConfiguration + """ + if isinstance(device, Sequence): + devices = list(device) + else: + devices = [device] + + config = cls.from_config( + DeviceConfiguration( + devices=[], + by_attr=by_attr, + shared=shared or [], + ), + additional_devices=devices, + cache=cache, + client=client, + parent=parent, + ) + return cast(PreparedDeviceConfiguration, config)
+ + +
+[docs] + @classmethod + def from_config( + cls, + config: DeviceConfiguration, + client: Optional[happi.Client] = None, + parent: Optional[PreparedGroup] = None, + cache: Optional[DataCache] = None, + additional_devices: Optional[List[ophyd.Device]] = None, + ) -> PreparedDeviceConfiguration: + """ + Prepare a DeviceConfiguration for running comparisons. + + Parameters + ---------- + config : DeviceConfiguration + The configuration to prepare. + parent : PreparedGroup, optional + The parent group, if applicable. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + client : happi.Client, optional + A happi Client, if available. + additional_devices : List[ophyd.Device], optional + Additional devices (aside from those in the DeviceConfiguration) + to add to the PreparedDeviceConfiguration list. + + Returns + ------- + FailedConfiguration or PreparedDeviceConfiguration + If one or more devices is unavailable, a FailedConfiguration + instance will be returned. + """ + if not isinstance(config, DeviceConfiguration): + raise ValueError(f"Unexpected configuration type: {type(config).__name__}") + + if client is None: + client = util.get_happi_client() + + if cache is None: + cache = DataCache() + + devices = list(additional_devices or []) + for dev_name in config.devices: + try: + devices.append(util.get_happi_device_by_name(dev_name, client=client)) + except Exception as ex: + raise PreparedComparisonException( + message=f"Failed to load happi device: {dev_name}", + prepared=parent, + config=config, + identifier=dev_name, + exception=ex, + ) + + prepared_comparisons = [] + prepare_failures = [] + shared = config.shared or [] + + prepared = PreparedDeviceConfiguration( + config=config, + devices=devices, + cache=cache, + parent=parent, + comparisons=prepared_comparisons, + prepare_failures=prepare_failures, + ) + + for device in devices: + for attr, comparisons in config.by_attr.items(): + for comparison in comparisons + shared: + try: + prepared_comparisons.append( + PreparedSignalComparison.from_device( + device=device, + attr=attr, + comparison=comparison, + parent=prepared, + cache=cache, + ) + ) + except Exception as ex: + prepare_failures.append(ex) + + return prepared
+
+ + + +
+[docs] +@dataclass +class PreparedPVConfiguration(PreparedConfiguration): + #: The configuration settings. + config: PVConfiguration = field(default_factory=PVConfiguration) + #: The comparisons to be run on the given devices. + comparisons: List[PreparedSignalComparison] = field(default_factory=list) + #: The comparisons to be run on the given devices. + prepare_failures: List[PreparedComparisonException] = field(default_factory=list) + +
+[docs] + @classmethod + def from_pvs( + cls, + by_pv: Dict[str, List[Comparison]], + shared: Optional[List[Comparison]] = None, + parent: Optional[PreparedGroup] = None, + cache: Optional[DataCache] = None, + ) -> PreparedPVConfiguration: + """ + Ready a set of PV checks without requiring an existing PVConfiguration. + + Parameters + ---------- + by_pv : Dict[str, List[Comparison]] + PV name to comparison list. + shared : list of Comparison, optional + Comparisons to be run on *all* PVs in the `by_pv` dictionary. + parent : PreparedGroup, optional + The parent group. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedPVConfiguration + + """ + config = cls.from_config( + PVConfiguration( + by_pv=by_pv, + shared=shared or [], + ), + cache=cache, + parent=parent, + ) + return cast(PreparedPVConfiguration, config)
+ + +
+[docs] + @classmethod + def from_config( + cls, + config: PVConfiguration, + parent: Optional[PreparedGroup] = None, + cache: Optional[DataCache] = None, + ) -> PreparedPVConfiguration: + """ + Prepare a PVConfiguration for running. + + Parameters + ---------- + config : PVConfiguration + The configuration settings. + parent : PreparedGroup, optional + The parent group. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedPVConfiguration + """ + if not isinstance(config, PVConfiguration): + raise ValueError(f"Unexpected configuration type: {type(config).__name__}") + + if cache is None: + cache = DataCache() + + prepared_comparisons = [] + prepare_failures = [] + shared = config.shared or [] + + prepared = PreparedPVConfiguration( + config=config, + cache=cache, + parent=parent, + comparisons=prepared_comparisons, + prepare_failures=prepare_failures, + ) + + for pvname, comparisons in config.by_pv.items(): + for comparison in comparisons + shared: + try: + prepared_comparisons.append( + PreparedSignalComparison.from_pvname( + pvname=pvname, + comparison=comparison, + parent=prepared, + cache=cache, + ) + ) + except Exception as ex: + prepare_failures.append(ex) + + return prepared
+
+ + + +
+[docs] +@dataclass +class PreparedToolConfiguration(PreparedConfiguration): + #: The configuration settings. + config: ToolConfiguration = field(default_factory=ToolConfiguration) + #: The comparisons to be run on the given devices. + comparisons: List[PreparedSignalComparison] = field(default_factory=list) + #: The comparisons that failed to be prepared. + prepare_failures: List[PreparedComparisonException] = field(default_factory=list) + +
+[docs] + @classmethod + def from_tool( + cls, + tool: tools.Tool, + by_attr: Dict[str, List[Comparison]], + shared: Optional[List[Comparison]] = None, + parent: Optional[PreparedGroup] = None, + cache: Optional[DataCache] = None, + ) -> PreparedToolConfiguration: + """ + Prepare a Tool for running tests without an associated configuration. + + Parameters + ---------- + tool : tools.Tool + The tool instance. + by_attr : Dict[str, List[Comparison]] + A dictionary of tool result attributes to comparisons. + shared : List[Comparison], optional + A list of comparisons to run on every key of the ``by_attr`` + dictionary. + parent : PreparedGroup, optional + The parent group, if available. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedToolConfiguration + """ + config = cls.from_config( + ToolConfiguration( + tool=tool, + by_attr=by_attr, + shared=shared or [], + ), + cache=cache, + parent=parent, + ) + return cast(PreparedToolConfiguration, config)
+ + +
+[docs] + @classmethod + def from_config( + cls, + config: ToolConfiguration, + parent: Optional[PreparedGroup] = None, + cache: Optional[DataCache] = None, + ) -> PreparedToolConfiguration: + """ + Prepare a ToolConfiguration for running. + + Parameters + ---------- + config : ToolConfiguration + The tool configuration instance. + parent : PreparedGroup, optional + The parent group, if available. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedToolConfiguration + """ + if not isinstance(config, ToolConfiguration): + raise ValueError(f"Unexpected configuration type: {type(config).__name__}") + + if cache is None: + cache = DataCache() + + prepared_comparisons = [] + prepare_failures = [] + shared = config.shared or [] + + prepared = PreparedToolConfiguration( + config=config, + cache=cache, + parent=parent, + comparisons=prepared_comparisons, + prepare_failures=prepare_failures, + ) + + for result_key, comparisons in config.by_attr.items(): + for comparison in comparisons + shared: + try: + prepared_comparisons.append( + PreparedToolComparison.from_tool( + tool=config.tool, + result_key=result_key, + comparison=comparison, + parent=prepared, + cache=cache, + ) + ) + except Exception as ex: + prepare_failures.append(ex) + + return prepared
+
+ + + +
+[docs] +@dataclass +class PreparedComparison: + """ + A unified representation of comparisons for device signals and standalone PVs. + """ + #: The data cache to use for the preparation step. + cache: DataCache = field(repr=False) + #: The identifier used for the comparison. + identifier: str = "" + #: The comparison itself. + comparison: Comparison = field(default_factory=Comparison) + #: The name of the associated configuration. + name: Optional[str] = None + #: The hierarhical parent of this comparison. + parent: Optional[PreparedGroup] = field(default=None, repr=False) + #: The last result of the comparison, if run. + result: Result = field(default_factory=incomplete_result) + +
+[docs] + async def get_data_async(self) -> Any: + """ + Get the data according to the comparison's configuration. + + To be implemented in subclass. + + Returns + ------- + data : Any + The acquired data. + """ + raise NotImplementedError()
+ + + async def _compare(self, data: Any) -> Result: + """ + Run the comparison. + + To be implemented in subclass. + """ + raise NotImplementedError() + +
+[docs] + async def compare(self) -> Result: + """ + Run the comparison and return the Result. + + Returns + ------- + Result + The result of the comparison. + """ + try: + if hasattr(self.comparison, 'prepare'): + await self.comparison.prepare(self.cache) + except (TimeoutError, asyncio.TimeoutError, ConnectionTimeoutError): + result = Result( + severity=self.comparison.if_disconnected, + reason=("Unable to read dynamic value for the comparison: " + f"{self.identifier}") + ) + self.result = result + return result + except Exception as ex: + result = Result( + severity=Severity.internal_error, + reason=( + f"Reading dynamic value for {self.identifier!r} comparison " + f"{self.comparison} raised {ex.__class__.__name__}: {ex}" + ), + ) + self.result = result + return result + + try: + data = await self.get_data_async() + except (TimeoutError, asyncio.TimeoutError, ConnectionTimeoutError): + result = Result( + severity=self.comparison.if_disconnected, + reason=f"Unable to retrieve data for comparison: {self.identifier}" + ) + self.result = result + return result + except Exception as ex: + result = Result( + severity=Severity.internal_error, + reason=( + f"Getting data for {self.identifier!r} comparison " + f"{self.comparison} raised {ex.__class__.__name__}: {ex}" + ), + ) + self.result = result + return result + + self.data = data + + try: + result = await self._compare(data) + except Exception as ex: + result = Result( + severity=Severity.internal_error, + reason=( + f"Failed to run {self.identifier!r} comparison " + f"{self.comparison} raised {ex.__class__.__name__}: {ex} " + ), + ) + + self.result = result + return result
+
+ + + +
+[docs] +@dataclass +class PreparedSignalComparison(PreparedComparison): + """ + A unified representation of comparisons for device signals and standalone + PVs. + + Each PreparedSignalComparison has a single leaf in the configuration tree, + comprised of: + * A configuration + * The signal specification. This is comprised of the configuration and + "IdentifierAndComparison" + - DeviceConfiguration: Device and attribute (the "identifier") + - PVConfiguration: PV name (the "identifier") + * A comparison to run + - Including data reduction settings + """ + #: The hierarhical parent of this comparison. + parent: Optional[ + Union[PreparedDeviceConfiguration, PreparedPVConfiguration] + ] = field(default=None, repr=False) + #: The device the comparison applies to, if applicable. + device: Optional[ophyd.Device] = None + #: The signal the comparison is to be run on. + signal: Optional[ophyd.Signal] = None + #: The value from the signal the comparison is to be run on. + data: Optional[Any] = None + +
+[docs] + async def get_data_async(self) -> Any: + """ + Get the provided signal's data from the cache according to the + reduction configuration. + + Returns + ------- + data : Any + The acquired data. + + Raises + ------ + TimeoutError + If unable to connect or retrieve data from the signal. + """ + signal = self.signal + if signal is None: + raise ValueError("Signal instance unset") + + data = await self.cache.get_signal_data( + signal, + reduce_period=self.comparison.reduce_period, + reduce_method=self.comparison.reduce_method, + string=self.comparison.string or False, + ) + + self.data = data + return data
+ + + async def _compare(self, data: Any) -> Result: + """ + Run the comparison with the already-acquired data in ``self.data``. + """ + if data is None: + # 'None' is likely incompatible with our comparisons and should + # be raised for separately + return Result( + severity=self.comparison.if_disconnected, + reason=( + f"No data available for signal {self.identifier!r} in " + f"comparison {self.comparison}" + ), + ) + + return self.comparison.compare( + data, + identifier=self.identifier + ) + +
+[docs] + @classmethod + def from_device( + cls, + device: ophyd.Device, + attr: str, + comparison: Comparison, + name: Optional[str] = None, + parent: Optional[PreparedDeviceConfiguration] = None, + cache: Optional[DataCache] = None, + ) -> PreparedSignalComparison: + """ + Create one PreparedComparison from a device, attribute, and comparison. + + Parameters + ---------- + device : ophyd.Device + The ophyd Device. + attr : str + The attribute name of the component. May be in dotted notation. + comparison : Comparison + The comparison instance to run on the PV. + name : str, optional + The name of this comparison. + parent : PreparedPVConfiguration, optional + The parent configuration, if available. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedSignalComparison + """ + full_attr = f"{device.name}.{attr}" + logger.debug("Checking %s with comparison %s", full_attr, comparison) + if cache is None: + cache = DataCache() + + signal = getattr(device, attr, None) + if signal is None: + raise AttributeError( + f"Attribute {full_attr} does not exist on class " + f"{type(device).__name__}" + ) + + return cls( + name=name, + device=device, + identifier=full_attr, + comparison=comparison, + signal=signal, + parent=parent, + cache=cache, + )
+ + +
+[docs] + @classmethod + def from_pvname( + cls, + pvname: str, + comparison: Comparison, + name: Optional[str] = None, + parent: Optional[PreparedPVConfiguration] = None, + cache: Optional[DataCache] = None, + ) -> PreparedSignalComparison: + """ + Create one PreparedComparison from a PV name and comparison. + + Parameters + ---------- + pvname : str + The PV name. + comparison : Comparison + The comparison instance to run on the PV. + name : str, optional + The name of this comparison. + parent : PreparedPVConfiguration, optional + The parent configuration, if available. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedSignalComparison + """ + if cache is None: + cache = DataCache() + + return cls( + identifier=pvname, + device=None, + signal=cache.signals[pvname], + comparison=comparison, + name=name, + cache=cache, + parent=parent, + )
+ + +
+[docs] + @classmethod + def from_signal( + cls, + signal: ophyd.Signal, + comparison: Comparison, + name: Optional[str] = None, + parent: Optional[PreparedPVConfiguration] = None, + cache: Optional[DataCache] = None, + ) -> PreparedSignalComparison: + """ + Create a PreparedSignalComparison from a signal directly + + Parameters + ---------- + signal : ophyd.Signal + The signal to compare + comparison : Comparison + The comparison instance to run on the PV. + name : str, optional + The name of this comparison. + parent : PreparedPVConfiguration, optional + The parent configuration, if available. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedSignalComparison + """ + if cache is None: + cache = DataCache() + + return cls( + identifier=signal.name, + device=None, + signal=signal, + comparison=comparison, + name=name, + cache=cache, + parent=parent, + )
+
+ + + +
+[docs] +@dataclass +class PreparedToolComparison(PreparedComparison): + """ + A unified representation of comparisons for device signals and standalone PVs. + + Each PreparedToolComparison has a single leaf in the configuration tree, + comprised of: + + * A configuration + * The tool configuration (i.e., a :class:`tools.Tool` instance) + * Identifiers to compare are dependent on the tool type + * A comparison to run + - For example, a :class:`atef.tools.Ping` has keys described in + :class:`~atef.tools.PingResult`. + """ + #: The device the comparison applies to, if applicable. + tool: tools.Tool = field(default_factory=lambda: tools.Ping(hosts=[])) + +
+[docs] + async def get_data_async(self) -> Any: + """ + Get the provided tool's result data from the cache. + + Returns + ------- + data : Any + The acquired data. + """ + return await self.cache.get_tool_data(self.tool)
+ + + async def _compare(self, data: Any) -> Result: + """ + Run the prepared comparison. + + Returns + ------- + Result + The result of the comparison. This is also set in ``self.result``. + """ + try: + value = tools.get_result_value_by_key(data, self.identifier) + except KeyError as ex: + return Result( + severity=self.comparison.severity_on_failure, + reason=( + f"Provided key is invalid for tool result {self.tool} " + f"{self.identifier!r} ({self.name}): {ex} " + f"(in comparison {self.comparison})" + ), + ) + return self.comparison.compare( + value, + identifier=self.identifier + ) + +
+[docs] + @classmethod + def from_tool( + cls, + tool: tools.Tool, + result_key: str, + comparison: Comparison, + name: Optional[str] = None, + parent: Optional[PreparedToolConfiguration] = None, + cache: Optional[DataCache] = None, + ) -> PreparedToolComparison: + """ + Prepare a tool-based comparison for execution. + + Parameters + ---------- + tool : Tool + The tool to run. + result_key : str + The key from the result dictionary to check after running the tool. + comparison : Comparison + The comparison to perform on the tool's results (looking at the + specific result_key). + name : str, optional + The name of the comparison. + cache : DataCache, optional + The data cache instance, if available. If unspecified, a new data + cache will be instantiated. + + Returns + ------- + PreparedToolComparison + """ + if cache is None: + cache = DataCache() + tool.check_result_key(result_key) + return cls( + tool=tool, + comparison=comparison, + name=name, + identifier=result_key, + cache=cache, + parent=parent, + )
+
+ + + +AnyPreparedConfiguration = Union[ + PreparedDeviceConfiguration, + PreparedGroup, + PreparedPVConfiguration, + PreparedToolConfiguration +] + +_class_to_prepared: Dict[type, type] = { + ConfigurationFile: PreparedFile, + ConfigurationGroup: PreparedGroup, + ToolConfiguration: PreparedToolConfiguration, + DeviceConfiguration: PreparedDeviceConfiguration, + PVConfiguration: PreparedPVConfiguration, +} + + +
+[docs] +def get_result_from_comparison( + item: Union[PreparedComparison, Exception, None] +) -> Tuple[Optional[PreparedComparison], Result]: + """ + Get a Result, if available, from the provided arguments. + + In the case of an exception (or None/internal error), create one. + + Parameters + ---------- + item : Union[PreparedComparison, Exception, None] + The item to grab a result from. + + Returns + ------- + PreparedComparison or None : + The prepared comparison, if available + Result : + The result instance. + """ + if item is None: + return None, Result( + severity=Severity.internal_error, + reason="no result available (comparison not run?)" + ) + if isinstance(item, Exception): + # An error that was transformed into a Result with a severity + return None, Result.from_exception(item) + + if item.result is None: + return item, Result( + severity=Severity.internal_error, + reason="no result available (comparison not run?)" + ) + + return item, item.result
+ + + +
+[docs] +async def run_passive_step( + config: Union[PreparedComparison, PreparedConfiguration, PreparedFile] +): + """Runs a given check and returns the result.""" + # Warn if will run all subcomparisons? + cache_fill_tasks = [] + try: + cache_fill_tasks = await config.fill_cache() + except asyncio.CancelledError: + logger.error("Tests interrupted; no results available.") + return + try: + result = await config.compare() + except asyncio.CancelledError: + for task in cache_fill_tasks or []: + task.cancel() + + return result
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/_modules/atef/procedure.html b/v1.4.0/_modules/atef/procedure.html new file mode 100644 index 00000000..f3f6b6b2 --- /dev/null +++ b/v1.4.0/_modules/atef/procedure.html @@ -0,0 +1,1635 @@ + + + + + + atef.procedure — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for atef.procedure

+"""
+Dataclasses for describing active checkout procedures.  These dataclasses come in
+normal (edit) and Prepared (run) variants
+
+Edit variants hold data needed to specify the step.
+Prepared variants hold a reference to their originating edit-step, along with
+Result objects and a .run() method.
+
+Adding a step requires:
+- write the edit-variant
+- add the edit-variant to the AnyProcedure type hint
+- write the run-variant, along with its ._run() and .from_origin() methods
+- add the step to PreparedProcedure.from_origin classmethod case statement
+"""
+from __future__ import annotations
+
+import dataclasses
+import datetime
+import json
+import logging
+import pathlib
+from copy import deepcopy
+from dataclasses import dataclass, field
+from typing import (Any, Dict, Generator, List, Literal, Optional, Sequence,
+                    Tuple, Union, cast)
+
+import apischema
+import ophyd
+import pandas as pd
+import yaml
+from bluesky_queueserver.manager.profile_ops import (
+    existing_plans_and_devices_from_nspace, validate_plan)
+
+from atef import util
+from atef.cache import DataCache, _SignalCache, get_signal_cache
+from atef.check import Comparison
+from atef.config import (ConfigurationFile, PreparedComparison, PreparedFile,
+                         PreparedSignalComparison, run_passive_step)
+from atef.enums import GroupResultMode, PlanDestination, Severity
+from atef.exceptions import PreparedComparisonException
+from atef.plan_utils import (BlueskyState, GlobalRunEngine,
+                             get_default_namespace, register_run_identifier,
+                             run_in_local_RE)
+from atef.reduce import ReduceMethod
+from atef.result import Result, _summarize_result_severity, incomplete_result
+from atef.type_hints import AnyDataclass, AnyPath, Number, PrimitiveType
+from atef.yaml_support import init_yaml_support
+
+from . import serialization
+
+logger = logging.getLogger(__name__)
+
+
+# BlueskyState tracker.  Keys are the id of the top-level ProcedureFile
+# Includes one default BlueskyState, with key id(None)
+BS_STATE_MAP: Dict[int, BlueskyState] = {}
+
+# Max depth for plan steps
+MAX_PLAN_DEPTH = 200
+
+
+
+[docs] +@dataclasses.dataclass +@serialization.as_tagged_union +class ProcedureStep: + """ + A basic step in an atef procedure. + + This is used as a base class for all valid procedure steps (and groups). + """ + #: The title of the procedure + name: Optional[str] = None + #: A description of narrative explanation of setup steps, what is to happen, etc. + description: Optional[str] = None + #: The hierarchical parent of this step. + parent: Optional[ProcedureGroup] = None + #: verification requirements, is human verification required? + verify_required: bool = True + #: step success requirements, does the step need to complete? + step_success_required: bool = True + +
+[docs] + def allow_verify(self) -> bool: + """ + Whether or not the step can be verified. + To be further expanded or overloaded in subclass, + """ + return self.result.severity == Severity.success
+ + +
+[docs] + def children(self) -> List[Any]: + """Return children of this group, as a tree view might expect""" + return []
+
+ + + +
+[docs] +@dataclass +class ProcedureGroup(ProcedureStep): + """A group of procedure steps (or nested groups).""" + #: Steps included in the procedure. + steps: Sequence[Union[ProcedureStep, ProcedureGroup]] = field(default_factory=list) + +
+[docs] + def walk_steps(self) -> Generator[AnyProcedure, None, None]: + for step in self.steps: + step = cast(AnyProcedure, step) + yield step + if isinstance(step, ProcedureGroup): + yield from step.walk_steps()
+ + +
+[docs] + def children(self) -> List[Union[ProcedureStep, ProcedureGroup]]: + """Return children of this group, as a tree view might expect""" + return self.steps
+ + +
+[docs] + def replace_step( + self, + old_step: Union[ProcedureStep, ProcedureGroup], + new_step: Union[ProcedureStep, ProcedureGroup] + ) -> None: + util.replace_in_list(old_step, new_step, self.steps)
+
+ + + +
+[docs] +@dataclass +class DescriptionStep(ProcedureStep): + """A simple title or descriptive step in the procedure.""" + pass
+ + + +
+[docs] +@dataclass +class PassiveStep(ProcedureStep): + """A step that runs a passive checkout file""" + filepath: pathlib.Path = field(default_factory=pathlib.Path)
+ + + +
+[docs] +@dataclass +class SetValueStep(ProcedureStep): + """A step that sets one or more values and checks one or more values after""" + actions: List[ValueToTarget] = field(default_factory=list) + success_criteria: List[ComparisonToTarget] = field(default_factory=list) + + #: Stop performing actions if one fails + halt_on_fail: bool = True + #: Only mark the step_result as successful if all actions have succeeded + require_action_success: bool = True + +
+[docs] + def children(self) -> List[ComparisonToTarget]: + """Return children of this group, as a tree view might expect""" + return [crit.comparison for crit in self.success_criteria]
+ + +
+[docs] + def replace_comparison( + self, + old_comp: Comparison, + new_comp: Comparison + ) -> None: + """replace ``old_comp`` with ``new_comp``, in success_criteria""" + comp_list = [crit.comparison for crit in self.success_criteria] + try: + idx = comp_list.index(old_comp) + except ValueError: + raise ValueError('attempted to replace a comparison that does not ' + f'exist: {old_comp} -> {new_comp}') + + new_crit = deepcopy(self.success_criteria[idx]) + new_crit.comparison = new_comp + + util.replace_in_list( + old=self.success_criteria[idx], + new=new_crit, + item_list=self.success_criteria + )
+
+ + + +
+[docs] +@dataclass +class Target: + """ + A destination for a value. Either an ophyd device+attr pair or EPICS PV + """ + #: name of target + name: Optional[str] = None + #: device name and attr + device: Optional[str] = None + attr: Optional[str] = None + #: EPICS PV + pv: Optional[str] = None + # TODO: a method for getting the PV from device/attr pairs + +
+[docs] + def to_signal( + self, + signal_cache: Optional[_SignalCache] = None + ) -> Optional[ophyd.Signal]: + """ + Return the signal described by this Target. First attempts to use the + device + attr information to look up the signal in happi, falling back + to the raw PV. + + Returns + ------- + ophyd.Signal + the signal described by this Target + """ + try: + if self.device and self.attr: + device = util.get_happi_device_by_name(self.device) + signal = getattr(device, self.attr) + elif self.pv: + if signal_cache is None: + signal_cache = get_signal_cache() + signal = signal_cache[self.pv] + else: + logger.debug('unable to create signal, insufficient information ' + 'to specify signal') + return + except Exception as ex: + logger.debug(f'unable to create signal: ({ex})') + return + + return signal
+
+ + + +
+[docs] +@dataclass +class ValueToTarget(Target): + #: the value to set to the target + value: Optional[PrimitiveType] = None + + # ophyd.Signal.set() parameters + #: write timeout + timeout: Optional[Number] = None + #: settle time + settle_time: Optional[Number] = None
+ + + +
+[docs] +@dataclass +class ComparisonToTarget(Target): + #: the comparison to apply to the target + comparison: Optional[Comparison] = None
+ + + +
+[docs] +@dataclass +class PlanData: + #: user-provided name for this plan data. Not used to identify the run + name: str = "" + #: identifier of PlanStep to grab data from. + #: set via GUI, must match a PreparedPlan.plan_id. Options should be fixed + #: and regenerated with every view + plan_id: Optional[str] = None + #: plan number (for plans containing nested plans, which return multiple uuids) + plan_no: int = 0 + #: data point(s) in plan (0-indexed) or slice notation + #: [row_start, row_end) + data_points: Union[List[int], Tuple[int, int]] = field(default_factory=list) + #: Field / column names to grab data from + field_names: List[str] = field(default_factory=list) + #: data reduction / operation + reduction_mode: ReduceMethod = ReduceMethod.average
+ + + +
+[docs] +@dataclass +class ComparisonToPlanData(PlanData): + #: the comparison to apply to the target + comparison: Optional[Comparison] = None
+ + + +
+[docs] +@dataclass +class CodeStep(ProcedureStep): + """Run source code in a procedure.""" + #: The source code to execute. + source_code: str = '' + #: Arguments to pass into the code. + arguments: Dict[Any, Any] = field(default_factory=dict)
+ + + +
+[docs] +@dataclass +class PlanOptions: + """Options for a bluesky plan scan.""" + #: Name to identify this plan + name: str + #: The plan name. Bluesky plan or otherwise + plan: str + #: Plan arguments dictionary - argument name to value. + args: Sequence[Any] = field(default_factory=list) + #: Plan keyword arguments dictionary - argument name to value. + kwargs: Dict[Any, Any] = field(default_factory=dict) + #: Arguments which should not be configurable. + fixed_arguments: Optional[Sequence[str]] = None + +
+[docs] + def to_plan_item(self: PlanOptions) -> Dict[str, Any]: + """Makes a plan item (dictionary of parameters) for a given PlanStep""" + it = { + "name": self.plan, + "args": self.args, + "kwargs": self.kwargs, + "user_group": "root"} + return it
+
+ + + +
+[docs] +@dataclass +class PlanStep(ProcedureStep): + """A procedure step comprised of one or more bluesky plans.""" + plans: Sequence[PlanOptions] = field(default_factory=list) + checks: Sequence[Union[ComparisonToTarget, ComparisonToPlanData]] = field( + default_factory=list + ) + + #: platform for plan to be run on + destination: PlanDestination = PlanDestination.local + #: Stop performing plans if one fails + halt_on_fail: bool = True + #: Only mark step_result successfull if all steps have succeeded + require_plan_success: bool = True + +
+[docs] + def children(self) -> List[Union[PlanOptions, ComparisonToTarget, + ComparisonToPlanData]]: + """Return children of this group, as a tree view might expect""" + # Subject to change as PlanStep is developed + return self.plans + [check.comparison for check in self.checks]
+
+ + + +
+[docs] +@dataclass +class DisplayOptions: + """Options for a typhos or PyDM display.""" + #: Macros for the display. + macros: Dict[str, str] = field(default_factory=dict) + #: The template name or screen display path. + template: str = "embedded_screen" + #: Embed the display in the procedure? (or pop it out) + embed: bool = True
+ + + +
+[docs] +@dataclass +class DeviceConfiguration: + """Device configuration for comparison.""" + #: The timestamp this configuration is associated with. + archiver_timestamp: Optional[datetime.datetime] + #: The device dotted attribute name to value. + values: Dict[str, Any]
+ + + +
+[docs] +@dataclass +class ConfigurationCheckStep(ProcedureStep): + """Step which checks device configuration versus a given timestamp.""" + #: Device name to device configuration information. + devices: Dict[str, DeviceConfiguration] = field(default_factory=dict)
+ + + +
+[docs] +@dataclass +class TyphosDisplayStep(ProcedureStep): + """A procedure step which opens one or more typhos displays.""" + #: Happi device name to display options. + devices: Dict[str, DisplayOptions] = field(default_factory=dict)
+ + + +
+[docs] +@dataclass +class PydmDisplayStep(ProcedureStep): + """A procedure step which a opens a PyDM display.""" + #: The display path. + display: pathlib.Path = field(default_factory=pathlib.Path) + #: Options for displaying. + options: DisplayOptions = field(default_factory=DisplayOptions)
+ + + +
+[docs] +@dataclass +class ProcedureFile: + """ + File comprised of several Procedure steps + + Essentially identical to Configuration File. Consider refactoring + if design/methods do not diverge + """ + #: atef configuration file version information. + version: Literal[0] = field(default=0, metadata=apischema.metadata.required) + #: Top-level configuration group. + root: ProcedureGroup = field(default_factory=ProcedureGroup) + + def __post_init__(self): + # register a BSState for this ProcedureFile + BS_STATE_MAP[id(self)] = BlueskyState() + +
+[docs] + def walk_steps(self) -> Generator[AnyProcedure, None, None]: + yield self.root + yield from self.root.walk_steps()
+ + +
+[docs] + def children(self) -> List[ProcedureGroup]: + """Return children of this group, as a tree view might expect""" + return [self.root]
+ + +
+[docs] + @classmethod + def from_filename(cls, filename: AnyPath) -> ProcedureFile: + path = pathlib.Path(filename) + if path.suffix.lower() == '.json': + config = ProcedureFile.from_json(path) + else: + config = ProcedureFile.from_yaml(path) + return config
+ + +
+[docs] + @classmethod + def from_json(cls, filename: AnyPath) -> ProcedureFile: + """Load a configuration file from JSON.""" + with open(filename) as fp: + serialized_config = json.load(fp) + return apischema.deserialize(cls, serialized_config)
+ + +
+[docs] + @classmethod + def from_yaml(cls, filename: AnyPath) -> ProcedureFile: + """Load a configuration file from yaml.""" + with open(filename) as fp: + serialized_config = yaml.safe_load(fp) + return apischema.deserialize(cls, serialized_config)
+ + +
+[docs] + def to_json(self): + """Dump this configuration file to a JSON-compatible dictionary.""" + return apischema.serialize(ProcedureFile, self, exclude_defaults=True)
+ + +
+[docs] + def to_yaml(self): + """Dump this configuration file to yaml.""" + init_yaml_support() + return yaml.dump(self.to_json())
+
+ + + +###################### +# Prepared Dataclasses +###################### + + +
+[docs] +@dataclass +class PreparedProcedureFile: + """ + A Prepared Procedure file. Constructs prepared dataclasses for steps + in the root ProcedureGroup + """ + #: Corresponding ProcedureFile information + file: ProcedureFile + #: Procedure steps defined in the top-level file + root: PreparedProcedureGroup + +
+[docs] + @classmethod + def from_origin( + cls, + file: ProcedureFile, + ) -> PreparedProcedureFile: + """ + Prepare a ProcedureFile for running, based off an existing ProcedureFile + + Parameters + ---------- + file : ProcedureFile + the procedure file instance + """ + + prep_proc_file = PreparedProcedureFile( + file=file, + root=PreparedProcedureGroup() + ) + + # PreparedProcedureGroup needs to know about its parent from birth + # get_bs_state doesn't like orphans + prepared_root = PreparedProcedureGroup.from_origin( + group=file.root, parent=prep_proc_file + ) + prep_proc_file.root = prepared_root + + return prep_proc_file
+ + +
+[docs] + async def run(self) -> Result: + return await self.root.run()
+
+ + + +
+[docs] +@dataclass +class FailedStep: + """A step that failed to be prepared for running.""" + #: The data cache to use for the preparation step. + parent: Optional[PreparedProcedureGroup] + #: Configuration instance. + origin: AnyProcedure + #: overall result of running the step + combined_result: Result = field(default_factory=incomplete_result) + #: confirmation by the user that result matches expectations + verify_result: Result = field(default_factory=incomplete_result) + #: whether or not the step completed successfully + step_result: Result = field(default_factory=incomplete_result) + #: Exception that was caught, if available. + exception: Optional[Exception] = None + + @property + def result(self) -> Result: + return self.combined_result
+ + + +
+[docs] +@dataclass +class PreparedProcedureStep: + """ + Base class for a ProcedureStep that has been prepared to run. + """ + #: name of this comparison + name: Optional[str] = None + #: original procedure step, of which this is the prepared version + origin: ProcedureStep = field(default_factory=ProcedureStep) + #: hierarchical parent of this step + parent: Optional[PreparedProcedureGroup] = None + + #: overall result of running the step + combined_result: Result = field(default_factory=incomplete_result) + #: confirmation by the user that result matches expectations + verify_result: Result = field(default_factory=incomplete_result) + #: whether or not the step completed successfully + step_result: Result = field(default_factory=incomplete_result) + + @property + def result(self) -> Result: + """ + Combines the step result and verification result based on settings + + Returns + ------- + Result + The overall result of this step + """ + results = [] + reason = '' + if self.origin.verify_required: + results.append(self.verify_result) + if self.verify_result.severity != Severity.success: + reason += f'Not Verified ({self.verify_result.reason})' + else: + reason += f'Verified ({self.verify_result.reason})' + + if self.origin.step_success_required: + results.append(self.step_result) + if self.step_result.severity != Severity.success: + reason += f', Not Successful ({self.step_result.reason})' + + if not results: + # Nothing required, auto-success + self.combined_result = Result() + return self.combined_result + + severity = _summarize_result_severity(GroupResultMode.all_, results) + self.combined_result = Result(severity=severity, reason=reason) + return self.combined_result + + async def _run(self) -> Result: + """ + Run the step. To be implemented in subclass. + Returns the step_result + """ + raise NotImplementedError() + +
+[docs] + async def run(self) -> Result: + """Run the step and return the result""" + try: + result = await self._run() + except Exception as ex: + result = Result( + severity=Severity.internal_error, + reason=str(ex) + ) + + # stash step result + self.step_result = result + # return the overall result, including verification + return self.result
+ + +
+[docs] + @classmethod + def from_origin( + cls, + step: AnyProcedure, + parent: Optional[PreparedProcedureGroup] = None + ) -> PreparedProcedureStep: + """ + Prepare a ProcedureStep for running. If the creation of the prepared step + fails for any reason, a FailedStep is returned. + + Parameters + ---------- + step : AnyProcedure + the ProcedureStep to prepare + parent : Optional[PreparedProcedureGroup] + the parent of this step, by default None + """ + try: + if isinstance(step, ProcedureGroup): + return PreparedProcedureGroup.from_origin( + group=step, parent=parent + ) + if isinstance(step, DescriptionStep): + return PreparedDescriptionStep.from_origin( + step=step, parent=parent + ) + if isinstance(step, PassiveStep): + return PreparedPassiveStep.from_origin( + step=step, parent=parent + ) + if isinstance(step, SetValueStep): + return PreparedSetValueStep.from_origin( + step=step, parent=parent + ) + if isinstance(step, PlanStep): + return PreparedPlanStep.from_origin( + origin=step, parent=parent + ) + + raise NotImplementedError(f"Step type unsupported: {type(step)}") + except Exception as ex: + return FailedStep( + origin=step, + parent=parent, + exception=ex, + combined_result=Result( + severity=Severity.internal_error, + reason=( + f"Failed to instantiate step: {ex}. " + f"Step is: {step.name} ({step.description or ''!r})" + ) + ) + )
+
+ + + +
+[docs] +@dataclass +class PreparedProcedureGroup(PreparedProcedureStep): + #: hierarchical parent of this step + parent: Optional[Union[PreparedProcedureFile, PreparedProcedureGroup]] = field( + default=None, repr=False + ) + #: the steps in this group + steps: List[AnyPreparedProcedure] = field(default_factory=list) + #: Steps that failed to be prepared + prepare_failures: List[FailedStep] = field(default_factory=list) + +
+[docs] + @classmethod + def from_origin( + cls, + group: ProcedureGroup, + parent: Optional[PreparedProcedureGroup | PreparedProcedureFile] = None, + ) -> PreparedProcedureGroup: + """ + Prepare a ProcedureGroup for running. Prepares all of the group's children + + Parameters + ---------- + group : ProcedureGroup + the group to prepare + parent : Optional[PreparedProcedureGroup | PreparedProcedureFile] + the hierarchical parent of this step, by default None + + Returns + ------- + PreparedProcedureGroup + """ + prepared = cls(origin=group, parent=parent, steps=[]) + + for step in group.steps: + prep_step = PreparedProcedureStep.from_origin( + step=cast(AnyPreparedProcedure, step), + parent=prepared + ) + if isinstance(prep_step, FailedStep): + prepared.prepare_failures.append(prep_step) + else: + prepared.steps.append(prep_step) + + return prepared
+ + +
+[docs] + async def run(self) -> Result: + """Run all steps and return a combined result""" + results = [] + for step in self.steps: + results.append(await step.run()) + + if self.prepare_failures: + result = Result( + severity=Severity.error, + reason='At least one step failed to initialize' + ) + else: + severity = _summarize_result_severity(GroupResultMode.all_, results) + result = Result(severity=severity) + + self.step_result = result + return self.result
+ + + @property + def result(self) -> Result: + """Re-compute the combined result and return it""" + results = [] + for step in self.steps: + results.append(step.result) + + if self.prepare_failures: + result = Result( + severity=Severity.error, + reason='At least one step failed to initialize' + ) + else: + severity = _summarize_result_severity(GroupResultMode.all_, results) + result = Result(severity=severity) + + self.step_result = result + + return super().result + +
+[docs] + def walk_steps(self) -> Generator[AnyPreparedProcedure]: + for step in self.steps: + step = cast(AnyPreparedProcedure, step) + yield step + if hasattr(step, 'walk_steps'): + yield from step.walk_steps()
+
+ + + +
+[docs] +@dataclass +class PreparedDescriptionStep(PreparedProcedureStep): + async def _run(self): + return Result() + +
+[docs] + @classmethod + def from_origin( + cls, + step: DescriptionStep, + parent: Optional[PreparedProcedureGroup] = None + ) -> PreparedDescriptionStep: + """ + Prepare a DescriptionStep for running + + Parameters + ---------- + step : DescriptionStep + the description step to prepare + parent : Optional[PreparedProcedureGroup] + the hierarchical parent of this step, by default None + """ + return cls( + origin=step, + parent=parent, + name=step.name, + )
+
+ + + +
+[docs] +@dataclass +class PreparedPassiveStep(PreparedProcedureStep): + #: The prepared passive checkout file, holds Results + prepared_passive_file: Optional[PreparedFile] = None + + async def _run(self) -> Result: + """Load, prepare, and run the passive step""" + if not self.prepared_passive_file: + return Result(severity=Severity.error, reason='No passive checkout to run') + return await run_passive_step(self.prepared_passive_file) + +
+[docs] + @classmethod + def from_origin( + cls, + step: PassiveStep, + parent: Optional[PreparedProcedureGroup] + ) -> PreparedPassiveStep: + """ + Prepare a passive checkout step for running. Requires the passive checkout + be accessible for read access + + Parameters + ---------- + step : PassiveStep + the original PassiveStep to prepare + parent : Optional[PreparedProcedureGroup] + the hierarchical parent to assign to this PreparedPassiveStep + + Returns + ------- + PreparedPassiveStep + """ + try: + passive_file = ConfigurationFile.from_filename(step.filepath) + prep_passive_file = PreparedFile.from_config(file=passive_file) + except OSError as ex: + logger.debug(f'failed to generate prepared passive checkout: {ex}') + prep_passive_file = None + + return cls( + origin=step, + prepared_passive_file=prep_passive_file, + parent=parent, + name=step.name + )
+
+ + + +
+[docs] +@dataclass +class PreparedSetValueStep(PreparedProcedureStep): + #: list of prepared actions to take (values to set to a target) + prepared_actions: List[PreparedValueToSignal] = field( + default_factory=list + ) + #: list of prepared success criteria (comparisons) + prepared_criteria: List[PreparedSignalComparison] = field( + default_factory=list + ) + +
+[docs] + def walk_comparisons(self) -> Generator[PreparedComparison, None, None]: + """Yields PreparedComparisons in this ProcedureStep""" + yield from self.prepared_criteria
+ + + async def _run(self) -> Result: + """ + Prepare and execute the actions, record their Results + Prepare and execute success criteria, record their Results + + Returns + ------- + Result + the step_result for this step + """ + self.origin = cast(SetValueStep, self.origin) + for prep_action in self.prepared_actions: + action_result = await prep_action.run() + if (self.origin.halt_on_fail and action_result.severity > Severity.success): + self.step_result = Result( + severity=Severity.error, + reason=f'action failed ({prep_action.name}), step halted' + ) + return self.step_result + for prep_criteria in self.prepared_criteria: + await prep_criteria.compare() + + if self.origin.require_action_success: + action_results = [action.result for action in self.prepared_actions] + else: + action_results = [] + + criteria_results = [crit.result for crit in self.prepared_criteria] + + severity = _summarize_result_severity(GroupResultMode.all_, + criteria_results + action_results) + + return Result(severity=severity) + +
+[docs] + @classmethod + def from_origin( + cls, + step: SetValueStep, + parent: Optional[PreparedProcedureGroup] + ) -> PreparedSetValueStep: + """ + Prepare a SetValueStep for running. Gathers and prepares necessary + signals and comparisons. Any actions and success criteria that fail + to be prepared will be stored under the `prepare_action_failures` and + `prepare_criteria_failures` fields respectively + + Parameters + ---------- + step : SetValueStep + the original SetValueStep (not prepared) + parent : Optional[PreparedProcedureGroup] + the hierarchical parent for the prepared step. + + Returns + ------- + PreparedSetValueStep + """ + prep_step = cls( + origin=step, + parent=parent, + name=step.name + ) + + for value_to_target in step.actions: + try: + prep_value_to_signal = PreparedValueToSignal.from_origin( + origin=value_to_target, parent=prep_step + ) + prep_step.prepared_actions.append(prep_value_to_signal) + except Exception as ex: + return FailedStep(parent=parent, origin=step, exception=ex) + + for comp_to_target in step.success_criteria: + res = create_prepared_comparison(comp_to_target) + if isinstance(res, Exception): + return FailedStep(parent=parent, origin=step, exception=res) + else: + prep_step.prepared_criteria.append(res) + + return prep_step
+
+ + + +
+[docs] +@dataclass +class PreparedValueToSignal: + #: identifying name + name: str + #: the signal, derived from a Target + signal: ophyd.Signal + #: value to set to the signal + value: PrimitiveType + #: a link to the original ValueToTarget + origin: ValueToTarget + #: parent step that owns this instance + parent: Optional[PreparedSetValueStep] = None + #: The result of the set action + result: Result = field(default_factory=incomplete_result) + +
+[docs] + async def run(self) -> Result: + """ + Set the stored value to the signal, specifying the settle time and timeout + if provided. Returns a Result recording the success of this action + + Returns + ------- + Result + """ + # generate kwargs for set, exclude timeout and settle time if not provided + # in order to use ophyd defaults + set_kwargs = {'value': self.value} + if self.origin.timeout is not None: + set_kwargs.update({'timeout': self.origin.timeout}) + if self.origin.settle_time is not None: + set_kwargs.update({'settle_time': self.origin.settle_time}) + + try: + status = self.signal.set(**set_kwargs) + await util.run_in_executor(executor=None, func=status.wait) + except Exception as ex: + self.result = Result(severity=Severity.error, reason=ex) + return self.result + + self.result = Result() + return self.result
+ + +
+[docs] + @classmethod + def from_origin( + cls, + origin: ValueToTarget, + parent: Optional[PreparedSetValueStep] = None + ) -> PreparedValueToSignal: + """ + Prepare the ValueToSignal for running. + + Parameters + ---------- + origin : ValueToTarget + the original ValueToTarget + + Returns + ------- + PreparedValueToSignal + + Raises + ------ + ValueError + if the target cannot return a valid signal + """ + signal = origin.to_signal() + if signal is None: + raise ValueError(f'Target specification invalid: {origin}') + + pvts = cls( + name=origin.name, + signal=signal, + value=origin.value, + origin=origin, + parent=parent + ) + return pvts
+
+ + + +
+[docs] +@dataclass +class PreparedPlan: + #: identifying name + name: str + #: a link to the original PlanOptions + origin: PlanOptions + #: the hierarchical parent of this PreparedPlan + parent: Optional[PreparedPlanStep] = None + #: the plan item, suitable for submission to a bluesky queueserver + item: Dict[str, any] = field(default_factory=dict) + #: the plan identifer, may be different from origin.plan_id + plan_id: Optional[str] = None + #: stashed BlueskyState. Passed to RunEngine runner + bs_state: Optional[BlueskyState] = None + #: result of this step. (did the plan run?) + result: Result = field(default_factory=incomplete_result) + +
+[docs] + async def run(self) -> Result: + # submit the plan to the destination + if self.parent.origin.destination != PlanDestination.local: + self.result = Result( + severity=Severity.error, + reason='Only local RunEngine supported at this time' + ) + + run_in_local_RE(self.item, self.plan_id, self.bs_state) + self.result = Result() + return self.result
+ + +
+[docs] + @classmethod + def from_origin( + cls, + origin: PlanOptions, + parent: Optional[PreparedPlanStep] = None + ) -> PreparedPlan: + # register run identifier, store in prepared_plan name + bs_state = get_bs_state(parent) + identifier = register_run_identifier(bs_state, origin.name or origin.plan) + return cls( + name=origin.name, + item=origin.to_plan_item(), + plan_id=identifier, + bs_state=bs_state, + origin=origin, + parent=parent + )
+
+ + + +
+[docs] +@dataclass +class PreparedPlanStep(PreparedProcedureStep): + #: a link to the original PlanStep + origin: PlanStep = field(default_factory=PlanStep) + #: list of PreparedPlan + prepared_plans: List[PreparedPlan] = field(default_factory=list) + #: list of PlanOption's that led to failed PreparedPlan's + prepared_plan_failures: List[PlanOptions] = field(default_factory=list) + #: list of success criteria + prepared_checks: List[Union[PreparedSignalComparison, + PreparedPlanComparison]] = field(default_factory=list) + #: list of failed checks + prepared_checks_failures: List[PreparedComparisonException] = field( + default_factory=list + ) + + async def _run(self) -> Result: + """Gather plan options and run the bluesky plan""" + # Construct plan (get devices, organize args/kwargs, run) + # verify + # - gather namespace (plans, devices) + # - validate_plan + # send plan to destination (local, queue server, ...) + # local -> get global run engine, setup + # qserver -> send to queueserver + + if self.origin.require_plan_success and self.prepared_plan_failures: + return Result( + severity=Severity.error, + reason=('One or more actions failed to prepare: ' + f'{[plan.name for plan in self.prepared_plan_failures]}') + ) + + # get namespace (based on destination? + # How will we know what's in the queueserver's destination?) + # Run the plans + nspace = get_default_namespace() + epd = existing_plans_and_devices_from_nspace(nspace=nspace) + plans, devices, _, __ = epd + plan_status = [validate_plan(plan.item, allowed_plans=plans, + allowed_devices=devices) + for plan in self.prepared_plans] + + validation_status = [status[0] for status in plan_status] + if not all(validation_status): + # raise an error, place info in result + fail_plan_names = [pl.name for pl, st in + zip(self.prepared_plans, validation_status) + if not st] + logger.debug(f'One or more plans ({fail_plan_names}) failed validation') + return Result( + severity=Severity.error, + reason=f'One or more plans ({fail_plan_names}) failed validation' + ) + + # send each plan to correct destination + plan_results = [] + for pplan in self.prepared_plans: + logger.debug(f'running plan: {pplan.name}...') + res = await pplan.run() + logger.debug(f'run completed: {res}') + plan_results.append(res) + + # run the checks + for prep_check in self.prepared_checks: + await prep_check.compare() + + check_results = [check.result for check in self.prepared_checks] + + if self.prepared_checks_failures: + return Result( + severity=Severity.error, + reason=('One or more success criteria failed to initialize: ' + f'{[check.name for check in self.prepared_checks_failures]}') + ) + + severity = _summarize_result_severity(GroupResultMode.all_, + check_results + plan_results) + reason = (f'{len(plan_results)} plans run, ' + f'{len(check_results)} checks passed') + return Result(severity=severity, reason=reason) + +
+[docs] + @classmethod + def from_origin( + cls, + origin: PlanStep, + parent: Optional[PreparedProcedureGroup] = None + ) -> PreparedPlanStep: + + prep_step = cls( + origin=origin, + parent=parent, + name=origin.name, + ) + + for plan_step in origin.plans: + try: + prep_plan = PreparedPlan.from_origin(plan_step, parent=prep_step) + prep_step.prepared_plans.append(prep_plan) + except Exception: + prep_step.prepared_plan_failures.append(plan_step) + + for check in origin.checks: + res = create_prepared_comparison(check, parent=prep_step) + if isinstance(res, Exception): + prep_step.prepared_checks_failures.append(res) + else: + prep_step.prepared_checks.append(res) + + return prep_step
+
+ + + +
+[docs] +def create_prepared_comparison( + check: Union[ComparisonToTarget, ComparisonToPlanData], + parent: Optional[AnyDataclass] = None +) -> Union[PreparedComparison, PreparedComparisonException]: + + output = ValueError('Cannot prepare the provided comparison, type not ' + f'supported: ({check})') + + if isinstance(check, ComparisonToTarget): + signal = check.to_signal() + comp = check.comparison + try: + output = PreparedSignalComparison.from_signal( + signal=signal, comparison=comp, parent=parent + ) + except Exception as ex: + output = PreparedComparisonException( + exception=ex, + identifier=getattr(signal, 'pvname', ''), + message='Failed to initialize comparison', + comparison=comp, + name=comp.name + ) + + elif isinstance(check, ComparisonToPlanData): + comp = check.comparison + try: + output = PreparedPlanComparison.from_comp_to_plan( + check, parent=parent + ) + except Exception as ex: + output = PreparedComparisonException( + exception=ex, + identifier=getattr(check, 'plan_id', ''), + message='Failed to initialize comparison', + comparison=comp, + name=comp.name + ) + + return output
+ + + +
+[docs] +def get_bs_state(dclass: PreparedProcedureStep) -> BlueskyState: + """ + Get the BlueskyState instance corresponding to ``dclass``. + Each ProcedureFile gets assigned a single BlueskyState. + Walk parents up to the top-level PreparedProcedureFile, find its origin + (ProcedureFile), then return its correspoinding BlueskyState + + Parameters + ---------- + dclass : PreparedProcedureStep + the current prepared-variant procedure step + + Returns + ------- + BlueskyState + the BlueskyState holding run information and allowed devices/plans + """ + # dclass should be a Prepared dataclass + if dclass is None: + top_dclass = None + else: + top_dclass = dclass + ctr = 0 + # This isn't my finest work, but it does work + while ((getattr(top_dclass, 'parent', None) is not None) and + (ctr < MAX_PLAN_DEPTH)): + top_dclass = top_dclass.parent + ctr += 1 + + if ctr >= MAX_PLAN_DEPTH: + logger.warning(f'{ctr} "parents" traversed, either the depth of ' + 'this file is excessive or an infinite loop occurred') + if not isinstance(top_dclass, PreparedProcedureFile): + logger.debug('top-level dataclass was not a PreparedProcedureFile, ' + f' {type(top_dclass)}, using default BlueskyState') + top_dclass = None + else: + top_dclass = top_dclass.file # grab un-prepared ProcedureFile + + top_dclass_id = id(top_dclass) + if top_dclass_id not in BS_STATE_MAP: + BS_STATE_MAP[top_dclass_id] = BlueskyState() + + return BS_STATE_MAP[top_dclass_id]
+ + + +
+[docs] +@dataclass +class PreparedPlanComparison(PreparedComparison): + """ + Unified representation for comparisons to Bluesky Plan data + """ + #: Original plan data, holds relevant data coordinates + plan_data: Optional[ComparisonToPlanData] = None + #: The hierarchical parent of this comparison + parent: Optional[PreparedPlanStep] = field(default=None, repr=None) + #: The value from the plan, to which the comparison will take place + data: Optional[Any] = None + +
+[docs] + async def get_data_async(self) -> Any: + bs_state = get_bs_state(self.parent) + # get BSState, look for entry? + data = get_RE_data(bs_state, self.plan_data) + return data
+ + + async def _compare(self, data: Any) -> Result: + if data is None: + # 'None' is likely incompatible with our comparisons and should + # be raised for separately + return Result( + severity=self.comparison.if_disconnected, + reason=( + f"No data available for signal {self.identifier!r} in " + f"comparison {self.comparison}" + ), + ) + + return self.plan_data.comparison.compare(data, identifier=self.identifier) + +
+[docs] + @classmethod + def from_comp_to_plan( + cls, + origin: ComparisonToPlanData, + cache: Optional[DataCache] = None, + parent: Optional[PreparedPlanStep] = None + ) -> PreparedPlanComparison: + + identifier = origin.comparison.name + f'[{origin.data_points}]' + name = origin.name + + if cache is None: + cache = DataCache() + + return cls( + plan_data=origin, + cache=cache, + identifier=identifier, + comparison=origin.comparison, + name=name, + parent=parent + )
+
+ + + +
+[docs] +def get_RE_data(bs_state: BlueskyState, plan_data: PlanData) -> Any: + """ + Get databroker data from the GlobalRunEngine from the plan specified by + ``plan_data``. + + Parameters + ---------- + bs_state : BlueskyState + the BlueskyState whose run_map holds the uuid for ``plan_data`` + plan_data : PlanData + the plan data specification (data points, plan number, field names) + + Returns + ------- + Any + Array of data specified by ``plan_data`` + + Raises + ------ + RuntimeError + if the data cannot be found in ``bs_state`` + ValueError + if ``plan_data`` does not provide parsable datapoints + """ + gre = GlobalRunEngine() + run_uuids = bs_state.run_map[plan_data.plan_id] + if run_uuids is None: + raise RuntimeError("Data unavailable, run cannot be found. Has the " + f"referenced plan (id: {plan_data.plan_id}) " + "been run?") + + # Use index to grab right uuid, data row + uuid = run_uuids[plan_data.plan_no] + plan_table: pd.DataFrame = gre.db[uuid].table() + field_series: pd.Series = plan_table[plan_data.field_names] + + if isinstance(plan_data.data_points, tuple): + data_slice = slice(*plan_data.data_points) + data_table = field_series[data_slice].to_numpy() + elif isinstance(plan_data.data_points, list): + data_table = field_series.iloc[plan_data.data_points].to_numpy() + else: + raise ValueError(f'Unable to parse data point format: {plan_data.data_points}') + + reduced_data = plan_data.reduction_mode.reduce_values(data_table) + return reduced_data
+ + + +AnyProcedure = Union[ + ProcedureGroup, + DescriptionStep, + PassiveStep, + SetValueStep, + PlanStep +] + +AnyPreparedProcedure = Union[ + PreparedProcedureGroup, + PreparedDescriptionStep, + PreparedPassiveStep, + PreparedSetValueStep, + PreparedPlanStep +] +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/_modules/atef/tools.html b/v1.4.0/_modules/atef/tools.html new file mode 100644 index 00000000..706f47e0 --- /dev/null +++ b/v1.4.0/_modules/atef/tools.html @@ -0,0 +1,480 @@ + + + + + + atef.tools — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for atef.tools

+from __future__ import annotations
+
+import asyncio
+import re
+import shutil
+import sys
+import typing
+from dataclasses import dataclass, field
+from typing import Any, ClassVar, Dict, List, Mapping, Sequence, TypeVar, Union
+
+from . import serialization
+from .check import Severity
+from .exceptions import ToolDependencyMissingException
+from .result import Result
+
+T = TypeVar("T", bound="Tool")
+
+
+
+[docs] +@dataclass +class ToolResult: + """ + The base result dictionary of any tool. + """ + result: Result
+ + + +
+[docs] +@dataclass +class PingResult(ToolResult): + """ + The result dictionary of the 'ping' tool. + """ + #: Host(s) that are alive + alive: List[str] = field(default_factory=list) + #: Number of hosts that are alive. + num_alive: int = 0 + + #: Host(s) that are unresponsvie + unresponsive: List[str] = field(default_factory=list) + #: Number of hosts that are unresponsive. + num_unresponsive: int = 0 + + #: Host name to time taken. + times: Dict[str, float] = field(default_factory=dict) + #: Minimum time in seconds from ``times``. + min_time: float = 0.0 + #: Maximum time in seconds from ``times``. + max_time: float = 0.0 + + #: Time pattern for matching the ping output. + _time_re: ClassVar[re.Pattern] = re.compile(r"time[=<](.*)\s?ms") + +
+[docs] + def add_host_result( + self, + host: str, + result: Union[PingResult, Exception], + *, + failure_time: float = 100.0 + ) -> None: + """ + Add a new per-host result to this aggregate one. + + Parameters + ---------- + host : str + The hostname or IP address. + result : Union[PingResult, Exception] + The result to add. Caught exceptions will be interpreted as a ping + failure for the given host. + failure_time : float, optional + The time to use when failures happen. + """ + if isinstance(result, Exception): + self.result = Result( + severity=Severity.error, + ) + self.unresponsive.append(host) + self.times[host] = failure_time + else: + self.unresponsive.extend(result.unresponsive) + self.alive.extend(result.alive) + self.times.update(result.times) + + times = self.times.values() + self.min_time = min(times) if times else 0.0 + self.max_time = max(times) if times else failure_time + + self.num_unresponsive = len(self.unresponsive) + self.num_alive = len(self.alive)
+ + +
+[docs] + @classmethod + def from_output( + cls, host: str, output: str, unresponsive_time: float = 100.0 + ) -> PingResult: + """ + Fill a PingResult from the results of the ping program. + + Parameters + ---------- + host : str + The hostname that ``ping`` was called with. + output : str + The decoded output of the subprocess call. + unresponsive_time : float, optional + Time to use for unresponsive or errored hosts. + + Returns + ------- + PingResult + """ + # NOTE: lazily ignoring non-millisecond-level results here; 1 second+ + # is the same as non-responsive if you ask me... + times = [float(ms) / 1000.0 for ms in PingResult._time_re.findall(output)] + + if not times: + return cls( + result=Result(severity=Severity.error), + alive=[], + unresponsive=[host], + min_time=unresponsive_time, + max_time=unresponsive_time, + times={host: unresponsive_time}, + ) + + return cls( + result=Result(severity=Severity.success), + alive=[host], + unresponsive=[], + min_time=min(times), + max_time=max(times), + times={host: sum(times) / len(times)}, + )
+
+ + + +
+[docs] +def get_result_value_by_key(result: ToolResult, key: str) -> Any: + """ + Retrieve the value indicated by the dotted key name from the ToolResult. + + Supports attributes of generic types, items (for mappings as in + dictionaries), and iterables (by numeric index). + + Parameters + ---------- + result : object + The result dataclass instance. + key : str + The (optionally) dotted key name. + + Raises + ------ + KeyError + If the key is blank or otherwise invalid. + + Returns + ------- + Any + The data found by the key. + """ + if not key: + raise KeyError("No key provided") + + item = result + path = [] + key_parts = key.split(".") + + while key_parts: + key = key_parts.pop(0) + path.append(key) + try: + if isinstance(item, Mapping): + item = item[key] + elif isinstance(item, Sequence): + item = item[int(key)] + else: + item = getattr(item, key) + except KeyError: + path_str = ".".join(path) + raise KeyError( + f"{item} does not have key {key!r} ({path_str})" + ) from None + except AttributeError: + path_str = ".".join(path) + raise KeyError( + f"{item} does not have attribute {key!r} ({path_str})" + ) from None + except Exception: + path_str = ".".join(path) + raise KeyError( + f"{item} does not have {key!r} ({path_str})" + ) + + return item
+ + + +
+[docs] +@dataclass +@serialization.as_tagged_union +class Tool: + """ + Base class for atef tool checks. + """ + +
+[docs] + def check_result_key(self, key: str) -> None: + """ + Check that the result ``key`` is valid for the given tool. + + For example, ``PingResult`` keys can include ``"min_time"``, + ``"max_time"``, and so on. + + Parameters + ---------- + key : str + The key to check. + + Raises + ------ + ValueError + If the key is invalid. + """ + top_level_key, *parts = key.split(".", 1) + # Use the return type of the tool's run() method to tell us the + # ToolResult type: + run_type: ToolResult = typing.get_type_hints(self.run)["return"] + # And then the keys that are defined in its definition: + result_type_hints = typing.get_type_hints(run_type) + valid_keys = list(result_type_hints) + if top_level_key not in valid_keys: + raise ValueError( + f"Invalid result key for tool {self}: {top_level_key!r}. Valid " + f"keys are: {', '.join(valid_keys)}" + ) + + if parts: + top_level_type = result_type_hints[top_level_key] + origin = typing.get_origin(top_level_type) + if origin is None or not issubclass(origin, (Mapping, Sequence)): + raise ValueError( + f"Invalid result key for tool {self}: {top_level_key!r} does " + f"not have sub-keys because it is of type {top_level_type}." + )
+ + +
+[docs] + async def run(self, *args, **kwargs) -> ToolResult: + raise NotImplementedError("To be implemented by subclass")
+
+ + + +
+[docs] +@dataclass +class Ping(Tool): + """ + Tool for pinging one or more hosts and summarizing the results. + """ + #: The hosts to ping. + hosts: List[str] = field(default_factory=list) + #: The number of ping attempts to make per host. + count: int = 3 + #: The assumed output encoding of the 'ping' command. + encoding: str = "utf-8" + + #: Time to report when unresponsive [sec] + _unresponsive_time: ClassVar[float] = 100.0 + +
+[docs] + async def ping(self, host: str) -> PingResult: + """ + Ping the given host. + + Parameters + ---------- + host : str + The host to ping. + + Returns + ------- + PingResult + """ + + # Ensure we don't ping forever: + count = min(self.count, 1) + + if sys.platform == "win32": + args = ("/n", str(count)) + else: + args = ("-c", str(count)) + + ping = shutil.which("ping") + + if ping is None: + raise ToolDependencyMissingException( + "The 'ping' binary is unavailable on the currently-defined " + "PATH" + ) + + proc = await asyncio.create_subprocess_exec( + ping, + *args, + host, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.DEVNULL, + ) + assert proc.stdout is not None + output = await proc.stdout.read() + await proc.wait() + return PingResult.from_output(host, output.decode(self.encoding))
+ + +
+[docs] + async def run(self) -> PingResult: + """ + Run the "Ping" tool with the current settings. + + Returns + ------- + PingResult + """ + result = PingResult(result=Result()) + + if not self.hosts: + return result + + ping_by_host: Dict[str, Union[Exception, PingResult]] = {} + + async def _ping(host: str) -> None: + try: + ping_by_host[host] = await self.ping(host) + except Exception as ex: + ping_by_host[host] = ex + + tasks = [asyncio.create_task(_ping(host)) for host in self.hosts] + + try: + await asyncio.wait(tasks) + except KeyboardInterrupt: + for task in tasks: + task.cancel() + raise + + for host, host_result in ping_by_host.items(): + result.add_host_result( + host, host_result, failure_time=self._unresponsive_time + ) + + return result
+
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/_modules/atef/walk.html b/v1.4.0/_modules/atef/walk.html new file mode 100644 index 00000000..46523e15 --- /dev/null +++ b/v1.4.0/_modules/atef/walk.html @@ -0,0 +1,302 @@ + + + + + + atef.walk — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for atef.walk

+"""
+Helpers for walking dataclasses.
+
+If relying on Prepared dataclass walk methods (walk_groups, walk_comparisons),
+note that if a configuration fails to prepare, they will be skipped
+"""
+from __future__ import annotations
+
+from typing import Generator, List, Tuple, Union
+
+from atef.check import Comparison
+from atef.config import (AnyPreparedConfiguration, Configuration,
+                         PreparedComparison, PreparedConfiguration,
+                         PreparedFile)
+from atef.procedure import (AnyPreparedProcedure, PreparedProcedureFile,
+                            PreparedProcedureStep, ProcedureStep)
+
+
+
+[docs] +def walk_config_file( + config: Union[PreparedFile, PreparedConfiguration, PreparedComparison], + level: int = 0 +) -> Generator[Tuple[Union[AnyPreparedConfiguration, PreparedComparison], int], None, None]: + """ + Yields each config and comparison and its depth + Performs a recursive depth-first search + + Parameters + ---------- + config : Union[PreparedFile, PreparedConfiguration, PreparedComparison] + the configuration or comparison to walk + level : int, optional + the current recursion depth, by default 0 + + Yields + ------ + Generator[Tuple[Any, int], None, None] + """ + yield config, level + if isinstance(config, PreparedFile): + yield from walk_config_file(config.root, level=level+1) + elif isinstance(config, PreparedConfiguration): + if hasattr(config, 'configs'): + for conf in config.configs: + yield from walk_config_file(conf, level=level+1) + if hasattr(config, 'comparisons'): + for comp in config.comparisons: + yield from walk_config_file(comp, level=level+1)
+ + + +
+[docs] +def walk_procedure_file( + config: Union[PreparedProcedureFile, PreparedProcedureStep, PreparedComparison], + level: int = 0 +) -> Generator[Tuple[Union[AnyPreparedProcedure, PreparedComparison], int], None, None]: + """ + Yields each ProcedureStep / Comparison and its depth + Performs a recursive depth-first search + + Parameters + ---------- + config : Union[PreparedProcedureFile, PreparedProcedureStep, + PreparedComparison] + the item to yield and walk through + level : int, optional + the current recursion depth, by default 0 + + Yields + ------ + Generator[Tuple[Any, int], None, None] + """ + yield config, level + if isinstance(config, PreparedProcedureFile): + yield from walk_procedure_file(config.root, level=level+1) + elif isinstance(config, PreparedProcedureStep): + for sub_step in getattr(config, 'steps', []): + yield from walk_procedure_file(sub_step, level=level+1) + if hasattr(config, 'walk_comparisons'): + for sub_comp in config.walk_comparisons(): + yield from walk_procedure_file(sub_comp, level=level+1)
+ + + +
+[docs] +def walk_steps( + step: Union[ProcedureStep, PreparedProcedureStep] +) -> Generator[Union[ProcedureStep, PreparedProcedureStep], None, None]: + """ + Yield ProedureSteps in ``step``, depth-first. + + Parameters + ---------- + step : ProcedureStep + Step to yield ProcedureSteps from + + Yields + ------ + Generator[ProcedureStep, None, None] + """ + yield step + for sub_step in getattr(step, 'steps', []): + yield from walk_steps(sub_step)
+ + + +
+[docs] +def get_prepared_step( + prepared_file: PreparedProcedureFile, + origin: Union[ProcedureStep, Comparison], +) -> List[Union[PreparedProcedureStep, PreparedComparison]]: + """ + Gather all PreparedProcedureStep dataclasses the correspond to the original + ProcedureStep. + If a PreparedProcedureStep also has comparisions, use the walk_comparisons + method to check if the "origin" matches any of thoes comparisons + + Only relevant for active checkouts. + + Parameters + ---------- + prepared_file : PreparedProcedureFile + the PreparedProcedureFile to search through + origin : Union[ProcedureStep, Comparison] + the step / comparison to match + + Returns + ------- + List[Union[PreparedProcedureStep, PreparedComparison]] + the PreparedProcedureStep's or PreparedComparison's related to ``origin`` + """ + # As of the writing of this docstring, this helper is only expected to return + # lists of length 1. However in order to match the passive checkout workflow, + # we still return a list of relevant steps or comparisons. + matched_steps = [] + for pstep in walk_steps(prepared_file.root): + if getattr(pstep, 'origin', None) is origin: + matched_steps.append(pstep) + # check PreparedComparisons, which might be included in some steps + if hasattr(pstep, 'walk_comparisons'): + for comp in pstep.walk_comparisons(): + if comp.comparison is origin: + matched_steps.append(comp) + + return matched_steps
+ + + +
+[docs] +def get_relevant_configs_comps( + prepared_file: PreparedFile, + original_c: Union[Configuration, Comparison] +) -> List[Union[PreparedConfiguration, PreparedComparison]]: + """ + Gather all the PreparedConfiguration or PreparedComparison dataclasses + that correspond to the original comparison or config. + + Phrased another way: maps prepared comparisons onto the comparison + seen in the GUI + + Currently for passive checkout files only + + Parameters + ---------- + prepared_file : PreparedFile + the file containing configs or comparisons to be gathered + original_c : Union[Configuration, Comparison] + the comparison to match PreparedComparison or PreparedConfigurations to + + Returns + ------- + List[Union[PreparedConfiguration, PreparedComparison]]: + the configuration or comparison dataclasses related to ``original_c`` + """ + matched_c = [] + + for config in prepared_file.walk_groups(): + if config.config is original_c: + matched_c.append(config) + + for comp in prepared_file.walk_comparisons(): + if comp.comparison is original_c: + matched_c.append(comp) + + return matched_c
+ +
+ +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/_modules/index.html b/v1.4.0/_modules/index.html new file mode 100644 index 00000000..0a773200 --- /dev/null +++ b/v1.4.0/_modules/index.html @@ -0,0 +1,115 @@ + + + + + + Overview: module code — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +

All modules for which code is available

+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/_sources/api.rst.txt b/v1.4.0/_sources/api.rst.txt new file mode 100644 index 00000000..a71daf7b --- /dev/null +++ b/v1.4.0/_sources/api.rst.txt @@ -0,0 +1,16 @@ +ATEF API +******** + + +Dataclasses +^^^^^^^^^^^ + +.. autosummary:: + :toctree: generated + :recursive: + + atef.check + atef.config + atef.procedure + atef.tools + atef.walk diff --git a/v1.4.0/_sources/framework.rst.txt b/v1.4.0/_sources/framework.rst.txt new file mode 100644 index 00000000..5b059f5f --- /dev/null +++ b/v1.4.0/_sources/framework.rst.txt @@ -0,0 +1,12 @@ +ATEF Framework +************** + +Checkout Structure +^^^^^^^^^^^^^^^^^^ + +To expand on: +- Serializability +- Prepared variants + - Prepared holds transient information (results) +- Passive Checkout Groups +- Active Checkout Verify control flow diff --git a/v1.4.0/_sources/generated/atef.check.rst.txt b/v1.4.0/_sources/generated/atef.check.rst.txt new file mode 100644 index 00000000..153c476f --- /dev/null +++ b/v1.4.0/_sources/generated/atef.check.rst.txt @@ -0,0 +1,39 @@ +atef.check +========== + +.. automodule:: atef.check + + + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: generated + + AnyComparison + AnyValue + BasicDynamic + Comparison + DynamicValue + EpicsValue + Equals + Greater + GreaterOrEqual + HappiValue + Less + LessOrEqual + NotEquals + Range + Value + ValueRange + ValueSet + + + + + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/atef.config.rst.txt b/v1.4.0/_sources/generated/atef.config.rst.txt new file mode 100644 index 00000000..064de37d --- /dev/null +++ b/v1.4.0/_sources/generated/atef.config.rst.txt @@ -0,0 +1,46 @@ +atef.config +=========== + +.. automodule:: atef.config + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: generated + + get_result_from_comparison + run_passive_step + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: generated + + Configuration + ConfigurationFile + ConfigurationGroup + DeviceConfiguration + FailedConfiguration + PVConfiguration + PreparedComparison + PreparedConfiguration + PreparedDeviceConfiguration + PreparedFile + PreparedGroup + PreparedPVConfiguration + PreparedSignalComparison + PreparedToolComparison + PreparedToolConfiguration + ToolConfiguration + + + + + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/atef.procedure.rst.txt b/v1.4.0/_sources/generated/atef.procedure.rst.txt new file mode 100644 index 00000000..cfc51081 --- /dev/null +++ b/v1.4.0/_sources/generated/atef.procedure.rst.txt @@ -0,0 +1,61 @@ +atef.procedure +============== + +.. automodule:: atef.procedure + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: generated + + create_prepared_comparison + get_RE_data + get_bs_state + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: generated + + CodeStep + ComparisonToPlanData + ComparisonToTarget + ConfigurationCheckStep + DescriptionStep + DeviceConfiguration + DisplayOptions + FailedStep + PassiveStep + PlanData + PlanOptions + PlanStep + PreparedDescriptionStep + PreparedPassiveStep + PreparedPlan + PreparedPlanComparison + PreparedPlanStep + PreparedProcedureFile + PreparedProcedureGroup + PreparedProcedureStep + PreparedSetValueStep + PreparedValueToSignal + ProcedureFile + ProcedureGroup + ProcedureStep + PydmDisplayStep + SetValueStep + Target + TyphosDisplayStep + ValueToTarget + + + + + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/atef.tools.rst.txt b/v1.4.0/_sources/generated/atef.tools.rst.txt new file mode 100644 index 00000000..8a58a9f5 --- /dev/null +++ b/v1.4.0/_sources/generated/atef.tools.rst.txt @@ -0,0 +1,33 @@ +atef.tools +========== + +.. automodule:: atef.tools + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: generated + + get_result_value_by_key + + + + + + .. rubric:: Classes + + .. autosummary:: + :toctree: generated + + Ping + PingResult + Tool + ToolResult + + + + + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/atef.walk.rst.txt b/v1.4.0/_sources/generated/atef.walk.rst.txt new file mode 100644 index 00000000..d1acf698 --- /dev/null +++ b/v1.4.0/_sources/generated/atef.walk.rst.txt @@ -0,0 +1,27 @@ +atef.walk +========= + +.. automodule:: atef.walk + + + + .. rubric:: Functions + + .. autosummary:: + :toctree: generated + + get_prepared_step + get_relevant_configs_comps + walk_config_file + walk_procedure_file + walk_steps + + + + + + + + + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.AnyComparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.AnyComparison.rst.txt new file mode 100644 index 00000000..c8d5d737 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.AnyComparison.rst.txt @@ -0,0 +1,39 @@ +atef.check.AnyComparison +======================== + +.. currentmodule:: atef.check + +.. autoclass:: AnyComparison + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + .. automethod:: replace_comparison + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: comparisons + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.AnyValue.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.AnyValue.rst.txt new file mode 100644 index 00000000..0142dc9d --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.AnyValue.rst.txt @@ -0,0 +1,38 @@ +atef.check.AnyValue +=================== + +.. currentmodule:: atef.check + +.. autoclass:: AnyValue + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: values + .. autoattribute:: values_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.BasicDynamic.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.BasicDynamic.rst.txt new file mode 100644 index 00000000..1bb2584e --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.BasicDynamic.rst.txt @@ -0,0 +1,37 @@ +atef.check.BasicDynamic +======================= + +.. currentmodule:: atef.check + +.. autoclass:: BasicDynamic + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: value_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.Comparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.Comparison.rst.txt new file mode 100644 index 00000000..e080ec34 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.Comparison.rst.txt @@ -0,0 +1,36 @@ +atef.check.Comparison +===================== + +.. currentmodule:: atef.check + +.. autoclass:: Comparison + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.DynamicValue.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.DynamicValue.rst.txt new file mode 100644 index 00000000..c2774573 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.DynamicValue.rst.txt @@ -0,0 +1,29 @@ +atef.check.DynamicValue +======================= + +.. currentmodule:: atef.check + +.. autoclass:: DynamicValue + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: get + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: string + .. autoattribute:: value + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.EpicsValue.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.EpicsValue.rst.txt new file mode 100644 index 00000000..95096919 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.EpicsValue.rst.txt @@ -0,0 +1,30 @@ +atef.check.EpicsValue +===================== + +.. currentmodule:: atef.check + +.. autoclass:: EpicsValue + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: get + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: pvname + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: string + .. autoattribute:: value + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.Equals.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.Equals.rst.txt new file mode 100644 index 00000000..607be14a --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.Equals.rst.txt @@ -0,0 +1,40 @@ +atef.check.Equals +================= + +.. currentmodule:: atef.check + +.. autoclass:: Equals + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: atol + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: rtol + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: value + .. autoattribute:: value_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.Greater.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.Greater.rst.txt new file mode 100644 index 00000000..36ffbd9b --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.Greater.rst.txt @@ -0,0 +1,38 @@ +atef.check.Greater +================== + +.. currentmodule:: atef.check + +.. autoclass:: Greater + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: value + .. autoattribute:: value_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.GreaterOrEqual.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.GreaterOrEqual.rst.txt new file mode 100644 index 00000000..2f31ab9c --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.GreaterOrEqual.rst.txt @@ -0,0 +1,38 @@ +atef.check.GreaterOrEqual +========================= + +.. currentmodule:: atef.check + +.. autoclass:: GreaterOrEqual + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: value + .. autoattribute:: value_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.HappiValue.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.HappiValue.rst.txt new file mode 100644 index 00000000..c5672d84 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.HappiValue.rst.txt @@ -0,0 +1,31 @@ +atef.check.HappiValue +===================== + +.. currentmodule:: atef.check + +.. autoclass:: HappiValue + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: get + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: device_name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: signal_attr + .. autoattribute:: string + .. autoattribute:: value + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.Less.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.Less.rst.txt new file mode 100644 index 00000000..9eaa7911 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.Less.rst.txt @@ -0,0 +1,38 @@ +atef.check.Less +=============== + +.. currentmodule:: atef.check + +.. autoclass:: Less + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: value + .. autoattribute:: value_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.LessOrEqual.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.LessOrEqual.rst.txt new file mode 100644 index 00000000..3fde1ae4 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.LessOrEqual.rst.txt @@ -0,0 +1,38 @@ +atef.check.LessOrEqual +====================== + +.. currentmodule:: atef.check + +.. autoclass:: LessOrEqual + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: value + .. autoattribute:: value_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.NotEquals.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.NotEquals.rst.txt new file mode 100644 index 00000000..b96d11b5 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.NotEquals.rst.txt @@ -0,0 +1,40 @@ +atef.check.NotEquals +==================== + +.. currentmodule:: atef.check + +.. autoclass:: NotEquals + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: atol + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: rtol + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: value + .. autoattribute:: value_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.Range.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.Range.rst.txt new file mode 100644 index 00000000..78c3cf78 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.Range.rst.txt @@ -0,0 +1,46 @@ +atef.check.Range +================ + +.. currentmodule:: atef.check + +.. autoclass:: Range + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: high + .. autoattribute:: high_dynamic + .. autoattribute:: if_disconnected + .. autoattribute:: inclusive + .. autoattribute:: invert + .. autoattribute:: low + .. autoattribute:: low_dynamic + .. autoattribute:: name + .. autoattribute:: ranges + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: warn_high + .. autoattribute:: warn_high_dynamic + .. autoattribute:: warn_low + .. autoattribute:: warn_low_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.Value.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.Value.rst.txt new file mode 100644 index 00000000..2cae7d67 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.Value.rst.txt @@ -0,0 +1,30 @@ +atef.check.Value +================ + +.. currentmodule:: atef.check + +.. autoclass:: Value + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: get + + + + + + .. rubric:: Attributes + + + .. autoattribute:: atol + .. autoattribute:: description + .. autoattribute:: rtol + .. autoattribute:: severity + .. autoattribute:: value + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.ValueRange.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.ValueRange.rst.txt new file mode 100644 index 00000000..f757fee4 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.ValueRange.rst.txt @@ -0,0 +1,30 @@ +atef.check.ValueRange +===================== + +.. currentmodule:: atef.check + +.. autoclass:: ValueRange + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: in_range + .. autoattribute:: inclusive + .. autoattribute:: severity + .. autoattribute:: low + .. autoattribute:: high + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.check.ValueSet.rst.txt b/v1.4.0/_sources/generated/generated/atef.check.ValueSet.rst.txt new file mode 100644 index 00000000..19fc7c5c --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.check.ValueSet.rst.txt @@ -0,0 +1,38 @@ +atef.check.ValueSet +=================== + +.. currentmodule:: atef.check + +.. autoclass:: ValueSet + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: describe + .. automethod:: get_data_for_signal + .. automethod:: get_data_for_signal_async + .. automethod:: prepare + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: if_disconnected + .. autoattribute:: invert + .. autoattribute:: name + .. autoattribute:: reduce_method + .. autoattribute:: reduce_period + .. autoattribute:: severity_on_failure + .. autoattribute:: string + .. autoattribute:: values + .. autoattribute:: values_dynamic + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.Configuration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.Configuration.rst.txt new file mode 100644 index 00000000..88f2d05c --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.Configuration.rst.txt @@ -0,0 +1,29 @@ +atef.config.Configuration +========================= + +.. currentmodule:: atef.config + +.. autoclass:: Configuration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: move_comparison + .. automethod:: replace_comparison + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: tags + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.ConfigurationFile.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.ConfigurationFile.rst.txt new file mode 100644 index 00000000..5b12d1d4 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.ConfigurationFile.rst.txt @@ -0,0 +1,35 @@ +atef.config.ConfigurationFile +============================= + +.. currentmodule:: atef.config + +.. autoclass:: ConfigurationFile + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: from_filename + .. automethod:: from_json + .. automethod:: from_yaml + .. automethod:: get_by_device + .. automethod:: get_by_pv + .. automethod:: get_by_tag + .. automethod:: to_json + .. automethod:: to_yaml + .. automethod:: walk_configs + + + + + + .. rubric:: Attributes + + + .. autoattribute:: version + .. autoattribute:: root + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.ConfigurationGroup.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.ConfigurationGroup.rst.txt new file mode 100644 index 00000000..37767db9 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.ConfigurationGroup.rst.txt @@ -0,0 +1,33 @@ +atef.config.ConfigurationGroup +============================== + +.. currentmodule:: atef.config + +.. autoclass:: ConfigurationGroup + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: move_comparison + .. automethod:: replace_comparison + .. automethod:: walk_configs + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: mode + .. autoattribute:: name + .. autoattribute:: tags + .. autoattribute:: configs + .. autoattribute:: values + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.DeviceConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.DeviceConfiguration.rst.txt new file mode 100644 index 00000000..fbf9bf81 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.DeviceConfiguration.rst.txt @@ -0,0 +1,32 @@ +atef.config.DeviceConfiguration +=============================== + +.. currentmodule:: atef.config + +.. autoclass:: DeviceConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: move_comparison + .. automethod:: replace_comparison + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: tags + .. autoattribute:: devices + .. autoattribute:: by_attr + .. autoattribute:: shared + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.FailedConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.FailedConfiguration.rst.txt new file mode 100644 index 00000000..11e7b287 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.FailedConfiguration.rst.txt @@ -0,0 +1,27 @@ +atef.config.FailedConfiguration +=============================== + +.. currentmodule:: atef.config + +.. autoclass:: FailedConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + + + + + + .. rubric:: Attributes + + + .. autoattribute:: exception + .. autoattribute:: parent + .. autoattribute:: config + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PVConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PVConfiguration.rst.txt new file mode 100644 index 00000000..91253104 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PVConfiguration.rst.txt @@ -0,0 +1,31 @@ +atef.config.PVConfiguration +=========================== + +.. currentmodule:: atef.config + +.. autoclass:: PVConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: move_comparison + .. automethod:: replace_comparison + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: tags + .. autoattribute:: by_pv + .. autoattribute:: shared + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedComparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedComparison.rst.txt new file mode 100644 index 00000000..fd39eb03 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedComparison.rst.txt @@ -0,0 +1,31 @@ +atef.config.PreparedComparison +============================== + +.. currentmodule:: atef.config + +.. autoclass:: PreparedComparison + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: get_data_async + + + + + + .. rubric:: Attributes + + + .. autoattribute:: identifier + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: cache + .. autoattribute:: comparison + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedConfiguration.rst.txt new file mode 100644 index 00000000..a5be516e --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedConfiguration.rst.txt @@ -0,0 +1,32 @@ +atef.config.PreparedConfiguration +================================= + +.. currentmodule:: atef.config + +.. autoclass:: PreparedConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_config + .. automethod:: walk_comparisons + + + + + + .. rubric:: Attributes + + + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: cache + .. autoattribute:: comparisons + .. autoattribute:: prepare_failures + .. autoattribute:: combined_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedDeviceConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedDeviceConfiguration.rst.txt new file mode 100644 index 00000000..52a66644 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedDeviceConfiguration.rst.txt @@ -0,0 +1,35 @@ +atef.config.PreparedDeviceConfiguration +======================================= + +.. currentmodule:: atef.config + +.. autoclass:: PreparedDeviceConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_config + .. automethod:: from_device + .. automethod:: walk_comparisons + + + + + + .. rubric:: Attributes + + + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: config + .. autoattribute:: devices + .. autoattribute:: comparisons + .. autoattribute:: prepare_failures + .. autoattribute:: cache + .. autoattribute:: combined_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedFile.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedFile.rst.txt new file mode 100644 index 00000000..a9981435 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedFile.rst.txt @@ -0,0 +1,33 @@ +atef.config.PreparedFile +======================== + +.. currentmodule:: atef.config + +.. autoclass:: PreparedFile + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: compare + .. automethod:: fill_cache + .. automethod:: from_config + .. automethod:: walk_comparisons + .. automethod:: walk_groups + + + + + + .. rubric:: Attributes + + + .. autoattribute:: cache + .. autoattribute:: file + .. autoattribute:: client + .. autoattribute:: root + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedGroup.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedGroup.rst.txt new file mode 100644 index 00000000..520def74 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedGroup.rst.txt @@ -0,0 +1,37 @@ +atef.config.PreparedGroup +========================= + +.. currentmodule:: atef.config + +.. autoclass:: PreparedGroup + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_config + .. automethod:: get_value_by_name + .. automethod:: walk_comparisons + .. automethod:: walk_groups + + + + + + .. rubric:: Attributes + + + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: subgroups + .. autoattribute:: config + .. autoattribute:: configs + .. autoattribute:: prepare_failures + .. autoattribute:: cache + .. autoattribute:: comparisons + .. autoattribute:: combined_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedPVConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedPVConfiguration.rst.txt new file mode 100644 index 00000000..05eb7e4e --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedPVConfiguration.rst.txt @@ -0,0 +1,34 @@ +atef.config.PreparedPVConfiguration +=================================== + +.. currentmodule:: atef.config + +.. autoclass:: PreparedPVConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_config + .. automethod:: from_pvs + .. automethod:: walk_comparisons + + + + + + .. rubric:: Attributes + + + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: config + .. autoattribute:: comparisons + .. autoattribute:: prepare_failures + .. autoattribute:: cache + .. autoattribute:: combined_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedSignalComparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedSignalComparison.rst.txt new file mode 100644 index 00000000..0436ea2b --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedSignalComparison.rst.txt @@ -0,0 +1,37 @@ +atef.config.PreparedSignalComparison +==================================== + +.. currentmodule:: atef.config + +.. autoclass:: PreparedSignalComparison + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_device + .. automethod:: from_pvname + .. automethod:: from_signal + .. automethod:: get_data_async + + + + + + .. rubric:: Attributes + + + .. autoattribute:: data + .. autoattribute:: device + .. autoattribute:: identifier + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: signal + .. autoattribute:: cache + .. autoattribute:: comparison + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedToolComparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedToolComparison.rst.txt new file mode 100644 index 00000000..df071376 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedToolComparison.rst.txt @@ -0,0 +1,33 @@ +atef.config.PreparedToolComparison +================================== + +.. currentmodule:: atef.config + +.. autoclass:: PreparedToolComparison + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_tool + .. automethod:: get_data_async + + + + + + .. rubric:: Attributes + + + .. autoattribute:: identifier + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: tool + .. autoattribute:: cache + .. autoattribute:: comparison + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.PreparedToolConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.PreparedToolConfiguration.rst.txt new file mode 100644 index 00000000..0cad5dfc --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.PreparedToolConfiguration.rst.txt @@ -0,0 +1,34 @@ +atef.config.PreparedToolConfiguration +===================================== + +.. currentmodule:: atef.config + +.. autoclass:: PreparedToolConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_config + .. automethod:: from_tool + .. automethod:: walk_comparisons + + + + + + .. rubric:: Attributes + + + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: config + .. autoattribute:: comparisons + .. autoattribute:: prepare_failures + .. autoattribute:: cache + .. autoattribute:: combined_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.ToolConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.ToolConfiguration.rst.txt new file mode 100644 index 00000000..8aae248e --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.ToolConfiguration.rst.txt @@ -0,0 +1,32 @@ +atef.config.ToolConfiguration +============================= + +.. currentmodule:: atef.config + +.. autoclass:: ToolConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: move_comparison + .. automethod:: replace_comparison + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: tags + .. autoattribute:: tool + .. autoattribute:: by_attr + .. autoattribute:: shared + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.get_result_from_comparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.get_result_from_comparison.rst.txt new file mode 100644 index 00000000..528d3044 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.get_result_from_comparison.rst.txt @@ -0,0 +1,6 @@ +atef.config.get\_result\_from\_comparison +========================================= + +.. currentmodule:: atef.config + +.. autofunction:: get_result_from_comparison \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.config.run_passive_step.rst.txt b/v1.4.0/_sources/generated/generated/atef.config.run_passive_step.rst.txt new file mode 100644 index 00000000..486439df --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.config.run_passive_step.rst.txt @@ -0,0 +1,6 @@ +atef.config.run\_passive\_step +============================== + +.. currentmodule:: atef.config + +.. autofunction:: run_passive_step \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.CodeStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.CodeStep.rst.txt new file mode 100644 index 00000000..c1e3d69f --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.CodeStep.rst.txt @@ -0,0 +1,32 @@ +atef.procedure.CodeStep +======================= + +.. currentmodule:: atef.procedure + +.. autoclass:: CodeStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: source_code + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: arguments + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.ComparisonToPlanData.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.ComparisonToPlanData.rst.txt new file mode 100644 index 00000000..b6de70c5 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.ComparisonToPlanData.rst.txt @@ -0,0 +1,30 @@ +atef.procedure.ComparisonToPlanData +=================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: ComparisonToPlanData + + + + .. rubric:: Methods + + + .. automethod:: __init__ + + + + + + .. rubric:: Attributes + + + .. autoattribute:: comparison + .. autoattribute:: name + .. autoattribute:: plan_id + .. autoattribute:: plan_no + .. autoattribute:: reduction_mode + .. autoattribute:: data_points + .. autoattribute:: field_names + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.ComparisonToTarget.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.ComparisonToTarget.rst.txt new file mode 100644 index 00000000..de2659db --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.ComparisonToTarget.rst.txt @@ -0,0 +1,29 @@ +atef.procedure.ComparisonToTarget +================================= + +.. currentmodule:: atef.procedure + +.. autoclass:: ComparisonToTarget + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: to_signal + + + + + + .. rubric:: Attributes + + + .. autoattribute:: attr + .. autoattribute:: comparison + .. autoattribute:: device + .. autoattribute:: name + .. autoattribute:: pv + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.ConfigurationCheckStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.ConfigurationCheckStep.rst.txt new file mode 100644 index 00000000..999ab7d5 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.ConfigurationCheckStep.rst.txt @@ -0,0 +1,31 @@ +atef.procedure.ConfigurationCheckStep +===================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: ConfigurationCheckStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: devices + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.DescriptionStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.DescriptionStep.rst.txt new file mode 100644 index 00000000..bbe0766d --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.DescriptionStep.rst.txt @@ -0,0 +1,30 @@ +atef.procedure.DescriptionStep +============================== + +.. currentmodule:: atef.procedure + +.. autoclass:: DescriptionStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.DeviceConfiguration.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.DeviceConfiguration.rst.txt new file mode 100644 index 00000000..90752221 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.DeviceConfiguration.rst.txt @@ -0,0 +1,25 @@ +atef.procedure.DeviceConfiguration +================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: DeviceConfiguration + + + + .. rubric:: Methods + + + .. automethod:: __init__ + + + + + + .. rubric:: Attributes + + + .. autoattribute:: archiver_timestamp + .. autoattribute:: values + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.DisplayOptions.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.DisplayOptions.rst.txt new file mode 100644 index 00000000..9fcb076b --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.DisplayOptions.rst.txt @@ -0,0 +1,26 @@ +atef.procedure.DisplayOptions +============================= + +.. currentmodule:: atef.procedure + +.. autoclass:: DisplayOptions + + + + .. rubric:: Methods + + + .. automethod:: __init__ + + + + + + .. rubric:: Attributes + + + .. autoattribute:: embed + .. autoattribute:: template + .. autoattribute:: macros + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.FailedStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.FailedStep.rst.txt new file mode 100644 index 00000000..56fffd9f --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.FailedStep.rst.txt @@ -0,0 +1,30 @@ +atef.procedure.FailedStep +========================= + +.. currentmodule:: atef.procedure + +.. autoclass:: FailedStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + + + + + + .. rubric:: Attributes + + + .. autoattribute:: exception + .. autoattribute:: result + .. autoattribute:: parent + .. autoattribute:: origin + .. autoattribute:: combined_result + .. autoattribute:: verify_result + .. autoattribute:: step_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PassiveStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PassiveStep.rst.txt new file mode 100644 index 00000000..106f0b06 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PassiveStep.rst.txt @@ -0,0 +1,31 @@ +atef.procedure.PassiveStep +========================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PassiveStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: filepath + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PlanData.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PlanData.rst.txt new file mode 100644 index 00000000..94955cb5 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PlanData.rst.txt @@ -0,0 +1,29 @@ +atef.procedure.PlanData +======================= + +.. currentmodule:: atef.procedure + +.. autoclass:: PlanData + + + + .. rubric:: Methods + + + .. automethod:: __init__ + + + + + + .. rubric:: Attributes + + + .. autoattribute:: name + .. autoattribute:: plan_id + .. autoattribute:: plan_no + .. autoattribute:: reduction_mode + .. autoattribute:: data_points + .. autoattribute:: field_names + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PlanOptions.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PlanOptions.rst.txt new file mode 100644 index 00000000..ff5e8e16 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PlanOptions.rst.txt @@ -0,0 +1,29 @@ +atef.procedure.PlanOptions +========================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PlanOptions + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: to_plan_item + + + + + + .. rubric:: Attributes + + + .. autoattribute:: fixed_arguments + .. autoattribute:: name + .. autoattribute:: plan + .. autoattribute:: args + .. autoattribute:: kwargs + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PlanStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PlanStep.rst.txt new file mode 100644 index 00000000..e4f33054 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PlanStep.rst.txt @@ -0,0 +1,35 @@ +atef.procedure.PlanStep +======================= + +.. currentmodule:: atef.procedure + +.. autoclass:: PlanStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: destination + .. autoattribute:: halt_on_fail + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: require_plan_success + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: plans + .. autoattribute:: checks + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedDescriptionStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedDescriptionStep.rst.txt new file mode 100644 index 00000000..e15e32fc --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedDescriptionStep.rst.txt @@ -0,0 +1,32 @@ +atef.procedure.PreparedDescriptionStep +====================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedDescriptionStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: origin + .. autoattribute:: combined_result + .. autoattribute:: verify_result + .. autoattribute:: step_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPassiveStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPassiveStep.rst.txt new file mode 100644 index 00000000..754d2c1f --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPassiveStep.rst.txt @@ -0,0 +1,33 @@ +atef.procedure.PreparedPassiveStep +================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedPassiveStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: prepared_passive_file + .. autoattribute:: result + .. autoattribute:: origin + .. autoattribute:: combined_result + .. autoattribute:: verify_result + .. autoattribute:: step_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlan.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlan.rst.txt new file mode 100644 index 00000000..4a5ef143 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlan.rst.txt @@ -0,0 +1,32 @@ +atef.procedure.PreparedPlan +=========================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedPlan + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: bs_state + .. autoattribute:: parent + .. autoattribute:: plan_id + .. autoattribute:: name + .. autoattribute:: origin + .. autoattribute:: item + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlanComparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlanComparison.rst.txt new file mode 100644 index 00000000..d9b42f11 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlanComparison.rst.txt @@ -0,0 +1,34 @@ +atef.procedure.PreparedPlanComparison +===================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedPlanComparison + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: compare + .. automethod:: from_comp_to_plan + .. automethod:: get_data_async + + + + + + .. rubric:: Attributes + + + .. autoattribute:: data + .. autoattribute:: identifier + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: plan_data + .. autoattribute:: cache + .. autoattribute:: comparison + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlanStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlanStep.rst.txt new file mode 100644 index 00000000..5d65b8e6 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedPlanStep.rst.txt @@ -0,0 +1,36 @@ +atef.procedure.PreparedPlanStep +=============================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedPlanStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: origin + .. autoattribute:: prepared_plans + .. autoattribute:: prepared_plan_failures + .. autoattribute:: prepared_checks + .. autoattribute:: prepared_checks_failures + .. autoattribute:: combined_result + .. autoattribute:: verify_result + .. autoattribute:: step_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureFile.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureFile.rst.txt new file mode 100644 index 00000000..70a75ccc --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureFile.rst.txt @@ -0,0 +1,27 @@ +atef.procedure.PreparedProcedureFile +==================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedProcedureFile + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: file + .. autoattribute:: root + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureGroup.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureGroup.rst.txt new file mode 100644 index 00000000..41d7c772 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureGroup.rst.txt @@ -0,0 +1,35 @@ +atef.procedure.PreparedProcedureGroup +===================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedProcedureGroup + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + .. automethod:: walk_steps + + + + + + .. rubric:: Attributes + + + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: steps + .. autoattribute:: prepare_failures + .. autoattribute:: origin + .. autoattribute:: combined_result + .. autoattribute:: verify_result + .. autoattribute:: step_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureStep.rst.txt new file mode 100644 index 00000000..087f63dc --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedProcedureStep.rst.txt @@ -0,0 +1,32 @@ +atef.procedure.PreparedProcedureStep +==================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedProcedureStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: origin + .. autoattribute:: combined_result + .. autoattribute:: verify_result + .. autoattribute:: step_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedSetValueStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedSetValueStep.rst.txt new file mode 100644 index 00000000..1304f99c --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedSetValueStep.rst.txt @@ -0,0 +1,35 @@ +atef.procedure.PreparedSetValueStep +=================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedSetValueStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + .. automethod:: walk_comparisons + + + + + + .. rubric:: Attributes + + + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: result + .. autoattribute:: prepared_actions + .. autoattribute:: prepared_criteria + .. autoattribute:: origin + .. autoattribute:: combined_result + .. autoattribute:: verify_result + .. autoattribute:: step_result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PreparedValueToSignal.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedValueToSignal.rst.txt new file mode 100644 index 00000000..e507a07f --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PreparedValueToSignal.rst.txt @@ -0,0 +1,31 @@ +atef.procedure.PreparedValueToSignal +==================================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PreparedValueToSignal + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: from_origin + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: parent + .. autoattribute:: name + .. autoattribute:: signal + .. autoattribute:: value + .. autoattribute:: origin + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureFile.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureFile.rst.txt new file mode 100644 index 00000000..69adedab --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureFile.rst.txt @@ -0,0 +1,32 @@ +atef.procedure.ProcedureFile +============================ + +.. currentmodule:: atef.procedure + +.. autoclass:: ProcedureFile + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: children + .. automethod:: from_filename + .. automethod:: from_json + .. automethod:: from_yaml + .. automethod:: to_json + .. automethod:: to_yaml + .. automethod:: walk_steps + + + + + + .. rubric:: Attributes + + + .. autoattribute:: version + .. autoattribute:: root + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureGroup.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureGroup.rst.txt new file mode 100644 index 00000000..337e63c4 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureGroup.rst.txt @@ -0,0 +1,33 @@ +atef.procedure.ProcedureGroup +============================= + +.. currentmodule:: atef.procedure + +.. autoclass:: ProcedureGroup + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + .. automethod:: replace_step + .. automethod:: walk_steps + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: steps + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureStep.rst.txt new file mode 100644 index 00000000..c0cb5a73 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.ProcedureStep.rst.txt @@ -0,0 +1,30 @@ +atef.procedure.ProcedureStep +============================ + +.. currentmodule:: atef.procedure + +.. autoclass:: ProcedureStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.PydmDisplayStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.PydmDisplayStep.rst.txt new file mode 100644 index 00000000..f3a5fa7e --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.PydmDisplayStep.rst.txt @@ -0,0 +1,32 @@ +atef.procedure.PydmDisplayStep +============================== + +.. currentmodule:: atef.procedure + +.. autoclass:: PydmDisplayStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: display + .. autoattribute:: options + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.SetValueStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.SetValueStep.rst.txt new file mode 100644 index 00000000..569afc37 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.SetValueStep.rst.txt @@ -0,0 +1,35 @@ +atef.procedure.SetValueStep +=========================== + +.. currentmodule:: atef.procedure + +.. autoclass:: SetValueStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + .. automethod:: replace_comparison + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: halt_on_fail + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: require_action_success + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: actions + .. autoattribute:: success_criteria + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.Target.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.Target.rst.txt new file mode 100644 index 00000000..42a9ddac --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.Target.rst.txt @@ -0,0 +1,28 @@ +atef.procedure.Target +===================== + +.. currentmodule:: atef.procedure + +.. autoclass:: Target + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: to_signal + + + + + + .. rubric:: Attributes + + + .. autoattribute:: attr + .. autoattribute:: device + .. autoattribute:: name + .. autoattribute:: pv + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.TyphosDisplayStep.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.TyphosDisplayStep.rst.txt new file mode 100644 index 00000000..82d92743 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.TyphosDisplayStep.rst.txt @@ -0,0 +1,31 @@ +atef.procedure.TyphosDisplayStep +================================ + +.. currentmodule:: atef.procedure + +.. autoclass:: TyphosDisplayStep + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: allow_verify + .. automethod:: children + + + + + + .. rubric:: Attributes + + + .. autoattribute:: description + .. autoattribute:: name + .. autoattribute:: parent + .. autoattribute:: step_success_required + .. autoattribute:: verify_required + .. autoattribute:: devices + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.ValueToTarget.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.ValueToTarget.rst.txt new file mode 100644 index 00000000..d45df891 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.ValueToTarget.rst.txt @@ -0,0 +1,31 @@ +atef.procedure.ValueToTarget +============================ + +.. currentmodule:: atef.procedure + +.. autoclass:: ValueToTarget + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: to_signal + + + + + + .. rubric:: Attributes + + + .. autoattribute:: attr + .. autoattribute:: device + .. autoattribute:: name + .. autoattribute:: pv + .. autoattribute:: settle_time + .. autoattribute:: timeout + .. autoattribute:: value + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.create_prepared_comparison.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.create_prepared_comparison.rst.txt new file mode 100644 index 00000000..579cabc5 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.create_prepared_comparison.rst.txt @@ -0,0 +1,6 @@ +atef.procedure.create\_prepared\_comparison +=========================================== + +.. currentmodule:: atef.procedure + +.. autofunction:: create_prepared_comparison \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.get_RE_data.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.get_RE_data.rst.txt new file mode 100644 index 00000000..b5c88043 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.get_RE_data.rst.txt @@ -0,0 +1,6 @@ +atef.procedure.get\_RE\_data +============================ + +.. currentmodule:: atef.procedure + +.. autofunction:: get_RE_data \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.procedure.get_bs_state.rst.txt b/v1.4.0/_sources/generated/generated/atef.procedure.get_bs_state.rst.txt new file mode 100644 index 00000000..c09d2509 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.procedure.get_bs_state.rst.txt @@ -0,0 +1,6 @@ +atef.procedure.get\_bs\_state +============================= + +.. currentmodule:: atef.procedure + +.. autofunction:: get_bs_state \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.tools.Ping.rst.txt b/v1.4.0/_sources/generated/generated/atef.tools.Ping.rst.txt new file mode 100644 index 00000000..e24f005e --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.tools.Ping.rst.txt @@ -0,0 +1,29 @@ +atef.tools.Ping +=============== + +.. currentmodule:: atef.tools + +.. autoclass:: Ping + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: check_result_key + .. automethod:: ping + .. automethod:: run + + + + + + .. rubric:: Attributes + + + .. autoattribute:: count + .. autoattribute:: encoding + .. autoattribute:: hosts + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.tools.PingResult.rst.txt b/v1.4.0/_sources/generated/generated/atef.tools.PingResult.rst.txt new file mode 100644 index 00000000..c1ea33f7 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.tools.PingResult.rst.txt @@ -0,0 +1,33 @@ +atef.tools.PingResult +===================== + +.. currentmodule:: atef.tools + +.. autoclass:: PingResult + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: add_host_result + .. automethod:: from_output + + + + + + .. rubric:: Attributes + + + .. autoattribute:: max_time + .. autoattribute:: min_time + .. autoattribute:: num_alive + .. autoattribute:: num_unresponsive + .. autoattribute:: alive + .. autoattribute:: unresponsive + .. autoattribute:: times + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.tools.Tool.rst.txt b/v1.4.0/_sources/generated/generated/atef.tools.Tool.rst.txt new file mode 100644 index 00000000..2f369ebd --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.tools.Tool.rst.txt @@ -0,0 +1,21 @@ +atef.tools.Tool +=============== + +.. currentmodule:: atef.tools + +.. autoclass:: Tool + + + + .. rubric:: Methods + + + .. automethod:: __init__ + .. automethod:: check_result_key + .. automethod:: run + + + + + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.tools.ToolResult.rst.txt b/v1.4.0/_sources/generated/generated/atef.tools.ToolResult.rst.txt new file mode 100644 index 00000000..0226c6fc --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.tools.ToolResult.rst.txt @@ -0,0 +1,24 @@ +atef.tools.ToolResult +===================== + +.. currentmodule:: atef.tools + +.. autoclass:: ToolResult + + + + .. rubric:: Methods + + + .. automethod:: __init__ + + + + + + .. rubric:: Attributes + + + .. autoattribute:: result + + \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.tools.get_result_value_by_key.rst.txt b/v1.4.0/_sources/generated/generated/atef.tools.get_result_value_by_key.rst.txt new file mode 100644 index 00000000..3431938c --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.tools.get_result_value_by_key.rst.txt @@ -0,0 +1,6 @@ +atef.tools.get\_result\_value\_by\_key +====================================== + +.. currentmodule:: atef.tools + +.. autofunction:: get_result_value_by_key \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.walk.get_prepared_step.rst.txt b/v1.4.0/_sources/generated/generated/atef.walk.get_prepared_step.rst.txt new file mode 100644 index 00000000..4e569300 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.walk.get_prepared_step.rst.txt @@ -0,0 +1,6 @@ +atef.walk.get\_prepared\_step +============================= + +.. currentmodule:: atef.walk + +.. autofunction:: get_prepared_step \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.walk.get_relevant_configs_comps.rst.txt b/v1.4.0/_sources/generated/generated/atef.walk.get_relevant_configs_comps.rst.txt new file mode 100644 index 00000000..1a5c1d03 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.walk.get_relevant_configs_comps.rst.txt @@ -0,0 +1,6 @@ +atef.walk.get\_relevant\_configs\_comps +======================================= + +.. currentmodule:: atef.walk + +.. autofunction:: get_relevant_configs_comps \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.walk.walk_config_file.rst.txt b/v1.4.0/_sources/generated/generated/atef.walk.walk_config_file.rst.txt new file mode 100644 index 00000000..1a0428fd --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.walk.walk_config_file.rst.txt @@ -0,0 +1,6 @@ +atef.walk.walk\_config\_file +============================ + +.. currentmodule:: atef.walk + +.. autofunction:: walk_config_file \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.walk.walk_procedure_file.rst.txt b/v1.4.0/_sources/generated/generated/atef.walk.walk_procedure_file.rst.txt new file mode 100644 index 00000000..5b34ff80 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.walk.walk_procedure_file.rst.txt @@ -0,0 +1,6 @@ +atef.walk.walk\_procedure\_file +=============================== + +.. currentmodule:: atef.walk + +.. autofunction:: walk_procedure_file \ No newline at end of file diff --git a/v1.4.0/_sources/generated/generated/atef.walk.walk_steps.rst.txt b/v1.4.0/_sources/generated/generated/atef.walk.walk_steps.rst.txt new file mode 100644 index 00000000..eef9f899 --- /dev/null +++ b/v1.4.0/_sources/generated/generated/atef.walk.walk_steps.rst.txt @@ -0,0 +1,6 @@ +atef.walk.walk\_steps +===================== + +.. currentmodule:: atef.walk + +.. autofunction:: walk_steps \ No newline at end of file diff --git a/v1.4.0/_sources/index.rst.txt b/v1.4.0/_sources/index.rst.txt new file mode 100644 index 00000000..b4f799bc --- /dev/null +++ b/v1.4.0/_sources/index.rst.txt @@ -0,0 +1,50 @@ +ATEF - Automated Test Execution Framework +========================================= + +Disclaimer +^^^^^^^^^^ + +ATEF is still in beta; features are still in development and bugs may have slipped +through. If you have any feedback, we would very much appreciate you leaving an +issue in our `github repository `_. + +Background +^^^^^^^^^^ + +Atef is an initialism that stands for "Automated Test Execution Framework." +Atef is meant to be a framework tailored for automating checkout and diagnostic +procedures using the control system. It will provide functionality for +automating checkout procedures, and the collection of the results of those +checkout procedures. The concept is to provide a way for everyone to build +checkout procedures that can be run in the control system easily, and +consistently. It is meant to address the dynamic nature of the entire system +(the LCLS machine), by providing a way to establish and routinely verify a +performance baseline. The project seeks to combine the best practices and +features of software testing automation, and our favorite control system +automation packages together to form a powerful tool for maintaining our +systems. + + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + api.rst + releases.rst + upcoming_changes.rst + +.. toctree:: + :maxdepth: 1 + :caption: Links + :hidden: + + Github Repository + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/v1.4.0/_sources/releases.rst.txt b/v1.4.0/_sources/releases.rst.txt new file mode 100644 index 00000000..d5f71620 --- /dev/null +++ b/v1.4.0/_sources/releases.rst.txt @@ -0,0 +1,160 @@ +Release History +############### + + +v1.4.0 (2024-02-20) +=================== + +Features +-------- +- Adds script for converting pmgr configurations to atef checks. +- Adds `PagedTableWidget`, and applies it to passive checkout group pages to substantially improve the loading performance of group pages with many, many comparisons. + +Bugfixes +-------- +- Catch RuntimeErrors from widget deletion during enum filling +- Avoid running deleteLater on widgets that garbage collection handles, preventing segfaults + +Maintenance +----------- +- Make selection behavior more consistent by using `QTreeView.setCurrentIndex()` instead of manipulating the selection model +- adds `atef scripts` subcommand for invoking existing scripts. Includes `converter_v0` and `pmgr_check` scripts. + +Contributors +------------ +- tangkong + + + +v1.3.0 (2023-12-19) +=================== + +Features +-------- +- Adds results summary page accessible from run-mode in the `atef config` GUI +- Adds icons to run-mode tree view +- Adds page widget cache and lazy loading functionality to the atef config GUI + +Bugfixes +-------- +- :class:`~atef.widgets.config.data_passive.RangeWidget`'s visualizations update a bit more frequently, and also the label text actually updates. Closes #212 +- Adds a menu option to open the welcome tab, since people like it. Closes #201 +- Properly shows an error message box when a file can't be opened. Closes #202 +- Allow tolerances to be `None` in `Equals` comparison. Modifies the line-edit setup to allow null values (`''`, `None`) when casting the line edit value. Closes #128 + +Maintenance +----------- +- Make comparisons against enum signals more robust by trying both the int and string versions if the check fails. +- Refactors tree-walking helpers to a separate submodle (`atef.walk`) +- Replaces use of `functools.partial` with `WeakPartialMethodSlot` in qt slots, cleaning up intermittent test suite failures (and hopefully production crashes) +- Refactors GUI backend to support lazy page loading +- Move tree-building logic to dataclasses +- Consolidate GUI backend classes (`EditTree` / `RunTree` -> `DualTree`, `AtefItem` / `TreeItem` -> `TreeItem`) + +Contributors +------------ +- tangkong + + + +v1.2.0 (2023-09-27) +=================== + +Features +-------- +- Adds :class:`~atef.widgets.config.utils.ScientificDoubleSpinbox` and uses it in MultiModeValueEdit. + +Bugfixes +-------- +- Waits for signal connection during :class:`~atef.widgets.config.data_active.ActionRowWidget` initialization to properly read enum strings from signal. + +Contributors +------------ +- tangkong + + + +v1.1.0 (2023-09-14) +=================== + +Features +-------- +- Adds find-replace functionality and helpers. These procedures walk through the dataclass, rather than blindly modifying serialized json. +- Adds a simple find-replace widget and more fully-featured fill-template page. +- Adds backend dataclasses for running Bluesky plans in active checkouts. +- Prototypes auto-generated plan argument entry widgets. +- Annotates built-in Bluesky plans with bluesky-queueserver compatible type hints. +- Adds :class:`~atef.check.DynamicValue` (and subclasses :class:`~atef.check.HappiValue`, :class:`~atef.check.EpicsValue`) for comparing to dynamically changing data sources. +- Adds :class:`~atef.widgets.config.MultiModeValueEdit` widget for modifying values give a specified type, including dynamic values. + +Bugfixes +-------- +- Ensure filenames get cast as strings properly. +- Allow cast_dataclass to transfer objects from old to new dataclass, previously nested dataclasses would be converted to dicts. + +Maintenance +----------- +- Adds bluesky-queueserver dependency and pins databroker. +- Add sphinx templates for autogenerated documentation. +- Reduce randomness in test suite, try all combo box options when available. + +Contributors +------------ +- tangkong + + +v1.0.0 (2023-06-22) +======================== +Many changes have taken place since the last tag (08/2022). Checkouts can now +be run inside the GUI, and active checkouts have been prototyped. + +Notably the structure of the checkout files changed, and checkouts before that +tag must be converted to the modern format. Most users will not have issues +with this. + +Shoutout to all the contributors who helped before the pre-release notes framework +was added. + +Features +-------- +- Replaces the welcome dialog with a welcome landing tab +- Enable the close-tab button +- adds run and edit widgets for ``PassiveStep``, a step that allows passive checkouts to be run as a component of an active checkout +- Adds Enum support to the ``SetValueStep``'s actions +- Adds SetValueStep tothe active checkout suite, allowing for a list of actions to be taken (setting values to targets), followed by a list of checks (Comparisons) for verifying the actions succeeded. +- Adds a ``TableWidgetWithAddRow``, a subclass of ``QTableWidget`` that includes a AddRowWidget. This add row contains a button for adding rows of a specified widget. (for better space efficiency) +- Adds GUI support for placing a ``Comparison`` within a ``ProcedureStep`` +- Adds a busy cursor Thread worker (disables click interaction and changes to a wait cursor while a function runs) and a busy cursor decorator (not recommended, but necessary when wrapping slots that create widgets) +- Adds report generation for active checkouts + +Bugfixes +-------- +- Fixes a bug where False-y observed values would fail to be reported +- ``BusyCursorThread.raised_exception`` now properly expects to emit an ``Exception`` +- fixes more NoneType handling bugs during report generation. +- only subscribe the close-tab function once. +- disconnect update_value slots in ``ActionRowWidget``, preventing them from piling up whenever signal type changes. +- Fixes optional type hint handling in ``QDataclassBridge`` (again) +- Improve missing field handling in report generation +- fixes type hint parsing in ``QDataclassBridge`` for Optional type hints. +- carefully unsubscribes callbacks that might persist after toggling between run and edit mode, avoiding slots from referencing deleted RunTree widgets +- Cast values read from the config to a string in AnyValue widget +- Properly identify up Sequences in ``QDataclassBridge`` +- Sets the comparison widget type based on the loaded datatype +- Allows device selection via double-click in the ``HappiSearchWidget`` tree-view + +Maintenance +----------- +- Improves ``ResultStatus`` refresh handling, now also updates on paint events +- In the case of errors during a mode switch, the error will be revealed to the user and the switch will be reverted. +- Improve result icon refresh behavior by emitting a sigal whenever a step is run. +- Add result property to passive checkout configurations in order to re-compute the overall_result when .result is requested. +- places a stray sig.wait_for_connection call into a ``BusyCursorThread`` +- fleshes out the test suite, adding fixtures where appropriate. +- display enum strings in ``SetValueStep`` run view. +- Differentiates between read and write (set) PV's in ``OphydDeviceTableView`` +- Wraps signal.get call used for setting input type validators in ``BusyCursorThread`` + +Contributors +------------ +- tangkong diff --git a/v1.4.0/_sources/upcoming_changes.rst.txt b/v1.4.0/_sources/upcoming_changes.rst.txt new file mode 100644 index 00000000..1323597c --- /dev/null +++ b/v1.4.0/_sources/upcoming_changes.rst.txt @@ -0,0 +1,8 @@ +Upcoming Changes +################ + +.. toctree:: + :maxdepth: 1 + :glob: + + upcoming_release_notes/[0-9]* diff --git a/v1.4.0/_sources/upcoming_release_notes/template-full.rst.txt b/v1.4.0/_sources/upcoming_release_notes/template-full.rst.txt new file mode 100644 index 00000000..31657f76 --- /dev/null +++ b/v1.4.0/_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 Breaks +---------- +- 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/v1.4.0/_sources/upcoming_release_notes/template-short.rst.txt b/v1.4.0/_sources/upcoming_release_notes/template-short.rst.txt new file mode 100644 index 00000000..8349cd8a --- /dev/null +++ b/v1.4.0/_sources/upcoming_release_notes/template-short.rst.txt @@ -0,0 +1,22 @@ +IssueNumber Title +################# + +API Breaks +---------- +- N/A + +Features +-------- +- N/A + +Bugfixes +-------- +- N/A + +Maintenance +----------- +- N/A + +Contributors +------------ +- N/A diff --git a/v1.4.0/_static/_sphinx_javascript_frameworks_compat.js b/v1.4.0/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/v1.4.0/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/v1.4.0/_static/basic.css b/v1.4.0/_static/basic.css new file mode 100644 index 00000000..30fee9d0 --- /dev/null +++ b/v1.4.0/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + 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; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/v1.4.0/_static/css/badge_only.css b/v1.4.0/_static/css/badge_only.css new file mode 100644 index 00000000..c718cee4 --- /dev/null +++ b/v1.4.0/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) 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#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.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}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{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}} \ No newline at end of file diff --git a/v1.4.0/_static/css/fonts/Roboto-Slab-Bold.woff b/v1.4.0/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/v1.4.0/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/v1.4.0/_static/css/fonts/Roboto-Slab-Bold.woff2 b/v1.4.0/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/v1.4.0/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/v1.4.0/_static/css/fonts/Roboto-Slab-Regular.woff b/v1.4.0/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/v1.4.0/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/v1.4.0/_static/css/fonts/Roboto-Slab-Regular.woff2 b/v1.4.0/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/v1.4.0/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/v1.4.0/_static/css/fonts/fontawesome-webfont.eot b/v1.4.0/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/v1.4.0/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/v1.4.0/_static/css/fonts/fontawesome-webfont.svg b/v1.4.0/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/v1.4.0/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v1.4.0/_static/css/fonts/fontawesome-webfont.ttf b/v1.4.0/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/v1.4.0/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/v1.4.0/_static/css/fonts/fontawesome-webfont.woff b/v1.4.0/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/v1.4.0/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/v1.4.0/_static/css/fonts/fontawesome-webfont.woff2 b/v1.4.0/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/v1.4.0/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/v1.4.0/_static/css/fonts/lato-bold-italic.woff b/v1.4.0/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-bold-italic.woff differ diff --git a/v1.4.0/_static/css/fonts/lato-bold-italic.woff2 b/v1.4.0/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/v1.4.0/_static/css/fonts/lato-bold.woff b/v1.4.0/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-bold.woff differ diff --git a/v1.4.0/_static/css/fonts/lato-bold.woff2 b/v1.4.0/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-bold.woff2 differ diff --git a/v1.4.0/_static/css/fonts/lato-normal-italic.woff b/v1.4.0/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-normal-italic.woff differ diff --git a/v1.4.0/_static/css/fonts/lato-normal-italic.woff2 b/v1.4.0/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/v1.4.0/_static/css/fonts/lato-normal.woff b/v1.4.0/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-normal.woff differ diff --git a/v1.4.0/_static/css/fonts/lato-normal.woff2 b/v1.4.0/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/v1.4.0/_static/css/fonts/lato-normal.woff2 differ diff --git a/v1.4.0/_static/css/theme.css b/v1.4.0/_static/css/theme.css new file mode 100644 index 00000000..19a446a0 --- /dev/null +++ b/v1.4.0/_static/css/theme.css @@ -0,0 +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,.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/v1.4.0/_static/docs-versions-menu.js b/v1.4.0/_static/docs-versions-menu.js new file mode 100644 index 00000000..696095a6 --- /dev/null +++ b/v1.4.0/_static/docs-versions-menu.js @@ -0,0 +1,148 @@ +"use strict"; + +function getGhPagesCurrentFolder() { + // Extract version folder under the assumpgion that the URL is of the form + // https://.github.io///... + if (window.location.hostname.includes("github.io")){ + return window.location.pathname.split('/')[2]; + } +} + +function getRootUrl() { + // Return the "root" URL, i.e. everything before the current folder + // (getGhPagesCurrentFolder). On gh-pages, this includes the project name. + var root_url = window.location.origin; + if (window.location.hostname.includes("github.io")){ + root_url = root_url + '/' + window.location.pathname.split('/')[1]; + } + return root_url; +} + +function getGithubProjectUrl(){ + // Return the project url on Github, under the assumption that the current + // page is hosted on github-pages (https://.github.io//) + var root_url = getRootUrl(); + var match = root_url.match(/([\w\d-]+)\.github\.io\/([\w\d-]+)/) + if (match !== null){ + var username = match[1]; + var projectname = match[2]; + return "https://github.com/" + username + "/" + projectname; + } else { + return null + } +} + +function _addVersionsMenu(version_data) { + // The menu was reverse-engineered from the RTD websites, so it's very + // specific to the sphinx_rtd_theme + var folders = version_data["versions"]; + var root_url = getRootUrl(); + var current_url = document.URL; + var current_folder = getGhPagesCurrentFolder(); + if (current_folder === undefined) return; + var current_version = version_data["labels"][current_folder]; + var menu = document.createElement('div'); + menu.setAttribute('class', 'rst-versions'); + menu.setAttribute('data-toggle', 'rst-versions'); + menu.setAttribute('role', 'note'); + menu.setAttribute('aria-label', 'versions'); + var inner_html = + "" + + " Docs " + + "" + current_version + " " + + "" + + "" + + "
" + + "
" + + "
" + + "
Versions
"; + var i; + for (i in folders) { + var folder = folders[i]; + if (folder == current_folder){ + var inner_html = inner_html + "
" + current_version + "
"; + } else { + var inner_html = inner_html + "
" + version_data["labels"][folder] + "
"; + } + } + var downloads = version_data["downloads"][current_folder]; + if (downloads.length > 0){ + var inner_html = inner_html + + "
Downloads
"; + for (i in downloads) { + var download_label = downloads[i][0]; + var download_url = downloads[i][1]; + if (!(/^(https?|ftp):/.test(download_url))){ + if (!download_url.startsWith('/')){ + var download_url = '/' + download_url; + } + var download_url = root_url + download_url; + } + var inner_html = inner_html + "
" + + download_label + "
"; + } + } + var github_project_url = getGithubProjectUrl(); + if (github_project_url !== null && github_project_url.length > 0){ + var inner_html = inner_html + + "
On Github
" + + "
Project Home
" + + "
Issues
"; + } + var inner_html = inner_html + + "
" + + "
" + + "Generated by Docs Versions Menu" + + "" + + "
" + + "
"; + menu.innerHTML = inner_html; + var parent = document.body; + parent.insertBefore(menu, parent.lastChild); + + // Add a warning banner for dev/outdated versions + var warning; + var msg; + if (version_data["warnings"][current_folder].indexOf("outdated") >=0){ + warning = document.createElement('div'); + warning.setAttribute('class', 'admonition danger'); + msg = "This document is for an outdated version."; + } else if (version_data["warnings"][current_folder].indexOf("unreleased") >=0){ + warning = document.createElement('div'); + warning.setAttribute('class', 'admonition danger'); + msg = "This document is for an unreleased development version."; + } else if (version_data["warnings"][current_folder].indexOf("prereleased") >=0){ + warning = document.createElement('div'); + warning.setAttribute('class', 'admonition danger'); + msg = "This document is for a pre-release development version."; + } + if (warning !== undefined){ + if (version_data["latest"] !== null){ + msg = msg + " Documentation is available for the " + "latest public release." + } + warning.innerHTML = "

Note

" + + "

" + msg + "

"; + var parent = document.querySelector('div.body') + || document.querySelector('div.document') + || document.body; + parent.insertBefore(warning, parent.firstChild); + } + + +} + +function addVersionsMenu() { + // We assume that we can load versions.json from + // https://.github.io//versions.json + // That is, there's a path between the hostname and versions.json + var json_file = "/" + window.location.pathname.split("/")[1] + "/versions.json"; + $.getJSON(json_file, _addVersionsMenu); +} + +document.addEventListener('DOMContentLoaded', addVersionsMenu); \ No newline at end of file diff --git a/v1.4.0/_static/doctools.js b/v1.4.0/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/v1.4.0/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/v1.4.0/_static/documentation_options.js b/v1.4.0/_static/documentation_options.js new file mode 100644 index 00000000..7e4c114f --- /dev/null +++ b/v1.4.0/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/v1.4.0/_static/file.png b/v1.4.0/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/v1.4.0/_static/file.png differ diff --git a/v1.4.0/_static/graphviz.css b/v1.4.0/_static/graphviz.css new file mode 100644 index 00000000..8d81c02e --- /dev/null +++ b/v1.4.0/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/v1.4.0/_static/jquery.js b/v1.4.0/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/v1.4.0/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/v1.4.0/_static/js/html5shiv.min.js b/v1.4.0/_static/js/html5shiv.min.js new file mode 100644 index 00000000..cd1c674f --- /dev/null +++ b/v1.4.0/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/v1.4.0/_static/js/theme.js b/v1.4.0/_static/js/theme.js new file mode 100644 index 00000000..1fddb6ee --- /dev/null +++ b/v1.4.0/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/v1.4.0/_static/minus.png b/v1.4.0/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/v1.4.0/_static/minus.png differ diff --git a/v1.4.0/_static/plus.png b/v1.4.0/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/v1.4.0/_static/plus.png differ diff --git a/v1.4.0/_static/pygments.css b/v1.4.0/_static/pygments.css new file mode 100644 index 00000000..0d49244e --- /dev/null +++ b/v1.4.0/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.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 */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/v1.4.0/_static/searchtools.js b/v1.4.0/_static/searchtools.js new file mode 100644 index 00000000..7918c3fa --- /dev/null +++ b/v1.4.0/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + 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; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + 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) { + 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()) + .then((data) => { + if (data) + 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); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + 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, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/v1.4.0/_static/sphinx_highlight.js b/v1.4.0/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/v1.4.0/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + 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( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_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/v1.4.0/api.html b/v1.4.0/api.html new file mode 100644 index 00000000..6421822e --- /dev/null +++ b/v1.4.0/api.html @@ -0,0 +1,151 @@ + + + + + + + ATEF API — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

ATEF API

+
+

Dataclasses

+ + + + + + + + + + + + + + + + + + +

atef.check

Dataclasses for describing comparisons.

atef.config

Contains "Configuration" dataclasses for organizing Comparisons.

atef.procedure

Dataclasses for describing active checkout procedures.

atef.tools

atef.walk

Helpers for walking dataclasses.

+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/framework.html b/v1.4.0/framework.html new file mode 100644 index 00000000..b240db27 --- /dev/null +++ b/v1.4.0/framework.html @@ -0,0 +1,129 @@ + + + + + + + ATEF Framework — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

ATEF Framework

+
+

Checkout Structure

+

To expand on: +- Serializability +- Prepared variants

+
+
    +
  • Prepared holds transient information (results)

  • +
+
+
    +
  • Passive Checkout Groups

  • +
  • Active Checkout Verify control flow

  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2024, SLAC National Accelerator Laboratory.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/atef.check.html b/v1.4.0/generated/atef.check.html new file mode 100644 index 00000000..dd889d9b --- /dev/null +++ b/v1.4.0/generated/atef.check.html @@ -0,0 +1,220 @@ + + + + + + + atef.check — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check

+

Dataclasses for describing comparisons. Comparisons generally subclass Comparison, +which hold Value and DynamicValue objects. Comparisons involving +DynamicValue must be prepared before comparisons can be run.

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

AnyComparison(name, description, invert, ...)

Comparison passes if any contained comparison passes.

AnyValue(name, description, invert, ...)

Comparison passes if the value is in the values list.

BasicDynamic(name, description, invert, ...)

+
Attributes:
+

+
+

Comparison([name, description, invert, ...])

Base class for all atef value comparisons.

DynamicValue([value, reduce_period, ...])

A primitive value from an external source that may change over time.

EpicsValue([value, reduce_period, ...])

A primitive value sourced from an EPICS PV.

Equals(name, description, invert, ...)

+
Attributes:
+

+
+

Greater([name, description, invert, ...])

Comparison: value > self.value.

GreaterOrEqual([name, description, invert, ...])

Comparison: value >= self.value.

HappiValue([value, reduce_period, ...])

A primitive value sourced from a specific happi device signal.

Less([name, description, invert, ...])

Comparison: value < self.value.

LessOrEqual([name, description, invert, ...])

Comparison: value <= self.value.

NotEquals(name, description, invert, ...)

+
Attributes:
+

+
+

Range([name, description, invert, ...])

A range comparison.

Value(value[, description, rtol, atol, severity])

A primitive (static) value with optional metadata.

ValueRange(low, high[, inclusive, in_range, ...])

A range of primitive values with optional metadata.

ValueSet(name, description, invert, ...)

A set of values with corresponding severities and descriptions.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/atef.config.html b/v1.4.0/generated/atef.config.html new file mode 100644 index 00000000..847cb358 --- /dev/null +++ b/v1.4.0/generated/atef.config.html @@ -0,0 +1,234 @@ + + + + + + + atef.config — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config

+

Contains “Configuration” dataclasses for organizing Comparisons. +Also contains “Prepared” variants of Comparison and Configuration classes, +which link Comparisons to specific identifiers and hold Result objects.

+

Functions

+ + + + + + + + + +

get_result_from_comparison(item)

Get a Result, if available, from the provided arguments.

run_passive_step(config)

Runs a given check and returns the result.

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Configuration([name, description, tags])

Configuration base class for shared settings between all configurations.

ConfigurationFile(version, root)

A configuration file comprised of a number of devices/PV configurations.

ConfigurationGroup(name, description, tags, ...)

Configuration group.

DeviceConfiguration(name, description, tags, ...)

A configuration that is built to check one or more devices.

FailedConfiguration(parent, config, result)

A Configuration that failed to be prepared for running.

PVConfiguration(name, description, tags, ...)

A configuration that is built to check live EPICS PVs.

PreparedComparison(cache, identifier, ...)

A unified representation of comparisons for device signals and standalone PVs.

PreparedConfiguration(cache, parent, ...)

Base class for a Configuration that has been prepared to run.

PreparedDeviceConfiguration(cache, parent, ...)

+
Attributes:
+

+
+

PreparedFile(cache, file, client, root)

Methods

+

PreparedGroup(cache, parent, comparisons, ...)

+
Attributes:
+

+
+

PreparedPVConfiguration(cache, parent, ...)

+
Attributes:
+

+
+

PreparedSignalComparison(cache, identifier, ...)

A unified representation of comparisons for device signals and standalone PVs.

PreparedToolComparison(cache, identifier, ...)

A unified representation of comparisons for device signals and standalone PVs.

PreparedToolConfiguration(cache, parent, ...)

+
Attributes:
+

+
+

ToolConfiguration(name, description, tags, ...)

A configuration unrelated to PVs or Devices which verifies status via some tool.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/atef.procedure.html b/v1.4.0/generated/atef.procedure.html new file mode 100644 index 00000000..b9574197 --- /dev/null +++ b/v1.4.0/generated/atef.procedure.html @@ -0,0 +1,328 @@ + + + + + + + atef.procedure — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure

+

Dataclasses for describing active checkout procedures. These dataclasses come in +normal (edit) and Prepared (run) variants

+

Edit variants hold data needed to specify the step. +Prepared variants hold a reference to their originating edit-step, along with +Result objects and a .run() method.

+

Adding a step requires: +- write the edit-variant +- add the edit-variant to the AnyProcedure type hint +- write the run-variant, along with its ._run() and .from_origin() methods +- add the step to PreparedProcedure.from_origin classmethod case statement

+

Functions

+ + + + + + + + + + + + +

create_prepared_comparison(check[, parent])

get_RE_data(bs_state, plan_data)

Get databroker data from the GlobalRunEngine from the plan specified by plan_data.

get_bs_state(dclass)

Get the BlueskyState instance corresponding to dclass.

+

Classes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

CodeStep(name, description, parent, ...)

Run source code in a procedure.

ComparisonToPlanData(name, plan_id, plan_no, ...)

+
Attributes:
+

+
+

ComparisonToTarget([name, device, attr, pv, ...])

+
Attributes:
+

+
+

ConfigurationCheckStep(name, description, ...)

Step which checks device configuration versus a given timestamp.

DescriptionStep([name, description, parent, ...])

A simple title or descriptive step in the procedure.

DeviceConfiguration(archiver_timestamp, values)

Device configuration for comparison.

DisplayOptions(macros, str] =, template, embed)

Options for a typhos or PyDM display.

FailedStep(parent, origin, combined_result, ...)

A step that failed to be prepared for running.

PassiveStep(name, description, parent, ...)

A step that runs a passive checkout file

PlanData(name, plan_id, plan_no, ...)

+
Attributes:
+

+
+

PlanOptions(name, plan, args, kwargs, ...)

Options for a bluesky plan scan.

PlanStep(name, description, parent, ...)

A procedure step comprised of one or more bluesky plans.

PreparedDescriptionStep(name, origin, ...)

+
Attributes:
+

+
+

PreparedPassiveStep(name, origin, parent, ...)

+
Attributes:
+

+
+

PreparedPlan(name, origin, parent, item, ...)

+
Attributes:
+

+
+

PreparedPlanComparison(cache, identifier, ...)

Unified representation for comparisons to Bluesky Plan data

PreparedPlanStep(name, origin, parent, ...)

+
Attributes:
+

+
+

PreparedProcedureFile(file, root)

A Prepared Procedure file.

PreparedProcedureGroup(name, origin, parent, ...)

+
Attributes:
+

+
+

PreparedProcedureStep(name, origin, parent, ...)

Base class for a ProcedureStep that has been prepared to run.

PreparedSetValueStep(name, origin, parent, ...)

+
Attributes:
+

+
+

PreparedValueToSignal(name, signal, value, ...)

+
Attributes:
+

+
+

ProcedureFile(version, root)

File comprised of several Procedure steps

ProcedureGroup(name, description, parent, ...)

A group of procedure steps (or nested groups).

ProcedureStep([name, description, parent, ...])

A basic step in an atef procedure.

PydmDisplayStep(name, description, parent, ...)

A procedure step which a opens a PyDM display.

SetValueStep(name, description, parent, ...)

A step that sets one or more values and checks one or more values after

Target([name, device, attr, pv])

A destination for a value.

TyphosDisplayStep(name, description, parent, ...)

A procedure step which opens one or more typhos displays.

ValueToTarget([name, device, attr, pv, ...])

+
Attributes:
+

+
+

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/atef.tools.html b/v1.4.0/generated/atef.tools.html new file mode 100644 index 00000000..ed52d609 --- /dev/null +++ b/v1.4.0/generated/atef.tools.html @@ -0,0 +1,162 @@ + + + + + + + atef.tools — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.tools

+

Functions

+ + + + + + +

get_result_value_by_key(result, key)

Retrieve the value indicated by the dotted key name from the ToolResult.

+

Classes

+ + + + + + + + + + + + + + + +

Ping(hosts, count, encoding)

Tool for pinging one or more hosts and summarizing the results.

PingResult(result, alive, num_alive, ...)

The result dictionary of the 'ping' tool.

Tool()

Base class for atef tool checks.

ToolResult(result)

The base result dictionary of any tool.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/atef.walk.html b/v1.4.0/generated/atef.walk.html new file mode 100644 index 00000000..a2e3d013 --- /dev/null +++ b/v1.4.0/generated/atef.walk.html @@ -0,0 +1,160 @@ + + + + + + + atef.walk — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.walk

+

Helpers for walking dataclasses.

+

If relying on Prepared dataclass walk methods (walk_groups, walk_comparisons), +note that if a configuration fails to prepare, they will be skipped

+

Functions

+ + + + + + + + + + + + + + + + + + +

get_prepared_step(prepared_file, origin)

Gather all PreparedProcedureStep dataclasses the correspond to the original ProcedureStep.

get_relevant_configs_comps(prepared_file, ...)

Gather all the PreparedConfiguration or PreparedComparison dataclasses that correspond to the original comparison or config.

walk_config_file(config[, level])

Yields each config and comparison and its depth Performs a recursive depth-first search

walk_procedure_file(config[, level])

Yields each ProcedureStep / Comparison and its depth Performs a recursive depth-first search

walk_steps(step)

Yield ProedureSteps in step, depth-first.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.AnyComparison.html b/v1.4.0/generated/generated/atef.check.AnyComparison.html new file mode 100644 index 00000000..c7ba087a --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.AnyComparison.html @@ -0,0 +1,377 @@ + + + + + + + atef.check.AnyComparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.AnyComparison

+
+
+class atef.check.AnyComparison(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ~atef.reduce.ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: ~atef.enums.Severity = Severity.error, if_disconnected: ~atef.enums.Severity = Severity.error, comparisons: ~typing.List[~atef.check.Comparison] = <factory>)[source]
+

Comparison passes if any contained comparison passes.

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

children()

Return children of this group, as a tree view might expect

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Describe the comparison in words.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

replace_comparison(old_comp, new_comp)

Replace old_comp with new_comp in this dataclass.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ~atef.reduce.ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: ~atef.enums.Severity = Severity.error, if_disconnected: ~atef.enums.Severity = Severity.error, comparisons: ~typing.List[~atef.check.Comparison] = <factory>) None
+
+ +
+
+children() List[Comparison][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Describe the comparison in words.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Prepare this comparison’s value data. Prepares all comparisons contained +in this comparison.

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +
+
+replace_comparison(old_comp: Comparison, new_comp: Comparison) None[source]
+

Replace old_comp with new_comp in this dataclass. +A common method for all dataclasses that hold comparisons.

+
+
Parameters:
+
+
old_compComparison

Comparsion to replace

+
+
new_compComparison

Comparison to replace old_comp with

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+comparisons: List[Comparison]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.AnyValue.html b/v1.4.0/generated/generated/atef.check.AnyValue.html new file mode 100644 index 00000000..6feadb29 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.AnyValue.html @@ -0,0 +1,353 @@ + + + + + + + atef.check.AnyValue — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.AnyValue

+
+
+class atef.check.AnyValue(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ~atef.reduce.ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: ~atef.enums.Severity = Severity.error, if_disconnected: ~atef.enums.Severity = Severity.error, values: ~typing.List[str | int | bool | float] = <factory>, values_dynamic: ~typing.List[~atef.check.DynamicValue | None] = <factory>)[source]
+

Comparison passes if the value is in the values list.

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Describe the comparison in words.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ~atef.reduce.ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: ~atef.enums.Severity = Severity.error, if_disconnected: ~atef.enums.Severity = Severity.error, values: ~typing.List[str | int | bool | float] = <factory>, values_dynamic: ~typing.List[~atef.check.DynamicValue | None] = <factory>) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Describe the comparison in words.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Prepare this comparison’s value data. Prepares each DynamicValue in the +value_dynamic list, if specified.

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+values: List[str | int | bool | float]
+
+ +
+
+values_dynamic: List[DynamicValue | None]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.BasicDynamic.html b/v1.4.0/generated/generated/atef.check.BasicDynamic.html new file mode 100644 index 00000000..f7c29359 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.BasicDynamic.html @@ -0,0 +1,349 @@ + + + + + + + atef.check.BasicDynamic — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.BasicDynamic

+
+
+class atef.check.BasicDynamic(name: 'Optional[str]' = None, description: 'Optional[str]' = None, invert: 'bool' = False, reduce_period: 'Optional[Number]' = None, reduce_method: 'reduce.ReduceMethod' = <ReduceMethod.average: 'average'>, string: 'Optional[bool]' = None, severity_on_failure: 'Severity' = <Severity.error: 2>, if_disconnected: 'Severity' = <Severity.error: 2>, value_dynamic: 'Optional[DynamicValue]' = None)[source]
+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
value_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Human-readable description of the comparison operation itself.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str
+

Human-readable description of the comparison operation itself.

+

To be implemented by subclass.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+value_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.Comparison.html b/v1.4.0/generated/generated/atef.check.Comparison.html new file mode 100644 index 00000000..40a2da5c --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.Comparison.html @@ -0,0 +1,340 @@ + + + + + + + atef.check.Comparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.Comparison

+
+
+class atef.check.Comparison(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error)[source]
+

Base class for all atef value comparisons.

+

Subclasses of Comparison will be serialized as a tagged union. This means +that the subclass name will be used as an identifier for the generated +serialized dictionary (and JSON object).

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Human-readable description of the comparison operation itself.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Implement in subclass to grab and cache dynamic values.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result[source]
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Human-readable description of the comparison operation itself.

+

To be implemented by subclass.

+
+ +
+
+get_data_for_signal(signal: Signal) Any[source]
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any[source]
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Implement in subclass to grab and cache dynamic values. +This is expected to set self.is_prepared to True if +successful.

+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.DynamicValue.html b/v1.4.0/generated/generated/atef.check.DynamicValue.html new file mode 100644 index 00000000..ddd07e5a --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.DynamicValue.html @@ -0,0 +1,225 @@ + + + + + + + atef.check.DynamicValue — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.DynamicValue

+
+
+class atef.check.DynamicValue(value: str | int | bool | float | None = None, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None)[source]
+

A primitive value from an external source that may change over time. +This necessarily picks up a runtime performance cost and getting +the value is not guaranteed to be successful. If unsuccessful, +this will raise a DynamicValueError from the original exception.

+

Includes settings for reduction of multiple samples.

+

Value will be cached on preparation, and this value used for comparisons

+
+
Attributes:
+
+
reduce_period
+
string
+
value
+
+
+
+

Methods

+ + + + + + + + + +

get()

Return the cached value from prepare, or raise a DynamicValueError if there is no such value.

prepare(cache)

Implement in child class to get the current value from source.

+

Methods

+
+
+__init__(value: str | int | bool | float | None = None, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None) None
+
+ +
+
+get() str | int | bool | float[source]
+

Return the cached value from prepare, or raise a DynamicValueError if there is no such value.

+
+ +
+
+async prepare(cache: DataCache) None[source]
+

Implement in child class to get the current value from source. +Should set the self.value

+
+ +

Attributes

+
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the value will be read

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default

+
+ +
+
+value: str | int | bool | float | None = None
+

Value is now optional, and will be filled in when prepared

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.EpicsValue.html b/v1.4.0/generated/generated/atef.check.EpicsValue.html new file mode 100644 index 00000000..fb5630d0 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.EpicsValue.html @@ -0,0 +1,243 @@ + + + + + + + atef.check.EpicsValue — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.EpicsValue

+
+
+class atef.check.EpicsValue(value: str | int | bool | float | None = None, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, pvname: str = '')[source]
+

A primitive value sourced from an EPICS PV. +This will create and cache an EpicsSignalRO object, and defer +to that signal’s get handling.

+
+
Attributes:
+
+
reduce_period
+
string
+
value
+
+
+
+

Methods

+ + + + + + + + + +

get()

Return the cached value from prepare, or raise a DynamicValueError if there is no such value.

prepare([cache])

Prepare the EpicsValue.

+

Methods

+
+
+__init__(value: str | int | bool | float | None = None, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, pvname: str = '') None
+
+ +
+
+get() str | int | bool | float
+

Return the cached value from prepare, or raise a DynamicValueError if there is no such value.

+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Prepare the EpicsValue. Accesses the EPICS PV using the data +cache provided.

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Raises:
+
+
DynamicValueError

if the EpicsValue does not have a pv specified

+
+
+
+
+
+ +

Attributes

+
+
+pvname: str = ''
+

The EPICS PV to use.

+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the value will be read

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default

+
+ +
+
+value: str | int | bool | float | None = None
+

Value is now optional, and will be filled in when prepared

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.Equals.html b/v1.4.0/generated/generated/atef.check.Equals.html new file mode 100644 index 00000000..fa8b5745 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.Equals.html @@ -0,0 +1,365 @@ + + + + + + + atef.check.Equals — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.Equals

+
+
+class atef.check.Equals(name: 'Optional[str]' = None, description: 'Optional[str]' = None, invert: 'bool' = False, reduce_period: 'Optional[Number]' = None, reduce_method: 'reduce.ReduceMethod' = <ReduceMethod.average: 'average'>, string: 'Optional[bool]' = None, severity_on_failure: 'Severity' = <Severity.error: 2>, if_disconnected: 'Severity' = <Severity.error: 2>, value_dynamic: 'Optional[DynamicValue]' = None, value: 'PrimitiveType' = 0.0, rtol: 'Optional[Number]' = None, atol: 'Optional[Number]' = None)[source]
+
+
Attributes:
+
+
atol
+
description
+
name
+
reduce_period
+
rtol
+
string
+
value_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Describe the equality comparison in words.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: str | int | bool | float = 0.0, rtol: int | float | None = None, atol: int | float | None = None) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Describe the equality comparison in words.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+atol: int | float | None = None
+
+ +
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+rtol: int | float | None = None
+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+value: str | int | bool | float = 0.0
+
+ +
+
+value_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.Greater.html b/v1.4.0/generated/generated/atef.check.Greater.html new file mode 100644 index 00000000..877c24d1 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.Greater.html @@ -0,0 +1,355 @@ + + + + + + + atef.check.Greater — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.Greater

+
+
+class atef.check.Greater(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0)[source]
+

Comparison: value > self.value.

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
value_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Human-readable description of the comparison operation itself.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Human-readable description of the comparison operation itself.

+

To be implemented by subclass.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+value: int | float = 0
+
+ +
+
+value_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.GreaterOrEqual.html b/v1.4.0/generated/generated/atef.check.GreaterOrEqual.html new file mode 100644 index 00000000..99e0e41d --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.GreaterOrEqual.html @@ -0,0 +1,355 @@ + + + + + + + atef.check.GreaterOrEqual — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.GreaterOrEqual

+
+
+class atef.check.GreaterOrEqual(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0)[source]
+

Comparison: value >= self.value.

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
value_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Human-readable description of the comparison operation itself.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Human-readable description of the comparison operation itself.

+

To be implemented by subclass.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+value: int | float = 0
+
+ +
+
+value_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.HappiValue.html b/v1.4.0/generated/generated/atef.check.HappiValue.html new file mode 100644 index 00000000..772cb33e --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.HappiValue.html @@ -0,0 +1,249 @@ + + + + + + + atef.check.HappiValue — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.HappiValue

+
+
+class atef.check.HappiValue(value: str | int | bool | float | None = None, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, device_name: str = '', signal_attr: str = '')[source]
+

A primitive value sourced from a specific happi device signal. +This will query happi to cache a Signal object, and defer to +that signal’s get handling.

+
+
Attributes:
+
+
reduce_period
+
string
+
value
+
+
+
+

Methods

+ + + + + + + + + +

get()

Return the cached value from prepare, or raise a DynamicValueError if there is no such value.

prepare([cache])

Prepare the HappiValue.

+

Methods

+
+
+__init__(value: str | int | bool | float | None = None, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, device_name: str = '', signal_attr: str = '') None
+
+ +
+
+get() str | int | bool | float
+

Return the cached value from prepare, or raise a DynamicValueError if there is no such value.

+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Prepare the HappiValue. Accesses the specified device and component +from the happi database.

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Raises:
+
+
DynamicValueError

if the EpicsValue does not have a pv specified

+
+
+
+
+
+ +

Attributes

+
+
+device_name: str = ''
+

The name of the device to use.

+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the value will be read

+
+ +
+
+signal_attr: str = ''
+

The attr name of the signal to get from.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default

+
+ +
+
+value: str | int | bool | float | None = None
+

Value is now optional, and will be filled in when prepared

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.Less.html b/v1.4.0/generated/generated/atef.check.Less.html new file mode 100644 index 00000000..d58ae520 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.Less.html @@ -0,0 +1,355 @@ + + + + + + + atef.check.Less — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.Less

+
+
+class atef.check.Less(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0)[source]
+

Comparison: value < self.value.

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
value_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Human-readable description of the comparison operation itself.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Human-readable description of the comparison operation itself.

+

To be implemented by subclass.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+value: int | float = 0
+
+ +
+
+value_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.LessOrEqual.html b/v1.4.0/generated/generated/atef.check.LessOrEqual.html new file mode 100644 index 00000000..b62aaaf1 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.LessOrEqual.html @@ -0,0 +1,355 @@ + + + + + + + atef.check.LessOrEqual — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.LessOrEqual

+
+
+class atef.check.LessOrEqual(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0)[source]
+

Comparison: value <= self.value.

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
value_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Human-readable description of the comparison operation itself.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: int | float = 0) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Human-readable description of the comparison operation itself.

+

To be implemented by subclass.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+value: int | float = 0
+
+ +
+
+value_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.NotEquals.html b/v1.4.0/generated/generated/atef.check.NotEquals.html new file mode 100644 index 00000000..ef54cacd --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.NotEquals.html @@ -0,0 +1,365 @@ + + + + + + + atef.check.NotEquals — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.NotEquals

+
+
+class atef.check.NotEquals(name: 'Optional[str]' = None, description: 'Optional[str]' = None, invert: 'bool' = False, reduce_period: 'Optional[Number]' = None, reduce_method: 'reduce.ReduceMethod' = <ReduceMethod.average: 'average'>, string: 'Optional[bool]' = None, severity_on_failure: 'Severity' = <Severity.error: 2>, if_disconnected: 'Severity' = <Severity.error: 2>, value_dynamic: 'Optional[DynamicValue]' = None, value: 'PrimitiveType' = 0, rtol: 'Optional[Number]' = None, atol: 'Optional[Number]' = None)[source]
+
+
Attributes:
+
+
atol
+
description
+
name
+
reduce_period
+
rtol
+
string
+
value_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Describe the equality comparison in words.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, value_dynamic: DynamicValue | None = None, value: str | int | bool | float = 0, rtol: int | float | None = None, atol: int | float | None = None) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Describe the equality comparison in words.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+atol: int | float | None = None
+
+ +
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+rtol: int | float | None = None
+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+value: str | int | bool | float = 0
+
+ +
+
+value_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.Range.html b/v1.4.0/generated/generated/atef.check.Range.html new file mode 100644 index 00000000..96c2f6e7 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.Range.html @@ -0,0 +1,429 @@ + + + + + + + atef.check.Range — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.Range

+
+
+class atef.check.Range(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, low: int | float = 0, low_dynamic: DynamicValue | None = None, high: int | float = 0, high_dynamic: DynamicValue | None = None, warn_low: int | float | None = None, warn_low_dynamic: DynamicValue | None = None, warn_high: int | float | None = None, warn_high_dynamic: DynamicValue | None = None, inclusive: bool = True)[source]
+

A range comparison.

+

Notes

+

If the following inequality holds, the range comparison will succeed:

+
+

low < value < high (inclusive=False) +low <= value <= high (inclusive=True)

+
+

Additionally, warning levels may be specified. These should be configured +such that:

+
+

low <= warn_low <= warn_high <= high

+
+

With these warning levels configured, a warning will be raised when the +value falls within the following ranges. For inclusive=False:

+
low < value < warn_low
+warn_high < value < high
+
+
+

or, when inclusive=True:

+
+

low <= value <= warn_low +warn_high <= value <= high

+
+
+
Attributes:
+
+
description
+
high_dynamic
+
low_dynamic
+
name
+
ranges
+
reduce_period
+
string
+
warn_high
+
warn_high_dynamic
+
warn_low
+
warn_low_dynamic
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Human-readable description of the comparison operation itself.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: Severity = Severity.error, if_disconnected: Severity = Severity.error, low: int | float = 0, low_dynamic: DynamicValue | None = None, high: int | float = 0, high_dynamic: DynamicValue | None = None, warn_low: int | float | None = None, warn_low_dynamic: DynamicValue | None = None, warn_high: int | float | None = None, warn_high_dynamic: DynamicValue | None = None, inclusive: bool = True) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Human-readable description of the comparison operation itself.

+

To be implemented by subclass.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data. Prepares the high/low limits along with dynamic high/low +warning values if they exist

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+high: int | float = 0
+

The high end of the range, which must be >= low.

+
+ +
+
+high_dynamic: DynamicValue | None = None
+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+inclusive: bool = True
+

Should the low and high values be included in the range?

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+low: int | float = 0
+

The low end of the range, which must be <= high.

+
+ +
+
+low_dynamic: DynamicValue | None = None
+
+ +
+
+name: str | None = None
+
+ +
+
+ranges
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+warn_high: int | float | None = None
+

The high end of the warning range, which must be >= warn_low.

+
+ +
+
+warn_high_dynamic: DynamicValue | None = None
+
+ +
+
+warn_low: int | float | None = None
+

The low end of the warning range, which must be <= warn_high.

+
+ +
+
+warn_low_dynamic: DynamicValue | None = None
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.Value.html b/v1.4.0/generated/generated/atef.check.Value.html new file mode 100644 index 00000000..21e090d5 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.Value.html @@ -0,0 +1,224 @@ + + + + + + + atef.check.Value — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.Value

+
+
+class atef.check.Value(value: str | int | bool | float, description: str = '', rtol: int | float | None = None, atol: int | float | None = None, severity: Severity = Severity.success)[source]
+

A primitive (static) value with optional metadata.

+
+
Attributes:
+
+
atol
+
rtol
+
+
+
+

Methods

+ + + + + + + + + +

compare(value)

Compare the provided value with this one, using tolerance settings.

get()

Get the value from this container.

+

Methods

+
+
+__init__(value: str | int | bool | float, description: str = '', rtol: int | float | None = None, atol: int | float | None = None, severity: Severity = Severity.success) None
+
+ +
+
+compare(value: str | int | bool | float) bool[source]
+

Compare the provided value with this one, using tolerance settings.

+
+ +
+
+get() str | int | bool | float[source]
+

Get the value from this container.

+
+ +

Attributes

+
+
+atol: int | float | None = None
+

Absolute tolerance value.

+
+ +
+
+description: str = ''
+

A description of what the value represents.

+
+ +
+
+rtol: int | float | None = None
+

Relative tolerance value.

+
+ +
+
+severity: Severity = 0
+

Severity to set on a match (if applicable).

+
+ +
+
+value: str | int | bool | float
+

The value for comparison.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.ValueRange.html b/v1.4.0/generated/generated/atef.check.ValueRange.html new file mode 100644 index 00000000..bc6c94d7 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.ValueRange.html @@ -0,0 +1,213 @@ + + + + + + + atef.check.ValueRange — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.ValueRange

+
+
+class atef.check.ValueRange(low: int | float, high: int | float, inclusive: bool = True, in_range: bool = True, description: str = '', severity: Severity = Severity.success)[source]
+

A range of primitive values with optional metadata.

+

Methods

+ + + + + + +

compare(value)

Compare the provided value with this range.

+

Methods

+
+
+__init__(low: int | float, high: int | float, inclusive: bool = True, in_range: bool = True, description: str = '', severity: Severity = Severity.success) None
+
+ +
+
+compare(value: int | float) bool[source]
+

Compare the provided value with this range.

+
+ +

Attributes

+
+
+description: str = ''
+

A description of what the value represents.

+
+ +
+
+in_range: bool = True
+

Check if inside the range.

+
+ +
+
+inclusive: bool = True
+

Should the low and high values be included in the range?

+
+ +
+
+severity: Severity = 0
+

Severity to set on a match (if applicable).

+
+ +
+
+low: int | float
+

The low value for comparison.

+
+ +
+
+high: int | float
+

The high value for comparison.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.check.ValueSet.html b/v1.4.0/generated/generated/atef.check.ValueSet.html new file mode 100644 index 00000000..cf435bc6 --- /dev/null +++ b/v1.4.0/generated/generated/atef.check.ValueSet.html @@ -0,0 +1,353 @@ + + + + + + + atef.check.ValueSet — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.check.ValueSet

+
+
+class atef.check.ValueSet(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ~atef.reduce.ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: ~atef.enums.Severity = Severity.error, if_disconnected: ~atef.enums.Severity = Severity.error, values: ~typing.Sequence[~atef.check.Value] = <factory>, values_dynamic: ~typing.Sequence[~atef.check.DynamicValue | None] = <factory>)[source]
+

A set of values with corresponding severities and descriptions.

+
+
Attributes:
+
+
description
+
name
+
reduce_period
+
string
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

__call__(value)

Run the comparison against value.

compare(value[, identifier])

Compare the provided value using the comparator's settings.

describe()

Describe the equality comparison in words.

get_data_for_signal(signal)

Get data for the given signal, according to the string and data reduction settings.

get_data_for_signal_async(signal, *[, executor])

Get data for the given signal, according to the string and data reduction settings.

prepare([cache])

Prepare this comparison's value data.

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, invert: bool = False, reduce_period: int | float | None = None, reduce_method: ~atef.reduce.ReduceMethod = ReduceMethod.average, string: bool | None = None, severity_on_failure: ~atef.enums.Severity = Severity.error, if_disconnected: ~atef.enums.Severity = Severity.error, values: ~typing.Sequence[~atef.check.Value] = <factory>, values_dynamic: ~typing.Sequence[~atef.check.DynamicValue | None] = <factory>) None
+
+ +
+
+compare(value: Any, identifier: str | None = None) Result
+

Compare the provided value using the comparator’s settings.

+
+
Parameters:
+
+
value

The value to compare.

+
+
identifierstr, optional

An identifier that goes along with the provided value. Used for +severity result descriptions.

+
+
+
+
+
+ +
+
+describe() str[source]
+

Describe the equality comparison in words.

+
+ +
+
+get_data_for_signal(signal: Signal) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async get_data_for_signal_async(signal: Signal, *, executor: Executor | None = None) Any
+

Get data for the given signal, according to the string and data +reduction settings.

+
+
Parameters:
+
+
signalophyd.Signal

The signal.

+
+
executorconcurrent.futures.Executor, optional

The executor to run the synchronous call in. Defaults to +the loop-defined default executor.

+
+
+
+
Returns:
+
+
Any

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If the get operation times out.

+
+
+
+
+
+ +
+
+async prepare(cache: DataCache | None = None) None[source]
+

Prepare this comparison’s value data. If a value_dynamic is specified, +prepare its data

+
+
Parameters:
+
+
cacheDataCache, optional

The data cache instance, if available.

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this comparison.

+
+ +
+
+if_disconnected: Severity = 2
+

If disconnected and unable to perform the comparison, set this +result severity.

+
+ +
+
+invert: bool = False
+

Invert the comparison’s result. Normally, a valid comparison - that is, +one that evaluates to True - is considered successful. When invert is +set, such a comparison would be considered a failure.

+
+ +
+
+name: str | None = None
+
+ +
+
+reduce_method: ReduceMethod = 'average'
+

Reduce collected samples by this reduce method.

+
+ +
+
+reduce_period: int | float | None = None
+

Period over which the comparison will occur, where multiple samples +may be acquired prior to a result being available.

+
+ +
+
+severity_on_failure: Severity = 2
+

If the comparison fails, use this result severity.

+
+ +
+
+string: bool | None = None
+

If applicable, request and compare string values rather than the default +specified.

+
+ +
+
+values: Sequence[Value]
+
+ +
+
+values_dynamic: Sequence[DynamicValue | None]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.Configuration.html b/v1.4.0/generated/generated/atef.config.Configuration.html new file mode 100644 index 00000000..612fc782 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.Configuration.html @@ -0,0 +1,242 @@ + + + + + + + atef.config.Configuration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.Configuration

+
+
+class atef.config.Configuration(name: str | None = None, description: str | None = None, tags: List[str] | None = None)[source]
+

Configuration base class for shared settings between all configurations.

+

Subclasses of Comparison will be serialized as a tagged union. This means +that the subclass name will be used as an identifier for the generated +serialized dictionary (and JSON object).

+
+
Attributes:
+
+
description
+
name
+
tags
+
+
+
+

Methods

+ + + + + + + + + +

children()

Return children of this group, as a tree view might expect

replace_comparison(old_comp, new_comp[, ...])

Replace old_comp with new_comp in this dataclass, wherever it is.

+ + + + + + +

move_comparison

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, tags: List[str] | None = None) None
+
+ +
+
+children() List[Any][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+move_comparison(comp: Comparison, new_attr: str, comp_attrs: List[str]) None[source]
+
+ +
+
+replace_comparison(old_comp: Comparison, new_comp: Comparison, comp_attrs: List[str] | None = None) None[source]
+

Replace old_comp with new_comp in this dataclass, wherever it is. +Looks through shared, then any of the attributes in comp_attrs

+
+
Parameters:
+
+
old_compComparison

Comparison to be replaced

+
+
new_compComparison

Comparison to replace old_comp with

+
+
comp_attrsOptional[List[str]], optional

Attribute names in the dataclass to check, by default None

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this configuration.

+
+ +
+
+name: str | None = None
+

Name tied to this configuration.

+
+ +
+
+tags: List[str] | None = None
+

Tags tied to this configuration.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.ConfigurationFile.html b/v1.4.0/generated/generated/atef.config.ConfigurationFile.html new file mode 100644 index 00000000..424f4a6c --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.ConfigurationFile.html @@ -0,0 +1,279 @@ + + + + + + + atef.config.ConfigurationFile — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.ConfigurationFile

+
+
+class atef.config.ConfigurationFile(version: ~typing.Literal[0] = 0, root: ~atef.config.ConfigurationGroup = <factory>)[source]
+

A configuration file comprised of a number of devices/PV configurations.

+

Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

children()

Return children of this group, as a tree view might expect

from_filename(filename)

Load a configuration file from a file.

from_json(filename)

Load a configuration file from JSON.

from_yaml(filename)

Load a configuration file from yaml.

get_by_device(name)

Get all configurations that match the device name.

get_by_pv(pvname)

Get all configurations + IdentifierAndComparison that match the PV name.

get_by_tag(*tags)

Get all configurations that match the tag name.

to_json()

Dump this configuration file to a JSON-compatible dictionary.

to_yaml()

Dump this configuration file to yaml.

walk_configs()

Walk configurations defined in this file.

+

Methods

+
+
+__init__(version: ~typing.Literal[0] = 0, root: ~atef.config.ConfigurationGroup = <factory>) None
+
+ +
+
+children() List[ConfigurationGroup][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+classmethod from_filename(filename: str | Path) ConfigurationFile[source]
+

Load a configuration file from a file. Dispatches based on file type

+
+ +
+
+classmethod from_json(filename: str | Path) ConfigurationFile[source]
+

Load a configuration file from JSON.

+
+ +
+
+classmethod from_yaml(filename: str | Path) ConfigurationFile[source]
+

Load a configuration file from yaml.

+
+ +
+
+get_by_device(name: str) Generator[DeviceConfiguration, None, None][source]
+

Get all configurations that match the device name.

+
+ +
+
+get_by_pv(pvname: str) Generator[PVConfiguration, None, None][source]
+

Get all configurations + IdentifierAndComparison that match the PV name.

+
+ +
+
+get_by_tag(*tags: str) Generator[Configuration, None, None][source]
+

Get all configurations that match the tag name.

+
+ +
+
+to_json()[source]
+

Dump this configuration file to a JSON-compatible dictionary.

+
+ +
+
+to_yaml()[source]
+

Dump this configuration file to yaml.

+
+ +
+
+walk_configs() Generator[PVConfiguration | DeviceConfiguration | ToolConfiguration | ConfigurationGroup, None, None][source]
+

Walk configurations defined in this file. This includes the “root” +node.

+
+
Yields:
+
+
AnyConfiguration
+
+
+
+
+ +

Attributes

+
+
+version: Literal[0] = 0
+

atef configuration file version information.

+
+ +
+
+root: ConfigurationGroup
+

Top-level configuration group.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.ConfigurationGroup.html b/v1.4.0/generated/generated/atef.config.ConfigurationGroup.html new file mode 100644 index 00000000..b8e2d383 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.ConfigurationGroup.html @@ -0,0 +1,265 @@ + + + + + + + atef.config.ConfigurationGroup — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.ConfigurationGroup

+
+
+class atef.config.ConfigurationGroup(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, configs: ~typing.List[~atef.config.Configuration] = <factory>, values: ~typing.Dict[str, ~typing.Any] = <factory>, mode: ~atef.enums.GroupResultMode = GroupResultMode.all_)[source]
+

Configuration group.

+
+
Attributes:
+
+
description
+
name
+
tags
+
+
+
+

Methods

+ + + + + + + + + +

children()

Return children of this group, as a tree view might expect

replace_comparison(old_comp, new_comp[, ...])

Replace old_comp with new_comp in this dataclass, wherever it is.

+ + + + + + + + + +

move_comparison

walk_configs

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, configs: ~typing.List[~atef.config.Configuration] = <factory>, values: ~typing.Dict[str, ~typing.Any] = <factory>, mode: ~atef.enums.GroupResultMode = GroupResultMode.all_) None
+
+ +
+
+children() List[Configuration][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+move_comparison(comp: Comparison, new_attr: str, comp_attrs: List[str]) None
+
+ +
+
+replace_comparison(old_comp: Comparison, new_comp: Comparison, comp_attrs: List[str] | None = None) None
+

Replace old_comp with new_comp in this dataclass, wherever it is. +Looks through shared, then any of the attributes in comp_attrs

+
+
Parameters:
+
+
old_compComparison

Comparison to be replaced

+
+
new_compComparison

Comparison to replace old_comp with

+
+
comp_attrsOptional[List[str]], optional

Attribute names in the dataclass to check, by default None

+
+
+
+
+
+ +
+
+walk_configs() Generator[PVConfiguration | DeviceConfiguration | ToolConfiguration | ConfigurationGroup, None, None][source]
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this configuration.

+
+ +
+
+mode: GroupResultMode = 'all'
+

Result mode.

+
+ +
+
+name: str | None = None
+

Name tied to this configuration.

+
+ +
+
+tags: List[str] | None = None
+

Tags tied to this configuration.

+
+ +
+
+configs: List[Configuration]
+

Configurations underneath this group.

+
+ +
+
+values: Dict[str, Any]
+

Values that can be reused in comparisons underneath this group.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.DeviceConfiguration.html b/v1.4.0/generated/generated/atef.config.DeviceConfiguration.html new file mode 100644 index 00000000..78cecd22 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.DeviceConfiguration.html @@ -0,0 +1,264 @@ + + + + + + + atef.config.DeviceConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.DeviceConfiguration

+
+
+class atef.config.DeviceConfiguration(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, devices: ~typing.List[str] = <factory>, by_attr: ~typing.Dict[str, ~typing.List[~atef.check.Comparison]] = <factory>, shared: ~typing.List[~atef.check.Comparison] = <factory>)[source]
+

A configuration that is built to check one or more devices.

+

Identifiers are by default assumed to be attribute (component) names of the +devices. Identifiers may refer to components on the device +("component" would mean to access each device’s .component) or may +refer to any level of sub-device components ("sub_device.component" +would mean to access each device’s .sub_device and that sub-device’s +.a component).

+
+
Attributes:
+
+
description
+
name
+
tags
+
+
+
+

Methods

+ + + + + + + + + +

children()

Return children of this group, as a tree view might expect

replace_comparison(old_comp, new_comp[, ...])

Replace old_comp with new_comp in this dataclass, wherever it is.

+ + + + + + +

move_comparison

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, devices: ~typing.List[str] = <factory>, by_attr: ~typing.Dict[str, ~typing.List[~atef.check.Comparison]] = <factory>, shared: ~typing.List[~atef.check.Comparison] = <factory>) None
+
+ +
+
+children() List[Comparison][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+move_comparison(comp: Comparison, new_attr: str, comp_attrs: List[str] | None = None) None[source]
+
+ +
+
+replace_comparison(old_comp: Comparison, new_comp: Comparison, comp_attrs: List[str] | None = None) None[source]
+

Replace old_comp with new_comp in this dataclass, wherever it is. +Looks through shared, then any of the attributes in comp_attrs

+
+
Parameters:
+
+
old_compComparison

Comparison to be replaced

+
+
new_compComparison

Comparison to replace old_comp with

+
+
comp_attrsOptional[List[str]], optional

Attribute names in the dataclass to check, by default [‘by_attr’] if +no value is provided

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this configuration.

+
+ +
+
+name: str | None = None
+

Name tied to this configuration.

+
+ +
+
+tags: List[str] | None = None
+

Tags tied to this configuration.

+
+ +
+
+devices: List[str]
+

The device names.

+
+ +
+
+by_attr: Dict[str, List[Comparison]]
+

Device attribute name to comparison list.

+
+ +
+
+shared: List[Comparison]
+

Comparisons to be run on all identifiers in the by_attr dictionary.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.FailedConfiguration.html b/v1.4.0/generated/generated/atef.config.FailedConfiguration.html new file mode 100644 index 00000000..595fefcc --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.FailedConfiguration.html @@ -0,0 +1,195 @@ + + + + + + + atef.config.FailedConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.FailedConfiguration

+
+
+class atef.config.FailedConfiguration(parent: PreparedGroup | None, config: PVConfiguration | DeviceConfiguration | ToolConfiguration | ConfigurationGroup, result: Result, exception: Exception | None = None)[source]
+

A Configuration that failed to be prepared for running.

+
+
Attributes:
+
+
exception
+
+
+
+

Methods

+
+
+__init__(parent: PreparedGroup | None, config: PVConfiguration | DeviceConfiguration | ToolConfiguration | ConfigurationGroup, result: Result, exception: Exception | None = None) None
+
+ +

Attributes

+
+
+exception: Exception | None = None
+

Exception that was caught, if available.

+
+ +
+
+parent: PreparedGroup | None
+

The data cache to use for the preparation step.

+
+ +
+
+config: PVConfiguration | DeviceConfiguration | ToolConfiguration | ConfigurationGroup
+

Configuration instance.

+
+ +
+
+result: Result
+

The result with a severity.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PVConfiguration.html b/v1.4.0/generated/generated/atef.config.PVConfiguration.html new file mode 100644 index 00000000..759a4de5 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PVConfiguration.html @@ -0,0 +1,252 @@ + + + + + + + atef.config.PVConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PVConfiguration

+
+
+class atef.config.PVConfiguration(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, by_pv: ~typing.Dict[str, ~typing.List[~atef.check.Comparison]] = <factory>, shared: ~typing.List[~atef.check.Comparison] = <factory>)[source]
+

A configuration that is built to check live EPICS PVs.

+
+
Attributes:
+
+
description
+
name
+
tags
+
+
+
+

Methods

+ + + + + + + + + +

children()

Return children of this group, as a tree view might expect

replace_comparison(old_comp, new_comp[, ...])

Replace old_comp with new_comp in this dataclass, wherever it is.

+ + + + + + +

move_comparison

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, by_pv: ~typing.Dict[str, ~typing.List[~atef.check.Comparison]] = <factory>, shared: ~typing.List[~atef.check.Comparison] = <factory>) None
+
+ +
+
+children() List[Comparison][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+move_comparison(comp: Comparison, new_attr: str, comp_attrs: List[str] | None = None) None[source]
+
+ +
+
+replace_comparison(old_comp: Comparison, new_comp: Comparison, comp_attrs: List[str] | None = None) None[source]
+

Replace old_comp with new_comp in this dataclass, wherever it is. +Looks through shared, then any of the attributes in comp_attrs

+
+
Parameters:
+
+
old_compComparison

Comparison to be replaced

+
+
new_compComparison

Comparison to replace old_comp with

+
+
comp_attrsOptional[List[str]], optional

Attribute names in the dataclass to check, by default [‘by_pv’] if +no value is provided

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this configuration.

+
+ +
+
+name: str | None = None
+

Name tied to this configuration.

+
+ +
+
+tags: List[str] | None = None
+

Tags tied to this configuration.

+
+ +
+
+by_pv: Dict[str, List[Comparison]]
+

PV name to comparison list.

+
+ +
+
+shared: List[Comparison]
+

Comparisons to be run on all PVs in the by_pv dictionary.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedComparison.html b/v1.4.0/generated/generated/atef.config.PreparedComparison.html new file mode 100644 index 00000000..347f80e9 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedComparison.html @@ -0,0 +1,248 @@ + + + + + + + atef.config.PreparedComparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedComparison

+
+
+class atef.config.PreparedComparison(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.config.PreparedGroup | None = None, result: ~atef.result.Result = <factory>)[source]
+

A unified representation of comparisons for device signals and standalone PVs.

+
+
Attributes:
+
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

compare()

Run the comparison and return the Result.

get_data_async()

Get the data according to the comparison's configuration.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.config.PreparedGroup | None = None, result: ~atef.result.Result = <factory>) None
+
+ +
+
+async compare() Result[source]
+

Run the comparison and return the Result.

+
+
Returns:
+
+
Result

The result of the comparison.

+
+
+
+
+
+ +
+
+async get_data_async() Any[source]
+

Get the data according to the comparison’s configuration.

+

To be implemented in subclass.

+
+
Returns:
+
+
dataAny

The acquired data.

+
+
+
+
+
+ +

Attributes

+
+
+identifier: str = ''
+

The identifier used for the comparison.

+
+ +
+
+name: str | None = None
+

The name of the associated configuration.

+
+ +
+
+parent: PreparedGroup | None = None
+

The hierarhical parent of this comparison.

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+comparison: Comparison
+

The comparison itself.

+
+ +
+
+result: Result
+

The last result of the comparison, if run.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedConfiguration.html b/v1.4.0/generated/generated/atef.config.PreparedConfiguration.html new file mode 100644 index 00000000..361af676 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedConfiguration.html @@ -0,0 +1,259 @@ + + + + + + + atef.config.PreparedConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedConfiguration

+
+
+class atef.config.PreparedConfiguration(cache: ~atef.cache.DataCache, parent: ~atef.config.PreparedGroup | None = None, comparisons: ~typing.List[~atef.config.PreparedSignalComparison | ~atef.config.PreparedToolComparison] = <factory>, prepare_failures: ~typing.List[~atef.exceptions.PreparedComparisonException] = <factory>, combined_result: ~atef.result.Result = <factory>)[source]
+

Base class for a Configuration that has been prepared to run.

+
+
Attributes:
+
+
parent
+
result

Re-compute the combined result and return it

+
+
+
+
+

Methods

+ + + + + + + + + + + + +

compare()

Run all comparisons and return a combined result.

from_config(config[, parent, client, cache])

Prepare a Configuration for running.

walk_comparisons()

Walk through the prepared comparisons.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, parent: ~atef.config.PreparedGroup | None = None, comparisons: ~typing.List[~atef.config.PreparedSignalComparison | ~atef.config.PreparedToolComparison] = <factory>, prepare_failures: ~typing.List[~atef.exceptions.PreparedComparisonException] = <factory>, combined_result: ~atef.result.Result = <factory>) None
+
+ +
+
+async compare() Result[source]
+

Run all comparisons and return a combined result.

+
+ +
+
+classmethod from_config(config: PVConfiguration | DeviceConfiguration | ToolConfiguration | ConfigurationGroup, parent: PreparedGroup | None = None, *, client: Client | None = None, cache: DataCache | None = None) PreparedPVConfiguration | PreparedDeviceConfiguration | PreparedToolConfiguration | PreparedGroup | FailedConfiguration[source]
+

Prepare a Configuration for running.

+

If available, provide an instantiated happi Client and a data +cache. If unspecified, a configuration-derived happi Client will +be instantiated and a new data cache will be utilized.

+

It is recommended to share a data cache on a per-configuration file +basis.

+
+
Parameters:
+
+
config{PV,Device,Tool}Configuration or ConfigurationGroup

The configuration.

+
+
clienthappi.Client, optional

A happi Client instance.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
+
+ +
+
+walk_comparisons() Generator[PreparedComparison, None, None][source]
+

Walk through the prepared comparisons.

+
+ +

Attributes

+
+
+parent: PreparedGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+result
+

Re-compute the combined result and return it

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+comparisons: List[PreparedSignalComparison | PreparedToolComparison]
+

The comparisons to be run on the given devices.

+
+ +
+
+prepare_failures: List[PreparedComparisonException]
+

The comparisons that failed to be prepared.

+
+ +
+
+combined_result: Result
+

The result of all comparisons.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedDeviceConfiguration.html b/v1.4.0/generated/generated/atef.config.PreparedDeviceConfiguration.html new file mode 100644 index 00000000..9c6cacb2 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedDeviceConfiguration.html @@ -0,0 +1,311 @@ + + + + + + + atef.config.PreparedDeviceConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedDeviceConfiguration

+
+
+class atef.config.PreparedDeviceConfiguration(cache: 'DataCache', parent: 'Optional[PreparedGroup]' = None, comparisons: 'List[PreparedSignalComparison]' = <factory>, prepare_failures: 'List[PreparedComparisonException]' = <factory>, combined_result: 'Result' = <factory>, config: 'DeviceConfiguration' = <factory>, devices: 'List[ophyd.Device]' = <factory>)[source]
+
+
Attributes:
+
+
parent
+
result

Re-compute the combined result and return it

+
+
+
+
+

Methods

+ + + + + + + + + + + + + + + +

compare()

Run all comparisons and return a combined result.

from_config(config[, client, parent, cache, ...])

Prepare a DeviceConfiguration for running comparisons.

from_device(device, by_attr[, shared, ...])

Create a PreparedDeviceConfiguration given a device and some checks.

walk_comparisons()

Walk through the prepared comparisons.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, parent: ~atef.config.PreparedGroup | None = None, comparisons: ~typing.List[~atef.config.PreparedSignalComparison] = <factory>, prepare_failures: ~typing.List[~atef.exceptions.PreparedComparisonException] = <factory>, combined_result: ~atef.result.Result = <factory>, config: ~atef.config.DeviceConfiguration = <factory>, devices: ~typing.List[~ophyd.device.Device] = <factory>) None
+
+ +
+
+async compare() Result
+

Run all comparisons and return a combined result.

+
+ +
+
+classmethod from_config(config: DeviceConfiguration, client: Client | None = None, parent: PreparedGroup | None = None, cache: DataCache | None = None, additional_devices: List[Device] | None = None) PreparedDeviceConfiguration[source]
+

Prepare a DeviceConfiguration for running comparisons.

+
+
Parameters:
+
+
configDeviceConfiguration

The configuration to prepare.

+
+
parentPreparedGroup, optional

The parent group, if applicable.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
clienthappi.Client, optional

A happi Client, if available.

+
+
additional_devicesList[ophyd.Device], optional

Additional devices (aside from those in the DeviceConfiguration) +to add to the PreparedDeviceConfiguration list.

+
+
+
+
Returns:
+
+
FailedConfiguration or PreparedDeviceConfiguration

If one or more devices is unavailable, a FailedConfiguration +instance will be returned.

+
+
+
+
+
+ +
+
+classmethod from_device(device: Device | Sequence[Device], by_attr: Dict[str, List[Comparison]], shared: List[Comparison] | None = None, parent: PreparedGroup | None = None, cache: DataCache | None = None, client: Client | None = None) PreparedDeviceConfiguration[source]
+

Create a PreparedDeviceConfiguration given a device and some checks.

+
+
Parameters:
+
+
deviceUnion[ophyd.Device, Sequence[ophyd.Device]]

The device or devices to check.

+
+
by_attrDict[str, List[Comparison]]

Device attribute name to comparison list.

+
+
sharedList[Comparison], optional

Comparisons to be run on all signals identified in the by_attr +dictionary.

+
+
parentPreparedGroup, optional

The parent group, if applicable.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
clienthappi.Client, optional

A happi Client, if available.

+
+
+
+
Returns:
+
+
PreparedDeviceConfiguration
+
+
+
+
+ +
+
+walk_comparisons() Generator[PreparedComparison, None, None]
+

Walk through the prepared comparisons.

+
+ +

Attributes

+
+
+parent: PreparedGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+result
+

Re-compute the combined result and return it

+
+ +
+
+config: DeviceConfiguration
+

The configuration settings.

+
+ +
+
+devices: List[Device]
+

The device the comparisons apply to.

+
+ +
+
+comparisons: List[PreparedSignalComparison]
+

The comparisons to be run on the given devices.

+
+ +
+
+prepare_failures: List[PreparedComparisonException]
+

The comparisons that failed to be prepared.

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+combined_result: Result
+

The result of all comparisons.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedFile.html b/v1.4.0/generated/generated/atef.config.PreparedFile.html new file mode 100644 index 00000000..59e08613 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedFile.html @@ -0,0 +1,279 @@ + + + + + + + atef.config.PreparedFile — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedFile

+
+
+class atef.config.PreparedFile(cache: 'DataCache', file: 'ConfigurationFile', client: 'happi.Client', root: 'PreparedGroup')[source]
+

Methods

+ + + + + + + + + + + + + + + + + + + + + +

children()

Return children of this group, as a tree view might expect

compare()

Run all comparisons and return a combined result.

fill_cache([parallel])

Fill the DataCache.

from_config(file, *[, client, cache])

Prepare a ConfigurationFile for running.

walk_comparisons()

Walk through the prepared comparisons.

walk_groups()

Walk through the prepared groups.

+

Methods

+
+
+__init__(cache: DataCache, file: ConfigurationFile, client: Client, root: PreparedGroup) None
+
+ +
+
+children() List[PreparedGroup][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+async compare() Result[source]
+

Run all comparisons and return a combined result.

+
+ +
+
+async fill_cache(parallel: bool = True) List[Task] | None[source]
+

Fill the DataCache.

+
+
Parameters:
+
+
parallelbool, optional

By default, fill the cache in parallel with multiple asyncio tasks. +If False, fill the cache sequentially.

+
+
+
+
Returns:
+
+
List[asyncio.Task] or None

The tasks created when in parallel mode.

+
+
+
+
+
+ +
+
+classmethod from_config(file: ConfigurationFile, *, client: Client | None = None, cache: DataCache | None = None) PreparedFile[source]
+

Prepare a ConfigurationFile for running.

+

If available, provide an instantiated happi Client and a data +cache. If unspecified, a configuration-derived happi Client will +be instantiated and a new data cache will be utilized.

+

The provided cache (or a new one) will be utilized for every +configuration/comparison in the file.

+
+
Parameters:
+
+
fileConfigurationFile

The configuration file instance.

+
+
clienthappi.Client, optional

A happi Client instance.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
+
+ +
+
+walk_comparisons() Generator[PreparedComparison, None, None][source]
+

Walk through the prepared comparisons.

+
+ +
+
+walk_groups() Generator[PreparedDeviceConfiguration | PreparedGroup | PreparedPVConfiguration | PreparedToolConfiguration, None, None][source]
+

Walk through the prepared groups.

+
+ +

Attributes

+
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+file: ConfigurationFile
+

The corresponding configuration file information.

+
+ +
+
+client: Client
+

The happi client instance.

+
+ +
+
+root: PreparedGroup
+

The comparisons defined in the top-level file.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedGroup.html b/v1.4.0/generated/generated/atef.config.PreparedGroup.html new file mode 100644 index 00000000..fe3ec85b --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedGroup.html @@ -0,0 +1,328 @@ + + + + + + + atef.config.PreparedGroup — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedGroup

+
+
+class atef.config.PreparedGroup(cache: 'DataCache', parent: 'Optional[Union[PreparedGroup, PreparedFile]]' = None, comparisons: 'List[Union[PreparedSignalComparison, PreparedToolComparison]]' = <factory>, prepare_failures: 'List[FailedConfiguration]' = <factory>, combined_result: 'Result' = <factory>, config: 'ConfigurationGroup' = <factory>, configs: 'List[AnyPreparedConfiguration]' = <factory>)[source]
+
+
Attributes:
+
+
parent
+
result

Re-compute the combined result and return it

+
+
subgroups

Direct descendent subgroups in this group.

+
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + +

compare()

Run all comparisons and return a combined result.

from_config(group[, parent, client, cache])

Prepare a ConfigurationGroup for running.

get_value_by_name(name)

Get a value defined in this group or in any ancestor.

walk_comparisons()

Walk through the prepared comparisons.

walk_groups()

Walk through the prepared groups.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, parent: ~atef.config.PreparedGroup | ~atef.config.PreparedFile | None = None, comparisons: ~typing.List[~atef.config.PreparedSignalComparison | ~atef.config.PreparedToolComparison] = <factory>, prepare_failures: ~typing.List[~atef.config.FailedConfiguration] = <factory>, combined_result: ~atef.result.Result = <factory>, config: ~atef.config.ConfigurationGroup = <factory>, configs: ~typing.List[~atef.config.PreparedDeviceConfiguration | ~atef.config.PreparedGroup | ~atef.config.PreparedPVConfiguration | ~atef.config.PreparedToolConfiguration] = <factory>) None
+
+ +
+
+async compare() Result[source]
+

Run all comparisons and return a combined result.

+
+ +
+
+classmethod from_config(group: ConfigurationGroup, parent: PreparedGroup | PreparedFile | None = None, *, client: Client | None = None, cache: DataCache | None = None) PreparedGroup[source]
+

Prepare a ConfigurationGroup for running.

+

If available, provide an instantiated happi Client and a data +cache. If unspecified, a configuration-derived happi Client will +be instantiated and a new data cache will be utilized.

+

The provided cache (or a new one) will be utilized for every +configuration/comparison in the file.

+
+
Parameters:
+
+
groupConfigurationGroup

The configuration group instance.

+
+
parentPreparedGroup or PreparedFile, optional

The parent instance of the group. If this is the root +configuration, the parent may be a PreparedFile.

+
+
clienthappi.Client, optional

A happi Client instance.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
+
+ +
+
+get_value_by_name(name: str) Any[source]
+

Get a value defined in this group or in any ancestor. The first found +is returned.

+
+
Parameters:
+
+
namestr

The key name for the variables dictionary.

+
+
+
+
Returns:
+
+
Any

Value defined for the given key.

+
+
+
+
Raises:
+
+
KeyError

If the key is not defined on this group or any ancestor group.

+
+
+
+
+
+ +
+
+walk_comparisons() Generator[PreparedComparison, None, None][source]
+

Walk through the prepared comparisons.

+
+ +
+
+walk_groups() Generator[PreparedDeviceConfiguration | PreparedGroup | PreparedPVConfiguration | PreparedToolConfiguration, None, None][source]
+

Walk through the prepared groups.

+
+ +

Attributes

+
+
+parent: PreparedGroup | PreparedFile | None = None
+

The hierarhical parent of this group. If this is the root group, +‘parent’ may be a PreparedFile.

+
+ +
+
+result
+

Re-compute the combined result and return it

+
+ +
+
+subgroups
+

Direct descendent subgroups in this group.

+
+
Returns:
+
+
List[PreparedGroup]
+
+
+
+
+ +
+
+config: ConfigurationGroup
+

The corresponding group from the configuration file.

+
+ +
+
+configs: List[PreparedDeviceConfiguration | PreparedGroup | PreparedPVConfiguration | PreparedToolConfiguration]
+

The configs defined in the group.

+
+ +
+
+prepare_failures: List[FailedConfiguration]
+

The configs that failed to prepare.

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+comparisons: List[PreparedSignalComparison | PreparedToolComparison]
+

The comparisons to be run on the given devices.

+
+ +
+
+combined_result: Result
+

The result of all comparisons.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedPVConfiguration.html b/v1.4.0/generated/generated/atef.config.PreparedPVConfiguration.html new file mode 100644 index 00000000..0e8639b6 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedPVConfiguration.html @@ -0,0 +1,293 @@ + + + + + + + atef.config.PreparedPVConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedPVConfiguration

+
+
+class atef.config.PreparedPVConfiguration(cache: 'DataCache', parent: 'Optional[PreparedGroup]' = None, comparisons: 'List[PreparedSignalComparison]' = <factory>, prepare_failures: 'List[PreparedComparisonException]' = <factory>, combined_result: 'Result' = <factory>, config: 'PVConfiguration' = <factory>)[source]
+
+
Attributes:
+
+
parent
+
result

Re-compute the combined result and return it

+
+
+
+
+

Methods

+ + + + + + + + + + + + + + + +

compare()

Run all comparisons and return a combined result.

from_config(config[, parent, cache])

Prepare a PVConfiguration for running.

from_pvs(by_pv[, shared, parent, cache])

Ready a set of PV checks without requiring an existing PVConfiguration.

walk_comparisons()

Walk through the prepared comparisons.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, parent: ~atef.config.PreparedGroup | None = None, comparisons: ~typing.List[~atef.config.PreparedSignalComparison] = <factory>, prepare_failures: ~typing.List[~atef.exceptions.PreparedComparisonException] = <factory>, combined_result: ~atef.result.Result = <factory>, config: ~atef.config.PVConfiguration = <factory>) None
+
+ +
+
+async compare() Result
+

Run all comparisons and return a combined result.

+
+ +
+
+classmethod from_config(config: PVConfiguration, parent: PreparedGroup | None = None, cache: DataCache | None = None) PreparedPVConfiguration[source]
+

Prepare a PVConfiguration for running.

+
+
Parameters:
+
+
configPVConfiguration

The configuration settings.

+
+
parentPreparedGroup, optional

The parent group.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedPVConfiguration
+
+
+
+
+ +
+
+classmethod from_pvs(by_pv: Dict[str, List[Comparison]], shared: List[Comparison] | None = None, parent: PreparedGroup | None = None, cache: DataCache | None = None) PreparedPVConfiguration[source]
+

Ready a set of PV checks without requiring an existing PVConfiguration.

+
+
Parameters:
+
+
by_pvDict[str, List[Comparison]]

PV name to comparison list.

+
+
sharedlist of Comparison, optional

Comparisons to be run on all PVs in the by_pv dictionary.

+
+
parentPreparedGroup, optional

The parent group.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedPVConfiguration
+
+
+
+
+ +
+
+walk_comparisons() Generator[PreparedComparison, None, None]
+

Walk through the prepared comparisons.

+
+ +

Attributes

+
+
+parent: PreparedGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+result
+

Re-compute the combined result and return it

+
+ +
+
+config: PVConfiguration
+

The configuration settings.

+
+ +
+
+comparisons: List[PreparedSignalComparison]
+

The comparisons to be run on the given devices.

+
+ +
+
+prepare_failures: List[PreparedComparisonException]
+

The comparisons to be run on the given devices.

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+combined_result: Result
+

The result of all comparisons.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedSignalComparison.html b/v1.4.0/generated/generated/atef.config.PreparedSignalComparison.html new file mode 100644 index 00000000..825d8c69 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedSignalComparison.html @@ -0,0 +1,389 @@ + + + + + + + atef.config.PreparedSignalComparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedSignalComparison

+
+
+class atef.config.PreparedSignalComparison(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.config.PreparedDeviceConfiguration | ~atef.config.PreparedPVConfiguration | None = None, result: ~atef.result.Result = <factory>, device: ~ophyd.device.Device | None = None, signal: ~ophyd.signal.Signal | None = None, data: ~typing.Any | None = None)[source]
+

A unified representation of comparisons for device signals and standalone +PVs.

+

Each PreparedSignalComparison has a single leaf in the configuration tree, +comprised of: +* A configuration +* The signal specification. This is comprised of the configuration and

+
+

“IdentifierAndComparison” +- DeviceConfiguration: Device and attribute (the “identifier”) +- PVConfiguration: PV name (the “identifier”)

+
+
    +
  • +
    A comparison to run
      +
    • Including data reduction settings

    • +
    +
    +
    +
  • +
+
+
Attributes:
+
+
data
+
device
+
name
+
parent
+
signal
+
+
+
+

Methods

+ + + + + + + + + + + + + + + + + + +

compare()

Run the comparison and return the Result.

from_device(device, attr, comparison[, ...])

Create one PreparedComparison from a device, attribute, and comparison.

from_pvname(pvname, comparison[, name, ...])

Create one PreparedComparison from a PV name and comparison.

from_signal(signal, comparison[, name, ...])

Create a PreparedSignalComparison from a signal directly

get_data_async()

Get the provided signal's data from the cache according to the reduction configuration.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.config.PreparedDeviceConfiguration | ~atef.config.PreparedPVConfiguration | None = None, result: ~atef.result.Result = <factory>, device: ~ophyd.device.Device | None = None, signal: ~ophyd.signal.Signal | None = None, data: ~typing.Any | None = None) None
+
+ +
+
+async compare() Result
+

Run the comparison and return the Result.

+
+
Returns:
+
+
Result

The result of the comparison.

+
+
+
+
+
+ +
+
+classmethod from_device(device: Device, attr: str, comparison: Comparison, name: str | None = None, parent: PreparedDeviceConfiguration | None = None, cache: DataCache | None = None) PreparedSignalComparison[source]
+

Create one PreparedComparison from a device, attribute, and comparison.

+
+
Parameters:
+
+
deviceophyd.Device

The ophyd Device.

+
+
attrstr

The attribute name of the component. May be in dotted notation.

+
+
comparisonComparison

The comparison instance to run on the PV.

+
+
namestr, optional

The name of this comparison.

+
+
parentPreparedPVConfiguration, optional

The parent configuration, if available.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedSignalComparison
+
+
+
+
+ +
+
+classmethod from_pvname(pvname: str, comparison: Comparison, name: str | None = None, parent: PreparedPVConfiguration | None = None, cache: DataCache | None = None) PreparedSignalComparison[source]
+

Create one PreparedComparison from a PV name and comparison.

+
+
Parameters:
+
+
pvnamestr

The PV name.

+
+
comparisonComparison

The comparison instance to run on the PV.

+
+
namestr, optional

The name of this comparison.

+
+
parentPreparedPVConfiguration, optional

The parent configuration, if available.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedSignalComparison
+
+
+
+
+ +
+
+classmethod from_signal(signal: Signal, comparison: Comparison, name: str | None = None, parent: PreparedPVConfiguration | None = None, cache: DataCache | None = None) PreparedSignalComparison[source]
+

Create a PreparedSignalComparison from a signal directly

+
+
Parameters:
+
+
signalophyd.Signal

The signal to compare

+
+
comparisonComparison

The comparison instance to run on the PV.

+
+
namestr, optional

The name of this comparison.

+
+
parentPreparedPVConfiguration, optional

The parent configuration, if available.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedSignalComparison
+
+
+
+
+ +
+
+async get_data_async() Any[source]
+

Get the provided signal’s data from the cache according to the +reduction configuration.

+
+
Returns:
+
+
dataAny

The acquired data.

+
+
+
+
Raises:
+
+
TimeoutError

If unable to connect or retrieve data from the signal.

+
+
+
+
+
+ +

Attributes

+
+
+data: Any | None = None
+

The value from the signal the comparison is to be run on.

+
+ +
+
+device: Device | None = None
+

The device the comparison applies to, if applicable.

+
+ +
+
+identifier: str = ''
+

The identifier used for the comparison.

+
+ +
+
+name: str | None = None
+

The name of the associated configuration.

+
+ +
+
+parent: PreparedDeviceConfiguration | PreparedPVConfiguration | None = None
+

The hierarhical parent of this comparison.

+
+ +
+
+signal: Signal | None = None
+

The signal the comparison is to be run on.

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+comparison: Comparison
+

The comparison itself.

+
+ +
+
+result: Result
+

The last result of the comparison, if run.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedToolComparison.html b/v1.4.0/generated/generated/atef.config.PreparedToolComparison.html new file mode 100644 index 00000000..27e9771e --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedToolComparison.html @@ -0,0 +1,300 @@ + + + + + + + atef.config.PreparedToolComparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedToolComparison

+
+
+class atef.config.PreparedToolComparison(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.config.PreparedGroup | None = None, result: ~atef.result.Result = <factory>, tool: ~atef.tools.Tool = <factory>)[source]
+

A unified representation of comparisons for device signals and standalone PVs.

+

Each PreparedToolComparison has a single leaf in the configuration tree, +comprised of:

+
    +
  • A configuration

  • +
  • The tool configuration (i.e., a tools.Tool instance)

  • +
  • Identifiers to compare are dependent on the tool type

  • +
  • +
    A comparison to run
    +
    +
    +
  • +
+
+
Attributes:
+
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + + + + +

compare()

Run the comparison and return the Result.

from_tool(tool, result_key, comparison[, ...])

Prepare a tool-based comparison for execution.

get_data_async()

Get the provided tool's result data from the cache.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.config.PreparedGroup | None = None, result: ~atef.result.Result = <factory>, tool: ~atef.tools.Tool = <factory>) None
+
+ +
+
+async compare() Result
+

Run the comparison and return the Result.

+
+
Returns:
+
+
Result

The result of the comparison.

+
+
+
+
+
+ +
+
+classmethod from_tool(tool: Tool, result_key: str, comparison: Comparison, name: str | None = None, parent: PreparedToolConfiguration | None = None, cache: DataCache | None = None) PreparedToolComparison[source]
+

Prepare a tool-based comparison for execution.

+
+
Parameters:
+
+
toolTool

The tool to run.

+
+
result_keystr

The key from the result dictionary to check after running the tool.

+
+
comparisonComparison

The comparison to perform on the tool’s results (looking at the +specific result_key).

+
+
namestr, optional

The name of the comparison.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedToolComparison
+
+
+
+
+ +
+
+async get_data_async() Any[source]
+

Get the provided tool’s result data from the cache.

+
+
Returns:
+
+
dataAny

The acquired data.

+
+
+
+
+
+ +

Attributes

+
+
+identifier: str = ''
+

The identifier used for the comparison.

+
+ +
+
+name: str | None = None
+

The name of the associated configuration.

+
+ +
+
+parent: PreparedGroup | None = None
+

The hierarhical parent of this comparison.

+
+ +
+
+tool: Tool
+

The device the comparison applies to, if applicable.

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+comparison: Comparison
+

The comparison itself.

+
+ +
+
+result: Result
+

The last result of the comparison, if run.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.PreparedToolConfiguration.html b/v1.4.0/generated/generated/atef.config.PreparedToolConfiguration.html new file mode 100644 index 00000000..54113296 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.PreparedToolConfiguration.html @@ -0,0 +1,296 @@ + + + + + + + atef.config.PreparedToolConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.PreparedToolConfiguration

+
+
+class atef.config.PreparedToolConfiguration(cache: 'DataCache', parent: 'Optional[PreparedGroup]' = None, comparisons: 'List[PreparedSignalComparison]' = <factory>, prepare_failures: 'List[PreparedComparisonException]' = <factory>, combined_result: 'Result' = <factory>, config: 'ToolConfiguration' = <factory>)[source]
+
+
Attributes:
+
+
parent
+
result

Re-compute the combined result and return it

+
+
+
+
+

Methods

+ + + + + + + + + + + + + + + +

compare()

Run all comparisons and return a combined result.

from_config(config[, parent, cache])

Prepare a ToolConfiguration for running.

from_tool(tool, by_attr[, shared, parent, cache])

Prepare a Tool for running tests without an associated configuration.

walk_comparisons()

Walk through the prepared comparisons.

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, parent: ~atef.config.PreparedGroup | None = None, comparisons: ~typing.List[~atef.config.PreparedSignalComparison] = <factory>, prepare_failures: ~typing.List[~atef.exceptions.PreparedComparisonException] = <factory>, combined_result: ~atef.result.Result = <factory>, config: ~atef.config.ToolConfiguration = <factory>) None
+
+ +
+
+async compare() Result
+

Run all comparisons and return a combined result.

+
+ +
+
+classmethod from_config(config: ToolConfiguration, parent: PreparedGroup | None = None, cache: DataCache | None = None) PreparedToolConfiguration[source]
+

Prepare a ToolConfiguration for running.

+
+
Parameters:
+
+
configToolConfiguration

The tool configuration instance.

+
+
parentPreparedGroup, optional

The parent group, if available.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedToolConfiguration
+
+
+
+
+ +
+
+classmethod from_tool(tool: Tool, by_attr: Dict[str, List[Comparison]], shared: List[Comparison] | None = None, parent: PreparedGroup | None = None, cache: DataCache | None = None) PreparedToolConfiguration[source]
+

Prepare a Tool for running tests without an associated configuration.

+
+
Parameters:
+
+
tooltools.Tool

The tool instance.

+
+
by_attrDict[str, List[Comparison]]

A dictionary of tool result attributes to comparisons.

+
+
sharedList[Comparison], optional

A list of comparisons to run on every key of the by_attr +dictionary.

+
+
parentPreparedGroup, optional

The parent group, if available.

+
+
cacheDataCache, optional

The data cache instance, if available. If unspecified, a new data +cache will be instantiated.

+
+
+
+
Returns:
+
+
PreparedToolConfiguration
+
+
+
+
+ +
+
+walk_comparisons() Generator[PreparedComparison, None, None]
+

Walk through the prepared comparisons.

+
+ +

Attributes

+
+
+parent: PreparedGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+result
+

Re-compute the combined result and return it

+
+ +
+
+config: ToolConfiguration
+

The configuration settings.

+
+ +
+
+comparisons: List[PreparedSignalComparison]
+

The comparisons to be run on the given devices.

+
+ +
+
+prepare_failures: List[PreparedComparisonException]
+

The comparisons that failed to be prepared.

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+combined_result: Result
+

The result of all comparisons.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.ToolConfiguration.html b/v1.4.0/generated/generated/atef.config.ToolConfiguration.html new file mode 100644 index 00000000..08886da2 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.ToolConfiguration.html @@ -0,0 +1,261 @@ + + + + + + + atef.config.ToolConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.ToolConfiguration

+
+
+class atef.config.ToolConfiguration(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, tool: ~atef.tools.Tool = <factory>, by_attr: ~typing.Dict[str, ~typing.List[~atef.check.Comparison]] = <factory>, shared: ~typing.List[~atef.check.Comparison] = <factory>)[source]
+

A configuration unrelated to PVs or Devices which verifies status via some +tool.

+

Comparisons can optionally be run on the tool’s results.

+
+
Attributes:
+
+
description
+
name
+
tags
+
+
+
+

Methods

+ + + + + + + + + +

children()

Return children of this group, as a tree view might expect

replace_comparison(old_comp, new_comp[, ...])

Replace old_comp with new_comp in this dataclass, wherever it is.

+ + + + + + +

move_comparison

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, tags: ~typing.List[str] | None = None, tool: ~atef.tools.Tool = <factory>, by_attr: ~typing.Dict[str, ~typing.List[~atef.check.Comparison]] = <factory>, shared: ~typing.List[~atef.check.Comparison] = <factory>) None
+
+ +
+
+children() List[Comparison][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+move_comparison(comp: Comparison, new_attr: str, comp_attrs: List[str] | None = None) None[source]
+
+ +
+
+replace_comparison(old_comp: Comparison, new_comp: Comparison, comp_attrs: List[str] | None = None) None[source]
+

Replace old_comp with new_comp in this dataclass, wherever it is. +Looks through shared, then any of the attributes in comp_attrs

+
+
Parameters:
+
+
old_compComparison

Comparison to be replaced

+
+
new_compComparison

Comparison to replace old_comp with

+
+
comp_attrsOptional[List[str]], optional

Attribute names in the dataclass to check, by default [‘by_attr’] if +no value is provided

+
+
+
+
+
+ +

Attributes

+
+
+description: str | None = None
+

Description tied to this configuration.

+
+ +
+
+name: str | None = None
+

Name tied to this configuration.

+
+ +
+
+tags: List[str] | None = None
+

Tags tied to this configuration.

+
+ +
+
+tool: Tool
+

The tool and its settings. Subclasses such as “Ping” are expected +here.

+
+ +
+
+by_attr: Dict[str, List[Comparison]]
+

Result attribute name to comparison list.

+
+ +
+
+shared: List[Comparison]
+

Comparisons to be run on all identifiers in the by_attr dictionary.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.get_result_from_comparison.html b/v1.4.0/generated/generated/atef.config.get_result_from_comparison.html new file mode 100644 index 00000000..932efe79 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.get_result_from_comparison.html @@ -0,0 +1,174 @@ + + + + + + + atef.config.get_result_from_comparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.config.get_result_from_comparison

+
+
+atef.config.get_result_from_comparison(item: PreparedComparison | Exception | None) Tuple[PreparedComparison | None, Result][source]
+

Get a Result, if available, from the provided arguments.

+

In the case of an exception (or None/internal error), create one.

+
+
Parameters:
+
+
itemUnion[PreparedComparison, Exception, None]

The item to grab a result from.

+
+
+
+
Returns:
+
+
PreparedComparison or None

The prepared comparison, if available

+
+
Result

The result instance.

+
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.config.run_passive_step.html b/v1.4.0/generated/generated/atef.config.run_passive_step.html new file mode 100644 index 00000000..30ca53f4 --- /dev/null +++ b/v1.4.0/generated/generated/atef.config.run_passive_step.html @@ -0,0 +1,157 @@ + + + + + + + atef.config.run_passive_step — atef documentation + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.CodeStep.html b/v1.4.0/generated/generated/atef.procedure.CodeStep.html new file mode 100644 index 00000000..d2aa85e2 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.CodeStep.html @@ -0,0 +1,254 @@ + + + + + + + atef.procedure.CodeStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.CodeStep

+
+
+class atef.procedure.CodeStep(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, source_code: str = '', arguments: ~typing.Dict[~typing.Any, ~typing.Any] = <factory>)[source]
+

Run source code in a procedure.

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, source_code: str = '', arguments: ~typing.Dict[~typing.Any, ~typing.Any] = <factory>) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[Any]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+source_code: str = ''
+

The source code to execute.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+arguments: Dict[Any, Any]
+

Arguments to pass into the code.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.ComparisonToPlanData.html b/v1.4.0/generated/generated/atef.procedure.ComparisonToPlanData.html new file mode 100644 index 00000000..85313c92 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.ComparisonToPlanData.html @@ -0,0 +1,231 @@ + + + + + + + atef.procedure.ComparisonToPlanData — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.ComparisonToPlanData

+
+
+class atef.procedure.ComparisonToPlanData(name: 'str' = '', plan_id: 'Optional[str]' = None, plan_no: 'int' = 0, data_points: 'Union[List[int], Tuple[int, int]]' = <factory>, field_names: 'List[str]' = <factory>, reduction_mode: 'ReduceMethod' = <ReduceMethod.average: 'average'>, comparison: 'Optional[Comparison]' = None)[source]
+
+
Attributes:
+
+
comparison
+
plan_id
+
+
+
+

Methods

+
+
+__init__(name: str = '', plan_id: str | None = None, plan_no: int = 0, data_points: ~typing.List[int] | ~typing.Tuple[int, int] = <factory>, field_names: ~typing.List[str] = <factory>, reduction_mode: ~atef.reduce.ReduceMethod = ReduceMethod.average, comparison: ~atef.check.Comparison | None = None) None
+
+ +

Attributes

+
+
+comparison: Comparison | None = None
+

the comparison to apply to the target

+
+ +
+
+name: str = ''
+

user-provided name for this plan data. Not used to identify the run

+
+ +
+
+plan_id: str | None = None
+

identifier of PlanStep to grab data from. +set via GUI, must match a PreparedPlan.plan_id. Options should be fixed +and regenerated with every view

+
+ +
+
+plan_no: int = 0
+

plan number (for plans containing nested plans, which return multiple uuids)

+
+ +
+
+reduction_mode: ReduceMethod = 'average'
+

data reduction / operation

+
+ +
+
+data_points: List[int] | Tuple[int, int]
+

data point(s) in plan (0-indexed) or slice notation +[row_start, row_end)

+
+ +
+
+field_names: List[str]
+

Field / column names to grab data from

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.ComparisonToTarget.html b/v1.4.0/generated/generated/atef.procedure.ComparisonToTarget.html new file mode 100644 index 00000000..717f7e11 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.ComparisonToTarget.html @@ -0,0 +1,242 @@ + + + + + + + atef.procedure.ComparisonToTarget — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.ComparisonToTarget

+
+
+class atef.procedure.ComparisonToTarget(name: 'Optional[str]' = None, device: 'Optional[str]' = None, attr: 'Optional[str]' = None, pv: 'Optional[str]' = None, comparison: 'Optional[Comparison]' = None)[source]
+
+
Attributes:
+
+
attr
+
comparison
+
device
+
name
+
pv
+
+
+
+

Methods

+ + + + + + +

to_signal([signal_cache])

Return the signal described by this Target.

+

Methods

+
+
+__init__(name: str | None = None, device: str | None = None, attr: str | None = None, pv: str | None = None, comparison: Comparison | None = None) None
+
+ +
+
+to_signal(signal_cache: _SignalCache | None = None) Signal | None
+

Return the signal described by this Target. First attempts to use the +device + attr information to look up the signal in happi, falling back +to the raw PV.

+
+
Returns:
+
+
ophyd.Signal

the signal described by this Target

+
+
+
+
+
+ +

Attributes

+
+
+attr: str | None = None
+
+ +
+
+comparison: Comparison | None = None
+

the comparison to apply to the target

+
+ +
+
+device: str | None = None
+

device name and attr

+
+ +
+
+name: str | None = None
+

name of target

+
+ +
+
+pv: str | None = None
+

EPICS PV

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.ConfigurationCheckStep.html b/v1.4.0/generated/generated/atef.procedure.ConfigurationCheckStep.html new file mode 100644 index 00000000..a37d76fc --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.ConfigurationCheckStep.html @@ -0,0 +1,248 @@ + + + + + + + atef.procedure.ConfigurationCheckStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.ConfigurationCheckStep

+
+
+class atef.procedure.ConfigurationCheckStep(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, devices: ~typing.Dict[str, ~atef.procedure.DeviceConfiguration] = <factory>)[source]
+

Step which checks device configuration versus a given timestamp.

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, devices: ~typing.Dict[str, ~atef.procedure.DeviceConfiguration] = <factory>) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[Any]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+devices: Dict[str, DeviceConfiguration]
+

Device name to device configuration information.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.DescriptionStep.html b/v1.4.0/generated/generated/atef.procedure.DescriptionStep.html new file mode 100644 index 00000000..8e83722b --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.DescriptionStep.html @@ -0,0 +1,242 @@ + + + + + + + atef.procedure.DescriptionStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.DescriptionStep

+
+
+class atef.procedure.DescriptionStep(name: str | None = None, description: str | None = None, parent: ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True)[source]
+

A simple title or descriptive step in the procedure.

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[Any]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.DeviceConfiguration.html b/v1.4.0/generated/generated/atef.procedure.DeviceConfiguration.html new file mode 100644 index 00000000..038ab28c --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.DeviceConfiguration.html @@ -0,0 +1,191 @@ + + + + + + + atef.procedure.DeviceConfiguration — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.DeviceConfiguration

+
+
+class atef.procedure.DeviceConfiguration(archiver_timestamp: datetime | None, values: Dict[str, Any])[source]
+

Device configuration for comparison.

+

Methods

+
+
+__init__(archiver_timestamp: datetime | None, values: Dict[str, Any]) None
+
+ +

Attributes

+
+
+archiver_timestamp: datetime | None
+

The timestamp this configuration is associated with.

+
+ +
+
+values: Dict[str, Any]
+

The device dotted attribute name to value.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.DisplayOptions.html b/v1.4.0/generated/generated/atef.procedure.DisplayOptions.html new file mode 100644 index 00000000..f13bbeb4 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.DisplayOptions.html @@ -0,0 +1,197 @@ + + + + + + + atef.procedure.DisplayOptions — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.DisplayOptions

+
+
+class atef.procedure.DisplayOptions(macros: ~typing.Dict[str, str] = <factory>, template: str = 'embedded_screen', embed: bool = True)[source]
+

Options for a typhos or PyDM display.

+

Methods

+
+
+__init__(macros: ~typing.Dict[str, str] = <factory>, template: str = 'embedded_screen', embed: bool = True) None
+
+ +

Attributes

+
+
+embed: bool = True
+

Embed the display in the procedure? (or pop it out)

+
+ +
+
+template: str = 'embedded_screen'
+

The template name or screen display path.

+
+ +
+
+macros: Dict[str, str]
+

Macros for the display.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.FailedStep.html b/v1.4.0/generated/generated/atef.procedure.FailedStep.html new file mode 100644 index 00000000..302cc9b0 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.FailedStep.html @@ -0,0 +1,228 @@ + + + + + + + atef.procedure.FailedStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.FailedStep

+
+
+class atef.procedure.FailedStep(parent: ~atef.procedure.PreparedProcedureGroup | None, origin: ~atef.procedure.ProcedureGroup | ~atef.procedure.DescriptionStep | ~atef.procedure.PassiveStep | ~atef.procedure.SetValueStep | ~atef.procedure.PlanStep, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>, exception: Exception | None = None)[source]
+

A step that failed to be prepared for running.

+
+
Attributes:
+
+
exception
+
result
+
+
+
+

Methods

+
+
+__init__(parent: ~atef.procedure.PreparedProcedureGroup | None, origin: ~atef.procedure.ProcedureGroup | ~atef.procedure.DescriptionStep | ~atef.procedure.PassiveStep | ~atef.procedure.SetValueStep | ~atef.procedure.PlanStep, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>, exception: Exception | None = None) None
+
+ +

Attributes

+
+
+exception: Exception | None = None
+

Exception that was caught, if available.

+
+ +
+
+result
+
+ +
+
+parent: PreparedProcedureGroup | None
+

The data cache to use for the preparation step.

+
+ +
+
+origin: ProcedureGroup | DescriptionStep | PassiveStep | SetValueStep | PlanStep
+

Configuration instance.

+
+ +
+
+combined_result: Result
+

overall result of running the step

+
+ +
+
+verify_result: Result
+

confirmation by the user that result matches expectations

+
+ +
+
+step_result: Result
+

whether or not the step completed successfully

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PassiveStep.html b/v1.4.0/generated/generated/atef.procedure.PassiveStep.html new file mode 100644 index 00000000..cb21087e --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PassiveStep.html @@ -0,0 +1,247 @@ + + + + + + + atef.procedure.PassiveStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PassiveStep

+
+
+class atef.procedure.PassiveStep(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, filepath: ~pathlib.Path = <factory>)[source]
+

A step that runs a passive checkout file

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, filepath: ~pathlib.Path = <factory>) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[Any]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+filepath: Path
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PlanData.html b/v1.4.0/generated/generated/atef.procedure.PlanData.html new file mode 100644 index 00000000..f4d7790a --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PlanData.html @@ -0,0 +1,224 @@ + + + + + + + atef.procedure.PlanData — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PlanData

+
+
+class atef.procedure.PlanData(name: 'str' = '', plan_id: 'Optional[str]' = None, plan_no: 'int' = 0, data_points: 'Union[List[int], Tuple[int, int]]' = <factory>, field_names: 'List[str]' = <factory>, reduction_mode: 'ReduceMethod' = <ReduceMethod.average: 'average'>)[source]
+
+
Attributes:
+
+
plan_id
+
+
+
+

Methods

+
+
+__init__(name: str = '', plan_id: str | None = None, plan_no: int = 0, data_points: ~typing.List[int] | ~typing.Tuple[int, int] = <factory>, field_names: ~typing.List[str] = <factory>, reduction_mode: ~atef.reduce.ReduceMethod = ReduceMethod.average) None
+
+ +

Attributes

+
+
+name: str = ''
+

user-provided name for this plan data. Not used to identify the run

+
+ +
+
+plan_id: str | None = None
+

identifier of PlanStep to grab data from. +set via GUI, must match a PreparedPlan.plan_id. Options should be fixed +and regenerated with every view

+
+ +
+
+plan_no: int = 0
+

plan number (for plans containing nested plans, which return multiple uuids)

+
+ +
+
+reduction_mode: ReduceMethod = 'average'
+

data reduction / operation

+
+ +
+
+data_points: List[int] | Tuple[int, int]
+

data point(s) in plan (0-indexed) or slice notation +[row_start, row_end)

+
+ +
+
+field_names: List[str]
+

Field / column names to grab data from

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PlanOptions.html b/v1.4.0/generated/generated/atef.procedure.PlanOptions.html new file mode 100644 index 00000000..09ccd736 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PlanOptions.html @@ -0,0 +1,230 @@ + + + + + + + atef.procedure.PlanOptions — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PlanOptions

+
+
+class atef.procedure.PlanOptions(name: str, plan: str, args: ~typing.Sequence[~typing.Any] = <factory>, kwargs: ~typing.Dict[~typing.Any, ~typing.Any] = <factory>, fixed_arguments: ~typing.Sequence[str] | None = None)[source]
+

Options for a bluesky plan scan.

+
+
Attributes:
+
+
fixed_arguments
+
+
+
+

Methods

+ + + + + + +

to_plan_item()

Makes a plan item (dictionary of parameters) for a given PlanStep

+

Methods

+
+
+__init__(name: str, plan: str, args: ~typing.Sequence[~typing.Any] = <factory>, kwargs: ~typing.Dict[~typing.Any, ~typing.Any] = <factory>, fixed_arguments: ~typing.Sequence[str] | None = None) None
+
+ +
+
+to_plan_item() Dict[str, Any][source]
+

Makes a plan item (dictionary of parameters) for a given PlanStep

+
+ +

Attributes

+
+
+fixed_arguments: Sequence[str] | None = None
+

Arguments which should not be configurable.

+
+ +
+
+name: str
+

Name to identify this plan

+
+ +
+
+plan: str
+

The plan name. Bluesky plan or otherwise

+
+ +
+
+args: Sequence[Any]
+

Plan arguments dictionary - argument name to value.

+
+ +
+
+kwargs: Dict[Any, Any]
+

Plan keyword arguments dictionary - argument name to value.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PlanStep.html b/v1.4.0/generated/generated/atef.procedure.PlanStep.html new file mode 100644 index 00000000..64c3c750 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PlanStep.html @@ -0,0 +1,270 @@ + + + + + + + atef.procedure.PlanStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PlanStep

+
+
+class atef.procedure.PlanStep(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, plans: ~typing.Sequence[~atef.procedure.PlanOptions] = <factory>, checks: ~typing.Sequence[~atef.procedure.ComparisonToTarget | ~atef.procedure.ComparisonToPlanData] = <factory>, destination: ~atef.enums.PlanDestination = PlanDestination.local, halt_on_fail: bool = True, require_plan_success: bool = True)[source]
+

A procedure step comprised of one or more bluesky plans.

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, plans: ~typing.Sequence[~atef.procedure.PlanOptions] = <factory>, checks: ~typing.Sequence[~atef.procedure.ComparisonToTarget | ~atef.procedure.ComparisonToPlanData] = <factory>, destination: ~atef.enums.PlanDestination = PlanDestination.local, halt_on_fail: bool = True, require_plan_success: bool = True) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[PlanOptions | ComparisonToTarget | ComparisonToPlanData][source]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+destination: PlanDestination = 'local'
+

platform for plan to be run on

+
+ +
+
+halt_on_fail: bool = True
+

Stop performing plans if one fails

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+require_plan_success: bool = True
+

Only mark step_result successfull if all steps have succeeded

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+plans: Sequence[PlanOptions]
+
+ +
+
+checks: Sequence[ComparisonToTarget | ComparisonToPlanData]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedDescriptionStep.html b/v1.4.0/generated/generated/atef.procedure.PreparedDescriptionStep.html new file mode 100644 index 00000000..2f4a6ff3 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedDescriptionStep.html @@ -0,0 +1,271 @@ + + + + + + + atef.procedure.PreparedDescriptionStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedDescriptionStep

+
+
+class atef.procedure.PreparedDescriptionStep(name: 'Optional[str]' = None, origin: 'ProcedureStep' = <factory>, parent: 'Optional[PreparedProcedureGroup]' = None, combined_result: 'Result' = <factory>, verify_result: 'Result' = <factory>, step_result: 'Result' = <factory>)[source]
+
+
Attributes:
+
+
name
+
parent
+
result

Combines the step result and verification result based on settings

+
+
+
+
+

Methods

+ + + + + + + + + +

from_origin(step[, parent])

Prepare a DescriptionStep for running

run()

Run the step and return the result

+

Methods

+
+
+__init__(name: str | None = None, origin: ~atef.procedure.ProcedureStep = <factory>, parent: ~atef.procedure.PreparedProcedureGroup | None = None, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>) None
+
+ +
+
+classmethod from_origin(step: DescriptionStep, parent: PreparedProcedureGroup | None = None) PreparedDescriptionStep[source]
+

Prepare a DescriptionStep for running

+
+
Parameters:
+
+
stepDescriptionStep

the description step to prepare

+
+
parentOptional[PreparedProcedureGroup]

the hierarchical parent of this step, by default None

+
+
+
+
+
+ +
+
+async run() Result
+

Run the step and return the result

+
+ +

Attributes

+
+
+name: str | None = None
+

name of this comparison

+
+ +
+
+parent: PreparedProcedureGroup | None = None
+

hierarchical parent of this step

+
+ +
+
+result
+

Combines the step result and verification result based on settings

+
+
Returns:
+
+
Result

The overall result of this step

+
+
+
+
+
+ +
+
+origin: ProcedureStep
+

original procedure step, of which this is the prepared version

+
+ +
+
+combined_result: Result
+

overall result of running the step

+
+ +
+
+verify_result: Result
+

confirmation by the user that result matches expectations

+
+ +
+
+step_result: Result
+

whether or not the step completed successfully

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedPassiveStep.html b/v1.4.0/generated/generated/atef.procedure.PreparedPassiveStep.html new file mode 100644 index 00000000..d68f5f8d --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedPassiveStep.html @@ -0,0 +1,284 @@ + + + + + + + atef.procedure.PreparedPassiveStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedPassiveStep

+
+
+class atef.procedure.PreparedPassiveStep(name: 'Optional[str]' = None, origin: 'ProcedureStep' = <factory>, parent: 'Optional[PreparedProcedureGroup]' = None, combined_result: 'Result' = <factory>, verify_result: 'Result' = <factory>, step_result: 'Result' = <factory>, prepared_passive_file: 'Optional[PreparedFile]' = None)[source]
+
+
Attributes:
+
+
name
+
parent
+
prepared_passive_file
+
result

Combines the step result and verification result based on settings

+
+
+
+
+

Methods

+ + + + + + + + + +

from_origin(step, parent)

Prepare a passive checkout step for running.

run()

Run the step and return the result

+

Methods

+
+
+__init__(name: str | None = None, origin: ~atef.procedure.ProcedureStep = <factory>, parent: ~atef.procedure.PreparedProcedureGroup | None = None, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>, prepared_passive_file: ~atef.config.PreparedFile | None = None) None
+
+ +
+
+classmethod from_origin(step: PassiveStep, parent: PreparedProcedureGroup | None) PreparedPassiveStep[source]
+

Prepare a passive checkout step for running. Requires the passive checkout +be accessible for read access

+
+
Parameters:
+
+
stepPassiveStep

the original PassiveStep to prepare

+
+
parentOptional[PreparedProcedureGroup]

the hierarchical parent to assign to this PreparedPassiveStep

+
+
+
+
Returns:
+
+
PreparedPassiveStep
+
+
+
+
+ +
+
+async run() Result
+

Run the step and return the result

+
+ +

Attributes

+
+
+name: str | None = None
+

name of this comparison

+
+ +
+
+parent: PreparedProcedureGroup | None = None
+

hierarchical parent of this step

+
+ +
+
+prepared_passive_file: PreparedFile | None = None
+

The prepared passive checkout file, holds Results

+
+ +
+
+result
+

Combines the step result and verification result based on settings

+
+
Returns:
+
+
Result

The overall result of this step

+
+
+
+
+
+ +
+
+origin: ProcedureStep
+

original procedure step, of which this is the prepared version

+
+ +
+
+combined_result: Result
+

overall result of running the step

+
+ +
+
+verify_result: Result
+

confirmation by the user that result matches expectations

+
+ +
+
+step_result: Result
+

whether or not the step completed successfully

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedPlan.html b/v1.4.0/generated/generated/atef.procedure.PreparedPlan.html new file mode 100644 index 00000000..a6fe86a1 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedPlan.html @@ -0,0 +1,250 @@ + + + + + + + atef.procedure.PreparedPlan — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedPlan

+
+
+class atef.procedure.PreparedPlan(name: 'str', origin: 'PlanOptions', parent: 'Optional[PreparedPlanStep]' = None, item: 'Dict[str, any]' = <factory>, plan_id: 'Optional[str]' = None, bs_state: 'Optional[BlueskyState]' = None, result: 'Result' = <factory>)[source]
+
+
Attributes:
+
+
bs_state
+
parent
+
plan_id
+
+
+
+

Methods

+ + + + + + + + + +

from_origin

run

+

Methods

+
+
+__init__(name: str, origin: ~atef.procedure.PlanOptions, parent: ~atef.procedure.PreparedPlanStep | None = None, item: ~typing.Dict[str, any] = <factory>, plan_id: str | None = None, bs_state: ~atef.plan_utils.BlueskyState | None = None, result: ~atef.result.Result = <factory>) None
+
+ +
+
+classmethod from_origin(origin: PlanOptions, parent: PreparedPlanStep | None = None) PreparedPlan[source]
+
+ +
+
+async run() Result[source]
+
+ +

Attributes

+
+
+bs_state: BlueskyState | None = None
+

stashed BlueskyState. Passed to RunEngine runner

+
+ +
+
+parent: PreparedPlanStep | None = None
+

the hierarchical parent of this PreparedPlan

+
+ +
+
+plan_id: str | None = None
+

the plan identifer, may be different from origin.plan_id

+
+ +
+
+name: str
+

identifying name

+
+ +
+
+origin: PlanOptions
+

a link to the original PlanOptions

+
+ +
+
+item: Dict[str, any]
+

the plan item, suitable for submission to a bluesky queueserver

+
+ +
+
+result: Result
+

result of this step. (did the plan run?)

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedPlanComparison.html b/v1.4.0/generated/generated/atef.procedure.PreparedPlanComparison.html new file mode 100644 index 00000000..09ceedeb --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedPlanComparison.html @@ -0,0 +1,289 @@ + + + + + + + atef.procedure.PreparedPlanComparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedPlanComparison

+
+
+class atef.procedure.PreparedPlanComparison(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.procedure.PreparedPlanStep | None = None, result: ~atef.result.Result = <factory>, plan_data: ~atef.procedure.ComparisonToPlanData | None = None, data: ~typing.Any | None = None)[source]
+

Unified representation for comparisons to Bluesky Plan data

+
+
Attributes:
+
+
data
+
name
+
parent
+
plan_data
+
+
+
+

Methods

+ + + + + + + + + +

compare()

Run the comparison and return the Result.

get_data_async()

Get the data according to the comparison's configuration.

+ + + + + + +

from_comp_to_plan

+

Methods

+
+
+__init__(cache: ~atef.cache.DataCache, identifier: str = '', comparison: ~atef.check.Comparison = <factory>, name: str | None = None, parent: ~atef.procedure.PreparedPlanStep | None = None, result: ~atef.result.Result = <factory>, plan_data: ~atef.procedure.ComparisonToPlanData | None = None, data: ~typing.Any | None = None) None
+
+ +
+
+async compare() Result
+

Run the comparison and return the Result.

+
+
Returns:
+
+
Result

The result of the comparison.

+
+
+
+
+
+ +
+
+classmethod from_comp_to_plan(origin: ComparisonToPlanData, cache: DataCache | None = None, parent: PreparedPlanStep | None = None) PreparedPlanComparison[source]
+
+ +
+
+async get_data_async() Any[source]
+

Get the data according to the comparison’s configuration.

+

To be implemented in subclass.

+
+
Returns:
+
+
dataAny

The acquired data.

+
+
+
+
+
+ +

Attributes

+
+
+data: Any | None = None
+

The value from the plan, to which the comparison will take place

+
+ +
+
+identifier: str = ''
+

The identifier used for the comparison.

+
+ +
+
+name: str | None = None
+

The name of the associated configuration.

+
+ +
+
+parent: PreparedPlanStep | None = None
+

The hierarchical parent of this comparison

+
+ +
+
+plan_data: ComparisonToPlanData | None = None
+

Original plan data, holds relevant data coordinates

+
+ +
+
+cache: DataCache
+

The data cache to use for the preparation step.

+
+ +
+
+comparison: Comparison
+

The comparison itself.

+
+ +
+
+result: Result
+

The last result of the comparison, if run.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedPlanStep.html b/v1.4.0/generated/generated/atef.procedure.PreparedPlanStep.html new file mode 100644 index 00000000..8a3da0cd --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedPlanStep.html @@ -0,0 +1,296 @@ + + + + + + + atef.procedure.PreparedPlanStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedPlanStep

+
+
+class atef.procedure.PreparedPlanStep(name: 'Optional[str]' = None, origin: 'PlanStep' = <factory>, parent: 'Optional[PreparedProcedureGroup]' = None, combined_result: 'Result' = <factory>, verify_result: 'Result' = <factory>, step_result: 'Result' = <factory>, prepared_plans: 'List[PreparedPlan]' = <factory>, prepared_plan_failures: 'List[PlanOptions]' = <factory>, prepared_checks: 'List[Union[PreparedSignalComparison, PreparedPlanComparison]]' = <factory>, prepared_checks_failures: 'List[PreparedComparisonException]' = <factory>)[source]
+
+
Attributes:
+
+
name
+
parent
+
result

Combines the step result and verification result based on settings

+
+
+
+
+

Methods

+ + + + + + + + + +

from_origin(origin[, parent])

Prepare a ProcedureStep for running.

run()

Run the step and return the result

+

Methods

+
+
+__init__(name: str | None = None, origin: ~atef.procedure.PlanStep = <factory>, parent: ~atef.procedure.PreparedProcedureGroup | None = None, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>, prepared_plans: ~typing.List[~atef.procedure.PreparedPlan] = <factory>, prepared_plan_failures: ~typing.List[~atef.procedure.PlanOptions] = <factory>, prepared_checks: ~typing.List[~atef.config.PreparedSignalComparison | ~atef.procedure.PreparedPlanComparison] = <factory>, prepared_checks_failures: ~typing.List[~atef.exceptions.PreparedComparisonException] = <factory>) None
+
+ +
+
+classmethod from_origin(origin: PlanStep, parent: PreparedProcedureGroup | None = None) PreparedPlanStep[source]
+

Prepare a ProcedureStep for running. If the creation of the prepared step +fails for any reason, a FailedStep is returned.

+
+
Parameters:
+
+
stepAnyProcedure

the ProcedureStep to prepare

+
+
parentOptional[PreparedProcedureGroup]

the parent of this step, by default None

+
+
+
+
+
+ +
+
+async run() Result
+

Run the step and return the result

+
+ +

Attributes

+
+
+name: str | None = None
+

name of this comparison

+
+ +
+
+parent: PreparedProcedureGroup | None = None
+

hierarchical parent of this step

+
+ +
+
+result
+

Combines the step result and verification result based on settings

+
+
Returns:
+
+
Result

The overall result of this step

+
+
+
+
+
+ +
+
+origin: PlanStep
+

a link to the original PlanStep

+
+ +
+
+prepared_plans: List[PreparedPlan]
+

list of PreparedPlan

+
+ +
+
+prepared_plan_failures: List[PlanOptions]
+

list of PlanOption’s that led to failed PreparedPlan’s

+
+ +
+
+prepared_checks: List[PreparedSignalComparison | PreparedPlanComparison]
+

list of success criteria

+
+ +
+
+prepared_checks_failures: List[PreparedComparisonException]
+

list of failed checks

+
+ +
+
+combined_result: Result
+

overall result of running the step

+
+ +
+
+verify_result: Result
+

confirmation by the user that result matches expectations

+
+ +
+
+step_result: Result
+

whether or not the step completed successfully

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedProcedureFile.html b/v1.4.0/generated/generated/atef.procedure.PreparedProcedureFile.html new file mode 100644 index 00000000..92a83e39 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedProcedureFile.html @@ -0,0 +1,226 @@ + + + + + + + atef.procedure.PreparedProcedureFile — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedProcedureFile

+
+
+class atef.procedure.PreparedProcedureFile(file: ProcedureFile, root: PreparedProcedureGroup)[source]
+

A Prepared Procedure file. Constructs prepared dataclasses for steps +in the root ProcedureGroup

+

Methods

+ + + + + + +

from_origin(file)

Prepare a ProcedureFile for running, based off an existing ProcedureFile

+ + + + + + +

run

+

Methods

+
+
+__init__(file: ProcedureFile, root: PreparedProcedureGroup) None
+
+ +
+
+classmethod from_origin(file: ProcedureFile) PreparedProcedureFile[source]
+

Prepare a ProcedureFile for running, based off an existing ProcedureFile

+
+
Parameters:
+
+
fileProcedureFile

the procedure file instance

+
+
+
+
+
+ +
+
+async run() Result[source]
+
+ +

Attributes

+
+
+file: ProcedureFile
+

Corresponding ProcedureFile information

+
+ +
+
+root: PreparedProcedureGroup
+

Procedure steps defined in the top-level file

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedProcedureGroup.html b/v1.4.0/generated/generated/atef.procedure.PreparedProcedureGroup.html new file mode 100644 index 00000000..6c0850db --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedProcedureGroup.html @@ -0,0 +1,292 @@ + + + + + + + atef.procedure.PreparedProcedureGroup — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedProcedureGroup

+
+
+class atef.procedure.PreparedProcedureGroup(name: 'Optional[str]' = None, origin: 'ProcedureStep' = <factory>, parent: 'Optional[Union[PreparedProcedureFile, PreparedProcedureGroup]]' = None, combined_result: 'Result' = <factory>, verify_result: 'Result' = <factory>, step_result: 'Result' = <factory>, steps: 'List[AnyPreparedProcedure]' = <factory>, prepare_failures: 'List[FailedStep]' = <factory>)[source]
+
+
Attributes:
+
+
name
+
parent
+
result

Re-compute the combined result and return it

+
+
+
+
+

Methods

+ + + + + + + + + +

from_origin(group[, parent])

Prepare a ProcedureGroup for running.

run()

Run all steps and return a combined result

+ + + + + + +

walk_steps

+

Methods

+
+
+__init__(name: str | None = None, origin: ~atef.procedure.ProcedureStep = <factory>, parent: ~atef.procedure.PreparedProcedureFile | ~atef.procedure.PreparedProcedureGroup | None = None, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>, steps: ~typing.List[~atef.procedure.PreparedProcedureGroup | ~atef.procedure.PreparedDescriptionStep | ~atef.procedure.PreparedPassiveStep | ~atef.procedure.PreparedSetValueStep | ~atef.procedure.PreparedPlanStep] = <factory>, prepare_failures: ~typing.List[~atef.procedure.FailedStep] = <factory>) None
+
+ +
+
+classmethod from_origin(group: ProcedureGroup, parent: PreparedProcedureGroup | PreparedProcedureFile | None = None) PreparedProcedureGroup[source]
+

Prepare a ProcedureGroup for running. Prepares all of the group’s children

+
+
Parameters:
+
+
groupProcedureGroup

the group to prepare

+
+
parentOptional[PreparedProcedureGroup | PreparedProcedureFile]

the hierarchical parent of this step, by default None

+
+
+
+
Returns:
+
+
PreparedProcedureGroup
+
+
+
+
+ +
+
+async run() Result[source]
+

Run all steps and return a combined result

+
+ +
+
+walk_steps() Generator[AnyPreparedProcedure][source]
+
+ +

Attributes

+
+
+name: str | None = None
+

name of this comparison

+
+ +
+
+parent: PreparedProcedureFile | PreparedProcedureGroup | None = None
+

hierarchical parent of this step

+
+ +
+
+result
+

Re-compute the combined result and return it

+
+ +
+
+steps: List[PreparedProcedureGroup | PreparedDescriptionStep | PreparedPassiveStep | PreparedSetValueStep | PreparedPlanStep]
+

the steps in this group

+
+ +
+
+prepare_failures: List[FailedStep]
+

Steps that failed to be prepared

+
+ +
+
+origin: ProcedureStep
+

original procedure step, of which this is the prepared version

+
+ +
+
+combined_result: Result
+

overall result of running the step

+
+ +
+
+verify_result: Result
+

confirmation by the user that result matches expectations

+
+ +
+
+step_result: Result
+

whether or not the step completed successfully

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedProcedureStep.html b/v1.4.0/generated/generated/atef.procedure.PreparedProcedureStep.html new file mode 100644 index 00000000..223d4901 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedProcedureStep.html @@ -0,0 +1,273 @@ + + + + + + + atef.procedure.PreparedProcedureStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedProcedureStep

+
+
+class atef.procedure.PreparedProcedureStep(name: str | None = None, origin: ~atef.procedure.ProcedureStep = <factory>, parent: ~atef.procedure.PreparedProcedureGroup | None = None, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>)[source]
+

Base class for a ProcedureStep that has been prepared to run.

+
+
Attributes:
+
+
name
+
parent
+
result

Combines the step result and verification result based on settings

+
+
+
+
+

Methods

+ + + + + + + + + +

from_origin(step[, parent])

Prepare a ProcedureStep for running.

run()

Run the step and return the result

+

Methods

+
+
+__init__(name: str | None = None, origin: ~atef.procedure.ProcedureStep = <factory>, parent: ~atef.procedure.PreparedProcedureGroup | None = None, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>) None
+
+ +
+
+classmethod from_origin(step: ProcedureGroup | DescriptionStep | PassiveStep | SetValueStep | PlanStep, parent: PreparedProcedureGroup | None = None) PreparedProcedureStep[source]
+

Prepare a ProcedureStep for running. If the creation of the prepared step +fails for any reason, a FailedStep is returned.

+
+
Parameters:
+
+
stepAnyProcedure

the ProcedureStep to prepare

+
+
parentOptional[PreparedProcedureGroup]

the parent of this step, by default None

+
+
+
+
+
+ +
+
+async run() Result[source]
+

Run the step and return the result

+
+ +

Attributes

+
+
+name: str | None = None
+

name of this comparison

+
+ +
+
+parent: PreparedProcedureGroup | None = None
+

hierarchical parent of this step

+
+ +
+
+result
+

Combines the step result and verification result based on settings

+
+
Returns:
+
+
Result

The overall result of this step

+
+
+
+
+
+ +
+
+origin: ProcedureStep
+

original procedure step, of which this is the prepared version

+
+ +
+
+combined_result: Result
+

overall result of running the step

+
+ +
+
+verify_result: Result
+

confirmation by the user that result matches expectations

+
+ +
+
+step_result: Result
+

whether or not the step completed successfully

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedSetValueStep.html b/v1.4.0/generated/generated/atef.procedure.PreparedSetValueStep.html new file mode 100644 index 00000000..5885bed3 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedSetValueStep.html @@ -0,0 +1,300 @@ + + + + + + + atef.procedure.PreparedSetValueStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedSetValueStep

+
+
+class atef.procedure.PreparedSetValueStep(name: 'Optional[str]' = None, origin: 'ProcedureStep' = <factory>, parent: 'Optional[PreparedProcedureGroup]' = None, combined_result: 'Result' = <factory>, verify_result: 'Result' = <factory>, step_result: 'Result' = <factory>, prepared_actions: 'List[PreparedValueToSignal]' = <factory>, prepared_criteria: 'List[PreparedSignalComparison]' = <factory>)[source]
+
+
Attributes:
+
+
name
+
parent
+
result

Combines the step result and verification result based on settings

+
+
+
+
+

Methods

+ + + + + + + + + + + + +

from_origin(step, parent)

Prepare a SetValueStep for running.

run()

Run the step and return the result

walk_comparisons()

Yields PreparedComparisons in this ProcedureStep

+

Methods

+
+
+__init__(name: str | None = None, origin: ~atef.procedure.ProcedureStep = <factory>, parent: ~atef.procedure.PreparedProcedureGroup | None = None, combined_result: ~atef.result.Result = <factory>, verify_result: ~atef.result.Result = <factory>, step_result: ~atef.result.Result = <factory>, prepared_actions: ~typing.List[~atef.procedure.PreparedValueToSignal] = <factory>, prepared_criteria: ~typing.List[~atef.config.PreparedSignalComparison] = <factory>) None
+
+ +
+
+classmethod from_origin(step: SetValueStep, parent: PreparedProcedureGroup | None) PreparedSetValueStep[source]
+

Prepare a SetValueStep for running. Gathers and prepares necessary +signals and comparisons. Any actions and success criteria that fail +to be prepared will be stored under the prepare_action_failures and +prepare_criteria_failures fields respectively

+
+
Parameters:
+
+
stepSetValueStep

the original SetValueStep (not prepared)

+
+
parentOptional[PreparedProcedureGroup]

the hierarchical parent for the prepared step.

+
+
+
+
Returns:
+
+
PreparedSetValueStep
+
+
+
+
+ +
+
+async run() Result
+

Run the step and return the result

+
+ +
+
+walk_comparisons() Generator[PreparedComparison, None, None][source]
+

Yields PreparedComparisons in this ProcedureStep

+
+ +

Attributes

+
+
+name: str | None = None
+

name of this comparison

+
+ +
+
+parent: PreparedProcedureGroup | None = None
+

hierarchical parent of this step

+
+ +
+
+result
+

Combines the step result and verification result based on settings

+
+
Returns:
+
+
Result

The overall result of this step

+
+
+
+
+
+ +
+
+prepared_actions: List[PreparedValueToSignal]
+

list of prepared actions to take (values to set to a target)

+
+ +
+
+prepared_criteria: List[PreparedSignalComparison]
+

list of prepared success criteria (comparisons)

+
+ +
+
+origin: ProcedureStep
+

original procedure step, of which this is the prepared version

+
+ +
+
+combined_result: Result
+

overall result of running the step

+
+ +
+
+verify_result: Result
+

confirmation by the user that result matches expectations

+
+ +
+
+step_result: Result
+

whether or not the step completed successfully

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PreparedValueToSignal.html b/v1.4.0/generated/generated/atef.procedure.PreparedValueToSignal.html new file mode 100644 index 00000000..be2a72d3 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PreparedValueToSignal.html @@ -0,0 +1,271 @@ + + + + + + + atef.procedure.PreparedValueToSignal — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PreparedValueToSignal

+
+
+class atef.procedure.PreparedValueToSignal(name: 'str', signal: 'ophyd.Signal', value: 'PrimitiveType', origin: 'ValueToTarget', parent: 'Optional[PreparedSetValueStep]' = None, result: 'Result' = <factory>)[source]
+
+
Attributes:
+
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

from_origin(origin[, parent])

Prepare the ValueToSignal for running.

run()

Set the stored value to the signal, specifying the settle time and timeout if provided.

+

Methods

+
+
+__init__(name: str, signal: ~ophyd.signal.Signal, value: str | int | bool | float, origin: ~atef.procedure.ValueToTarget, parent: ~atef.procedure.PreparedSetValueStep | None = None, result: ~atef.result.Result = <factory>) None
+
+ +
+
+classmethod from_origin(origin: ValueToTarget, parent: PreparedSetValueStep | None = None) PreparedValueToSignal[source]
+

Prepare the ValueToSignal for running.

+
+
Parameters:
+
+
originValueToTarget

the original ValueToTarget

+
+
+
+
Returns:
+
+
PreparedValueToSignal
+
+
+
Raises:
+
+
ValueError

if the target cannot return a valid signal

+
+
+
+
+
+ +
+
+async run() Result[source]
+

Set the stored value to the signal, specifying the settle time and timeout +if provided. Returns a Result recording the success of this action

+
+
Returns:
+
+
Result
+
+
+
+
+ +

Attributes

+
+
+parent: PreparedSetValueStep | None = None
+

parent step that owns this instance

+
+ +
+
+name: str
+

identifying name

+
+ +
+
+signal: Signal
+

the signal, derived from a Target

+
+ +
+
+value: str | int | bool | float
+

value to set to the signal

+
+ +
+
+origin: ValueToTarget
+

a link to the original ValueToTarget

+
+ +
+
+result: Result
+

The result of the set action

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.ProcedureFile.html b/v1.4.0/generated/generated/atef.procedure.ProcedureFile.html new file mode 100644 index 00000000..97070f68 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.ProcedureFile.html @@ -0,0 +1,263 @@ + + + + + + + atef.procedure.ProcedureFile — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.ProcedureFile

+
+
+class atef.procedure.ProcedureFile(version: ~typing.Literal[0] = 0, root: ~atef.procedure.ProcedureGroup = <factory>)[source]
+

File comprised of several Procedure steps

+

Essentially identical to Configuration File. Consider refactoring +if design/methods do not diverge

+

Methods

+ + + + + + + + + + + + + + + + + + +

children()

Return children of this group, as a tree view might expect

from_json(filename)

Load a configuration file from JSON.

from_yaml(filename)

Load a configuration file from yaml.

to_json()

Dump this configuration file to a JSON-compatible dictionary.

to_yaml()

Dump this configuration file to yaml.

+ + + + + + + + + +

from_filename

walk_steps

+

Methods

+
+
+__init__(version: ~typing.Literal[0] = 0, root: ~atef.procedure.ProcedureGroup = <factory>) None
+
+ +
+
+children() List[ProcedureGroup][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+classmethod from_filename(filename: str | Path) ProcedureFile[source]
+
+ +
+
+classmethod from_json(filename: str | Path) ProcedureFile[source]
+

Load a configuration file from JSON.

+
+ +
+
+classmethod from_yaml(filename: str | Path) ProcedureFile[source]
+

Load a configuration file from yaml.

+
+ +
+
+to_json()[source]
+

Dump this configuration file to a JSON-compatible dictionary.

+
+ +
+
+to_yaml()[source]
+

Dump this configuration file to yaml.

+
+ +
+
+walk_steps() Generator[ProcedureGroup | DescriptionStep | PassiveStep | SetValueStep | PlanStep, None, None][source]
+
+ +

Attributes

+
+
+version: Literal[0] = 0
+

atef configuration file version information.

+
+ +
+
+root: ProcedureGroup
+

Top-level configuration group.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.ProcedureGroup.html b/v1.4.0/generated/generated/atef.procedure.ProcedureGroup.html new file mode 100644 index 00000000..3b2e24d8 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.ProcedureGroup.html @@ -0,0 +1,268 @@ + + + + + + + atef.procedure.ProcedureGroup — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.ProcedureGroup

+
+
+class atef.procedure.ProcedureGroup(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, steps: ~typing.Sequence[~atef.procedure.ProcedureStep | ~atef.procedure.ProcedureGroup] = <factory>)[source]
+

A group of procedure steps (or nested groups).

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+ + + + + + + + + +

replace_step

walk_steps

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, steps: ~typing.Sequence[~atef.procedure.ProcedureStep | ~atef.procedure.ProcedureGroup] = <factory>) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[ProcedureStep | ProcedureGroup][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+replace_step(old_step: ProcedureStep | ProcedureGroup, new_step: ProcedureStep | ProcedureGroup) None[source]
+
+ +
+
+walk_steps() Generator[ProcedureGroup | DescriptionStep | PassiveStep | SetValueStep | PlanStep, None, None][source]
+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+steps: Sequence[ProcedureStep | ProcedureGroup]
+

Steps included in the procedure.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.ProcedureStep.html b/v1.4.0/generated/generated/atef.procedure.ProcedureStep.html new file mode 100644 index 00000000..3d090379 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.ProcedureStep.html @@ -0,0 +1,243 @@ + + + + + + + atef.procedure.ProcedureStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.ProcedureStep

+
+
+class atef.procedure.ProcedureStep(name: str | None = None, description: str | None = None, parent: ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True)[source]
+

A basic step in an atef procedure.

+

This is used as a base class for all valid procedure steps (and groups).

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True) None
+
+ +
+
+allow_verify() bool[source]
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[Any][source]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.PydmDisplayStep.html b/v1.4.0/generated/generated/atef.procedure.PydmDisplayStep.html new file mode 100644 index 00000000..b15b55de --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.PydmDisplayStep.html @@ -0,0 +1,254 @@ + + + + + + + atef.procedure.PydmDisplayStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.PydmDisplayStep

+
+
+class atef.procedure.PydmDisplayStep(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, display: ~pathlib.Path = <factory>, options: ~atef.procedure.DisplayOptions = <factory>)[source]
+

A procedure step which a opens a PyDM display.

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, display: ~pathlib.Path = <factory>, options: ~atef.procedure.DisplayOptions = <factory>) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[Any]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+display: Path
+

The display path.

+
+ +
+
+options: DisplayOptions
+

Options for displaying.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.SetValueStep.html b/v1.4.0/generated/generated/atef.procedure.SetValueStep.html new file mode 100644 index 00000000..cb184fea --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.SetValueStep.html @@ -0,0 +1,273 @@ + + + + + + + atef.procedure.SetValueStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.SetValueStep

+
+
+class atef.procedure.SetValueStep(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, actions: ~typing.List[~atef.procedure.ValueToTarget] = <factory>, success_criteria: ~typing.List[~atef.procedure.ComparisonToTarget] = <factory>, halt_on_fail: bool = True, require_action_success: bool = True)[source]
+

A step that sets one or more values and checks one or more values after

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

replace_comparison(old_comp, new_comp)

replace old_comp with new_comp, in success_criteria

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, actions: ~typing.List[~atef.procedure.ValueToTarget] = <factory>, success_criteria: ~typing.List[~atef.procedure.ComparisonToTarget] = <factory>, halt_on_fail: bool = True, require_action_success: bool = True) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[ComparisonToTarget][source]
+

Return children of this group, as a tree view might expect

+
+ +
+
+replace_comparison(old_comp: Comparison, new_comp: Comparison) None[source]
+

replace old_comp with new_comp, in success_criteria

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+halt_on_fail: bool = True
+

Stop performing actions if one fails

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+require_action_success: bool = True
+

Only mark the step_result as successful if all actions have succeeded

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+actions: List[ValueToTarget]
+
+ +
+
+success_criteria: List[ComparisonToTarget]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.Target.html b/v1.4.0/generated/generated/atef.procedure.Target.html new file mode 100644 index 00000000..f952f278 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.Target.html @@ -0,0 +1,236 @@ + + + + + + + atef.procedure.Target — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.Target

+
+
+class atef.procedure.Target(name: str | None = None, device: str | None = None, attr: str | None = None, pv: str | None = None)[source]
+

A destination for a value. Either an ophyd device+attr pair or EPICS PV

+
+
Attributes:
+
+
attr
+
device
+
name
+
pv
+
+
+
+

Methods

+ + + + + + +

to_signal([signal_cache])

Return the signal described by this Target.

+

Methods

+
+
+__init__(name: str | None = None, device: str | None = None, attr: str | None = None, pv: str | None = None) None
+
+ +
+
+to_signal(signal_cache: _SignalCache | None = None) Signal | None[source]
+

Return the signal described by this Target. First attempts to use the +device + attr information to look up the signal in happi, falling back +to the raw PV.

+
+
Returns:
+
+
ophyd.Signal

the signal described by this Target

+
+
+
+
+
+ +

Attributes

+
+
+attr: str | None = None
+
+ +
+
+device: str | None = None
+

device name and attr

+
+ +
+
+name: str | None = None
+

name of target

+
+ +
+
+pv: str | None = None
+

EPICS PV

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.TyphosDisplayStep.html b/v1.4.0/generated/generated/atef.procedure.TyphosDisplayStep.html new file mode 100644 index 00000000..8a0d4dfd --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.TyphosDisplayStep.html @@ -0,0 +1,248 @@ + + + + + + + atef.procedure.TyphosDisplayStep — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.TyphosDisplayStep

+
+
+class atef.procedure.TyphosDisplayStep(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, devices: ~typing.Dict[str, ~atef.procedure.DisplayOptions] = <factory>)[source]
+

A procedure step which opens one or more typhos displays.

+
+
Attributes:
+
+
description
+
name
+
parent
+
+
+
+

Methods

+ + + + + + + + + +

allow_verify()

Whether or not the step can be verified.

children()

Return children of this group, as a tree view might expect

+

Methods

+
+
+__init__(name: str | None = None, description: str | None = None, parent: ~atef.procedure.ProcedureGroup | None = None, verify_required: bool = True, step_success_required: bool = True, devices: ~typing.Dict[str, ~atef.procedure.DisplayOptions] = <factory>) None
+
+ +
+
+allow_verify() bool
+

Whether or not the step can be verified. +To be further expanded or overloaded in subclass,

+
+ +
+
+children() List[Any]
+

Return children of this group, as a tree view might expect

+
+ +

Attributes

+
+
+description: str | None = None
+

A description of narrative explanation of setup steps, what is to happen, etc.

+
+ +
+
+name: str | None = None
+

The title of the procedure

+
+ +
+
+parent: ProcedureGroup | None = None
+

The hierarchical parent of this step.

+
+ +
+
+step_success_required: bool = True
+

step success requirements, does the step need to complete?

+
+ +
+
+verify_required: bool = True
+

verification requirements, is human verification required?

+
+ +
+
+devices: Dict[str, DisplayOptions]
+

Happi device name to display options.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.ValueToTarget.html b/v1.4.0/generated/generated/atef.procedure.ValueToTarget.html new file mode 100644 index 00000000..b6990b5e --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.ValueToTarget.html @@ -0,0 +1,256 @@ + + + + + + + atef.procedure.ValueToTarget — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.ValueToTarget

+
+
+class atef.procedure.ValueToTarget(name: 'Optional[str]' = None, device: 'Optional[str]' = None, attr: 'Optional[str]' = None, pv: 'Optional[str]' = None, value: 'Optional[PrimitiveType]' = None, timeout: 'Optional[Number]' = None, settle_time: 'Optional[Number]' = None)[source]
+
+
Attributes:
+
+
attr
+
device
+
name
+
pv
+
settle_time
+
timeout
+
value
+
+
+
+

Methods

+ + + + + + +

to_signal([signal_cache])

Return the signal described by this Target.

+

Methods

+
+
+__init__(name: str | None = None, device: str | None = None, attr: str | None = None, pv: str | None = None, value: str | int | bool | float | None = None, timeout: int | float | None = None, settle_time: int | float | None = None) None
+
+ +
+
+to_signal(signal_cache: _SignalCache | None = None) Signal | None
+

Return the signal described by this Target. First attempts to use the +device + attr information to look up the signal in happi, falling back +to the raw PV.

+
+
Returns:
+
+
ophyd.Signal

the signal described by this Target

+
+
+
+
+
+ +

Attributes

+
+
+attr: str | None = None
+
+ +
+
+device: str | None = None
+

device name and attr

+
+ +
+
+name: str | None = None
+

name of target

+
+ +
+
+pv: str | None = None
+

EPICS PV

+
+ +
+
+settle_time: int | float | None = None
+

settle time

+
+ +
+
+timeout: int | float | None = None
+

write timeout

+
+ +
+
+value: str | int | bool | float | None = None
+

the value to set to the target

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.create_prepared_comparison.html b/v1.4.0/generated/generated/atef.procedure.create_prepared_comparison.html new file mode 100644 index 00000000..c03ff75c --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.create_prepared_comparison.html @@ -0,0 +1,171 @@ + + + + + + + atef.procedure.create_prepared_comparison — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.create_prepared_comparison

+
+
+atef.procedure.create_prepared_comparison(check: ComparisonToTarget | ComparisonToPlanData, parent: AnyDataclass | None = None) PreparedComparison | PreparedComparisonException[source]
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.get_RE_data.html b/v1.4.0/generated/generated/atef.procedure.get_RE_data.html new file mode 100644 index 00000000..720d722b --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.get_RE_data.html @@ -0,0 +1,197 @@ + + + + + + + atef.procedure.get_RE_data — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.get_RE_data

+
+
+atef.procedure.get_RE_data(bs_state: BlueskyState, plan_data: PlanData) Any[source]
+

Get databroker data from the GlobalRunEngine from the plan specified by +plan_data.

+
+
Parameters:
+
+
bs_stateBlueskyState

the BlueskyState whose run_map holds the uuid for plan_data

+
+
plan_dataPlanData

the plan data specification (data points, plan number, field names)

+
+
+
+
Returns:
+
+
Any

Array of data specified by plan_data

+
+
+
+
Raises:
+
+
RuntimeError

if the data cannot be found in bs_state

+
+
ValueError

if plan_data does not provide parsable datapoints

+
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.procedure.get_bs_state.html b/v1.4.0/generated/generated/atef.procedure.get_bs_state.html new file mode 100644 index 00000000..11912535 --- /dev/null +++ b/v1.4.0/generated/generated/atef.procedure.get_bs_state.html @@ -0,0 +1,189 @@ + + + + + + + atef.procedure.get_bs_state — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.procedure.get_bs_state

+
+
+atef.procedure.get_bs_state(dclass: PreparedProcedureStep) BlueskyState[source]
+

Get the BlueskyState instance corresponding to dclass. +Each ProcedureFile gets assigned a single BlueskyState. +Walk parents up to the top-level PreparedProcedureFile, find its origin +(ProcedureFile), then return its correspoinding BlueskyState

+
+
Parameters:
+
+
dclassPreparedProcedureStep

the current prepared-variant procedure step

+
+
+
+
Returns:
+
+
BlueskyState

the BlueskyState holding run information and allowed devices/plans

+
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.tools.Ping.html b/v1.4.0/generated/generated/atef.tools.Ping.html new file mode 100644 index 00000000..112be4ad --- /dev/null +++ b/v1.4.0/generated/generated/atef.tools.Ping.html @@ -0,0 +1,237 @@ + + + + + + + atef.tools.Ping — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.tools.Ping

+
+
+class atef.tools.Ping(hosts: ~typing.List[str] = <factory>, count: int = 3, encoding: str = 'utf-8')[source]
+

Tool for pinging one or more hosts and summarizing the results.

+

Methods

+ + + + + + + + + + + + +

check_result_key(key)

Check that the result key is valid for the given tool.

ping(host)

Ping the given host.

run()

Run the "Ping" tool with the current settings.

+

Methods

+
+
+__init__(hosts: ~typing.List[str] = <factory>, count: int = 3, encoding: str = 'utf-8') None
+
+ +
+
+check_result_key(key: str) None
+

Check that the result key is valid for the given tool.

+

For example, PingResult keys can include "min_time", +"max_time", and so on.

+
+
Parameters:
+
+
keystr

The key to check.

+
+
+
+
Raises:
+
+
ValueError

If the key is invalid.

+
+
+
+
+
+ +
+
+async ping(host: str) PingResult[source]
+

Ping the given host.

+
+
Parameters:
+
+
hoststr

The host to ping.

+
+
+
+
Returns:
+
+
PingResult
+
+
+
+
+ +
+
+async run() PingResult[source]
+

Run the “Ping” tool with the current settings.

+
+
Returns:
+
+
PingResult
+
+
+
+
+ +

Attributes

+
+
+count: int = 3
+

The number of ping attempts to make per host.

+
+ +
+
+encoding: str = 'utf-8'
+

The assumed output encoding of the ‘ping’ command.

+
+ +
+
+hosts: List[str]
+

The hosts to ping.

+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.tools.PingResult.html b/v1.4.0/generated/generated/atef.tools.PingResult.html new file mode 100644 index 00000000..7d747694 --- /dev/null +++ b/v1.4.0/generated/generated/atef.tools.PingResult.html @@ -0,0 +1,251 @@ + + + + + + + atef.tools.PingResult — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.tools.PingResult

+
+
+class atef.tools.PingResult(result: ~atef.result.Result, alive: ~typing.List[str] = <factory>, num_alive: int = 0, unresponsive: ~typing.List[str] = <factory>, num_unresponsive: int = 0, times: ~typing.Dict[str, float] = <factory>, min_time: float = 0.0, max_time: float = 0.0)[source]
+

The result dictionary of the ‘ping’ tool.

+

Methods

+ + + + + + + + + +

add_host_result(host, result, *[, failure_time])

Add a new per-host result to this aggregate one.

from_output(host, output[, unresponsive_time])

Fill a PingResult from the results of the ping program.

+

Methods

+
+
+__init__(result: ~atef.result.Result, alive: ~typing.List[str] = <factory>, num_alive: int = 0, unresponsive: ~typing.List[str] = <factory>, num_unresponsive: int = 0, times: ~typing.Dict[str, float] = <factory>, min_time: float = 0.0, max_time: float = 0.0) None
+
+ +
+
+add_host_result(host: str, result: PingResult | Exception, *, failure_time: float = 100.0) None[source]
+

Add a new per-host result to this aggregate one.

+
+
Parameters:
+
+
hoststr

The hostname or IP address.

+
+
resultUnion[PingResult, Exception]

The result to add. Caught exceptions will be interpreted as a ping +failure for the given host.

+
+
failure_timefloat, optional

The time to use when failures happen.

+
+
+
+
+
+ +
+
+classmethod from_output(host: str, output: str, unresponsive_time: float = 100.0) PingResult[source]
+

Fill a PingResult from the results of the ping program.

+
+
Parameters:
+
+
hoststr

The hostname that ping was called with.

+
+
outputstr

The decoded output of the subprocess call.

+
+
unresponsive_timefloat, optional

Time to use for unresponsive or errored hosts.

+
+
+
+
Returns:
+
+
PingResult
+
+
+
+
+ +

Attributes

+
+
+max_time: float = 0.0
+

Maximum time in seconds from times.

+
+ +
+
+min_time: float = 0.0
+

Minimum time in seconds from times.

+
+ +
+
+num_alive: int = 0
+

Number of hosts that are alive.

+
+ +
+
+num_unresponsive: int = 0
+

Number of hosts that are unresponsive.

+
+ +
+
+alive: List[str]
+

Host(s) that are alive

+
+ +
+
+unresponsive: List[str]
+

Host(s) that are unresponsvie

+
+ +
+
+times: Dict[str, float]
+

Host name to time taken.

+
+ +
+
+result: Result
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.tools.Tool.html b/v1.4.0/generated/generated/atef.tools.Tool.html new file mode 100644 index 00000000..867a1087 --- /dev/null +++ b/v1.4.0/generated/generated/atef.tools.Tool.html @@ -0,0 +1,192 @@ + + + + + + + atef.tools.Tool — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.tools.Tool

+
+
+class atef.tools.Tool[source]
+

Base class for atef tool checks.

+

Methods

+ + + + + + +

check_result_key(key)

Check that the result key is valid for the given tool.

+ + + + + + +

run

+

Methods

+
+
+__init__() None
+
+ +
+
+check_result_key(key: str) None[source]
+

Check that the result key is valid for the given tool.

+

For example, PingResult keys can include "min_time", +"max_time", and so on.

+
+
Parameters:
+
+
keystr

The key to check.

+
+
+
+
Raises:
+
+
ValueError

If the key is invalid.

+
+
+
+
+
+ +
+
+async run(*args, **kwargs) ToolResult[source]
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.tools.ToolResult.html b/v1.4.0/generated/generated/atef.tools.ToolResult.html new file mode 100644 index 00000000..8094427f --- /dev/null +++ b/v1.4.0/generated/generated/atef.tools.ToolResult.html @@ -0,0 +1,156 @@ + + + + + + + atef.tools.ToolResult — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.tools.ToolResult

+
+
+class atef.tools.ToolResult(result: Result)[source]
+

The base result dictionary of any tool.

+

Methods

+
+
+__init__(result: Result) None
+
+ +

Attributes

+
+
+result: Result
+
+ +
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.tools.get_result_value_by_key.html b/v1.4.0/generated/generated/atef.tools.get_result_value_by_key.html new file mode 100644 index 00000000..73528621 --- /dev/null +++ b/v1.4.0/generated/generated/atef.tools.get_result_value_by_key.html @@ -0,0 +1,168 @@ + + + + + + + atef.tools.get_result_value_by_key — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.tools.get_result_value_by_key

+
+
+atef.tools.get_result_value_by_key(result: ToolResult, key: str) Any[source]
+

Retrieve the value indicated by the dotted key name from the ToolResult.

+

Supports attributes of generic types, items (for mappings as in +dictionaries), and iterables (by numeric index).

+
+
Parameters:
+
+
resultobject

The result dataclass instance.

+
+
keystr

The (optionally) dotted key name.

+
+
+
+
Returns:
+
+
Any

The data found by the key.

+
+
+
+
Raises:
+
+
KeyError

If the key is blank or otherwise invalid.

+
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.walk.get_prepared_step.html b/v1.4.0/generated/generated/atef.walk.get_prepared_step.html new file mode 100644 index 00000000..c46e3c6b --- /dev/null +++ b/v1.4.0/generated/generated/atef.walk.get_prepared_step.html @@ -0,0 +1,164 @@ + + + + + + + atef.walk.get_prepared_step — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.walk.get_prepared_step

+
+
+atef.walk.get_prepared_step(prepared_file: PreparedProcedureFile, origin: ProcedureStep | Comparison) List[PreparedProcedureStep | PreparedComparison][source]
+

Gather all PreparedProcedureStep dataclasses the correspond to the original +ProcedureStep. +If a PreparedProcedureStep also has comparisions, use the walk_comparisons +method to check if the “origin” matches any of thoes comparisons

+

Only relevant for active checkouts.

+
+
Parameters:
+
+
prepared_filePreparedProcedureFile

the PreparedProcedureFile to search through

+
+
originUnion[ProcedureStep, Comparison]

the step / comparison to match

+
+
+
+
Returns:
+
+
List[Union[PreparedProcedureStep, PreparedComparison]]

the PreparedProcedureStep’s or PreparedComparison’s related to origin

+
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.walk.get_relevant_configs_comps.html b/v1.4.0/generated/generated/atef.walk.get_relevant_configs_comps.html new file mode 100644 index 00000000..ca1f6f8d --- /dev/null +++ b/v1.4.0/generated/generated/atef.walk.get_relevant_configs_comps.html @@ -0,0 +1,164 @@ + + + + + + + atef.walk.get_relevant_configs_comps — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.walk.get_relevant_configs_comps

+
+
+atef.walk.get_relevant_configs_comps(prepared_file: PreparedFile, original_c: Configuration | Comparison) List[PreparedConfiguration | PreparedComparison][source]
+

Gather all the PreparedConfiguration or PreparedComparison dataclasses +that correspond to the original comparison or config.

+

Phrased another way: maps prepared comparisons onto the comparison +seen in the GUI

+

Currently for passive checkout files only

+
+
Parameters:
+
+
prepared_filePreparedFile

the file containing configs or comparisons to be gathered

+
+
original_cUnion[Configuration, Comparison]

the comparison to match PreparedComparison or PreparedConfigurations to

+
+
+
+
Returns:
+
+
List[Union[PreparedConfiguration, PreparedComparison]]:

the configuration or comparison dataclasses related to original_c

+
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.walk.walk_config_file.html b/v1.4.0/generated/generated/atef.walk.walk_config_file.html new file mode 100644 index 00000000..862b08e5 --- /dev/null +++ b/v1.4.0/generated/generated/atef.walk.walk_config_file.html @@ -0,0 +1,160 @@ + + + + + + + atef.walk.walk_config_file — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.walk.walk_config_file

+
+
+atef.walk.walk_config_file(config: PreparedFile | PreparedConfiguration | PreparedComparison, level: int = 0) Generator[Tuple[PreparedDeviceConfiguration | PreparedGroup | PreparedPVConfiguration | PreparedToolConfiguration | PreparedComparison, int], None, None][source]
+

Yields each config and comparison and its depth +Performs a recursive depth-first search

+
+
Parameters:
+
+
configUnion[PreparedFile, PreparedConfiguration, PreparedComparison]

the configuration or comparison to walk

+
+
levelint, optional

the current recursion depth, by default 0

+
+
+
+
Yields:
+
+
Generator[Tuple[Any, int], None, None]
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.walk.walk_procedure_file.html b/v1.4.0/generated/generated/atef.walk.walk_procedure_file.html new file mode 100644 index 00000000..c8f30326 --- /dev/null +++ b/v1.4.0/generated/generated/atef.walk.walk_procedure_file.html @@ -0,0 +1,163 @@ + + + + + + + atef.walk.walk_procedure_file — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.walk.walk_procedure_file

+
+
+atef.walk.walk_procedure_file(config: PreparedProcedureFile | PreparedProcedureStep | PreparedComparison, level: int = 0) Generator[Tuple[PreparedProcedureGroup | PreparedDescriptionStep | PreparedPassiveStep | PreparedSetValueStep | PreparedPlanStep | PreparedComparison, int], None, None][source]
+

Yields each ProcedureStep / Comparison and its depth +Performs a recursive depth-first search

+
+
Parameters:
+
+
configUnion[PreparedProcedureFile, PreparedProcedureStep,
+

PreparedComparison]

+
+

the item to yield and walk through

+
+
levelint, optional

the current recursion depth, by default 0

+
+
+
+
Yields:
+
+
Generator[Tuple[Any, int], None, None]
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/generated/generated/atef.walk.walk_steps.html b/v1.4.0/generated/generated/atef.walk.walk_steps.html new file mode 100644 index 00000000..4fd06050 --- /dev/null +++ b/v1.4.0/generated/generated/atef.walk.walk_steps.html @@ -0,0 +1,157 @@ + + + + + + + atef.walk.walk_steps — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

atef.walk.walk_steps

+
+
+atef.walk.walk_steps(step: ProcedureStep | PreparedProcedureStep) Generator[ProcedureStep | PreparedProcedureStep, None, None][source]
+

Yield ProedureSteps in step, depth-first.

+
+
Parameters:
+
+
stepProcedureStep

Step to yield ProcedureSteps from

+
+
+
+
Yields:
+
+
Generator[ProcedureStep, None, None]
+
+
+
+
+ +
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/genindex.html b/v1.4.0/genindex.html new file mode 100644 index 00000000..879f8ffd --- /dev/null +++ b/v1.4.0/genindex.html @@ -0,0 +1,2105 @@ + + + + + + Index — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | K + | L + | M + | N + | O + | P + | R + | S + | T + | U + | V + | W + +
+

_

+ + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

K

+ + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + +
+ +

P

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + +
+ +

V

+ + + +
+ +

W

+ + + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2024, SLAC National Accelerator Laboratory.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/index.html b/v1.4.0/index.html new file mode 100644 index 00000000..514479c0 --- /dev/null +++ b/v1.4.0/index.html @@ -0,0 +1,168 @@ + + + + + + + ATEF - Automated Test Execution Framework — atef documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

ATEF - Automated Test Execution Framework

+
+

Disclaimer

+

ATEF is still in beta; features are still in development and bugs may have slipped +through. If you have any feedback, we would very much appreciate you leaving an +issue in our github repository.

+
+
+

Background

+

Atef is an initialism that stands for “Automated Test Execution Framework.” +Atef is meant to be a framework tailored for automating checkout and diagnostic +procedures using the control system. It will provide functionality for +automating checkout procedures, and the collection of the results of those +checkout procedures. The concept is to provide a way for everyone to build +checkout procedures that can be run in the control system easily, and +consistently. It is meant to address the dynamic nature of the entire system +(the LCLS machine), by providing a way to establish and routinely verify a +performance baseline. The project seeks to combine the best practices and +features of software testing automation, and our favorite control system +automation packages together to form a powerful tool for maintaining our +systems.

+ +
+
+
+
+
+

Indices and tables

+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2024, SLAC National Accelerator Laboratory.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/objects.inv b/v1.4.0/objects.inv new file mode 100644 index 00000000..481c0ec1 Binary files /dev/null and b/v1.4.0/objects.inv differ diff --git a/v1.4.0/py-modindex.html b/v1.4.0/py-modindex.html new file mode 100644 index 00000000..fcf0bb84 --- /dev/null +++ b/v1.4.0/py-modindex.html @@ -0,0 +1,155 @@ + + + + + + Python Module Index — atef documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Python Module Index

+ +
+ a +
+ + + + + + + + + + + + + + + + + + + + + + +
 
+ a
+ atef +
    + atef.check +
    + atef.config +
    + atef.procedure +
    + atef.tools +
    + atef.walk +
+ + +
+
+
+ +
+ +
+

© Copyright 2024, SLAC National Accelerator Laboratory.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/releases.html b/v1.4.0/releases.html new file mode 100644 index 00000000..80712174 --- /dev/null +++ b/v1.4.0/releases.html @@ -0,0 +1,341 @@ + + + + + + + Release History — atef documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Release History

+
+

v1.4.0 (2024-02-20)

+
+

Features

+
    +
  • Adds script for converting pmgr configurations to atef checks.

  • +
  • Adds PagedTableWidget, and applies it to passive checkout group pages to substantially improve the loading performance of group pages with many, many comparisons.

  • +
+
+
+

Bugfixes

+
    +
  • Catch RuntimeErrors from widget deletion during enum filling

  • +
  • Avoid running deleteLater on widgets that garbage collection handles, preventing segfaults

  • +
+
+
+

Maintenance

+
    +
  • Make selection behavior more consistent by using QTreeView.setCurrentIndex() instead of manipulating the selection model

  • +
  • adds atef scripts subcommand for invoking existing scripts. Includes converter_v0 and pmgr_check scripts.

  • +
+
+
+

Contributors

+
    +
  • tangkong

  • +
+
+
+
+

v1.3.0 (2023-12-19)

+
+

Features

+
    +
  • Adds results summary page accessible from run-mode in the atef config GUI

  • +
  • Adds icons to run-mode tree view

  • +
  • Adds page widget cache and lazy loading functionality to the atef config GUI

  • +
+
+
+

Bugfixes

+
    +
  • RangeWidget’s visualizations update a bit more frequently, and also the label text actually updates. Closes #212

  • +
  • Adds a menu option to open the welcome tab, since people like it. Closes #201

  • +
  • Properly shows an error message box when a file can’t be opened. Closes #202

  • +
  • Allow tolerances to be None in Equals comparison. Modifies the line-edit setup to allow null values ('', None) when casting the line edit value. Closes #128

  • +
+
+
+

Maintenance

+
    +
  • Make comparisons against enum signals more robust by trying both the int and string versions if the check fails.

  • +
  • Refactors tree-walking helpers to a separate submodle (atef.walk)

  • +
  • Replaces use of functools.partial with WeakPartialMethodSlot in qt slots, cleaning up intermittent test suite failures (and hopefully production crashes)

  • +
  • Refactors GUI backend to support lazy page loading

  • +
  • Move tree-building logic to dataclasses

  • +
  • Consolidate GUI backend classes (EditTree / RunTree -> DualTree, AtefItem / TreeItem -> TreeItem)

  • +
+
+
+

Contributors

+
    +
  • tangkong

  • +
+
+
+
+

v1.2.0 (2023-09-27)

+
+

Features

+
    +
  • Adds ScientificDoubleSpinbox and uses it in MultiModeValueEdit.

  • +
+
+
+

Bugfixes

+
    +
  • Waits for signal connection during ActionRowWidget initialization to properly read enum strings from signal.

  • +
+
+
+

Contributors

+
    +
  • tangkong

  • +
+
+
+
+

v1.1.0 (2023-09-14)

+
+

Features

+
    +
  • Adds find-replace functionality and helpers. These procedures walk through the dataclass, rather than blindly modifying serialized json.

  • +
  • Adds a simple find-replace widget and more fully-featured fill-template page.

  • +
  • Adds backend dataclasses for running Bluesky plans in active checkouts.

  • +
  • Prototypes auto-generated plan argument entry widgets.

  • +
  • Annotates built-in Bluesky plans with bluesky-queueserver compatible type hints.

  • +
  • Adds DynamicValue (and subclasses HappiValue, EpicsValue) for comparing to dynamically changing data sources.

  • +
  • Adds MultiModeValueEdit widget for modifying values give a specified type, including dynamic values.

  • +
+
+
+

Bugfixes

+
    +
  • Ensure filenames get cast as strings properly.

  • +
  • Allow cast_dataclass to transfer objects from old to new dataclass, previously nested dataclasses would be converted to dicts.

  • +
+
+
+

Maintenance

+
    +
  • Adds bluesky-queueserver dependency and pins databroker.

  • +
  • Add sphinx templates for autogenerated documentation.

  • +
  • Reduce randomness in test suite, try all combo box options when available.

  • +
+
+
+

Contributors

+
    +
  • tangkong

  • +
+
+
+
+

v1.0.0 (2023-06-22)

+

Many changes have taken place since the last tag (08/2022). Checkouts can now +be run inside the GUI, and active checkouts have been prototyped.

+

Notably the structure of the checkout files changed, and checkouts before that +tag must be converted to the modern format. Most users will not have issues +with this.

+

Shoutout to all the contributors who helped before the pre-release notes framework +was added.

+
+

Features

+
    +
  • Replaces the welcome dialog with a welcome landing tab

  • +
  • Enable the close-tab button

  • +
  • adds run and edit widgets for PassiveStep, a step that allows passive checkouts to be run as a component of an active checkout

  • +
  • Adds Enum support to the SetValueStep’s actions

  • +
  • Adds SetValueStep tothe active checkout suite, allowing for a list of actions to be taken (setting values to targets), followed by a list of checks (Comparisons) for verifying the actions succeeded.

  • +
  • Adds a TableWidgetWithAddRow, a subclass of QTableWidget that includes a AddRowWidget. This add row contains a button for adding rows of a specified widget. (for better space efficiency)

  • +
  • Adds GUI support for placing a Comparison within a ProcedureStep

  • +
  • Adds a busy cursor Thread worker (disables click interaction and changes to a wait cursor while a function runs) and a busy cursor decorator (not recommended, but necessary when wrapping slots that create widgets)

  • +
  • Adds report generation for active checkouts

  • +
+
+
+

Bugfixes

+
    +
  • Fixes a bug where False-y observed values would fail to be reported

  • +
  • BusyCursorThread.raised_exception now properly expects to emit an Exception

  • +
  • fixes more NoneType handling bugs during report generation.

  • +
  • only subscribe the close-tab function once.

  • +
  • disconnect update_value slots in ActionRowWidget, preventing them from piling up whenever signal type changes.

  • +
  • Fixes optional type hint handling in QDataclassBridge (again)

  • +
  • Improve missing field handling in report generation

  • +
  • fixes type hint parsing in QDataclassBridge for Optional type hints.

  • +
  • carefully unsubscribes callbacks that might persist after toggling between run and edit mode, avoiding slots from referencing deleted RunTree widgets

  • +
  • Cast values read from the config to a string in AnyValue widget

  • +
  • Properly identify up Sequences in QDataclassBridge

  • +
  • Sets the comparison widget type based on the loaded datatype

  • +
  • Allows device selection via double-click in the HappiSearchWidget tree-view

  • +
+
+
+

Maintenance

+
    +
  • Improves ResultStatus refresh handling, now also updates on paint events

  • +
  • In the case of errors during a mode switch, the error will be revealed to the user and the switch will be reverted.

  • +
  • Improve result icon refresh behavior by emitting a sigal whenever a step is run.

  • +
  • Add result property to passive checkout configurations in order to re-compute the overall_result when .result is requested.

  • +
  • places a stray sig.wait_for_connection call into a BusyCursorThread

  • +
  • fleshes out the test suite, adding fixtures where appropriate.

  • +
  • display enum strings in SetValueStep run view.

  • +
  • Differentiates between read and write (set) PV’s in OphydDeviceTableView

  • +
  • Wraps signal.get call used for setting input type validators in BusyCursorThread

  • +
+
+
+

Contributors

+
    +
  • tangkong

  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/search.html b/v1.4.0/search.html new file mode 100644 index 00000000..df917ef0 --- /dev/null +++ b/v1.4.0/search.html @@ -0,0 +1,130 @@ + + + + + + Search — atef documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2024, SLAC National Accelerator Laboratory.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/v1.4.0/searchindex.js b/v1.4.0/searchindex.js new file mode 100644 index 00000000..e96ce880 --- /dev/null +++ b/v1.4.0/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["api", "framework", "generated/atef.check", "generated/atef.config", "generated/atef.procedure", "generated/atef.tools", "generated/atef.walk", "generated/generated/atef.check.AnyComparison", "generated/generated/atef.check.AnyValue", "generated/generated/atef.check.BasicDynamic", "generated/generated/atef.check.Comparison", "generated/generated/atef.check.DynamicValue", "generated/generated/atef.check.EpicsValue", "generated/generated/atef.check.Equals", "generated/generated/atef.check.Greater", "generated/generated/atef.check.GreaterOrEqual", "generated/generated/atef.check.HappiValue", "generated/generated/atef.check.Less", "generated/generated/atef.check.LessOrEqual", "generated/generated/atef.check.NotEquals", "generated/generated/atef.check.Range", "generated/generated/atef.check.Value", "generated/generated/atef.check.ValueRange", "generated/generated/atef.check.ValueSet", "generated/generated/atef.config.Configuration", "generated/generated/atef.config.ConfigurationFile", "generated/generated/atef.config.ConfigurationGroup", "generated/generated/atef.config.DeviceConfiguration", "generated/generated/atef.config.FailedConfiguration", "generated/generated/atef.config.PVConfiguration", "generated/generated/atef.config.PreparedComparison", "generated/generated/atef.config.PreparedConfiguration", "generated/generated/atef.config.PreparedDeviceConfiguration", "generated/generated/atef.config.PreparedFile", "generated/generated/atef.config.PreparedGroup", "generated/generated/atef.config.PreparedPVConfiguration", "generated/generated/atef.config.PreparedSignalComparison", "generated/generated/atef.config.PreparedToolComparison", "generated/generated/atef.config.PreparedToolConfiguration", "generated/generated/atef.config.ToolConfiguration", "generated/generated/atef.config.get_result_from_comparison", "generated/generated/atef.config.run_passive_step", "generated/generated/atef.procedure.CodeStep", "generated/generated/atef.procedure.ComparisonToPlanData", "generated/generated/atef.procedure.ComparisonToTarget", "generated/generated/atef.procedure.ConfigurationCheckStep", "generated/generated/atef.procedure.DescriptionStep", "generated/generated/atef.procedure.DeviceConfiguration", "generated/generated/atef.procedure.DisplayOptions", "generated/generated/atef.procedure.FailedStep", "generated/generated/atef.procedure.PassiveStep", "generated/generated/atef.procedure.PlanData", "generated/generated/atef.procedure.PlanOptions", "generated/generated/atef.procedure.PlanStep", "generated/generated/atef.procedure.PreparedDescriptionStep", "generated/generated/atef.procedure.PreparedPassiveStep", "generated/generated/atef.procedure.PreparedPlan", "generated/generated/atef.procedure.PreparedPlanComparison", "generated/generated/atef.procedure.PreparedPlanStep", "generated/generated/atef.procedure.PreparedProcedureFile", "generated/generated/atef.procedure.PreparedProcedureGroup", "generated/generated/atef.procedure.PreparedProcedureStep", "generated/generated/atef.procedure.PreparedSetValueStep", "generated/generated/atef.procedure.PreparedValueToSignal", "generated/generated/atef.procedure.ProcedureFile", "generated/generated/atef.procedure.ProcedureGroup", "generated/generated/atef.procedure.ProcedureStep", "generated/generated/atef.procedure.PydmDisplayStep", "generated/generated/atef.procedure.SetValueStep", "generated/generated/atef.procedure.Target", "generated/generated/atef.procedure.TyphosDisplayStep", "generated/generated/atef.procedure.ValueToTarget", "generated/generated/atef.procedure.create_prepared_comparison", "generated/generated/atef.procedure.get_RE_data", "generated/generated/atef.procedure.get_bs_state", "generated/generated/atef.tools.Ping", "generated/generated/atef.tools.PingResult", "generated/generated/atef.tools.Tool", "generated/generated/atef.tools.ToolResult", "generated/generated/atef.tools.get_result_value_by_key", "generated/generated/atef.walk.get_prepared_step", "generated/generated/atef.walk.get_relevant_configs_comps", "generated/generated/atef.walk.walk_config_file", "generated/generated/atef.walk.walk_procedure_file", "generated/generated/atef.walk.walk_steps", "index", "releases", "upcoming_changes", "upcoming_release_notes/template-full", "upcoming_release_notes/template-short"], "filenames": ["api.rst", "framework.rst", "generated/atef.check.rst", "generated/atef.config.rst", "generated/atef.procedure.rst", "generated/atef.tools.rst", "generated/atef.walk.rst", "generated/generated/atef.check.AnyComparison.rst", "generated/generated/atef.check.AnyValue.rst", "generated/generated/atef.check.BasicDynamic.rst", "generated/generated/atef.check.Comparison.rst", "generated/generated/atef.check.DynamicValue.rst", "generated/generated/atef.check.EpicsValue.rst", "generated/generated/atef.check.Equals.rst", "generated/generated/atef.check.Greater.rst", "generated/generated/atef.check.GreaterOrEqual.rst", "generated/generated/atef.check.HappiValue.rst", "generated/generated/atef.check.Less.rst", "generated/generated/atef.check.LessOrEqual.rst", "generated/generated/atef.check.NotEquals.rst", "generated/generated/atef.check.Range.rst", "generated/generated/atef.check.Value.rst", "generated/generated/atef.check.ValueRange.rst", "generated/generated/atef.check.ValueSet.rst", "generated/generated/atef.config.Configuration.rst", "generated/generated/atef.config.ConfigurationFile.rst", "generated/generated/atef.config.ConfigurationGroup.rst", "generated/generated/atef.config.DeviceConfiguration.rst", "generated/generated/atef.config.FailedConfiguration.rst", "generated/generated/atef.config.PVConfiguration.rst", "generated/generated/atef.config.PreparedComparison.rst", "generated/generated/atef.config.PreparedConfiguration.rst", "generated/generated/atef.config.PreparedDeviceConfiguration.rst", "generated/generated/atef.config.PreparedFile.rst", "generated/generated/atef.config.PreparedGroup.rst", "generated/generated/atef.config.PreparedPVConfiguration.rst", "generated/generated/atef.config.PreparedSignalComparison.rst", "generated/generated/atef.config.PreparedToolComparison.rst", "generated/generated/atef.config.PreparedToolConfiguration.rst", "generated/generated/atef.config.ToolConfiguration.rst", "generated/generated/atef.config.get_result_from_comparison.rst", "generated/generated/atef.config.run_passive_step.rst", "generated/generated/atef.procedure.CodeStep.rst", "generated/generated/atef.procedure.ComparisonToPlanData.rst", "generated/generated/atef.procedure.ComparisonToTarget.rst", "generated/generated/atef.procedure.ConfigurationCheckStep.rst", "generated/generated/atef.procedure.DescriptionStep.rst", "generated/generated/atef.procedure.DeviceConfiguration.rst", "generated/generated/atef.procedure.DisplayOptions.rst", "generated/generated/atef.procedure.FailedStep.rst", "generated/generated/atef.procedure.PassiveStep.rst", "generated/generated/atef.procedure.PlanData.rst", "generated/generated/atef.procedure.PlanOptions.rst", "generated/generated/atef.procedure.PlanStep.rst", "generated/generated/atef.procedure.PreparedDescriptionStep.rst", "generated/generated/atef.procedure.PreparedPassiveStep.rst", "generated/generated/atef.procedure.PreparedPlan.rst", "generated/generated/atef.procedure.PreparedPlanComparison.rst", "generated/generated/atef.procedure.PreparedPlanStep.rst", "generated/generated/atef.procedure.PreparedProcedureFile.rst", "generated/generated/atef.procedure.PreparedProcedureGroup.rst", "generated/generated/atef.procedure.PreparedProcedureStep.rst", "generated/generated/atef.procedure.PreparedSetValueStep.rst", "generated/generated/atef.procedure.PreparedValueToSignal.rst", "generated/generated/atef.procedure.ProcedureFile.rst", "generated/generated/atef.procedure.ProcedureGroup.rst", "generated/generated/atef.procedure.ProcedureStep.rst", "generated/generated/atef.procedure.PydmDisplayStep.rst", "generated/generated/atef.procedure.SetValueStep.rst", "generated/generated/atef.procedure.Target.rst", "generated/generated/atef.procedure.TyphosDisplayStep.rst", "generated/generated/atef.procedure.ValueToTarget.rst", "generated/generated/atef.procedure.create_prepared_comparison.rst", "generated/generated/atef.procedure.get_RE_data.rst", "generated/generated/atef.procedure.get_bs_state.rst", "generated/generated/atef.tools.Ping.rst", "generated/generated/atef.tools.PingResult.rst", "generated/generated/atef.tools.Tool.rst", "generated/generated/atef.tools.ToolResult.rst", "generated/generated/atef.tools.get_result_value_by_key.rst", "generated/generated/atef.walk.get_prepared_step.rst", "generated/generated/atef.walk.get_relevant_configs_comps.rst", "generated/generated/atef.walk.walk_config_file.rst", "generated/generated/atef.walk.walk_procedure_file.rst", "generated/generated/atef.walk.walk_steps.rst", "index.rst", "releases.rst", "upcoming_changes.rst", "upcoming_release_notes/template-full.rst", "upcoming_release_notes/template-short.rst"], "titles": ["ATEF API", "ATEF Framework", "atef.check", "atef.config", "atef.procedure", "atef.tools", "atef.walk", "atef.check.AnyComparison", "atef.check.AnyValue", "atef.check.BasicDynamic", "atef.check.Comparison", "atef.check.DynamicValue", "atef.check.EpicsValue", "atef.check.Equals", "atef.check.Greater", "atef.check.GreaterOrEqual", "atef.check.HappiValue", "atef.check.Less", "atef.check.LessOrEqual", "atef.check.NotEquals", "atef.check.Range", "atef.check.Value", "atef.check.ValueRange", "atef.check.ValueSet", "atef.config.Configuration", "atef.config.ConfigurationFile", "atef.config.ConfigurationGroup", "atef.config.DeviceConfiguration", "atef.config.FailedConfiguration", "atef.config.PVConfiguration", "atef.config.PreparedComparison", "atef.config.PreparedConfiguration", "atef.config.PreparedDeviceConfiguration", "atef.config.PreparedFile", "atef.config.PreparedGroup", "atef.config.PreparedPVConfiguration", "atef.config.PreparedSignalComparison", "atef.config.PreparedToolComparison", "atef.config.PreparedToolConfiguration", "atef.config.ToolConfiguration", "atef.config.get_result_from_comparison", "atef.config.run_passive_step", "atef.procedure.CodeStep", "atef.procedure.ComparisonToPlanData", "atef.procedure.ComparisonToTarget", "atef.procedure.ConfigurationCheckStep", "atef.procedure.DescriptionStep", "atef.procedure.DeviceConfiguration", "atef.procedure.DisplayOptions", "atef.procedure.FailedStep", "atef.procedure.PassiveStep", "atef.procedure.PlanData", "atef.procedure.PlanOptions", "atef.procedure.PlanStep", "atef.procedure.PreparedDescriptionStep", "atef.procedure.PreparedPassiveStep", "atef.procedure.PreparedPlan", "atef.procedure.PreparedPlanComparison", "atef.procedure.PreparedPlanStep", "atef.procedure.PreparedProcedureFile", "atef.procedure.PreparedProcedureGroup", "atef.procedure.PreparedProcedureStep", "atef.procedure.PreparedSetValueStep", "atef.procedure.PreparedValueToSignal", "atef.procedure.ProcedureFile", "atef.procedure.ProcedureGroup", "atef.procedure.ProcedureStep", "atef.procedure.PydmDisplayStep", "atef.procedure.SetValueStep", "atef.procedure.Target", "atef.procedure.TyphosDisplayStep", "atef.procedure.ValueToTarget", "atef.procedure.create_prepared_comparison", "atef.procedure.get_RE_data", "atef.procedure.get_bs_state", "atef.tools.Ping", "atef.tools.PingResult", "atef.tools.Tool", "atef.tools.ToolResult", "atef.tools.get_result_value_by_key", "atef.walk.get_prepared_step", "atef.walk.get_relevant_configs_comps", "atef.walk.walk_config_file", "atef.walk.walk_procedure_file", "atef.walk.walk_steps", "ATEF - Automated Test Execution Framework", "Release History", "Upcoming Changes", "IssueNumber Title", "IssueNumber Title"], "terms": {"To": [1, 9, 10, 14, 15, 17, 18, 20, 30, 42, 45, 46, 50, 53, 57, 65, 66, 67, 68, 70], "expand": [1, 42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "serializ": 1, "prepar": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40, 49, 54, 55, 57, 58, 59, 60, 61, 62, 63, 74, 81], "variant": [1, 3, 4, 74], "hold": [1, 2, 3, 4, 7, 20, 55, 57, 73, 74], "transient": 1, "inform": [1, 25, 33, 44, 45, 59, 64, 69, 71, 74], "result": [1, 3, 4, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 49, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 75, 76, 77, 78, 79, 85, 86], "passiv": [1, 50, 55, 81, 86], "group": [1, 7, 24, 25, 26, 27, 29, 32, 33, 34, 35, 38, 39, 42, 45, 46, 50, 53, 60, 64, 65, 66, 67, 68, 70, 86], "activ": [1, 4, 80, 86], "verifi": [1, 39, 42, 45, 46, 50, 53, 65, 66, 67, 68, 70, 85, 86], "control": [1, 85], "flow": 1, "dataclass": [2, 3, 4, 6, 7, 24, 26, 27, 29, 39, 59, 79, 80, 81, 85, 86], "describ": [2, 4, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 37, 44, 69, 71], "comparison": [2, 3, 7, 8, 9, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 43, 44, 47, 54, 55, 57, 58, 60, 61, 62, 68, 80, 81, 82, 83, 86], "gener": [2, 10, 24, 25, 26, 31, 32, 33, 34, 35, 38, 60, 62, 64, 65, 79, 82, 83, 84, 86], "subclass": [2, 9, 10, 14, 15, 17, 18, 20, 24, 30, 39, 42, 45, 46, 50, 53, 57, 65, 66, 67, 68, 70, 86], "which": [2, 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 39, 43, 45, 51, 52, 54, 55, 57, 60, 61, 62, 67, 70], "valu": [2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 26, 27, 29, 34, 36, 39, 47, 52, 57, 62, 63, 68, 69, 71, 79, 86], "dynamicvalu": [2, 8, 9, 13, 14, 15, 17, 18, 19, 20, 23, 86], "object": [2, 3, 4, 10, 12, 16, 24, 79, 86], "involv": 2, "must": [2, 20, 43, 51, 86], "befor": [2, 86], "can": [2, 26, 39, 42, 45, 46, 50, 53, 65, 66, 67, 68, 70, 75, 77, 85, 86], "run": [2, 4, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 74, 75, 77, 85, 86], "class": [2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 75, 76, 77, 78, 86, 88], "contain": [3, 7, 21, 43, 51, 81, 86], "configur": [3, 6, 20, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 45, 47, 49, 52, 57, 64, 81, 82, 86], "organ": 3, "also": [3, 80, 86], "link": [3, 56, 58, 63], "specif": [3, 16, 36, 37, 73], "identifi": [3, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 24, 27, 30, 32, 36, 37, 39, 43, 51, 52, 56, 57, 63, 86], "function": [3, 4, 5, 6, 85, 86], "checkout": [4, 50, 55, 80, 81, 85, 86], "These": [4, 20, 86, 88], "come": 4, "normal": [4, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "edit": [4, 86], "data": [4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 43, 49, 51, 57, 73, 79, 86], "need": [4, 42, 45, 46, 50, 53, 65, 66, 67, 68, 70, 88], "specifi": [4, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 63, 73, 86], "step": [4, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 42, 45, 46, 49, 50, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 74, 80, 84, 86], "refer": [4, 27], "origin": [4, 11, 49, 54, 55, 56, 57, 58, 60, 61, 62, 63, 74, 80, 81], "along": [4, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "method": [4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 75, 76, 77, 78, 80, 88], "ad": [4, 86], "requir": [4, 35, 42, 45, 46, 50, 53, 55, 65, 66, 67, 68, 70], "write": [4, 71, 86], "add": [4, 32, 76, 86, 88], "anyprocedur": [4, 58, 61], "type": [4, 7, 8, 23, 25, 26, 27, 29, 31, 32, 34, 35, 36, 37, 38, 39, 42, 43, 45, 48, 51, 52, 53, 56, 57, 58, 60, 62, 64, 65, 68, 70, 75, 76, 79, 86], "hint": [4, 86], "its": [4, 9, 13, 14, 15, 17, 18, 19, 20, 23, 39, 74, 82, 83], "_run": 4, "from_origin": [4, 54, 55, 56, 58, 59, 60, 61, 62, 63], "preparedprocedur": 4, "classmethod": [4, 25, 31, 32, 33, 34, 35, 36, 37, 38, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 76], "case": [4, 40, 86], "statement": 4, "helper": [6, 86, 88], "If": [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 31, 32, 33, 34, 35, 36, 37, 38, 58, 61, 75, 77, 79, 80, 85], "reli": 6, "walk_group": [6, 33, 34], "walk_comparison": [6, 31, 32, 33, 34, 35, 38, 62, 80], "note": [6, 20, 86, 88], "fail": [6, 7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 28, 31, 32, 34, 38, 49, 53, 58, 60, 61, 62, 68, 86], "thei": [6, 20], "skip": 6, "name": [7, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 32, 34, 35, 36, 37, 39, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 73, 76, 79, 88], "str": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 32, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 75, 76, 77, 79], "none": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 82, 83, 84, 86], "descript": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29, 39, 42, 45, 46, 50, 53, 54, 65, 66, 67, 68, 70], "invert": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "bool": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 33, 42, 45, 46, 48, 50, 53, 63, 65, 66, 67, 68, 70, 71], "fals": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 33, 86], "reduce_period": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23], "int": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 43, 51, 63, 71, 75, 76, 82, 83, 86], "float": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 63, 71, 76], "reduce_method": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23], "reduc": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 43, 51, 86], "reducemethod": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 43, 51], "averag": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 43, 51, 88], "string": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 86], "severity_on_failur": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "enum": [7, 8, 23, 26, 53, 86], "sever": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 28, 64], "error": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 40, 76, 86], "if_disconnect": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "list": [7, 8, 24, 25, 26, 27, 29, 31, 32, 33, 34, 35, 38, 39, 42, 43, 45, 46, 50, 51, 53, 58, 60, 62, 64, 65, 66, 67, 68, 70, 75, 76, 80, 81, 86, 88], "factori": [7, 8, 23, 25, 26, 27, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 42, 43, 45, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 67, 68, 70, 75, 76], "sourc": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 86], "pass": [7, 8, 42, 56], "ani": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 29, 30, 34, 36, 37, 39, 42, 45, 46, 47, 50, 52, 56, 57, 58, 61, 62, 66, 67, 70, 73, 78, 79, 80, 82, 83, 85, 88], "attribut": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 75, 76, 78, 79], "__init__": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 75, 76, 77, 78], "children": [7, 24, 25, 26, 27, 29, 33, 39, 42, 45, 46, 50, 53, 60, 64, 65, 66, 67, 68, 70], "return": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 50, 51, 53, 54, 55, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 79, 80, 81], "thi": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 47, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 76, 86, 88], "tree": [7, 24, 25, 26, 27, 29, 33, 36, 37, 39, 42, 45, 46, 50, 53, 64, 65, 66, 67, 68, 70, 86], "view": [7, 24, 25, 26, 27, 29, 33, 39, 42, 43, 45, 46, 50, 51, 53, 64, 65, 66, 67, 68, 70, 86], "might": [7, 24, 25, 26, 27, 29, 33, 39, 42, 45, 46, 50, 53, 64, 65, 66, 67, 68, 70, 86], "expect": [7, 10, 24, 25, 26, 27, 29, 33, 39, 42, 45, 46, 49, 50, 53, 54, 55, 58, 60, 61, 62, 64, 65, 66, 67, 68, 70, 86], "compar": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 30, 31, 32, 33, 34, 35, 36, 37, 38, 57, 86], "provid": [7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 27, 29, 31, 33, 34, 36, 37, 39, 40, 43, 51, 63, 73, 85, 88], "us": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 43, 44, 49, 51, 57, 66, 69, 71, 76, 80, 85, 86, 88], "": [7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 27, 30, 36, 37, 39, 43, 51, 57, 58, 60, 76, 80, 86], "set": [7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 32, 35, 36, 38, 39, 43, 51, 54, 55, 58, 61, 62, 63, 68, 71, 75, 86], "paramet": [7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 26, 27, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 52, 54, 55, 58, 59, 60, 61, 62, 63, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84], "The": [7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 57, 58, 61, 62, 63, 65, 66, 67, 68, 70, 75, 76, 77, 78, 79, 85, 88], "option": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43, 44, 48, 51, 52, 54, 55, 56, 58, 60, 61, 62, 63, 67, 70, 71, 76, 79, 82, 83, 86, 88], "an": [7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 23, 24, 31, 33, 34, 35, 38, 40, 59, 66, 69, 85, 86], "goe": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "word": [7, 8, 13, 19, 23, 88], "get_data_for_sign": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "signal": [7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 30, 32, 36, 37, 44, 62, 63, 69, 71, 86], "get": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 30, 34, 36, 37, 40, 57, 73, 74, 86], "given": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 31, 32, 34, 35, 38, 41, 45, 52, 75, 76, 77], "accord": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 30, 36, 57], "reduct": [7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 23, 36, 43, 51], "ophyd": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 32, 36, 44, 63, 69, 71], "acquir": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 30, 36, 37, 57], "rais": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 34, 36, 63, 73, 75, 77, 79], "timeouterror": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 36], "oper": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 43, 51], "time": [7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 23, 63, 71, 76], "out": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 48, 86, 88], "async": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 30, 31, 32, 33, 34, 35, 36, 37, 38, 41, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 75, 77], "get_data_for_signal_async": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "executor": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "concurr": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "futur": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "synchron": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "call": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 76, 86], "default": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 26, 27, 29, 33, 39, 54, 58, 60, 61, 82, 83, 88], "loop": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "defin": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 25, 33, 34, 59], "cach": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 28, 30, 31, 32, 33, 34, 35, 36, 37, 38, 49, 57, 86], "datacach": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 30, 31, 32, 33, 34, 35, 36, 37, 38, 57], "all": [7, 10, 24, 25, 26, 27, 29, 31, 32, 33, 34, 35, 38, 39, 53, 60, 66, 68, 80, 81, 86], "instanc": [7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 28, 31, 32, 33, 34, 35, 36, 37, 38, 40, 49, 59, 63, 74, 79], "avail": [7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 28, 31, 32, 33, 34, 35, 36, 37, 38, 40, 49, 86], "replace_comparison": [7, 24, 26, 27, 29, 39, 68], "old_comp": [7, 24, 26, 27, 29, 39, 68], "new_comp": [7, 24, 26, 27, 29, 39, 68], "replac": [7, 24, 26, 27, 29, 39, 68, 86, 88], "A": [7, 11, 12, 16, 20, 21, 22, 23, 25, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 42, 45, 46, 49, 50, 53, 59, 65, 66, 67, 68, 69, 70, 88, 89], "common": 7, "compars": 7, "ti": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 24, 26, 27, 29, 39], "2": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 85, 88], "disconnect": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 86], "unabl": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 36], "perform": [7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 23, 37, 53, 68, 82, 83, 85, 86], "valid": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 63, 66, 75, 77, 86], "i": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 26, 27, 29, 31, 32, 34, 36, 37, 39, 42, 45, 46, 47, 50, 53, 54, 55, 58, 60, 61, 62, 65, 66, 67, 68, 70, 75, 77, 79, 85, 86, 88], "one": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 21, 23, 27, 32, 33, 34, 36, 40, 53, 68, 70, 75, 76], "evalu": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "true": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 22, 23, 33, 42, 45, 46, 48, 50, 53, 65, 66, 67, 68, 70], "consid": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 64], "success": [7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 42, 45, 46, 50, 53, 58, 62, 63, 65, 66, 67, 68, 70], "when": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 33, 76, 86, 88], "would": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 27, 85, 86], "failur": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 76, 86], "collect": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 85, 86], "sampl": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23], "period": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23], "over": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23], "occur": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "where": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 86], "multipl": [7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 23, 33, 43, 51], "mai": [7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 23, 27, 34, 36, 56, 85], "prior": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23], "being": [7, 8, 9, 10, 13, 14, 15, 17, 18, 19, 20, 23, 88], "applic": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 32, 36, 37], "request": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 86], "rather": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 86], "than": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 86], "values_dynam": [8, 23], "each": [8, 27, 36, 37, 74, 82, 83], "value_dynam": [8, 9, 13, 14, 15, 17, 18, 19, 20, 23], "number": [9, 13, 19, 25, 43, 51, 71, 73, 75, 76, 88], "human": [9, 10, 14, 15, 17, 18, 20, 42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "readabl": [9, 10, 14, 15, 17, 18, 20], "itself": [9, 10, 14, 15, 17, 18, 20, 30, 36, 37, 57], "implement": [9, 10, 11, 14, 15, 17, 18, 20, 30, 57], "base": [10, 24, 25, 31, 37, 54, 55, 58, 59, 61, 62, 66, 77, 78, 86, 88], "serial": [10, 24, 86], "tag": [10, 24, 25, 26, 27, 29, 39, 86, 88], "union": [10, 24, 32, 34, 40, 43, 51, 58, 60, 76, 80, 81, 82, 83], "mean": [10, 24, 27], "dictionari": [10, 24, 25, 27, 29, 32, 34, 35, 37, 38, 39, 52, 64, 76, 78, 79], "json": [10, 24, 25, 64, 86], "grab": [10, 40, 43, 51], "dynam": [10, 20, 85, 86], "self": [10, 11, 14, 15, 17, 18], "is_prepar": 10, "primit": [11, 12, 16, 21, 22], "from": [11, 12, 16, 21, 25, 32, 34, 36, 37, 40, 43, 51, 56, 57, 63, 64, 73, 76, 79, 84, 86], "extern": 11, "chang": [11, 85, 86, 88], "necessarili": 11, "pick": 11, "up": [11, 44, 69, 71, 74, 86], "runtim": 11, "cost": 11, "guarante": 11, "unsuccess": 11, "dynamicvalueerror": [11, 12, 16], "except": [11, 28, 31, 32, 35, 38, 40, 49, 58, 76, 86], "includ": [11, 20, 22, 25, 36, 65, 75, 77, 86], "child": 11, "current": [11, 74, 75, 81, 82, 83], "should": [11, 20, 22, 43, 51, 52, 88], "read": [11, 12, 16, 55, 86], "now": [11, 12, 16, 86], "fill": [11, 12, 16, 33, 76, 86, 88], "pvname": [12, 25, 36], "epic": [12, 29, 44, 69, 71], "pv": [12, 16, 25, 29, 30, 31, 35, 36, 37, 39, 44, 69, 71, 86, 88], "creat": [12, 32, 33, 36, 40, 86], "epicssignalro": 12, "defer": [12, 16], "handl": [12, 16, 86], "access": [12, 16, 27, 55, 86], "unspecifi": [12, 16, 31, 32, 33, 34, 35, 36, 37, 38], "new": [12, 16, 31, 32, 33, 34, 35, 36, 37, 38, 76, 86, 88], "instanti": [12, 16, 31, 32, 33, 34, 35, 36, 37, 38], "doe": [12, 16, 42, 45, 46, 50, 53, 65, 66, 67, 68, 70, 73, 88], "have": [12, 16, 53, 68, 85, 86, 88], "primitivetyp": [13, 19, 63, 71], "0": [13, 14, 15, 17, 18, 19, 20, 21, 22, 25, 43, 51, 64, 76, 82, 83, 85], "rtol": [13, 19, 21], "atol": [13, 19, 21], "device_nam": 16, "signal_attr": 16, "happi": [16, 31, 32, 33, 34, 44, 69, 70, 71], "devic": [16, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 44, 45, 47, 69, 70, 71, 74, 86], "queri": 16, "compon": [16, 27, 36, 86, 88], "databas": 16, "epicsvalu": [16, 86], "attr": [16, 36, 44, 69, 71], "equal": [19, 23, 86], "low": [20, 22], "low_dynam": 20, "high": [20, 22], "high_dynam": 20, "warn_low": 20, "warn_low_dynam": 20, "warn_high": 20, "warn_high_dynam": 20, "inclus": [20, 22], "follow": [20, 86], "inequ": 20, "succe": 20, "addition": 20, "warn": 20, "level": [20, 25, 27, 33, 59, 64, 74, 82, 83], "With": 20, "fall": [20, 44, 69, 71], "within": [20, 86], "For": [20, 37, 75, 77], "limit": 20, "exist": [20, 35, 59, 86], "end": 20, "static": 21, "metadata": [21, 22], "toler": [21, 86], "absolut": 21, "what": [21, 22, 42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "repres": [21, 22, 88], "rel": 21, "match": [21, 22, 25, 43, 49, 51, 54, 55, 58, 60, 61, 62, 80, 81], "in_rang": 22, "rang": 22, "insid": [22, 86], "sequenc": [23, 32, 52, 53, 65, 86], "correspond": [23, 33, 34, 59, 74, 80, 81], "share": [24, 26, 27, 29, 31, 32, 35, 38, 39], "between": [24, 86], "move_comparison": [24, 26, 27, 29, 39], "comp": [24, 26, 27, 29, 39], "new_attr": [24, 26, 27, 29, 39], "comp_attr": [24, 26, 27, 29, 39], "wherev": [24, 26, 27, 29, 39], "look": [24, 26, 27, 29, 37, 39, 44, 69, 71], "through": [24, 26, 27, 29, 31, 32, 33, 34, 35, 38, 39, 80, 83, 85, 86], "check": [24, 26, 27, 29, 30, 32, 35, 36, 37, 39, 41, 43, 45, 53, 57, 58, 68, 72, 75, 77, 80, 86], "version": [25, 54, 55, 60, 61, 62, 64, 86], "liter": [25, 64], "root": [25, 33, 34, 59, 64], "configurationgroup": [25, 28, 31, 34], "file": [25, 31, 33, 34, 50, 55, 59, 64, 81, 86], "compris": [25, 36, 37, 53, 64], "from_filenam": [25, 64], "filenam": [25, 64, 86, 88], "path": [25, 48, 50, 64, 67], "load": [25, 64, 86], "dispatch": 25, "from_json": [25, 64], "from_yaml": [25, 64], "yaml": [25, 64], "get_by_devic": 25, "deviceconfigur": [25, 26, 28, 31, 32, 36, 45], "get_by_pv": 25, "pvconfigur": [25, 26, 28, 31, 35, 36], "identifierandcomparison": [25, 36], "get_by_tag": 25, "to_json": [25, 64], "dump": [25, 64], "compat": [25, 64, 86], "to_yaml": [25, 64], "walk_config": [25, 26], "toolconfigur": [25, 26, 28, 31, 38], "walk": [25, 31, 32, 33, 34, 35, 38, 74, 86], "node": 25, "yield": [25, 62, 82, 83, 84], "anyconfigur": 25, "top": [25, 33, 59, 64, 74], "dict": [26, 27, 29, 32, 35, 38, 39, 42, 45, 47, 48, 52, 56, 70, 76, 86], "mode": [26, 33, 86], "groupresultmod": 26, "all_": 26, "underneath": 26, "reus": 26, "by_attr": [27, 32, 38, 39], "built": [27, 29, 86], "more": [27, 32, 53, 68, 70, 75, 86], "ar": [27, 37, 39, 76, 85, 88], "assum": [27, 75], "sub": 27, "sub_devic": 27, "parent": [28, 30, 31, 32, 34, 35, 36, 37, 38, 42, 45, 46, 49, 50, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 65, 66, 67, 68, 70, 72, 74], "preparedgroup": [28, 30, 31, 32, 33, 35, 37, 38, 82], "wa": [28, 49, 76, 86], "caught": [28, 49, 76], "by_pv": [29, 35], "live": 29, "unifi": [30, 36, 37, 57], "represent": [30, 36, 37, 57], "standalon": [30, 36, 37], "get_data_async": [30, 36, 37, 57], "associ": [30, 36, 37, 38, 47, 57], "hierarh": [30, 34, 36, 37], "last": [30, 36, 37, 57, 86], "preparedsignalcomparison": [31, 32, 34, 35, 38, 58, 62], "preparedtoolcomparison": [31, 34], "prepare_failur": [31, 32, 34, 35, 38, 60], "preparedcomparisonexcept": [31, 32, 35, 38, 58, 72], "combined_result": [31, 32, 34, 35, 38, 49, 54, 55, 58, 60, 61, 62], "ha": [31, 36, 37, 61, 80], "been": [31, 61, 86], "re": [31, 32, 34, 35, 38, 60, 86], "comput": [31, 32, 34, 35, 38, 60, 86], "combin": [31, 32, 33, 34, 35, 38, 54, 55, 58, 60, 61, 62, 85], "from_config": [31, 32, 33, 34, 35, 38], "client": [31, 32, 33, 34], "preparedpvconfigur": [31, 33, 34, 36, 82], "prepareddeviceconfigur": [31, 33, 34, 36, 82], "preparedtoolconfigur": [31, 33, 34, 37, 82], "failedconfigur": [31, 32, 34], "deriv": [31, 33, 34, 63], "util": [31, 33, 34, 88], "It": [31, 85], "recommend": [31, 86], "per": [31, 75, 76], "basi": 31, "tool": [31, 37, 38, 39, 85], "preparedcomparison": [31, 32, 33, 34, 35, 36, 38, 40, 41, 62, 72, 80, 81, 82, 83], "hierarch": [31, 32, 35, 38, 42, 45, 46, 50, 53, 54, 55, 56, 57, 58, 60, 61, 62, 65, 66, 67, 68, 70], "additional_devic": 32, "addit": 32, "asid": 32, "those": [32, 85], "unavail": 32, "from_devic": [32, 36], "some": [32, 39], "appli": [32, 36, 37, 43, 44, 86], "configurationfil": 33, "fill_cach": 33, "parallel": 33, "task": 33, "By": 33, "asyncio": 33, "sequenti": 33, "everi": [33, 34, 38, 43, 51], "preparedfil": [34, 41, 55, 81, 82], "anypreparedconfigur": 34, "subgroup": 34, "direct": 34, "descend": 34, "get_value_by_nam": 34, "ancestor": 34, "first": [34, 44, 69, 71, 82, 83, 84], "found": [34, 73, 79], "kei": [34, 37, 38, 75, 77, 79], "variabl": 34, "keyerror": [34, 79], "from_pv": 35, "readi": 35, "without": [35, 38], "singl": [36, 37, 74], "leaf": [36, 37], "dot": [36, 47, 79], "notat": [36, 43, 51], "from_pvnam": 36, "from_sign": 36, "directli": 36, "connect": [36, 86], "retriev": [36, 79], "e": 37, "depend": [37, 86], "exampl": [37, 75, 77], "ping": [37, 39, 76], "pingresult": [37, 75, 77], "from_tool": [37, 38], "result_kei": 37, "execut": [37, 42], "after": [37, 68, 86], "test": [38, 86], "unrel": 39, "statu": 39, "via": [39, 43, 51, 86], "here": [39, 88], "item": [40, 52, 56, 79, 83], "tupl": [40, 43, 51, 82, 83], "argument": [40, 42, 52, 86], "In": [40, 86], "intern": 40, "preparedconfigur": [41, 81, 82], "proceduregroup": [42, 45, 46, 49, 50, 53, 59, 60, 61, 64, 66, 67, 68, 70], "verify_requir": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "step_success_requir": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "source_cod": 42, "code": [42, 88], "allow_verifi": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "whether": [42, 45, 46, 49, 50, 53, 54, 55, 58, 60, 61, 62, 65, 66, 67, 68, 70], "further": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "overload": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "narr": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "explan": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "setup": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70, 86], "happen": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70, 76], "etc": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70, 88], "titl": [42, 45, 46, 50, 53, 65, 66, 67, 68, 70], "complet": [42, 45, 46, 49, 50, 53, 54, 55, 58, 60, 61, 62, 65, 66, 67, 68, 70], "verif": [42, 45, 46, 50, 53, 54, 55, 58, 61, 62, 65, 66, 67, 68, 70], "plan_id": [43, 51, 56], "plan_no": [43, 51], "data_point": [43, 51], "field_nam": [43, 51], "reduction_mod": [43, 51], "target": [43, 44, 62, 63, 71, 86], "user": [43, 49, 51, 54, 55, 58, 60, 61, 62, 86, 88], "plan": [43, 51, 52, 53, 56, 57, 73, 74, 86], "Not": [43, 51], "planstep": [43, 49, 51, 52, 58, 61, 64, 65], "gui": [43, 51, 81, 86], "preparedplan": [43, 51, 58], "fix": [43, 51, 86, 88], "regener": [43, 51], "nest": [43, 51, 65, 86], "uuid": [43, 51, 73], "point": [43, 51, 73, 88], "index": [43, 51, 79, 85], "slice": [43, 51], "row_start": [43, 51], "row_end": [43, 51], "field": [43, 51, 62, 73, 86], "column": [43, 51], "to_sign": [44, 69, 71], "signal_cach": [44, 69, 71], "_signalcach": [44, 69, 71], "attempt": [44, 69, 71, 75], "back": [44, 69, 71], "raw": [44, 69, 71], "versu": 45, "timestamp": [45, 47], "simpl": [46, 86], "archiver_timestamp": 47, "datetim": 47, "macro": 48, "templat": [48, 86], "embedded_screen": 48, "emb": 48, "typho": [48, 70], "pydm": [48, 67], "displai": [48, 67, 70, 86], "pop": 48, "screen": 48, "preparedproceduregroup": [49, 54, 55, 58, 59, 61, 62, 83], "descriptionstep": [49, 54, 61, 64, 65], "passivestep": [49, 55, 61, 64, 65, 86], "setvaluestep": [49, 61, 62, 64, 65, 86], "verify_result": [49, 54, 55, 58, 60, 61, 62], "step_result": [49, 53, 54, 55, 58, 60, 61, 62, 68], "overal": [49, 54, 55, 58, 60, 61, 62], "confirm": [49, 54, 55, 58, 60, 61, 62], "successfulli": [49, 54, 55, 58, 60, 61, 62], "filepath": 50, "pathlib": [50, 67], "arg": [52, 77], "kwarg": [52, 77], "fixed_argu": 52, "blueski": [52, 53, 56, 57, 86], "scan": 52, "to_plan_item": 52, "make": [52, 75, 86, 88], "otherwis": [52, 79], "keyword": 52, "planopt": [53, 56, 58], "comparisontotarget": [53, 68, 72], "comparisontoplandata": [53, 57, 72], "destin": [53, 69], "plandestin": 53, "local": 53, "halt_on_fail": [53, 68], "require_plan_success": 53, "platform": 53, "stop": [53, 68], "onli": [53, 68, 80, 81, 86], "mark": [53, 68], "successful": 53, "succeed": [53, 68, 86], "procedurestep": [54, 55, 58, 60, 61, 62, 65, 80, 83, 84, 86], "prepared_passive_fil": 55, "config": [55, 58, 62, 81, 82, 83, 86], "assign": [55, 74], "preparedplanstep": [56, 57, 60, 83], "bs_state": [56, 73], "blueskyst": [56, 73, 74], "plan_util": 56, "stash": 56, "runengin": 56, "runner": 56, "identif": 56, "differ": 56, "suitabl": 56, "submiss": 56, "queueserv": [56, 86], "did": 56, "plan_data": [57, 73], "from_comp_to_plan": 57, "take": [57, 62], "place": [57, 86], "relev": [57, 80], "coordin": 57, "prepared_plan": 58, "prepared_plan_failur": 58, "prepared_check": 58, "preparedplancomparison": 58, "prepared_checks_failur": 58, "creation": [58, 61], "reason": [58, 61], "failedstep": [58, 60, 61], "led": 58, "criteria": [58, 62], "procedurefil": [59, 74], "construct": 59, "off": 59, "preparedprocedurefil": [60, 74, 80, 83], "anypreparedprocedur": 60, "walk_step": [60, 64, 65], "prepareddescriptionstep": [60, 83], "preparedpassivestep": [60, 83], "preparedsetvaluestep": [60, 63, 83], "prepared_act": 62, "preparedvaluetosign": 62, "prepared_criteria": 62, "gather": [62, 80, 81], "necessari": [62, 86], "action": [62, 63, 68, 86], "store": [62, 63], "under": 62, "prepare_action_failur": 62, "prepare_criteria_failur": 62, "respect": 62, "valuetotarget": [63, 68], "valuetosign": 63, "valueerror": [63, 73, 75, 77], "cannot": [63, 73], "settl": [63, 71], "timeout": [63, 71], "record": 63, "own": 63, "essenti": 64, "ident": 64, "refactor": [64, 86], "design": 64, "do": 64, "diverg": 64, "replace_step": 65, "old_step": 65, "new_step": 65, "basic": 66, "displayopt": [67, 70], "open": [67, 70, 86], "success_criteria": 68, "require_action_success": 68, "either": 69, "pair": 69, "settle_tim": 71, "anydataclass": 72, "plandata": 73, "databrok": [73, 86], "globalrunengin": 73, "whose": 73, "run_map": 73, "arrai": 73, "runtimeerror": [73, 86], "parsabl": 73, "datapoint": 73, "dclass": 74, "preparedprocedurestep": [74, 80, 83, 84], "find": [74, 86], "correspoind": 74, "allow": [74, 86], "host": [75, 76], "count": [75, 88], "3": [75, 85], "encod": 75, "utf": 75, "8": 75, "summar": 75, "check_result_kei": [75, 77], "min_tim": [75, 76, 77], "max_tim": [75, 76, 77], "so": [75, 77], "invalid": [75, 77, 79], "output": [75, 76], "command": 75, "aliv": 76, "num_al": 76, "unrespons": 76, "num_unrespons": 76, "add_host_result": 76, "failure_tim": 76, "100": 76, "aggreg": 76, "hostnam": 76, "ip": 76, "address": [76, 85], "interpret": 76, "from_output": 76, "unresponsive_tim": 76, "program": 76, "decod": 76, "subprocess": 76, "maximum": 76, "second": 76, "minimum": 76, "unresponsvi": 76, "taken": [76, 86], "toolresult": [77, 79], "indic": 79, "support": [79, 86], "map": [79, 81], "iter": 79, "numer": 79, "blank": 79, "prepared_fil": [80, 81], "comparis": 80, "thoe": 80, "search": [80, 82, 83, 85], "relat": [80, 81], "original_c": 81, "phrase": 81, "anoth": 81, "wai": [81, 85], "onto": 81, "seen": 81, "depth": [82, 83, 84], "recurs": [82, 83], "proedurestep": 84, "still": 85, "beta": 85, "featur": 85, "develop": 85, "bug": [85, 86, 88], "slip": 85, "you": [85, 88], "feedback": 85, "we": 85, "veri": 85, "much": 85, "appreci": 85, "leav": 85, "issu": [85, 86, 88], "our": 85, "github": [85, 88], "repositori": 85, "initi": [85, 86], "stand": 85, "meant": 85, "tailor": 85, "diagnost": 85, "procedur": [85, 86], "system": 85, "concept": 85, "everyon": 85, "build": [85, 86], "easili": 85, "consist": [85, 86], "natur": 85, "entir": 85, "lcl": 85, "machin": 85, "establish": 85, "routin": 85, "baselin": 85, "project": 85, "seek": 85, "best": 85, "practic": 85, "softwar": 85, "favorit": 85, "packag": 85, "togeth": 85, "form": 85, "power": 85, "maintain": 85, "api": 85, "releas": [85, 88], "histori": 85, "v1": 85, "4": 85, "2024": 85, "02": 85, "20": 85, "2023": 85, "12": 85, "19": 85, "09": 85, "27": 85, "1": [85, 88], "14": 85, "06": 85, "22": 85, "upcom": 85, "modul": 85, "page": [85, 86], "script": 86, "convert": 86, "pmgr": 86, "atef": 86, "pagedtablewidget": 86, "substanti": 86, "improv": 86, "mani": [86, 88], "catch": 86, "widget": 86, "delet": 86, "dure": 86, "avoid": 86, "deletelat": 86, "garbag": 86, "prevent": 86, "segfault": 86, "select": 86, "behavior": [86, 88], "qtreeview": 86, "setcurrentindex": 86, "instead": 86, "manipul": 86, "model": 86, "subcommand": 86, "invok": 86, "converter_v0": 86, "pmgr_check": 86, "tangkong": 86, "summari": 86, "icon": 86, "lazi": 86, "rangewidget": 86, "visual": 86, "updat": [86, 88], "bit": 86, "frequent": 86, "label": 86, "text": 86, "actual": 86, "close": 86, "212": 86, "menu": 86, "welcom": 86, "tab": 86, "sinc": 86, "peopl": 86, "like": 86, "201": 86, "properli": 86, "show": 86, "messag": 86, "box": 86, "t": [86, 88], "202": 86, "modifi": 86, "line": 86, "null": 86, "cast": 86, "128": 86, "against": 86, "robust": 86, "try": 86, "both": 86, "separ": 86, "submodl": 86, "functool": 86, "partial": 86, "weakpartialmethodslot": 86, "qt": 86, "slot": 86, "clean": 86, "intermitt": 86, "suit": 86, "hopefulli": 86, "product": 86, "crash": 86, "backend": 86, "move": 86, "logic": 86, "consolid": 86, "edittre": 86, "runtre": 86, "dualtre": 86, "atefitem": 86, "treeitem": 86, "scientificdoublespinbox": 86, "multimodevalueedit": 86, "wait": 86, "actionrowwidget": 86, "blindli": 86, "fulli": 86, "prototyp": 86, "auto": 86, "entri": 86, "annot": 86, "happivalu": 86, "give": [86, 88], "ensur": 86, "cast_dataclass": 86, "transfer": 86, "old": 86, "previous": 86, "pin": 86, "sphinx": 86, "autogener": 86, "document": 86, "random": 86, "combo": 86, "08": 86, "2022": 86, "notabl": 86, "structur": 86, "modern": 86, "format": 86, "most": 86, "shoutout": 86, "who": [86, 88], "help": 86, "pre": 86, "framework": 86, "dialog": 86, "land": 86, "enabl": 86, "button": 86, "toth": 86, "tablewidgetwithaddrow": 86, "qtablewidget": 86, "addrowwidget": 86, "row": 86, "better": 86, "space": 86, "effici": 86, "busi": 86, "cursor": 86, "thread": 86, "worker": 86, "disabl": 86, "click": 86, "interact": 86, "while": 86, "decor": 86, "wrap": 86, "report": 86, "y": 86, "observ": 86, "busycursorthread": 86, "raised_except": 86, "emit": 86, "nonetyp": 86, "subscrib": 86, "onc": 86, "update_valu": 86, "them": 86, "pile": 86, "whenev": 86, "qdataclassbridg": 86, "again": 86, "miss": 86, "pars": 86, "carefulli": 86, "unsubscrib": 86, "callback": 86, "persist": 86, "toggl": 86, "referenc": 86, "anyvalu": 86, "datatyp": 86, "doubl": 86, "happisearchwidget": 86, "resultstatu": 86, "refresh": 86, "paint": 86, "event": 86, "switch": 86, "reveal": 86, "revert": 86, "sigal": 86, "properti": 86, "order": 86, "overall_result": 86, "strai": 86, "sig": 86, "wait_for_connect": 86, "flesh": 86, "fixtur": 86, "appropri": [86, 88], "differenti": 86, "ophyddevicetableview": 86, "input": 86, "abov": 88, "your": 88, "rst": 88, "substitut": 88, "sure": 88, "section": 88, "made": 88, "bullet": 88, "n": [88, 89], "backward": 88, "incompat": 88, "don": 88, "librari": 88, "cover": 88, "anyth": 88, "els": 88, "intent": 88, "accumul": 88, "worri": 88, "about": 88, "usernam": 88, "anyon": 88, "signific": 88, "conceptu": 88, "contribut": 88, "pr": 88, "review": 88, "unless": 88, "suggest": 88, "lead": 88, "larg": 88, "rewrit": 88, "credit": 88, "notifi": 88}, "objects": {"atef": [[2, 0, 0, "-", "check"], [3, 0, 0, "-", "config"], [4, 0, 0, "-", "procedure"], [5, 0, 0, "-", "tools"], [6, 0, 0, "-", "walk"]], "atef.check": [[7, 1, 1, "", "AnyComparison"], [8, 1, 1, "", "AnyValue"], [9, 1, 1, "", "BasicDynamic"], [10, 1, 1, "", "Comparison"], [11, 1, 1, "", "DynamicValue"], [12, 1, 1, "", "EpicsValue"], [13, 1, 1, "", "Equals"], [14, 1, 1, "", "Greater"], [15, 1, 1, "", "GreaterOrEqual"], [16, 1, 1, "", "HappiValue"], [17, 1, 1, "", "Less"], [18, 1, 1, "", "LessOrEqual"], [19, 1, 1, "", "NotEquals"], [20, 1, 1, "", "Range"], [21, 1, 1, "", "Value"], [22, 1, 1, "", "ValueRange"], [23, 1, 1, "", "ValueSet"]], "atef.check.AnyComparison": [[7, 2, 1, "", "__init__"], [7, 2, 1, "", "children"], [7, 2, 1, "", "compare"], [7, 3, 1, "", "comparisons"], [7, 2, 1, "", "describe"], [7, 3, 1, "", "description"], [7, 2, 1, "", "get_data_for_signal"], [7, 2, 1, "", "get_data_for_signal_async"], [7, 3, 1, "", "if_disconnected"], [7, 3, 1, "", "invert"], [7, 3, 1, "", "name"], [7, 2, 1, "", "prepare"], [7, 3, 1, "", "reduce_method"], [7, 3, 1, "", "reduce_period"], [7, 2, 1, "", "replace_comparison"], [7, 3, 1, "", "severity_on_failure"], [7, 3, 1, "", "string"]], "atef.check.AnyValue": [[8, 2, 1, "", "__init__"], [8, 2, 1, "", "compare"], [8, 2, 1, "", "describe"], [8, 3, 1, "", "description"], [8, 2, 1, "", "get_data_for_signal"], [8, 2, 1, "", "get_data_for_signal_async"], [8, 3, 1, "", "if_disconnected"], [8, 3, 1, "", "invert"], [8, 3, 1, "", "name"], [8, 2, 1, "", "prepare"], [8, 3, 1, "", "reduce_method"], [8, 3, 1, "", "reduce_period"], [8, 3, 1, "", "severity_on_failure"], [8, 3, 1, "", "string"], [8, 3, 1, "", "values"], [8, 3, 1, "", "values_dynamic"]], "atef.check.BasicDynamic": [[9, 2, 1, "", "__init__"], [9, 2, 1, "", "compare"], [9, 2, 1, "", "describe"], [9, 3, 1, "", "description"], [9, 2, 1, "", "get_data_for_signal"], [9, 2, 1, "", "get_data_for_signal_async"], [9, 3, 1, "", "if_disconnected"], [9, 3, 1, "", "invert"], [9, 3, 1, "", "name"], [9, 2, 1, "", "prepare"], [9, 3, 1, "", "reduce_method"], [9, 3, 1, "", "reduce_period"], [9, 3, 1, "", "severity_on_failure"], [9, 3, 1, "", "string"], [9, 3, 1, "", "value_dynamic"]], "atef.check.Comparison": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "compare"], [10, 2, 1, "", "describe"], [10, 3, 1, "", "description"], [10, 2, 1, "", "get_data_for_signal"], [10, 2, 1, "", "get_data_for_signal_async"], [10, 3, 1, "", "if_disconnected"], [10, 3, 1, "", "invert"], [10, 3, 1, "", "name"], [10, 2, 1, "", "prepare"], [10, 3, 1, "", "reduce_method"], [10, 3, 1, "", "reduce_period"], [10, 3, 1, "", "severity_on_failure"], [10, 3, 1, "", "string"]], "atef.check.DynamicValue": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get"], [11, 2, 1, "", "prepare"], [11, 3, 1, "", "reduce_method"], [11, 3, 1, "", "reduce_period"], [11, 3, 1, "", "string"], [11, 3, 1, "", "value"]], "atef.check.EpicsValue": [[12, 2, 1, "", "__init__"], [12, 2, 1, "", "get"], [12, 2, 1, "", "prepare"], [12, 3, 1, "", "pvname"], [12, 3, 1, "", "reduce_method"], [12, 3, 1, "", "reduce_period"], [12, 3, 1, "", "string"], [12, 3, 1, "", "value"]], "atef.check.Equals": [[13, 2, 1, "", "__init__"], [13, 3, 1, "", "atol"], [13, 2, 1, "", "compare"], [13, 2, 1, "", "describe"], [13, 3, 1, "", "description"], [13, 2, 1, "", "get_data_for_signal"], [13, 2, 1, "", "get_data_for_signal_async"], [13, 3, 1, "", "if_disconnected"], [13, 3, 1, "", "invert"], [13, 3, 1, "", "name"], [13, 2, 1, "", "prepare"], [13, 3, 1, "", "reduce_method"], [13, 3, 1, "", "reduce_period"], [13, 3, 1, "", "rtol"], [13, 3, 1, "", "severity_on_failure"], [13, 3, 1, "", "string"], [13, 3, 1, "", "value"], [13, 3, 1, "", "value_dynamic"]], "atef.check.Greater": [[14, 2, 1, "", "__init__"], [14, 2, 1, "", "compare"], [14, 2, 1, "", "describe"], [14, 3, 1, "", "description"], [14, 2, 1, "", "get_data_for_signal"], [14, 2, 1, "", "get_data_for_signal_async"], [14, 3, 1, "", "if_disconnected"], [14, 3, 1, "", "invert"], [14, 3, 1, "", "name"], [14, 2, 1, "", "prepare"], [14, 3, 1, "", "reduce_method"], [14, 3, 1, "", "reduce_period"], [14, 3, 1, "", "severity_on_failure"], [14, 3, 1, "", "string"], [14, 3, 1, "", "value"], [14, 3, 1, "", "value_dynamic"]], "atef.check.GreaterOrEqual": [[15, 2, 1, "", "__init__"], [15, 2, 1, "", "compare"], [15, 2, 1, "", "describe"], [15, 3, 1, "", "description"], [15, 2, 1, "", "get_data_for_signal"], [15, 2, 1, "", "get_data_for_signal_async"], [15, 3, 1, "", "if_disconnected"], [15, 3, 1, "", "invert"], [15, 3, 1, "", "name"], [15, 2, 1, "", "prepare"], [15, 3, 1, "", "reduce_method"], [15, 3, 1, "", "reduce_period"], [15, 3, 1, "", "severity_on_failure"], [15, 3, 1, "", "string"], [15, 3, 1, "", "value"], [15, 3, 1, "", "value_dynamic"]], "atef.check.HappiValue": [[16, 2, 1, "", "__init__"], [16, 3, 1, "", "device_name"], [16, 2, 1, "", "get"], [16, 2, 1, "", "prepare"], [16, 3, 1, "", "reduce_method"], [16, 3, 1, "", "reduce_period"], [16, 3, 1, "", "signal_attr"], [16, 3, 1, "", "string"], [16, 3, 1, "", "value"]], "atef.check.Less": [[17, 2, 1, "", "__init__"], [17, 2, 1, "", "compare"], [17, 2, 1, "", "describe"], [17, 3, 1, "", "description"], [17, 2, 1, "", "get_data_for_signal"], [17, 2, 1, "", "get_data_for_signal_async"], [17, 3, 1, "", "if_disconnected"], [17, 3, 1, "", "invert"], [17, 3, 1, "", "name"], [17, 2, 1, "", "prepare"], [17, 3, 1, "", "reduce_method"], [17, 3, 1, "", "reduce_period"], [17, 3, 1, "", "severity_on_failure"], [17, 3, 1, "", "string"], [17, 3, 1, "", "value"], [17, 3, 1, "", "value_dynamic"]], "atef.check.LessOrEqual": [[18, 2, 1, "", "__init__"], [18, 2, 1, "", "compare"], [18, 2, 1, "", "describe"], [18, 3, 1, "", "description"], [18, 2, 1, "", "get_data_for_signal"], [18, 2, 1, "", "get_data_for_signal_async"], [18, 3, 1, "", "if_disconnected"], [18, 3, 1, "", "invert"], [18, 3, 1, "", "name"], [18, 2, 1, "", "prepare"], [18, 3, 1, "", "reduce_method"], [18, 3, 1, "", "reduce_period"], [18, 3, 1, "", "severity_on_failure"], [18, 3, 1, "", "string"], [18, 3, 1, "", "value"], [18, 3, 1, "", "value_dynamic"]], "atef.check.NotEquals": [[19, 2, 1, "", "__init__"], [19, 3, 1, "", "atol"], [19, 2, 1, "", "compare"], [19, 2, 1, "", "describe"], [19, 3, 1, "", "description"], [19, 2, 1, "", "get_data_for_signal"], [19, 2, 1, "", "get_data_for_signal_async"], [19, 3, 1, "", "if_disconnected"], [19, 3, 1, "", "invert"], [19, 3, 1, "", "name"], [19, 2, 1, "", "prepare"], [19, 3, 1, "", "reduce_method"], [19, 3, 1, "", "reduce_period"], [19, 3, 1, "", "rtol"], [19, 3, 1, "", "severity_on_failure"], [19, 3, 1, "", "string"], [19, 3, 1, "", "value"], [19, 3, 1, "", "value_dynamic"]], "atef.check.Range": [[20, 2, 1, "", "__init__"], [20, 2, 1, "", "compare"], [20, 2, 1, "", "describe"], [20, 3, 1, "", "description"], [20, 2, 1, "", "get_data_for_signal"], [20, 2, 1, "", "get_data_for_signal_async"], [20, 3, 1, "", "high"], [20, 3, 1, "", "high_dynamic"], [20, 3, 1, "", "if_disconnected"], [20, 3, 1, "", "inclusive"], [20, 3, 1, "", "invert"], [20, 3, 1, "", "low"], [20, 3, 1, "", "low_dynamic"], [20, 3, 1, "", "name"], [20, 2, 1, "", "prepare"], [20, 3, 1, "", "ranges"], [20, 3, 1, "", "reduce_method"], [20, 3, 1, "", "reduce_period"], [20, 3, 1, "", "severity_on_failure"], [20, 3, 1, "", "string"], [20, 3, 1, "", "warn_high"], [20, 3, 1, "", "warn_high_dynamic"], [20, 3, 1, "", "warn_low"], [20, 3, 1, "", "warn_low_dynamic"]], "atef.check.Value": [[21, 2, 1, "", "__init__"], [21, 3, 1, "", "atol"], [21, 2, 1, "", "compare"], [21, 3, 1, "", "description"], [21, 2, 1, "", "get"], [21, 3, 1, "", "rtol"], [21, 3, 1, "", "severity"], [21, 3, 1, "", "value"]], "atef.check.ValueRange": [[22, 2, 1, "", "__init__"], [22, 2, 1, "", "compare"], [22, 3, 1, "", "description"], [22, 3, 1, "", "high"], [22, 3, 1, "", "in_range"], [22, 3, 1, "", "inclusive"], [22, 3, 1, "", "low"], [22, 3, 1, "", "severity"]], "atef.check.ValueSet": [[23, 2, 1, "", "__init__"], [23, 2, 1, "", "compare"], [23, 2, 1, "", "describe"], [23, 3, 1, "", "description"], [23, 2, 1, "", "get_data_for_signal"], [23, 2, 1, "", "get_data_for_signal_async"], [23, 3, 1, "", "if_disconnected"], [23, 3, 1, "", "invert"], [23, 3, 1, "", "name"], [23, 2, 1, "", "prepare"], [23, 3, 1, "", "reduce_method"], [23, 3, 1, "", "reduce_period"], [23, 3, 1, "", "severity_on_failure"], [23, 3, 1, "", "string"], [23, 3, 1, "", "values"], [23, 3, 1, "", "values_dynamic"]], "atef.config": [[24, 1, 1, "", "Configuration"], [25, 1, 1, "", "ConfigurationFile"], [26, 1, 1, "", "ConfigurationGroup"], [27, 1, 1, "", "DeviceConfiguration"], [28, 1, 1, "", "FailedConfiguration"], [29, 1, 1, "", "PVConfiguration"], [30, 1, 1, "", "PreparedComparison"], [31, 1, 1, "", "PreparedConfiguration"], [32, 1, 1, "", "PreparedDeviceConfiguration"], [33, 1, 1, "", "PreparedFile"], [34, 1, 1, "", "PreparedGroup"], [35, 1, 1, "", "PreparedPVConfiguration"], [36, 1, 1, "", "PreparedSignalComparison"], [37, 1, 1, "", "PreparedToolComparison"], [38, 1, 1, "", "PreparedToolConfiguration"], [39, 1, 1, "", "ToolConfiguration"], [40, 4, 1, "", "get_result_from_comparison"], [41, 4, 1, "", "run_passive_step"]], "atef.config.Configuration": [[24, 2, 1, "", "__init__"], [24, 2, 1, "", "children"], [24, 3, 1, "", "description"], [24, 2, 1, "", "move_comparison"], [24, 3, 1, "", "name"], [24, 2, 1, "", "replace_comparison"], [24, 3, 1, "", "tags"]], "atef.config.ConfigurationFile": [[25, 2, 1, "", "__init__"], [25, 2, 1, "", "children"], [25, 2, 1, "", "from_filename"], [25, 2, 1, "", "from_json"], [25, 2, 1, "", "from_yaml"], [25, 2, 1, "", "get_by_device"], [25, 2, 1, "", "get_by_pv"], [25, 2, 1, "", "get_by_tag"], [25, 3, 1, "", "root"], [25, 2, 1, "", "to_json"], [25, 2, 1, "", "to_yaml"], [25, 3, 1, "", "version"], [25, 2, 1, "", "walk_configs"]], "atef.config.ConfigurationGroup": [[26, 2, 1, "", "__init__"], [26, 2, 1, "", "children"], [26, 3, 1, "", "configs"], [26, 3, 1, "", "description"], [26, 3, 1, "", "mode"], [26, 2, 1, "", "move_comparison"], [26, 3, 1, "", "name"], [26, 2, 1, "", "replace_comparison"], [26, 3, 1, "", "tags"], [26, 3, 1, "", "values"], [26, 2, 1, "", "walk_configs"]], "atef.config.DeviceConfiguration": [[27, 2, 1, "", "__init__"], [27, 3, 1, "", "by_attr"], [27, 2, 1, "", "children"], [27, 3, 1, "", "description"], [27, 3, 1, "", "devices"], [27, 2, 1, "", "move_comparison"], [27, 3, 1, "", "name"], [27, 2, 1, "", "replace_comparison"], [27, 3, 1, "", "shared"], [27, 3, 1, "", "tags"]], "atef.config.FailedConfiguration": [[28, 2, 1, "", "__init__"], [28, 3, 1, "", "config"], [28, 3, 1, "", "exception"], [28, 3, 1, "", "parent"], [28, 3, 1, "", "result"]], "atef.config.PVConfiguration": [[29, 2, 1, "", "__init__"], [29, 3, 1, "", "by_pv"], [29, 2, 1, "", "children"], [29, 3, 1, "", "description"], [29, 2, 1, "", "move_comparison"], [29, 3, 1, "", "name"], [29, 2, 1, "", "replace_comparison"], [29, 3, 1, "", "shared"], [29, 3, 1, "", "tags"]], "atef.config.PreparedComparison": [[30, 2, 1, "", "__init__"], [30, 3, 1, "", "cache"], [30, 2, 1, "", "compare"], [30, 3, 1, "", "comparison"], [30, 2, 1, "", "get_data_async"], [30, 3, 1, "", "identifier"], [30, 3, 1, "", "name"], [30, 3, 1, "", "parent"], [30, 3, 1, "", "result"]], "atef.config.PreparedConfiguration": [[31, 2, 1, "", "__init__"], [31, 3, 1, "", "cache"], [31, 3, 1, "", "combined_result"], [31, 2, 1, "", "compare"], [31, 3, 1, "", "comparisons"], [31, 2, 1, "", "from_config"], [31, 3, 1, "", "parent"], [31, 3, 1, "", "prepare_failures"], [31, 3, 1, "", "result"], [31, 2, 1, "", "walk_comparisons"]], "atef.config.PreparedDeviceConfiguration": [[32, 2, 1, "", "__init__"], [32, 3, 1, "", "cache"], [32, 3, 1, "", "combined_result"], [32, 2, 1, "", "compare"], [32, 3, 1, "", "comparisons"], [32, 3, 1, "", "config"], [32, 3, 1, "", "devices"], [32, 2, 1, "", "from_config"], [32, 2, 1, "", "from_device"], [32, 3, 1, "", "parent"], [32, 3, 1, "", "prepare_failures"], [32, 3, 1, "", "result"], [32, 2, 1, "", "walk_comparisons"]], "atef.config.PreparedFile": [[33, 2, 1, "", "__init__"], [33, 3, 1, "", "cache"], [33, 2, 1, "", "children"], [33, 3, 1, "", "client"], [33, 2, 1, "", "compare"], [33, 3, 1, "", "file"], [33, 2, 1, "", "fill_cache"], [33, 2, 1, "", "from_config"], [33, 3, 1, "", "root"], [33, 2, 1, "", "walk_comparisons"], [33, 2, 1, "", "walk_groups"]], "atef.config.PreparedGroup": [[34, 2, 1, "", "__init__"], [34, 3, 1, "", "cache"], [34, 3, 1, "", "combined_result"], [34, 2, 1, "", "compare"], [34, 3, 1, "", "comparisons"], [34, 3, 1, "", "config"], [34, 3, 1, "", "configs"], [34, 2, 1, "", "from_config"], [34, 2, 1, "", "get_value_by_name"], [34, 3, 1, "", "parent"], [34, 3, 1, "", "prepare_failures"], [34, 3, 1, "", "result"], [34, 3, 1, "", "subgroups"], [34, 2, 1, "", "walk_comparisons"], [34, 2, 1, "", "walk_groups"]], "atef.config.PreparedPVConfiguration": [[35, 2, 1, "", "__init__"], [35, 3, 1, "", "cache"], [35, 3, 1, "", "combined_result"], [35, 2, 1, "", "compare"], [35, 3, 1, "", "comparisons"], [35, 3, 1, "", "config"], [35, 2, 1, "", "from_config"], [35, 2, 1, "", "from_pvs"], [35, 3, 1, "", "parent"], [35, 3, 1, "", "prepare_failures"], [35, 3, 1, "", "result"], [35, 2, 1, "", "walk_comparisons"]], "atef.config.PreparedSignalComparison": [[36, 2, 1, "", "__init__"], [36, 3, 1, "", "cache"], [36, 2, 1, "", "compare"], [36, 3, 1, "", "comparison"], [36, 3, 1, "", "data"], [36, 3, 1, "", "device"], [36, 2, 1, "", "from_device"], [36, 2, 1, "", "from_pvname"], [36, 2, 1, "", "from_signal"], [36, 2, 1, "", "get_data_async"], [36, 3, 1, "", "identifier"], [36, 3, 1, "", "name"], [36, 3, 1, "", "parent"], [36, 3, 1, "", "result"], [36, 3, 1, "", "signal"]], "atef.config.PreparedToolComparison": [[37, 2, 1, "", "__init__"], [37, 3, 1, "", "cache"], [37, 2, 1, "", "compare"], [37, 3, 1, "", "comparison"], [37, 2, 1, "", "from_tool"], [37, 2, 1, "", "get_data_async"], [37, 3, 1, "", "identifier"], [37, 3, 1, "", "name"], [37, 3, 1, "", "parent"], [37, 3, 1, "", "result"], [37, 3, 1, "", "tool"]], "atef.config.PreparedToolConfiguration": [[38, 2, 1, "", "__init__"], [38, 3, 1, "", "cache"], [38, 3, 1, "", "combined_result"], [38, 2, 1, "", "compare"], [38, 3, 1, "", "comparisons"], [38, 3, 1, "", "config"], [38, 2, 1, "", "from_config"], [38, 2, 1, "", "from_tool"], [38, 3, 1, "", "parent"], [38, 3, 1, "", "prepare_failures"], [38, 3, 1, "", "result"], [38, 2, 1, "", "walk_comparisons"]], "atef.config.ToolConfiguration": [[39, 2, 1, "", "__init__"], [39, 3, 1, "", "by_attr"], [39, 2, 1, "", "children"], [39, 3, 1, "", "description"], [39, 2, 1, "", "move_comparison"], [39, 3, 1, "", "name"], [39, 2, 1, "", "replace_comparison"], [39, 3, 1, "", "shared"], [39, 3, 1, "", "tags"], [39, 3, 1, "", "tool"]], "atef.procedure": [[42, 1, 1, "", "CodeStep"], [43, 1, 1, "", "ComparisonToPlanData"], [44, 1, 1, "", "ComparisonToTarget"], [45, 1, 1, "", "ConfigurationCheckStep"], [46, 1, 1, "", "DescriptionStep"], [47, 1, 1, "", "DeviceConfiguration"], [48, 1, 1, "", "DisplayOptions"], [49, 1, 1, "", "FailedStep"], [50, 1, 1, "", "PassiveStep"], [51, 1, 1, "", "PlanData"], [52, 1, 1, "", "PlanOptions"], [53, 1, 1, "", "PlanStep"], [54, 1, 1, "", "PreparedDescriptionStep"], [55, 1, 1, "", "PreparedPassiveStep"], [56, 1, 1, "", "PreparedPlan"], [57, 1, 1, "", "PreparedPlanComparison"], [58, 1, 1, "", "PreparedPlanStep"], [59, 1, 1, "", "PreparedProcedureFile"], [60, 1, 1, "", "PreparedProcedureGroup"], [61, 1, 1, "", "PreparedProcedureStep"], [62, 1, 1, "", "PreparedSetValueStep"], [63, 1, 1, "", "PreparedValueToSignal"], [64, 1, 1, "", "ProcedureFile"], [65, 1, 1, "", "ProcedureGroup"], [66, 1, 1, "", "ProcedureStep"], [67, 1, 1, "", "PydmDisplayStep"], [68, 1, 1, "", "SetValueStep"], [69, 1, 1, "", "Target"], [70, 1, 1, "", "TyphosDisplayStep"], [71, 1, 1, "", "ValueToTarget"], [72, 4, 1, "", "create_prepared_comparison"], [73, 4, 1, "", "get_RE_data"], [74, 4, 1, "", "get_bs_state"]], "atef.procedure.CodeStep": [[42, 2, 1, "", "__init__"], [42, 2, 1, "", "allow_verify"], [42, 3, 1, "", "arguments"], [42, 2, 1, "", "children"], [42, 3, 1, "", "description"], [42, 3, 1, "", "name"], [42, 3, 1, "", "parent"], [42, 3, 1, "", "source_code"], [42, 3, 1, "", "step_success_required"], [42, 3, 1, "", "verify_required"]], "atef.procedure.ComparisonToPlanData": [[43, 2, 1, "", "__init__"], [43, 3, 1, "", "comparison"], [43, 3, 1, "", "data_points"], [43, 3, 1, "", "field_names"], [43, 3, 1, "", "name"], [43, 3, 1, "", "plan_id"], [43, 3, 1, "", "plan_no"], [43, 3, 1, "", "reduction_mode"]], "atef.procedure.ComparisonToTarget": [[44, 2, 1, "", "__init__"], [44, 3, 1, "", "attr"], [44, 3, 1, "", "comparison"], [44, 3, 1, "", "device"], [44, 3, 1, "", "name"], [44, 3, 1, "", "pv"], [44, 2, 1, "", "to_signal"]], "atef.procedure.ConfigurationCheckStep": [[45, 2, 1, "", "__init__"], [45, 2, 1, "", "allow_verify"], [45, 2, 1, "", "children"], [45, 3, 1, "", "description"], [45, 3, 1, "", "devices"], [45, 3, 1, "", "name"], [45, 3, 1, "", "parent"], [45, 3, 1, "", "step_success_required"], [45, 3, 1, "", "verify_required"]], "atef.procedure.DescriptionStep": [[46, 2, 1, "", "__init__"], [46, 2, 1, "", "allow_verify"], [46, 2, 1, "", "children"], [46, 3, 1, "", "description"], [46, 3, 1, "", "name"], [46, 3, 1, "", "parent"], [46, 3, 1, "", "step_success_required"], [46, 3, 1, "", "verify_required"]], "atef.procedure.DeviceConfiguration": [[47, 2, 1, "", "__init__"], [47, 3, 1, "", "archiver_timestamp"], [47, 3, 1, "", "values"]], "atef.procedure.DisplayOptions": [[48, 2, 1, "", "__init__"], [48, 3, 1, "", "embed"], [48, 3, 1, "", "macros"], [48, 3, 1, "", "template"]], "atef.procedure.FailedStep": [[49, 2, 1, "", "__init__"], [49, 3, 1, "", "combined_result"], [49, 3, 1, "", "exception"], [49, 3, 1, "", "origin"], [49, 3, 1, "", "parent"], [49, 3, 1, "", "result"], [49, 3, 1, "", "step_result"], [49, 3, 1, "", "verify_result"]], "atef.procedure.PassiveStep": [[50, 2, 1, "", "__init__"], [50, 2, 1, "", "allow_verify"], [50, 2, 1, "", "children"], [50, 3, 1, "", "description"], [50, 3, 1, "", "filepath"], [50, 3, 1, "", "name"], [50, 3, 1, "", "parent"], [50, 3, 1, "", "step_success_required"], [50, 3, 1, "", "verify_required"]], "atef.procedure.PlanData": [[51, 2, 1, "", "__init__"], [51, 3, 1, "", "data_points"], [51, 3, 1, "", "field_names"], [51, 3, 1, "", "name"], [51, 3, 1, "", "plan_id"], [51, 3, 1, "", "plan_no"], [51, 3, 1, "", "reduction_mode"]], "atef.procedure.PlanOptions": [[52, 2, 1, "", "__init__"], [52, 3, 1, "", "args"], [52, 3, 1, "", "fixed_arguments"], [52, 3, 1, "", "kwargs"], [52, 3, 1, "", "name"], [52, 3, 1, "", "plan"], [52, 2, 1, "", "to_plan_item"]], "atef.procedure.PlanStep": [[53, 2, 1, "", "__init__"], [53, 2, 1, "", "allow_verify"], [53, 3, 1, "", "checks"], [53, 2, 1, "", "children"], [53, 3, 1, "", "description"], [53, 3, 1, "", "destination"], [53, 3, 1, "", "halt_on_fail"], [53, 3, 1, "", "name"], [53, 3, 1, "", "parent"], [53, 3, 1, "", "plans"], [53, 3, 1, "", "require_plan_success"], [53, 3, 1, "", "step_success_required"], [53, 3, 1, "", "verify_required"]], "atef.procedure.PreparedDescriptionStep": [[54, 2, 1, "", "__init__"], [54, 3, 1, "", "combined_result"], [54, 2, 1, "", "from_origin"], [54, 3, 1, "", "name"], [54, 3, 1, "", "origin"], [54, 3, 1, "", "parent"], [54, 3, 1, "", "result"], [54, 2, 1, "", "run"], [54, 3, 1, "", "step_result"], [54, 3, 1, "", "verify_result"]], "atef.procedure.PreparedPassiveStep": [[55, 2, 1, "", "__init__"], [55, 3, 1, "", "combined_result"], [55, 2, 1, "", "from_origin"], [55, 3, 1, "", "name"], [55, 3, 1, "", "origin"], [55, 3, 1, "", "parent"], [55, 3, 1, "", "prepared_passive_file"], [55, 3, 1, "", "result"], [55, 2, 1, "", "run"], [55, 3, 1, "", "step_result"], [55, 3, 1, "", "verify_result"]], "atef.procedure.PreparedPlan": [[56, 2, 1, "", "__init__"], [56, 3, 1, "", "bs_state"], [56, 2, 1, "", "from_origin"], [56, 3, 1, "", "item"], [56, 3, 1, "", "name"], [56, 3, 1, "", "origin"], [56, 3, 1, "", "parent"], [56, 3, 1, "", "plan_id"], [56, 3, 1, "", "result"], [56, 2, 1, "", "run"]], "atef.procedure.PreparedPlanComparison": [[57, 2, 1, "", "__init__"], [57, 3, 1, "", "cache"], [57, 2, 1, "", "compare"], [57, 3, 1, "", "comparison"], [57, 3, 1, "", "data"], [57, 2, 1, "", "from_comp_to_plan"], [57, 2, 1, "", "get_data_async"], [57, 3, 1, "", "identifier"], [57, 3, 1, "", "name"], [57, 3, 1, "", "parent"], [57, 3, 1, "", "plan_data"], [57, 3, 1, "", "result"]], "atef.procedure.PreparedPlanStep": [[58, 2, 1, "", "__init__"], [58, 3, 1, "", "combined_result"], [58, 2, 1, "", "from_origin"], [58, 3, 1, "", "name"], [58, 3, 1, "", "origin"], [58, 3, 1, "", "parent"], [58, 3, 1, "", "prepared_checks"], [58, 3, 1, "", "prepared_checks_failures"], [58, 3, 1, "", "prepared_plan_failures"], [58, 3, 1, "", "prepared_plans"], [58, 3, 1, "", "result"], [58, 2, 1, "", "run"], [58, 3, 1, "", "step_result"], [58, 3, 1, "", "verify_result"]], "atef.procedure.PreparedProcedureFile": [[59, 2, 1, "", "__init__"], [59, 3, 1, "", "file"], [59, 2, 1, "", "from_origin"], [59, 3, 1, "", "root"], [59, 2, 1, "", "run"]], "atef.procedure.PreparedProcedureGroup": [[60, 2, 1, "", "__init__"], [60, 3, 1, "", "combined_result"], [60, 2, 1, "", "from_origin"], [60, 3, 1, "", "name"], [60, 3, 1, "", "origin"], [60, 3, 1, "", "parent"], [60, 3, 1, "", "prepare_failures"], [60, 3, 1, "", "result"], [60, 2, 1, "", "run"], [60, 3, 1, "", "step_result"], [60, 3, 1, "", "steps"], [60, 3, 1, "", "verify_result"], [60, 2, 1, "", "walk_steps"]], "atef.procedure.PreparedProcedureStep": [[61, 2, 1, "", "__init__"], [61, 3, 1, "", "combined_result"], [61, 2, 1, "", "from_origin"], [61, 3, 1, "", "name"], [61, 3, 1, "", "origin"], [61, 3, 1, "", "parent"], [61, 3, 1, "", "result"], [61, 2, 1, "", "run"], [61, 3, 1, "", "step_result"], [61, 3, 1, "", "verify_result"]], "atef.procedure.PreparedSetValueStep": [[62, 2, 1, "", "__init__"], [62, 3, 1, "", "combined_result"], [62, 2, 1, "", "from_origin"], [62, 3, 1, "", "name"], [62, 3, 1, "", "origin"], [62, 3, 1, "", "parent"], [62, 3, 1, "", "prepared_actions"], [62, 3, 1, "", "prepared_criteria"], [62, 3, 1, "", "result"], [62, 2, 1, "", "run"], [62, 3, 1, "", "step_result"], [62, 3, 1, "", "verify_result"], [62, 2, 1, "", "walk_comparisons"]], "atef.procedure.PreparedValueToSignal": [[63, 2, 1, "", "__init__"], [63, 2, 1, "", "from_origin"], [63, 3, 1, "", "name"], [63, 3, 1, "", "origin"], [63, 3, 1, "", "parent"], [63, 3, 1, "", "result"], [63, 2, 1, "", "run"], [63, 3, 1, "", "signal"], [63, 3, 1, "", "value"]], "atef.procedure.ProcedureFile": [[64, 2, 1, "", "__init__"], [64, 2, 1, "", "children"], [64, 2, 1, "", "from_filename"], [64, 2, 1, "", "from_json"], [64, 2, 1, "", "from_yaml"], [64, 3, 1, "", "root"], [64, 2, 1, "", "to_json"], [64, 2, 1, "", "to_yaml"], [64, 3, 1, "", "version"], [64, 2, 1, "", "walk_steps"]], "atef.procedure.ProcedureGroup": [[65, 2, 1, "", "__init__"], [65, 2, 1, "", "allow_verify"], [65, 2, 1, "", "children"], [65, 3, 1, "", "description"], [65, 3, 1, "", "name"], [65, 3, 1, "", "parent"], [65, 2, 1, "", "replace_step"], [65, 3, 1, "", "step_success_required"], [65, 3, 1, "", "steps"], [65, 3, 1, "", "verify_required"], [65, 2, 1, "", "walk_steps"]], "atef.procedure.ProcedureStep": [[66, 2, 1, "", "__init__"], [66, 2, 1, "", "allow_verify"], [66, 2, 1, "", "children"], [66, 3, 1, "", "description"], [66, 3, 1, "", "name"], [66, 3, 1, "", "parent"], [66, 3, 1, "", "step_success_required"], [66, 3, 1, "", "verify_required"]], "atef.procedure.PydmDisplayStep": [[67, 2, 1, "", "__init__"], [67, 2, 1, "", "allow_verify"], [67, 2, 1, "", "children"], [67, 3, 1, "", "description"], [67, 3, 1, "", "display"], [67, 3, 1, "", "name"], [67, 3, 1, "", "options"], [67, 3, 1, "", "parent"], [67, 3, 1, "", "step_success_required"], [67, 3, 1, "", "verify_required"]], "atef.procedure.SetValueStep": [[68, 2, 1, "", "__init__"], [68, 3, 1, "", "actions"], [68, 2, 1, "", "allow_verify"], [68, 2, 1, "", "children"], [68, 3, 1, "", "description"], [68, 3, 1, "", "halt_on_fail"], [68, 3, 1, "", "name"], [68, 3, 1, "", "parent"], [68, 2, 1, "", "replace_comparison"], [68, 3, 1, "", "require_action_success"], [68, 3, 1, "", "step_success_required"], [68, 3, 1, "", "success_criteria"], [68, 3, 1, "", "verify_required"]], "atef.procedure.Target": [[69, 2, 1, "", "__init__"], [69, 3, 1, "", "attr"], [69, 3, 1, "", "device"], [69, 3, 1, "", "name"], [69, 3, 1, "", "pv"], [69, 2, 1, "", "to_signal"]], "atef.procedure.TyphosDisplayStep": [[70, 2, 1, "", "__init__"], [70, 2, 1, "", "allow_verify"], [70, 2, 1, "", "children"], [70, 3, 1, "", "description"], [70, 3, 1, "", "devices"], [70, 3, 1, "", "name"], [70, 3, 1, "", "parent"], [70, 3, 1, "", "step_success_required"], [70, 3, 1, "", "verify_required"]], "atef.procedure.ValueToTarget": [[71, 2, 1, "", "__init__"], [71, 3, 1, "", "attr"], [71, 3, 1, "", "device"], [71, 3, 1, "", "name"], [71, 3, 1, "", "pv"], [71, 3, 1, "", "settle_time"], [71, 3, 1, "", "timeout"], [71, 2, 1, "", "to_signal"], [71, 3, 1, "", "value"]], "atef.tools": [[75, 1, 1, "", "Ping"], [76, 1, 1, "", "PingResult"], [77, 1, 1, "", "Tool"], [78, 1, 1, "", "ToolResult"], [79, 4, 1, "", "get_result_value_by_key"]], "atef.tools.Ping": [[75, 2, 1, "", "__init__"], [75, 2, 1, "", "check_result_key"], [75, 3, 1, "", "count"], [75, 3, 1, "", "encoding"], [75, 3, 1, "", "hosts"], [75, 2, 1, "", "ping"], [75, 2, 1, "", "run"]], "atef.tools.PingResult": [[76, 2, 1, "", "__init__"], [76, 2, 1, "", "add_host_result"], [76, 3, 1, "", "alive"], [76, 2, 1, "", "from_output"], [76, 3, 1, "", "max_time"], [76, 3, 1, "", "min_time"], [76, 3, 1, "", "num_alive"], [76, 3, 1, "", "num_unresponsive"], [76, 3, 1, "", "result"], [76, 3, 1, "", "times"], [76, 3, 1, "", "unresponsive"]], "atef.tools.Tool": [[77, 2, 1, "", "__init__"], [77, 2, 1, "", "check_result_key"], [77, 2, 1, "", "run"]], "atef.tools.ToolResult": [[78, 2, 1, "", "__init__"], [78, 3, 1, "", "result"]], "atef.walk": [[80, 4, 1, "", "get_prepared_step"], [81, 4, 1, "", "get_relevant_configs_comps"], [82, 4, 1, "", "walk_config_file"], [83, 4, 1, "", "walk_procedure_file"], [84, 4, 1, "", "walk_steps"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"]}, "titleterms": {"atef": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85], "api": [0, 88, 89], "dataclass": 0, "framework": [1, 85], "checkout": 1, "structur": 1, "check": [2, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "config": [3, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], "procedur": [4, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74], "tool": [5, 75, 76, 77, 78, 79], "walk": [6, 80, 81, 82, 83, 84], "anycomparison": 7, "anyvalu": 8, "basicdynam": 9, "comparison": 10, "dynamicvalu": 11, "epicsvalu": 12, "equal": 13, "greater": 14, "greaterorequ": 15, "happivalu": 16, "less": 17, "lessorequ": 18, "notequ": 19, "rang": 20, "valu": 21, "valuerang": 22, "valueset": 23, "configur": 24, "configurationfil": 25, "configurationgroup": 26, "deviceconfigur": [27, 47], "failedconfigur": 28, "pvconfigur": 29, "preparedcomparison": 30, "preparedconfigur": 31, "prepareddeviceconfigur": 32, "preparedfil": 33, "preparedgroup": 34, "preparedpvconfigur": 35, "preparedsignalcomparison": 36, "preparedtoolcomparison": 37, "preparedtoolconfigur": 38, "toolconfigur": 39, "get_result_from_comparison": 40, "run_passive_step": 41, "codestep": 42, "comparisontoplandata": 43, "comparisontotarget": 44, "configurationcheckstep": 45, "descriptionstep": 46, "displayopt": 48, "failedstep": 49, "passivestep": 50, "plandata": 51, "planopt": 52, "planstep": 53, "prepareddescriptionstep": 54, "preparedpassivestep": 55, "preparedplan": 56, "preparedplancomparison": 57, "preparedplanstep": 58, "preparedprocedurefil": 59, "preparedproceduregroup": 60, "preparedprocedurestep": 61, "preparedsetvaluestep": 62, "preparedvaluetosign": 63, "procedurefil": 64, "proceduregroup": 65, "procedurestep": 66, "pydmdisplaystep": 67, "setvaluestep": 68, "target": 69, "typhosdisplaystep": 70, "valuetotarget": 71, "create_prepared_comparison": 72, "get_re_data": 73, "get_bs_stat": 74, "ping": 75, "pingresult": 76, "toolresult": 78, "get_result_value_by_kei": 79, "get_prepared_step": 80, "get_relevant_configs_comp": 81, "walk_config_fil": 82, "walk_procedure_fil": 83, "walk_step": 84, "autom": 85, "test": 85, "execut": 85, "disclaim": 85, "background": 85, "content": 85, "indic": 85, "tabl": 85, "releas": 86, "histori": 86, "v1": 86, "4": 86, "0": 86, "2024": 86, "02": 86, "20": 86, "featur": [86, 88, 89], "bugfix": [86, 88, 89], "mainten": [86, 88, 89], "contributor": [86, 88, 89], "3": 86, "2023": 86, "12": 86, "19": 86, "2": 86, "09": 86, "27": 86, "1": 86, "14": 86, "06": 86, "22": 86, "upcom": 87, "chang": 87, "issuenumb": [88, 89], "titl": [88, 89], "break": [88, 89]}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"ATEF API": [[0, "atef-api"]], "Dataclasses": [[0, "dataclasses"]], "ATEF Framework": [[1, "atef-framework"]], "Checkout Structure": [[1, "checkout-structure"]], "atef.check": [[2, "module-atef.check"]], "atef.config": [[3, "module-atef.config"]], "atef.procedure": [[4, "module-atef.procedure"]], "atef.tools": [[5, "module-atef.tools"]], "atef.walk": [[6, "module-atef.walk"]], "atef.check.AnyComparison": [[7, "atef-check-anycomparison"]], "atef.check.AnyValue": [[8, "atef-check-anyvalue"]], "atef.check.BasicDynamic": [[9, "atef-check-basicdynamic"]], "atef.check.Comparison": [[10, "atef-check-comparison"]], "atef.check.DynamicValue": [[11, "atef-check-dynamicvalue"]], "atef.check.EpicsValue": [[12, "atef-check-epicsvalue"]], "atef.check.Equals": [[13, "atef-check-equals"]], "atef.check.Greater": [[14, "atef-check-greater"]], "atef.check.GreaterOrEqual": [[15, "atef-check-greaterorequal"]], "atef.check.HappiValue": [[16, "atef-check-happivalue"]], "atef.check.Less": [[17, "atef-check-less"]], "atef.check.LessOrEqual": [[18, "atef-check-lessorequal"]], "atef.check.NotEquals": [[19, "atef-check-notequals"]], "atef.check.Range": [[20, "atef-check-range"]], "atef.check.Value": [[21, "atef-check-value"]], "atef.check.ValueRange": [[22, "atef-check-valuerange"]], "atef.check.ValueSet": [[23, "atef-check-valueset"]], "atef.config.Configuration": [[24, "atef-config-configuration"]], "atef.config.ConfigurationFile": [[25, "atef-config-configurationfile"]], "atef.config.ConfigurationGroup": [[26, "atef-config-configurationgroup"]], "atef.config.DeviceConfiguration": [[27, "atef-config-deviceconfiguration"]], "atef.config.FailedConfiguration": [[28, "atef-config-failedconfiguration"]], "atef.config.PVConfiguration": [[29, "atef-config-pvconfiguration"]], "atef.config.PreparedComparison": [[30, "atef-config-preparedcomparison"]], "atef.config.PreparedConfiguration": [[31, "atef-config-preparedconfiguration"]], "atef.config.PreparedDeviceConfiguration": [[32, "atef-config-prepareddeviceconfiguration"]], "atef.config.PreparedFile": [[33, "atef-config-preparedfile"]], "atef.config.PreparedGroup": [[34, "atef-config-preparedgroup"]], "atef.config.PreparedPVConfiguration": [[35, "atef-config-preparedpvconfiguration"]], "atef.config.PreparedSignalComparison": [[36, "atef-config-preparedsignalcomparison"]], "atef.config.PreparedToolComparison": [[37, "atef-config-preparedtoolcomparison"]], "atef.config.PreparedToolConfiguration": [[38, "atef-config-preparedtoolconfiguration"]], "atef.config.ToolConfiguration": [[39, "atef-config-toolconfiguration"]], "atef.config.get_result_from_comparison": [[40, "atef-config-get-result-from-comparison"]], "atef.config.run_passive_step": [[41, "atef-config-run-passive-step"]], "atef.procedure.CodeStep": [[42, "atef-procedure-codestep"]], "atef.procedure.ComparisonToPlanData": [[43, "atef-procedure-comparisontoplandata"]], "atef.procedure.ComparisonToTarget": [[44, "atef-procedure-comparisontotarget"]], "atef.procedure.ConfigurationCheckStep": [[45, "atef-procedure-configurationcheckstep"]], "atef.procedure.DescriptionStep": [[46, "atef-procedure-descriptionstep"]], "atef.procedure.DeviceConfiguration": [[47, "atef-procedure-deviceconfiguration"]], "atef.procedure.DisplayOptions": [[48, "atef-procedure-displayoptions"]], "atef.procedure.FailedStep": [[49, "atef-procedure-failedstep"]], "atef.procedure.PassiveStep": [[50, "atef-procedure-passivestep"]], "atef.procedure.PlanData": [[51, "atef-procedure-plandata"]], "atef.procedure.PlanOptions": [[52, "atef-procedure-planoptions"]], "atef.procedure.PlanStep": [[53, "atef-procedure-planstep"]], "atef.procedure.PreparedDescriptionStep": [[54, "atef-procedure-prepareddescriptionstep"]], "atef.procedure.PreparedPassiveStep": [[55, "atef-procedure-preparedpassivestep"]], "atef.procedure.PreparedPlan": [[56, "atef-procedure-preparedplan"]], "atef.procedure.PreparedPlanComparison": [[57, "atef-procedure-preparedplancomparison"]], "atef.procedure.PreparedPlanStep": [[58, "atef-procedure-preparedplanstep"]], "atef.procedure.PreparedProcedureFile": [[59, "atef-procedure-preparedprocedurefile"]], "atef.procedure.PreparedProcedureGroup": [[60, "atef-procedure-preparedproceduregroup"]], "atef.procedure.PreparedProcedureStep": [[61, "atef-procedure-preparedprocedurestep"]], "atef.procedure.PreparedSetValueStep": [[62, "atef-procedure-preparedsetvaluestep"]], "atef.procedure.PreparedValueToSignal": [[63, "atef-procedure-preparedvaluetosignal"]], "atef.procedure.ProcedureFile": [[64, "atef-procedure-procedurefile"]], "atef.procedure.ProcedureGroup": [[65, "atef-procedure-proceduregroup"]], "atef.procedure.ProcedureStep": [[66, "atef-procedure-procedurestep"]], "atef.procedure.PydmDisplayStep": [[67, "atef-procedure-pydmdisplaystep"]], "atef.procedure.SetValueStep": [[68, "atef-procedure-setvaluestep"]], "atef.procedure.Target": [[69, "atef-procedure-target"]], "atef.procedure.TyphosDisplayStep": [[70, "atef-procedure-typhosdisplaystep"]], "atef.procedure.ValueToTarget": [[71, "atef-procedure-valuetotarget"]], "atef.procedure.create_prepared_comparison": [[72, "atef-procedure-create-prepared-comparison"]], "atef.procedure.get_RE_data": [[73, "atef-procedure-get-re-data"]], "atef.procedure.get_bs_state": [[74, "atef-procedure-get-bs-state"]], "atef.tools.Ping": [[75, "atef-tools-ping"]], "atef.tools.PingResult": [[76, "atef-tools-pingresult"]], "atef.tools.Tool": [[77, "atef-tools-tool"]], "atef.tools.ToolResult": [[78, "atef-tools-toolresult"]], "atef.tools.get_result_value_by_key": [[79, "atef-tools-get-result-value-by-key"]], "atef.walk.get_prepared_step": [[80, "atef-walk-get-prepared-step"]], "atef.walk.get_relevant_configs_comps": [[81, "atef-walk-get-relevant-configs-comps"]], "atef.walk.walk_config_file": [[82, "atef-walk-walk-config-file"]], "atef.walk.walk_procedure_file": [[83, "atef-walk-walk-procedure-file"]], "atef.walk.walk_steps": [[84, "atef-walk-walk-steps"]], "ATEF - Automated Test Execution Framework": [[85, "atef-automated-test-execution-framework"]], "Disclaimer": [[85, "disclaimer"]], "Background": [[85, "background"]], "Contents:": [[85, null]], "Indices and tables": [[85, "indices-and-tables"]], "Release History": [[86, "release-history"]], "v1.4.0 (2024-02-20)": [[86, "v1-4-0-2024-02-20"]], "Features": [[86, "features"], [86, "id1"], [86, "id5"], [86, "id8"], [86, "id12"], [88, "features"], [89, "features"]], "Bugfixes": [[86, "bugfixes"], [86, "id2"], [86, "id6"], [86, "id9"], [86, "id13"], [88, "bugfixes"], [89, "bugfixes"]], "Maintenance": [[86, "maintenance"], [86, "id3"], [86, "id10"], [86, "id14"], [88, "maintenance"], [89, "maintenance"]], "Contributors": [[86, "contributors"], [86, "id4"], [86, "id7"], [86, "id11"], [86, "id15"], [88, "contributors"], [89, "contributors"]], "v1.3.0 (2023-12-19)": [[86, "v1-3-0-2023-12-19"]], "v1.2.0 (2023-09-27)": [[86, "v1-2-0-2023-09-27"]], "v1.1.0 (2023-09-14)": [[86, "v1-1-0-2023-09-14"]], "v1.0.0 (2023-06-22)": [[86, "v1-0-0-2023-06-22"]], "Upcoming Changes": [[87, "upcoming-changes"]], "IssueNumber Title": [[88, "issuenumber-title"], [89, "issuenumber-title"]], "API Breaks": [[88, "api-breaks"], [89, "api-breaks"]]}, "indexentries": {"atef.check": [[2, "module-atef.check"]], "module": [[2, "module-atef.check"], [3, "module-atef.config"], [4, "module-atef.procedure"], [5, "module-atef.tools"], [6, "module-atef.walk"]], "atef.config": [[3, "module-atef.config"]], "atef.procedure": [[4, "module-atef.procedure"]], "atef.tools": [[5, "module-atef.tools"]], "atef.walk": [[6, "module-atef.walk"]], "anycomparison (class in atef.check)": [[7, "atef.check.AnyComparison"]], "__init__() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.__init__"]], "children() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.children"]], "compare() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.compare"]], "comparisons (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.comparisons"]], "describe() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.describe"]], "description (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.description"]], "get_data_for_signal() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.get_data_for_signal_async"]], "if_disconnected (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.if_disconnected"]], "invert (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.invert"]], "name (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.name"]], "prepare() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.prepare"]], "reduce_method (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.reduce_method"]], "reduce_period (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.reduce_period"]], "replace_comparison() (atef.check.anycomparison method)": [[7, "atef.check.AnyComparison.replace_comparison"]], "severity_on_failure (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.severity_on_failure"]], "string (atef.check.anycomparison attribute)": [[7, "atef.check.AnyComparison.string"]], "anyvalue (class in atef.check)": [[8, "atef.check.AnyValue"]], "__init__() (atef.check.anyvalue method)": [[8, "atef.check.AnyValue.__init__"]], "compare() (atef.check.anyvalue method)": [[8, "atef.check.AnyValue.compare"]], "describe() (atef.check.anyvalue method)": [[8, "atef.check.AnyValue.describe"]], "description (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.description"]], "get_data_for_signal() (atef.check.anyvalue method)": [[8, "atef.check.AnyValue.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.anyvalue method)": [[8, "atef.check.AnyValue.get_data_for_signal_async"]], "if_disconnected (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.if_disconnected"]], "invert (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.invert"]], "name (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.name"]], "prepare() (atef.check.anyvalue method)": [[8, "atef.check.AnyValue.prepare"]], "reduce_method (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.reduce_method"]], "reduce_period (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.reduce_period"]], "severity_on_failure (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.severity_on_failure"]], "string (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.string"]], "values (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.values"]], "values_dynamic (atef.check.anyvalue attribute)": [[8, "atef.check.AnyValue.values_dynamic"]], "basicdynamic (class in atef.check)": [[9, "atef.check.BasicDynamic"]], "__init__() (atef.check.basicdynamic method)": [[9, "atef.check.BasicDynamic.__init__"]], "compare() (atef.check.basicdynamic method)": [[9, "atef.check.BasicDynamic.compare"]], "describe() (atef.check.basicdynamic method)": [[9, "atef.check.BasicDynamic.describe"]], "description (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.description"]], "get_data_for_signal() (atef.check.basicdynamic method)": [[9, "atef.check.BasicDynamic.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.basicdynamic method)": [[9, "atef.check.BasicDynamic.get_data_for_signal_async"]], "if_disconnected (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.if_disconnected"]], "invert (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.invert"]], "name (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.name"]], "prepare() (atef.check.basicdynamic method)": [[9, "atef.check.BasicDynamic.prepare"]], "reduce_method (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.reduce_method"]], "reduce_period (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.reduce_period"]], "severity_on_failure (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.severity_on_failure"]], "string (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.string"]], "value_dynamic (atef.check.basicdynamic attribute)": [[9, "atef.check.BasicDynamic.value_dynamic"]], "comparison (class in atef.check)": [[10, "atef.check.Comparison"]], "__init__() (atef.check.comparison method)": [[10, "atef.check.Comparison.__init__"]], "compare() (atef.check.comparison method)": [[10, "atef.check.Comparison.compare"]], "describe() (atef.check.comparison method)": [[10, "atef.check.Comparison.describe"]], "description (atef.check.comparison attribute)": [[10, "atef.check.Comparison.description"]], "get_data_for_signal() (atef.check.comparison method)": [[10, "atef.check.Comparison.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.comparison method)": [[10, "atef.check.Comparison.get_data_for_signal_async"]], "if_disconnected (atef.check.comparison attribute)": [[10, "atef.check.Comparison.if_disconnected"]], "invert (atef.check.comparison attribute)": [[10, "atef.check.Comparison.invert"]], "name (atef.check.comparison attribute)": [[10, "atef.check.Comparison.name"]], "prepare() (atef.check.comparison method)": [[10, "atef.check.Comparison.prepare"]], "reduce_method (atef.check.comparison attribute)": [[10, "atef.check.Comparison.reduce_method"]], "reduce_period (atef.check.comparison attribute)": [[10, "atef.check.Comparison.reduce_period"]], "severity_on_failure (atef.check.comparison attribute)": [[10, "atef.check.Comparison.severity_on_failure"]], "string (atef.check.comparison attribute)": [[10, "atef.check.Comparison.string"]], "dynamicvalue (class in atef.check)": [[11, "atef.check.DynamicValue"]], "__init__() (atef.check.dynamicvalue method)": [[11, "atef.check.DynamicValue.__init__"]], "get() (atef.check.dynamicvalue method)": [[11, "atef.check.DynamicValue.get"]], "prepare() (atef.check.dynamicvalue method)": [[11, "atef.check.DynamicValue.prepare"]], "reduce_method (atef.check.dynamicvalue attribute)": [[11, "atef.check.DynamicValue.reduce_method"]], "reduce_period (atef.check.dynamicvalue attribute)": [[11, "atef.check.DynamicValue.reduce_period"]], "string (atef.check.dynamicvalue attribute)": [[11, "atef.check.DynamicValue.string"]], "value (atef.check.dynamicvalue attribute)": [[11, "atef.check.DynamicValue.value"]], "epicsvalue (class in atef.check)": [[12, "atef.check.EpicsValue"]], "__init__() (atef.check.epicsvalue method)": [[12, "atef.check.EpicsValue.__init__"]], "get() (atef.check.epicsvalue method)": [[12, "atef.check.EpicsValue.get"]], "prepare() (atef.check.epicsvalue method)": [[12, "atef.check.EpicsValue.prepare"]], "pvname (atef.check.epicsvalue attribute)": [[12, "atef.check.EpicsValue.pvname"]], "reduce_method (atef.check.epicsvalue attribute)": [[12, "atef.check.EpicsValue.reduce_method"]], "reduce_period (atef.check.epicsvalue attribute)": [[12, "atef.check.EpicsValue.reduce_period"]], "string (atef.check.epicsvalue attribute)": [[12, "atef.check.EpicsValue.string"]], "value (atef.check.epicsvalue attribute)": [[12, "atef.check.EpicsValue.value"]], "equals (class in atef.check)": [[13, "atef.check.Equals"]], "__init__() (atef.check.equals method)": [[13, "atef.check.Equals.__init__"]], "atol (atef.check.equals attribute)": [[13, "atef.check.Equals.atol"]], "compare() (atef.check.equals method)": [[13, "atef.check.Equals.compare"]], "describe() (atef.check.equals method)": [[13, "atef.check.Equals.describe"]], "description (atef.check.equals attribute)": [[13, "atef.check.Equals.description"]], "get_data_for_signal() (atef.check.equals method)": [[13, "atef.check.Equals.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.equals method)": [[13, "atef.check.Equals.get_data_for_signal_async"]], "if_disconnected (atef.check.equals attribute)": [[13, "atef.check.Equals.if_disconnected"]], "invert (atef.check.equals attribute)": [[13, "atef.check.Equals.invert"]], "name (atef.check.equals attribute)": [[13, "atef.check.Equals.name"]], "prepare() (atef.check.equals method)": [[13, "atef.check.Equals.prepare"]], "reduce_method (atef.check.equals attribute)": [[13, "atef.check.Equals.reduce_method"]], "reduce_period (atef.check.equals attribute)": [[13, "atef.check.Equals.reduce_period"]], "rtol (atef.check.equals attribute)": [[13, "atef.check.Equals.rtol"]], "severity_on_failure (atef.check.equals attribute)": [[13, "atef.check.Equals.severity_on_failure"]], "string (atef.check.equals attribute)": [[13, "atef.check.Equals.string"]], "value (atef.check.equals attribute)": [[13, "atef.check.Equals.value"]], "value_dynamic (atef.check.equals attribute)": [[13, "atef.check.Equals.value_dynamic"]], "greater (class in atef.check)": [[14, "atef.check.Greater"]], "__init__() (atef.check.greater method)": [[14, "atef.check.Greater.__init__"]], "compare() (atef.check.greater method)": [[14, "atef.check.Greater.compare"]], "describe() (atef.check.greater method)": [[14, "atef.check.Greater.describe"]], "description (atef.check.greater attribute)": [[14, "atef.check.Greater.description"]], "get_data_for_signal() (atef.check.greater method)": [[14, "atef.check.Greater.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.greater method)": [[14, "atef.check.Greater.get_data_for_signal_async"]], "if_disconnected (atef.check.greater attribute)": [[14, "atef.check.Greater.if_disconnected"]], "invert (atef.check.greater attribute)": [[14, "atef.check.Greater.invert"]], "name (atef.check.greater attribute)": [[14, "atef.check.Greater.name"]], "prepare() (atef.check.greater method)": [[14, "atef.check.Greater.prepare"]], "reduce_method (atef.check.greater attribute)": [[14, "atef.check.Greater.reduce_method"]], "reduce_period (atef.check.greater attribute)": [[14, "atef.check.Greater.reduce_period"]], "severity_on_failure (atef.check.greater attribute)": [[14, "atef.check.Greater.severity_on_failure"]], "string (atef.check.greater attribute)": [[14, "atef.check.Greater.string"]], "value (atef.check.greater attribute)": [[14, "atef.check.Greater.value"]], "value_dynamic (atef.check.greater attribute)": [[14, "atef.check.Greater.value_dynamic"]], "greaterorequal (class in atef.check)": [[15, "atef.check.GreaterOrEqual"]], "__init__() (atef.check.greaterorequal method)": [[15, "atef.check.GreaterOrEqual.__init__"]], "compare() (atef.check.greaterorequal method)": [[15, "atef.check.GreaterOrEqual.compare"]], "describe() (atef.check.greaterorequal method)": [[15, "atef.check.GreaterOrEqual.describe"]], "description (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.description"]], "get_data_for_signal() (atef.check.greaterorequal method)": [[15, "atef.check.GreaterOrEqual.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.greaterorequal method)": [[15, "atef.check.GreaterOrEqual.get_data_for_signal_async"]], "if_disconnected (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.if_disconnected"]], "invert (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.invert"]], "name (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.name"]], "prepare() (atef.check.greaterorequal method)": [[15, "atef.check.GreaterOrEqual.prepare"]], "reduce_method (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.reduce_method"]], "reduce_period (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.reduce_period"]], "severity_on_failure (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.severity_on_failure"]], "string (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.string"]], "value (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.value"]], "value_dynamic (atef.check.greaterorequal attribute)": [[15, "atef.check.GreaterOrEqual.value_dynamic"]], "happivalue (class in atef.check)": [[16, "atef.check.HappiValue"]], "__init__() (atef.check.happivalue method)": [[16, "atef.check.HappiValue.__init__"]], "device_name (atef.check.happivalue attribute)": [[16, "atef.check.HappiValue.device_name"]], "get() (atef.check.happivalue method)": [[16, "atef.check.HappiValue.get"]], "prepare() (atef.check.happivalue method)": [[16, "atef.check.HappiValue.prepare"]], "reduce_method (atef.check.happivalue attribute)": [[16, "atef.check.HappiValue.reduce_method"]], "reduce_period (atef.check.happivalue attribute)": [[16, "atef.check.HappiValue.reduce_period"]], "signal_attr (atef.check.happivalue attribute)": [[16, "atef.check.HappiValue.signal_attr"]], "string (atef.check.happivalue attribute)": [[16, "atef.check.HappiValue.string"]], "value (atef.check.happivalue attribute)": [[16, "atef.check.HappiValue.value"]], "less (class in atef.check)": [[17, "atef.check.Less"]], "__init__() (atef.check.less method)": [[17, "atef.check.Less.__init__"]], "compare() (atef.check.less method)": [[17, "atef.check.Less.compare"]], "describe() (atef.check.less method)": [[17, "atef.check.Less.describe"]], "description (atef.check.less attribute)": [[17, "atef.check.Less.description"]], "get_data_for_signal() (atef.check.less method)": [[17, "atef.check.Less.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.less method)": [[17, "atef.check.Less.get_data_for_signal_async"]], "if_disconnected (atef.check.less attribute)": [[17, "atef.check.Less.if_disconnected"]], "invert (atef.check.less attribute)": [[17, "atef.check.Less.invert"]], "name (atef.check.less attribute)": [[17, "atef.check.Less.name"]], "prepare() (atef.check.less method)": [[17, "atef.check.Less.prepare"]], "reduce_method (atef.check.less attribute)": [[17, "atef.check.Less.reduce_method"]], "reduce_period (atef.check.less attribute)": [[17, "atef.check.Less.reduce_period"]], "severity_on_failure (atef.check.less attribute)": [[17, "atef.check.Less.severity_on_failure"]], "string (atef.check.less attribute)": [[17, "atef.check.Less.string"]], "value (atef.check.less attribute)": [[17, "atef.check.Less.value"]], "value_dynamic (atef.check.less attribute)": [[17, "atef.check.Less.value_dynamic"]], "lessorequal (class in atef.check)": [[18, "atef.check.LessOrEqual"]], "__init__() (atef.check.lessorequal method)": [[18, "atef.check.LessOrEqual.__init__"]], "compare() (atef.check.lessorequal method)": [[18, "atef.check.LessOrEqual.compare"]], "describe() (atef.check.lessorequal method)": [[18, "atef.check.LessOrEqual.describe"]], "description (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.description"]], "get_data_for_signal() (atef.check.lessorequal method)": [[18, "atef.check.LessOrEqual.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.lessorequal method)": [[18, "atef.check.LessOrEqual.get_data_for_signal_async"]], "if_disconnected (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.if_disconnected"]], "invert (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.invert"]], "name (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.name"]], "prepare() (atef.check.lessorequal method)": [[18, "atef.check.LessOrEqual.prepare"]], "reduce_method (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.reduce_method"]], "reduce_period (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.reduce_period"]], "severity_on_failure (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.severity_on_failure"]], "string (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.string"]], "value (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.value"]], "value_dynamic (atef.check.lessorequal attribute)": [[18, "atef.check.LessOrEqual.value_dynamic"]], "notequals (class in atef.check)": [[19, "atef.check.NotEquals"]], "__init__() (atef.check.notequals method)": [[19, "atef.check.NotEquals.__init__"]], "atol (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.atol"]], "compare() (atef.check.notequals method)": [[19, "atef.check.NotEquals.compare"]], "describe() (atef.check.notequals method)": [[19, "atef.check.NotEquals.describe"]], "description (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.description"]], "get_data_for_signal() (atef.check.notequals method)": [[19, "atef.check.NotEquals.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.notequals method)": [[19, "atef.check.NotEquals.get_data_for_signal_async"]], "if_disconnected (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.if_disconnected"]], "invert (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.invert"]], "name (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.name"]], "prepare() (atef.check.notequals method)": [[19, "atef.check.NotEquals.prepare"]], "reduce_method (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.reduce_method"]], "reduce_period (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.reduce_period"]], "rtol (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.rtol"]], "severity_on_failure (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.severity_on_failure"]], "string (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.string"]], "value (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.value"]], "value_dynamic (atef.check.notequals attribute)": [[19, "atef.check.NotEquals.value_dynamic"]], "range (class in atef.check)": [[20, "atef.check.Range"]], "__init__() (atef.check.range method)": [[20, "atef.check.Range.__init__"]], "compare() (atef.check.range method)": [[20, "atef.check.Range.compare"]], "describe() (atef.check.range method)": [[20, "atef.check.Range.describe"]], "description (atef.check.range attribute)": [[20, "atef.check.Range.description"]], "get_data_for_signal() (atef.check.range method)": [[20, "atef.check.Range.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.range method)": [[20, "atef.check.Range.get_data_for_signal_async"]], "high (atef.check.range attribute)": [[20, "atef.check.Range.high"]], "high_dynamic (atef.check.range attribute)": [[20, "atef.check.Range.high_dynamic"]], "if_disconnected (atef.check.range attribute)": [[20, "atef.check.Range.if_disconnected"]], "inclusive (atef.check.range attribute)": [[20, "atef.check.Range.inclusive"]], "invert (atef.check.range attribute)": [[20, "atef.check.Range.invert"]], "low (atef.check.range attribute)": [[20, "atef.check.Range.low"]], "low_dynamic (atef.check.range attribute)": [[20, "atef.check.Range.low_dynamic"]], "name (atef.check.range attribute)": [[20, "atef.check.Range.name"]], "prepare() (atef.check.range method)": [[20, "atef.check.Range.prepare"]], "ranges (atef.check.range attribute)": [[20, "atef.check.Range.ranges"]], "reduce_method (atef.check.range attribute)": [[20, "atef.check.Range.reduce_method"]], "reduce_period (atef.check.range attribute)": [[20, "atef.check.Range.reduce_period"]], "severity_on_failure (atef.check.range attribute)": [[20, "atef.check.Range.severity_on_failure"]], "string (atef.check.range attribute)": [[20, "atef.check.Range.string"]], "warn_high (atef.check.range attribute)": [[20, "atef.check.Range.warn_high"]], "warn_high_dynamic (atef.check.range attribute)": [[20, "atef.check.Range.warn_high_dynamic"]], "warn_low (atef.check.range attribute)": [[20, "atef.check.Range.warn_low"]], "warn_low_dynamic (atef.check.range attribute)": [[20, "atef.check.Range.warn_low_dynamic"]], "value (class in atef.check)": [[21, "atef.check.Value"]], "__init__() (atef.check.value method)": [[21, "atef.check.Value.__init__"]], "atol (atef.check.value attribute)": [[21, "atef.check.Value.atol"]], "compare() (atef.check.value method)": [[21, "atef.check.Value.compare"]], "description (atef.check.value attribute)": [[21, "atef.check.Value.description"]], "get() (atef.check.value method)": [[21, "atef.check.Value.get"]], "rtol (atef.check.value attribute)": [[21, "atef.check.Value.rtol"]], "severity (atef.check.value attribute)": [[21, "atef.check.Value.severity"]], "value (atef.check.value attribute)": [[21, "atef.check.Value.value"]], "valuerange (class in atef.check)": [[22, "atef.check.ValueRange"]], "__init__() (atef.check.valuerange method)": [[22, "atef.check.ValueRange.__init__"]], "compare() (atef.check.valuerange method)": [[22, "atef.check.ValueRange.compare"]], "description (atef.check.valuerange attribute)": [[22, "atef.check.ValueRange.description"]], "high (atef.check.valuerange attribute)": [[22, "atef.check.ValueRange.high"]], "in_range (atef.check.valuerange attribute)": [[22, "atef.check.ValueRange.in_range"]], "inclusive (atef.check.valuerange attribute)": [[22, "atef.check.ValueRange.inclusive"]], "low (atef.check.valuerange attribute)": [[22, "atef.check.ValueRange.low"]], "severity (atef.check.valuerange attribute)": [[22, "atef.check.ValueRange.severity"]], "valueset (class in atef.check)": [[23, "atef.check.ValueSet"]], "__init__() (atef.check.valueset method)": [[23, "atef.check.ValueSet.__init__"]], "compare() (atef.check.valueset method)": [[23, "atef.check.ValueSet.compare"]], "describe() (atef.check.valueset method)": [[23, "atef.check.ValueSet.describe"]], "description (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.description"]], "get_data_for_signal() (atef.check.valueset method)": [[23, "atef.check.ValueSet.get_data_for_signal"]], "get_data_for_signal_async() (atef.check.valueset method)": [[23, "atef.check.ValueSet.get_data_for_signal_async"]], "if_disconnected (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.if_disconnected"]], "invert (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.invert"]], "name (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.name"]], "prepare() (atef.check.valueset method)": [[23, "atef.check.ValueSet.prepare"]], "reduce_method (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.reduce_method"]], "reduce_period (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.reduce_period"]], "severity_on_failure (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.severity_on_failure"]], "string (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.string"]], "values (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.values"]], "values_dynamic (atef.check.valueset attribute)": [[23, "atef.check.ValueSet.values_dynamic"]], "configuration (class in atef.config)": [[24, "atef.config.Configuration"]], "__init__() (atef.config.configuration method)": [[24, "atef.config.Configuration.__init__"]], "children() (atef.config.configuration method)": [[24, "atef.config.Configuration.children"]], "description (atef.config.configuration attribute)": [[24, "atef.config.Configuration.description"]], "move_comparison() (atef.config.configuration method)": [[24, "atef.config.Configuration.move_comparison"]], "name (atef.config.configuration attribute)": [[24, "atef.config.Configuration.name"]], "replace_comparison() (atef.config.configuration method)": [[24, "atef.config.Configuration.replace_comparison"]], "tags (atef.config.configuration attribute)": [[24, "atef.config.Configuration.tags"]], "configurationfile (class in atef.config)": [[25, "atef.config.ConfigurationFile"]], "__init__() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.__init__"]], "children() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.children"]], "from_filename() (atef.config.configurationfile class method)": [[25, "atef.config.ConfigurationFile.from_filename"]], "from_json() (atef.config.configurationfile class method)": [[25, "atef.config.ConfigurationFile.from_json"]], "from_yaml() (atef.config.configurationfile class method)": [[25, "atef.config.ConfigurationFile.from_yaml"]], "get_by_device() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.get_by_device"]], "get_by_pv() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.get_by_pv"]], "get_by_tag() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.get_by_tag"]], "root (atef.config.configurationfile attribute)": [[25, "atef.config.ConfigurationFile.root"]], "to_json() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.to_json"]], "to_yaml() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.to_yaml"]], "version (atef.config.configurationfile attribute)": [[25, "atef.config.ConfigurationFile.version"]], "walk_configs() (atef.config.configurationfile method)": [[25, "atef.config.ConfigurationFile.walk_configs"]], "configurationgroup (class in atef.config)": [[26, "atef.config.ConfigurationGroup"]], "__init__() (atef.config.configurationgroup method)": [[26, "atef.config.ConfigurationGroup.__init__"]], "children() (atef.config.configurationgroup method)": [[26, "atef.config.ConfigurationGroup.children"]], "configs (atef.config.configurationgroup attribute)": [[26, "atef.config.ConfigurationGroup.configs"]], "description (atef.config.configurationgroup attribute)": [[26, "atef.config.ConfigurationGroup.description"]], "mode (atef.config.configurationgroup attribute)": [[26, "atef.config.ConfigurationGroup.mode"]], "move_comparison() (atef.config.configurationgroup method)": [[26, "atef.config.ConfigurationGroup.move_comparison"]], "name (atef.config.configurationgroup attribute)": [[26, "atef.config.ConfigurationGroup.name"]], "replace_comparison() (atef.config.configurationgroup method)": [[26, "atef.config.ConfigurationGroup.replace_comparison"]], "tags (atef.config.configurationgroup attribute)": [[26, "atef.config.ConfigurationGroup.tags"]], "values (atef.config.configurationgroup attribute)": [[26, "atef.config.ConfigurationGroup.values"]], "walk_configs() (atef.config.configurationgroup method)": [[26, "atef.config.ConfigurationGroup.walk_configs"]], "deviceconfiguration (class in atef.config)": [[27, "atef.config.DeviceConfiguration"]], "__init__() (atef.config.deviceconfiguration method)": [[27, "atef.config.DeviceConfiguration.__init__"]], "by_attr (atef.config.deviceconfiguration attribute)": [[27, "atef.config.DeviceConfiguration.by_attr"]], "children() (atef.config.deviceconfiguration method)": [[27, "atef.config.DeviceConfiguration.children"]], "description (atef.config.deviceconfiguration attribute)": [[27, "atef.config.DeviceConfiguration.description"]], "devices (atef.config.deviceconfiguration attribute)": [[27, "atef.config.DeviceConfiguration.devices"]], "move_comparison() (atef.config.deviceconfiguration method)": [[27, "atef.config.DeviceConfiguration.move_comparison"]], "name (atef.config.deviceconfiguration attribute)": [[27, "atef.config.DeviceConfiguration.name"]], "replace_comparison() (atef.config.deviceconfiguration method)": [[27, "atef.config.DeviceConfiguration.replace_comparison"]], "shared (atef.config.deviceconfiguration attribute)": [[27, "atef.config.DeviceConfiguration.shared"]], "tags (atef.config.deviceconfiguration attribute)": [[27, "atef.config.DeviceConfiguration.tags"]], "failedconfiguration (class in atef.config)": [[28, "atef.config.FailedConfiguration"]], "__init__() (atef.config.failedconfiguration method)": [[28, "atef.config.FailedConfiguration.__init__"]], "config (atef.config.failedconfiguration attribute)": [[28, "atef.config.FailedConfiguration.config"]], "exception (atef.config.failedconfiguration attribute)": [[28, "atef.config.FailedConfiguration.exception"]], "parent (atef.config.failedconfiguration attribute)": [[28, "atef.config.FailedConfiguration.parent"]], "result (atef.config.failedconfiguration attribute)": [[28, "atef.config.FailedConfiguration.result"]], "pvconfiguration (class in atef.config)": [[29, "atef.config.PVConfiguration"]], "__init__() (atef.config.pvconfiguration method)": [[29, "atef.config.PVConfiguration.__init__"]], "by_pv (atef.config.pvconfiguration attribute)": [[29, "atef.config.PVConfiguration.by_pv"]], "children() (atef.config.pvconfiguration method)": [[29, "atef.config.PVConfiguration.children"]], "description (atef.config.pvconfiguration attribute)": [[29, "atef.config.PVConfiguration.description"]], "move_comparison() (atef.config.pvconfiguration method)": [[29, "atef.config.PVConfiguration.move_comparison"]], "name (atef.config.pvconfiguration attribute)": [[29, "atef.config.PVConfiguration.name"]], "replace_comparison() (atef.config.pvconfiguration method)": [[29, "atef.config.PVConfiguration.replace_comparison"]], "shared (atef.config.pvconfiguration attribute)": [[29, "atef.config.PVConfiguration.shared"]], "tags (atef.config.pvconfiguration attribute)": [[29, "atef.config.PVConfiguration.tags"]], "preparedcomparison (class in atef.config)": [[30, "atef.config.PreparedComparison"]], "__init__() (atef.config.preparedcomparison method)": [[30, "atef.config.PreparedComparison.__init__"]], "cache (atef.config.preparedcomparison attribute)": [[30, "atef.config.PreparedComparison.cache"]], "compare() (atef.config.preparedcomparison method)": [[30, "atef.config.PreparedComparison.compare"]], "comparison (atef.config.preparedcomparison attribute)": [[30, "atef.config.PreparedComparison.comparison"]], "get_data_async() (atef.config.preparedcomparison method)": [[30, "atef.config.PreparedComparison.get_data_async"]], "identifier (atef.config.preparedcomparison attribute)": [[30, "atef.config.PreparedComparison.identifier"]], "name (atef.config.preparedcomparison attribute)": [[30, "atef.config.PreparedComparison.name"]], "parent (atef.config.preparedcomparison attribute)": [[30, "atef.config.PreparedComparison.parent"]], "result (atef.config.preparedcomparison attribute)": [[30, "atef.config.PreparedComparison.result"]], "preparedconfiguration (class in atef.config)": [[31, "atef.config.PreparedConfiguration"]], "__init__() (atef.config.preparedconfiguration method)": [[31, "atef.config.PreparedConfiguration.__init__"]], "cache (atef.config.preparedconfiguration attribute)": [[31, "atef.config.PreparedConfiguration.cache"]], "combined_result (atef.config.preparedconfiguration attribute)": [[31, "atef.config.PreparedConfiguration.combined_result"]], "compare() (atef.config.preparedconfiguration method)": [[31, "atef.config.PreparedConfiguration.compare"]], "comparisons (atef.config.preparedconfiguration attribute)": [[31, "atef.config.PreparedConfiguration.comparisons"]], "from_config() (atef.config.preparedconfiguration class method)": [[31, "atef.config.PreparedConfiguration.from_config"]], "parent (atef.config.preparedconfiguration attribute)": [[31, "atef.config.PreparedConfiguration.parent"]], "prepare_failures (atef.config.preparedconfiguration attribute)": [[31, "atef.config.PreparedConfiguration.prepare_failures"]], "result (atef.config.preparedconfiguration attribute)": [[31, "atef.config.PreparedConfiguration.result"]], "walk_comparisons() (atef.config.preparedconfiguration method)": [[31, "atef.config.PreparedConfiguration.walk_comparisons"]], "prepareddeviceconfiguration (class in atef.config)": [[32, "atef.config.PreparedDeviceConfiguration"]], "__init__() (atef.config.prepareddeviceconfiguration method)": [[32, "atef.config.PreparedDeviceConfiguration.__init__"]], "cache (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.cache"]], "combined_result (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.combined_result"]], "compare() (atef.config.prepareddeviceconfiguration method)": [[32, "atef.config.PreparedDeviceConfiguration.compare"]], "comparisons (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.comparisons"]], "config (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.config"]], "devices (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.devices"]], "from_config() (atef.config.prepareddeviceconfiguration class method)": [[32, "atef.config.PreparedDeviceConfiguration.from_config"]], "from_device() (atef.config.prepareddeviceconfiguration class method)": [[32, "atef.config.PreparedDeviceConfiguration.from_device"]], "parent (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.parent"]], "prepare_failures (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.prepare_failures"]], "result (atef.config.prepareddeviceconfiguration attribute)": [[32, "atef.config.PreparedDeviceConfiguration.result"]], "walk_comparisons() (atef.config.prepareddeviceconfiguration method)": [[32, "atef.config.PreparedDeviceConfiguration.walk_comparisons"]], "preparedfile (class in atef.config)": [[33, "atef.config.PreparedFile"]], "__init__() (atef.config.preparedfile method)": [[33, "atef.config.PreparedFile.__init__"]], "cache (atef.config.preparedfile attribute)": [[33, "atef.config.PreparedFile.cache"]], "children() (atef.config.preparedfile method)": [[33, "atef.config.PreparedFile.children"]], "client (atef.config.preparedfile attribute)": [[33, "atef.config.PreparedFile.client"]], "compare() (atef.config.preparedfile method)": [[33, "atef.config.PreparedFile.compare"]], "file (atef.config.preparedfile attribute)": [[33, "atef.config.PreparedFile.file"]], "fill_cache() (atef.config.preparedfile method)": [[33, "atef.config.PreparedFile.fill_cache"]], "from_config() (atef.config.preparedfile class method)": [[33, "atef.config.PreparedFile.from_config"]], "root (atef.config.preparedfile attribute)": [[33, "atef.config.PreparedFile.root"]], "walk_comparisons() (atef.config.preparedfile method)": [[33, "atef.config.PreparedFile.walk_comparisons"]], "walk_groups() (atef.config.preparedfile method)": [[33, "atef.config.PreparedFile.walk_groups"]], "preparedgroup (class in atef.config)": [[34, "atef.config.PreparedGroup"]], "__init__() (atef.config.preparedgroup method)": [[34, "atef.config.PreparedGroup.__init__"]], "cache (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.cache"]], "combined_result (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.combined_result"]], "compare() (atef.config.preparedgroup method)": [[34, "atef.config.PreparedGroup.compare"]], "comparisons (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.comparisons"]], "config (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.config"]], "configs (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.configs"]], "from_config() (atef.config.preparedgroup class method)": [[34, "atef.config.PreparedGroup.from_config"]], "get_value_by_name() (atef.config.preparedgroup method)": [[34, "atef.config.PreparedGroup.get_value_by_name"]], "parent (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.parent"]], "prepare_failures (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.prepare_failures"]], "result (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.result"]], "subgroups (atef.config.preparedgroup attribute)": [[34, "atef.config.PreparedGroup.subgroups"]], "walk_comparisons() (atef.config.preparedgroup method)": [[34, "atef.config.PreparedGroup.walk_comparisons"]], "walk_groups() (atef.config.preparedgroup method)": [[34, "atef.config.PreparedGroup.walk_groups"]], "preparedpvconfiguration (class in atef.config)": [[35, "atef.config.PreparedPVConfiguration"]], "__init__() (atef.config.preparedpvconfiguration method)": [[35, "atef.config.PreparedPVConfiguration.__init__"]], "cache (atef.config.preparedpvconfiguration attribute)": [[35, "atef.config.PreparedPVConfiguration.cache"]], "combined_result (atef.config.preparedpvconfiguration attribute)": [[35, "atef.config.PreparedPVConfiguration.combined_result"]], "compare() (atef.config.preparedpvconfiguration method)": [[35, "atef.config.PreparedPVConfiguration.compare"]], "comparisons (atef.config.preparedpvconfiguration attribute)": [[35, "atef.config.PreparedPVConfiguration.comparisons"]], "config (atef.config.preparedpvconfiguration attribute)": [[35, "atef.config.PreparedPVConfiguration.config"]], "from_config() (atef.config.preparedpvconfiguration class method)": [[35, "atef.config.PreparedPVConfiguration.from_config"]], "from_pvs() (atef.config.preparedpvconfiguration class method)": [[35, "atef.config.PreparedPVConfiguration.from_pvs"]], "parent (atef.config.preparedpvconfiguration attribute)": [[35, "atef.config.PreparedPVConfiguration.parent"]], "prepare_failures (atef.config.preparedpvconfiguration attribute)": [[35, "atef.config.PreparedPVConfiguration.prepare_failures"]], "result (atef.config.preparedpvconfiguration attribute)": [[35, "atef.config.PreparedPVConfiguration.result"]], "walk_comparisons() (atef.config.preparedpvconfiguration method)": [[35, "atef.config.PreparedPVConfiguration.walk_comparisons"]], "preparedsignalcomparison (class in atef.config)": [[36, "atef.config.PreparedSignalComparison"]], "__init__() (atef.config.preparedsignalcomparison method)": [[36, "atef.config.PreparedSignalComparison.__init__"]], "cache (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.cache"]], "compare() (atef.config.preparedsignalcomparison method)": [[36, "atef.config.PreparedSignalComparison.compare"]], "comparison (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.comparison"]], "data (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.data"]], "device (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.device"]], "from_device() (atef.config.preparedsignalcomparison class method)": [[36, "atef.config.PreparedSignalComparison.from_device"]], "from_pvname() (atef.config.preparedsignalcomparison class method)": [[36, "atef.config.PreparedSignalComparison.from_pvname"]], "from_signal() (atef.config.preparedsignalcomparison class method)": [[36, "atef.config.PreparedSignalComparison.from_signal"]], "get_data_async() (atef.config.preparedsignalcomparison method)": [[36, "atef.config.PreparedSignalComparison.get_data_async"]], "identifier (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.identifier"]], "name (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.name"]], "parent (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.parent"]], "result (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.result"]], "signal (atef.config.preparedsignalcomparison attribute)": [[36, "atef.config.PreparedSignalComparison.signal"]], "preparedtoolcomparison (class in atef.config)": [[37, "atef.config.PreparedToolComparison"]], "__init__() (atef.config.preparedtoolcomparison method)": [[37, "atef.config.PreparedToolComparison.__init__"]], "cache (atef.config.preparedtoolcomparison attribute)": [[37, "atef.config.PreparedToolComparison.cache"]], "compare() (atef.config.preparedtoolcomparison method)": [[37, "atef.config.PreparedToolComparison.compare"]], "comparison (atef.config.preparedtoolcomparison attribute)": [[37, "atef.config.PreparedToolComparison.comparison"]], "from_tool() (atef.config.preparedtoolcomparison class method)": [[37, "atef.config.PreparedToolComparison.from_tool"]], "get_data_async() (atef.config.preparedtoolcomparison method)": [[37, "atef.config.PreparedToolComparison.get_data_async"]], "identifier (atef.config.preparedtoolcomparison attribute)": [[37, "atef.config.PreparedToolComparison.identifier"]], "name (atef.config.preparedtoolcomparison attribute)": [[37, "atef.config.PreparedToolComparison.name"]], "parent (atef.config.preparedtoolcomparison attribute)": [[37, "atef.config.PreparedToolComparison.parent"]], "result (atef.config.preparedtoolcomparison attribute)": [[37, "atef.config.PreparedToolComparison.result"]], "tool (atef.config.preparedtoolcomparison attribute)": [[37, "atef.config.PreparedToolComparison.tool"]], "preparedtoolconfiguration (class in atef.config)": [[38, "atef.config.PreparedToolConfiguration"]], "__init__() (atef.config.preparedtoolconfiguration method)": [[38, "atef.config.PreparedToolConfiguration.__init__"]], "cache (atef.config.preparedtoolconfiguration attribute)": [[38, "atef.config.PreparedToolConfiguration.cache"]], "combined_result (atef.config.preparedtoolconfiguration attribute)": [[38, "atef.config.PreparedToolConfiguration.combined_result"]], "compare() (atef.config.preparedtoolconfiguration method)": [[38, "atef.config.PreparedToolConfiguration.compare"]], "comparisons (atef.config.preparedtoolconfiguration attribute)": [[38, "atef.config.PreparedToolConfiguration.comparisons"]], "config (atef.config.preparedtoolconfiguration attribute)": [[38, "atef.config.PreparedToolConfiguration.config"]], "from_config() (atef.config.preparedtoolconfiguration class method)": [[38, "atef.config.PreparedToolConfiguration.from_config"]], "from_tool() (atef.config.preparedtoolconfiguration class method)": [[38, "atef.config.PreparedToolConfiguration.from_tool"]], "parent (atef.config.preparedtoolconfiguration attribute)": [[38, "atef.config.PreparedToolConfiguration.parent"]], "prepare_failures (atef.config.preparedtoolconfiguration attribute)": [[38, "atef.config.PreparedToolConfiguration.prepare_failures"]], "result (atef.config.preparedtoolconfiguration attribute)": [[38, "atef.config.PreparedToolConfiguration.result"]], "walk_comparisons() (atef.config.preparedtoolconfiguration method)": [[38, "atef.config.PreparedToolConfiguration.walk_comparisons"]], "toolconfiguration (class in atef.config)": [[39, "atef.config.ToolConfiguration"]], "__init__() (atef.config.toolconfiguration method)": [[39, "atef.config.ToolConfiguration.__init__"]], "by_attr (atef.config.toolconfiguration attribute)": [[39, "atef.config.ToolConfiguration.by_attr"]], "children() (atef.config.toolconfiguration method)": [[39, "atef.config.ToolConfiguration.children"]], "description (atef.config.toolconfiguration attribute)": [[39, "atef.config.ToolConfiguration.description"]], "move_comparison() (atef.config.toolconfiguration method)": [[39, "atef.config.ToolConfiguration.move_comparison"]], "name (atef.config.toolconfiguration attribute)": [[39, "atef.config.ToolConfiguration.name"]], "replace_comparison() (atef.config.toolconfiguration method)": [[39, "atef.config.ToolConfiguration.replace_comparison"]], "shared (atef.config.toolconfiguration attribute)": [[39, "atef.config.ToolConfiguration.shared"]], "tags (atef.config.toolconfiguration attribute)": [[39, "atef.config.ToolConfiguration.tags"]], "tool (atef.config.toolconfiguration attribute)": [[39, "atef.config.ToolConfiguration.tool"]], "get_result_from_comparison() (in module atef.config)": [[40, "atef.config.get_result_from_comparison"]], "run_passive_step() (in module atef.config)": [[41, "atef.config.run_passive_step"]], "codestep (class in atef.procedure)": [[42, "atef.procedure.CodeStep"]], "__init__() (atef.procedure.codestep method)": [[42, "atef.procedure.CodeStep.__init__"]], "allow_verify() (atef.procedure.codestep method)": [[42, "atef.procedure.CodeStep.allow_verify"]], "arguments (atef.procedure.codestep attribute)": [[42, "atef.procedure.CodeStep.arguments"]], "children() (atef.procedure.codestep method)": [[42, "atef.procedure.CodeStep.children"]], "description (atef.procedure.codestep attribute)": [[42, "atef.procedure.CodeStep.description"]], "name (atef.procedure.codestep attribute)": [[42, "atef.procedure.CodeStep.name"]], "parent (atef.procedure.codestep attribute)": [[42, "atef.procedure.CodeStep.parent"]], "source_code (atef.procedure.codestep attribute)": [[42, "atef.procedure.CodeStep.source_code"]], "step_success_required (atef.procedure.codestep attribute)": [[42, "atef.procedure.CodeStep.step_success_required"]], "verify_required (atef.procedure.codestep attribute)": [[42, "atef.procedure.CodeStep.verify_required"]], "comparisontoplandata (class in atef.procedure)": [[43, "atef.procedure.ComparisonToPlanData"]], "__init__() (atef.procedure.comparisontoplandata method)": [[43, "atef.procedure.ComparisonToPlanData.__init__"]], "comparison (atef.procedure.comparisontoplandata attribute)": [[43, "atef.procedure.ComparisonToPlanData.comparison"]], "data_points (atef.procedure.comparisontoplandata attribute)": [[43, "atef.procedure.ComparisonToPlanData.data_points"]], "field_names (atef.procedure.comparisontoplandata attribute)": [[43, "atef.procedure.ComparisonToPlanData.field_names"]], "name (atef.procedure.comparisontoplandata attribute)": [[43, "atef.procedure.ComparisonToPlanData.name"]], "plan_id (atef.procedure.comparisontoplandata attribute)": [[43, "atef.procedure.ComparisonToPlanData.plan_id"]], "plan_no (atef.procedure.comparisontoplandata attribute)": [[43, "atef.procedure.ComparisonToPlanData.plan_no"]], "reduction_mode (atef.procedure.comparisontoplandata attribute)": [[43, "atef.procedure.ComparisonToPlanData.reduction_mode"]], "comparisontotarget (class in atef.procedure)": [[44, "atef.procedure.ComparisonToTarget"]], "__init__() (atef.procedure.comparisontotarget method)": [[44, "atef.procedure.ComparisonToTarget.__init__"]], "attr (atef.procedure.comparisontotarget attribute)": [[44, "atef.procedure.ComparisonToTarget.attr"]], "comparison (atef.procedure.comparisontotarget attribute)": [[44, "atef.procedure.ComparisonToTarget.comparison"]], "device (atef.procedure.comparisontotarget attribute)": [[44, "atef.procedure.ComparisonToTarget.device"]], "name (atef.procedure.comparisontotarget attribute)": [[44, "atef.procedure.ComparisonToTarget.name"]], "pv (atef.procedure.comparisontotarget attribute)": [[44, "atef.procedure.ComparisonToTarget.pv"]], "to_signal() (atef.procedure.comparisontotarget method)": [[44, "atef.procedure.ComparisonToTarget.to_signal"]], "configurationcheckstep (class in atef.procedure)": [[45, "atef.procedure.ConfigurationCheckStep"]], "__init__() (atef.procedure.configurationcheckstep method)": [[45, "atef.procedure.ConfigurationCheckStep.__init__"]], "allow_verify() (atef.procedure.configurationcheckstep method)": [[45, "atef.procedure.ConfigurationCheckStep.allow_verify"]], "children() (atef.procedure.configurationcheckstep method)": [[45, "atef.procedure.ConfigurationCheckStep.children"]], "description (atef.procedure.configurationcheckstep attribute)": [[45, "atef.procedure.ConfigurationCheckStep.description"]], "devices (atef.procedure.configurationcheckstep attribute)": [[45, "atef.procedure.ConfigurationCheckStep.devices"]], "name (atef.procedure.configurationcheckstep attribute)": [[45, "atef.procedure.ConfigurationCheckStep.name"]], "parent (atef.procedure.configurationcheckstep attribute)": [[45, "atef.procedure.ConfigurationCheckStep.parent"]], "step_success_required (atef.procedure.configurationcheckstep attribute)": [[45, "atef.procedure.ConfigurationCheckStep.step_success_required"]], "verify_required (atef.procedure.configurationcheckstep attribute)": [[45, "atef.procedure.ConfigurationCheckStep.verify_required"]], "descriptionstep (class in atef.procedure)": [[46, "atef.procedure.DescriptionStep"]], "__init__() (atef.procedure.descriptionstep method)": [[46, "atef.procedure.DescriptionStep.__init__"]], "allow_verify() (atef.procedure.descriptionstep method)": [[46, "atef.procedure.DescriptionStep.allow_verify"]], "children() (atef.procedure.descriptionstep method)": [[46, "atef.procedure.DescriptionStep.children"]], "description (atef.procedure.descriptionstep attribute)": [[46, "atef.procedure.DescriptionStep.description"]], "name (atef.procedure.descriptionstep attribute)": [[46, "atef.procedure.DescriptionStep.name"]], "parent (atef.procedure.descriptionstep attribute)": [[46, "atef.procedure.DescriptionStep.parent"]], "step_success_required (atef.procedure.descriptionstep attribute)": [[46, "atef.procedure.DescriptionStep.step_success_required"]], "verify_required (atef.procedure.descriptionstep attribute)": [[46, "atef.procedure.DescriptionStep.verify_required"]], "deviceconfiguration (class in atef.procedure)": [[47, "atef.procedure.DeviceConfiguration"]], "__init__() (atef.procedure.deviceconfiguration method)": [[47, "atef.procedure.DeviceConfiguration.__init__"]], "archiver_timestamp (atef.procedure.deviceconfiguration attribute)": [[47, "atef.procedure.DeviceConfiguration.archiver_timestamp"]], "values (atef.procedure.deviceconfiguration attribute)": [[47, "atef.procedure.DeviceConfiguration.values"]], "displayoptions (class in atef.procedure)": [[48, "atef.procedure.DisplayOptions"]], "__init__() (atef.procedure.displayoptions method)": [[48, "atef.procedure.DisplayOptions.__init__"]], "embed (atef.procedure.displayoptions attribute)": [[48, "atef.procedure.DisplayOptions.embed"]], "macros (atef.procedure.displayoptions attribute)": [[48, "atef.procedure.DisplayOptions.macros"]], "template (atef.procedure.displayoptions attribute)": [[48, "atef.procedure.DisplayOptions.template"]], "failedstep (class in atef.procedure)": [[49, "atef.procedure.FailedStep"]], "__init__() (atef.procedure.failedstep method)": [[49, "atef.procedure.FailedStep.__init__"]], "combined_result (atef.procedure.failedstep attribute)": [[49, "atef.procedure.FailedStep.combined_result"]], "exception (atef.procedure.failedstep attribute)": [[49, "atef.procedure.FailedStep.exception"]], "origin (atef.procedure.failedstep attribute)": [[49, "atef.procedure.FailedStep.origin"]], "parent (atef.procedure.failedstep attribute)": [[49, "atef.procedure.FailedStep.parent"]], "result (atef.procedure.failedstep attribute)": [[49, "atef.procedure.FailedStep.result"]], "step_result (atef.procedure.failedstep attribute)": [[49, "atef.procedure.FailedStep.step_result"]], "verify_result (atef.procedure.failedstep attribute)": [[49, "atef.procedure.FailedStep.verify_result"]], "passivestep (class in atef.procedure)": [[50, "atef.procedure.PassiveStep"]], "__init__() (atef.procedure.passivestep method)": [[50, "atef.procedure.PassiveStep.__init__"]], "allow_verify() (atef.procedure.passivestep method)": [[50, "atef.procedure.PassiveStep.allow_verify"]], "children() (atef.procedure.passivestep method)": [[50, "atef.procedure.PassiveStep.children"]], "description (atef.procedure.passivestep attribute)": [[50, "atef.procedure.PassiveStep.description"]], "filepath (atef.procedure.passivestep attribute)": [[50, "atef.procedure.PassiveStep.filepath"]], "name (atef.procedure.passivestep attribute)": [[50, "atef.procedure.PassiveStep.name"]], "parent (atef.procedure.passivestep attribute)": [[50, "atef.procedure.PassiveStep.parent"]], "step_success_required (atef.procedure.passivestep attribute)": [[50, "atef.procedure.PassiveStep.step_success_required"]], "verify_required (atef.procedure.passivestep attribute)": [[50, "atef.procedure.PassiveStep.verify_required"]], "plandata (class in atef.procedure)": [[51, "atef.procedure.PlanData"]], "__init__() (atef.procedure.plandata method)": [[51, "atef.procedure.PlanData.__init__"]], "data_points (atef.procedure.plandata attribute)": [[51, "atef.procedure.PlanData.data_points"]], "field_names (atef.procedure.plandata attribute)": [[51, "atef.procedure.PlanData.field_names"]], "name (atef.procedure.plandata attribute)": [[51, "atef.procedure.PlanData.name"]], "plan_id (atef.procedure.plandata attribute)": [[51, "atef.procedure.PlanData.plan_id"]], "plan_no (atef.procedure.plandata attribute)": [[51, "atef.procedure.PlanData.plan_no"]], "reduction_mode (atef.procedure.plandata attribute)": [[51, "atef.procedure.PlanData.reduction_mode"]], "planoptions (class in atef.procedure)": [[52, "atef.procedure.PlanOptions"]], "__init__() (atef.procedure.planoptions method)": [[52, "atef.procedure.PlanOptions.__init__"]], "args (atef.procedure.planoptions attribute)": [[52, "atef.procedure.PlanOptions.args"]], "fixed_arguments (atef.procedure.planoptions attribute)": [[52, "atef.procedure.PlanOptions.fixed_arguments"]], "kwargs (atef.procedure.planoptions attribute)": [[52, "atef.procedure.PlanOptions.kwargs"]], "name (atef.procedure.planoptions attribute)": [[52, "atef.procedure.PlanOptions.name"]], "plan (atef.procedure.planoptions attribute)": [[52, "atef.procedure.PlanOptions.plan"]], "to_plan_item() (atef.procedure.planoptions method)": [[52, "atef.procedure.PlanOptions.to_plan_item"]], "planstep (class in atef.procedure)": [[53, "atef.procedure.PlanStep"]], "__init__() (atef.procedure.planstep method)": [[53, "atef.procedure.PlanStep.__init__"]], "allow_verify() (atef.procedure.planstep method)": [[53, "atef.procedure.PlanStep.allow_verify"]], "checks (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.checks"]], "children() (atef.procedure.planstep method)": [[53, "atef.procedure.PlanStep.children"]], "description (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.description"]], "destination (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.destination"]], "halt_on_fail (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.halt_on_fail"]], "name (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.name"]], "parent (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.parent"]], "plans (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.plans"]], "require_plan_success (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.require_plan_success"]], "step_success_required (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.step_success_required"]], "verify_required (atef.procedure.planstep attribute)": [[53, "atef.procedure.PlanStep.verify_required"]], "prepareddescriptionstep (class in atef.procedure)": [[54, "atef.procedure.PreparedDescriptionStep"]], "__init__() (atef.procedure.prepareddescriptionstep method)": [[54, "atef.procedure.PreparedDescriptionStep.__init__"]], "combined_result (atef.procedure.prepareddescriptionstep attribute)": [[54, "atef.procedure.PreparedDescriptionStep.combined_result"]], "from_origin() (atef.procedure.prepareddescriptionstep class method)": [[54, "atef.procedure.PreparedDescriptionStep.from_origin"]], "name (atef.procedure.prepareddescriptionstep attribute)": [[54, "atef.procedure.PreparedDescriptionStep.name"]], "origin (atef.procedure.prepareddescriptionstep attribute)": [[54, "atef.procedure.PreparedDescriptionStep.origin"]], "parent (atef.procedure.prepareddescriptionstep attribute)": [[54, "atef.procedure.PreparedDescriptionStep.parent"]], "result (atef.procedure.prepareddescriptionstep attribute)": [[54, "atef.procedure.PreparedDescriptionStep.result"]], "run() (atef.procedure.prepareddescriptionstep method)": [[54, "atef.procedure.PreparedDescriptionStep.run"]], "step_result (atef.procedure.prepareddescriptionstep attribute)": [[54, "atef.procedure.PreparedDescriptionStep.step_result"]], "verify_result (atef.procedure.prepareddescriptionstep attribute)": [[54, "atef.procedure.PreparedDescriptionStep.verify_result"]], "preparedpassivestep (class in atef.procedure)": [[55, "atef.procedure.PreparedPassiveStep"]], "__init__() (atef.procedure.preparedpassivestep method)": [[55, "atef.procedure.PreparedPassiveStep.__init__"]], "combined_result (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.combined_result"]], "from_origin() (atef.procedure.preparedpassivestep class method)": [[55, "atef.procedure.PreparedPassiveStep.from_origin"]], "name (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.name"]], "origin (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.origin"]], "parent (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.parent"]], "prepared_passive_file (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.prepared_passive_file"]], "result (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.result"]], "run() (atef.procedure.preparedpassivestep method)": [[55, "atef.procedure.PreparedPassiveStep.run"]], "step_result (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.step_result"]], "verify_result (atef.procedure.preparedpassivestep attribute)": [[55, "atef.procedure.PreparedPassiveStep.verify_result"]], "preparedplan (class in atef.procedure)": [[56, "atef.procedure.PreparedPlan"]], "__init__() (atef.procedure.preparedplan method)": [[56, "atef.procedure.PreparedPlan.__init__"]], "bs_state (atef.procedure.preparedplan attribute)": [[56, "atef.procedure.PreparedPlan.bs_state"]], "from_origin() (atef.procedure.preparedplan class method)": [[56, "atef.procedure.PreparedPlan.from_origin"]], "item (atef.procedure.preparedplan attribute)": [[56, "atef.procedure.PreparedPlan.item"]], "name (atef.procedure.preparedplan attribute)": [[56, "atef.procedure.PreparedPlan.name"]], "origin (atef.procedure.preparedplan attribute)": [[56, "atef.procedure.PreparedPlan.origin"]], "parent (atef.procedure.preparedplan attribute)": [[56, "atef.procedure.PreparedPlan.parent"]], "plan_id (atef.procedure.preparedplan attribute)": [[56, "atef.procedure.PreparedPlan.plan_id"]], "result (atef.procedure.preparedplan attribute)": [[56, "atef.procedure.PreparedPlan.result"]], "run() (atef.procedure.preparedplan method)": [[56, "atef.procedure.PreparedPlan.run"]], "preparedplancomparison (class in atef.procedure)": [[57, "atef.procedure.PreparedPlanComparison"]], "__init__() (atef.procedure.preparedplancomparison method)": [[57, "atef.procedure.PreparedPlanComparison.__init__"]], "cache (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.cache"]], "compare() (atef.procedure.preparedplancomparison method)": [[57, "atef.procedure.PreparedPlanComparison.compare"]], "comparison (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.comparison"]], "data (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.data"]], "from_comp_to_plan() (atef.procedure.preparedplancomparison class method)": [[57, "atef.procedure.PreparedPlanComparison.from_comp_to_plan"]], "get_data_async() (atef.procedure.preparedplancomparison method)": [[57, "atef.procedure.PreparedPlanComparison.get_data_async"]], "identifier (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.identifier"]], "name (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.name"]], "parent (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.parent"]], "plan_data (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.plan_data"]], "result (atef.procedure.preparedplancomparison attribute)": [[57, "atef.procedure.PreparedPlanComparison.result"]], "preparedplanstep (class in atef.procedure)": [[58, "atef.procedure.PreparedPlanStep"]], "__init__() (atef.procedure.preparedplanstep method)": [[58, "atef.procedure.PreparedPlanStep.__init__"]], "combined_result (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.combined_result"]], "from_origin() (atef.procedure.preparedplanstep class method)": [[58, "atef.procedure.PreparedPlanStep.from_origin"]], "name (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.name"]], "origin (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.origin"]], "parent (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.parent"]], "prepared_checks (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.prepared_checks"]], "prepared_checks_failures (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.prepared_checks_failures"]], "prepared_plan_failures (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.prepared_plan_failures"]], "prepared_plans (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.prepared_plans"]], "result (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.result"]], "run() (atef.procedure.preparedplanstep method)": [[58, "atef.procedure.PreparedPlanStep.run"]], "step_result (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.step_result"]], "verify_result (atef.procedure.preparedplanstep attribute)": [[58, "atef.procedure.PreparedPlanStep.verify_result"]], "preparedprocedurefile (class in atef.procedure)": [[59, "atef.procedure.PreparedProcedureFile"]], "__init__() (atef.procedure.preparedprocedurefile method)": [[59, "atef.procedure.PreparedProcedureFile.__init__"]], "file (atef.procedure.preparedprocedurefile attribute)": [[59, "atef.procedure.PreparedProcedureFile.file"]], "from_origin() (atef.procedure.preparedprocedurefile class method)": [[59, "atef.procedure.PreparedProcedureFile.from_origin"]], "root (atef.procedure.preparedprocedurefile attribute)": [[59, "atef.procedure.PreparedProcedureFile.root"]], "run() (atef.procedure.preparedprocedurefile method)": [[59, "atef.procedure.PreparedProcedureFile.run"]], "preparedproceduregroup (class in atef.procedure)": [[60, "atef.procedure.PreparedProcedureGroup"]], "__init__() (atef.procedure.preparedproceduregroup method)": [[60, "atef.procedure.PreparedProcedureGroup.__init__"]], "combined_result (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.combined_result"]], "from_origin() (atef.procedure.preparedproceduregroup class method)": [[60, "atef.procedure.PreparedProcedureGroup.from_origin"]], "name (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.name"]], "origin (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.origin"]], "parent (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.parent"]], "prepare_failures (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.prepare_failures"]], "result (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.result"]], "run() (atef.procedure.preparedproceduregroup method)": [[60, "atef.procedure.PreparedProcedureGroup.run"]], "step_result (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.step_result"]], "steps (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.steps"]], "verify_result (atef.procedure.preparedproceduregroup attribute)": [[60, "atef.procedure.PreparedProcedureGroup.verify_result"]], "walk_steps() (atef.procedure.preparedproceduregroup method)": [[60, "atef.procedure.PreparedProcedureGroup.walk_steps"]], "preparedprocedurestep (class in atef.procedure)": [[61, "atef.procedure.PreparedProcedureStep"]], "__init__() (atef.procedure.preparedprocedurestep method)": [[61, "atef.procedure.PreparedProcedureStep.__init__"]], "combined_result (atef.procedure.preparedprocedurestep attribute)": [[61, "atef.procedure.PreparedProcedureStep.combined_result"]], "from_origin() (atef.procedure.preparedprocedurestep class method)": [[61, "atef.procedure.PreparedProcedureStep.from_origin"]], "name (atef.procedure.preparedprocedurestep attribute)": [[61, "atef.procedure.PreparedProcedureStep.name"]], "origin (atef.procedure.preparedprocedurestep attribute)": [[61, "atef.procedure.PreparedProcedureStep.origin"]], "parent (atef.procedure.preparedprocedurestep attribute)": [[61, "atef.procedure.PreparedProcedureStep.parent"]], "result (atef.procedure.preparedprocedurestep attribute)": [[61, "atef.procedure.PreparedProcedureStep.result"]], "run() (atef.procedure.preparedprocedurestep method)": [[61, "atef.procedure.PreparedProcedureStep.run"]], "step_result (atef.procedure.preparedprocedurestep attribute)": [[61, "atef.procedure.PreparedProcedureStep.step_result"]], "verify_result (atef.procedure.preparedprocedurestep attribute)": [[61, "atef.procedure.PreparedProcedureStep.verify_result"]], "preparedsetvaluestep (class in atef.procedure)": [[62, "atef.procedure.PreparedSetValueStep"]], "__init__() (atef.procedure.preparedsetvaluestep method)": [[62, "atef.procedure.PreparedSetValueStep.__init__"]], "combined_result (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.combined_result"]], "from_origin() (atef.procedure.preparedsetvaluestep class method)": [[62, "atef.procedure.PreparedSetValueStep.from_origin"]], "name (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.name"]], "origin (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.origin"]], "parent (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.parent"]], "prepared_actions (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.prepared_actions"]], "prepared_criteria (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.prepared_criteria"]], "result (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.result"]], "run() (atef.procedure.preparedsetvaluestep method)": [[62, "atef.procedure.PreparedSetValueStep.run"]], "step_result (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.step_result"]], "verify_result (atef.procedure.preparedsetvaluestep attribute)": [[62, "atef.procedure.PreparedSetValueStep.verify_result"]], "walk_comparisons() (atef.procedure.preparedsetvaluestep method)": [[62, "atef.procedure.PreparedSetValueStep.walk_comparisons"]], "preparedvaluetosignal (class in atef.procedure)": [[63, "atef.procedure.PreparedValueToSignal"]], "__init__() (atef.procedure.preparedvaluetosignal method)": [[63, "atef.procedure.PreparedValueToSignal.__init__"]], "from_origin() (atef.procedure.preparedvaluetosignal class method)": [[63, "atef.procedure.PreparedValueToSignal.from_origin"]], "name (atef.procedure.preparedvaluetosignal attribute)": [[63, "atef.procedure.PreparedValueToSignal.name"]], "origin (atef.procedure.preparedvaluetosignal attribute)": [[63, "atef.procedure.PreparedValueToSignal.origin"]], "parent (atef.procedure.preparedvaluetosignal attribute)": [[63, "atef.procedure.PreparedValueToSignal.parent"]], "result (atef.procedure.preparedvaluetosignal attribute)": [[63, "atef.procedure.PreparedValueToSignal.result"]], "run() (atef.procedure.preparedvaluetosignal method)": [[63, "atef.procedure.PreparedValueToSignal.run"]], "signal (atef.procedure.preparedvaluetosignal attribute)": [[63, "atef.procedure.PreparedValueToSignal.signal"]], "value (atef.procedure.preparedvaluetosignal attribute)": [[63, "atef.procedure.PreparedValueToSignal.value"]], "procedurefile (class in atef.procedure)": [[64, "atef.procedure.ProcedureFile"]], "__init__() (atef.procedure.procedurefile method)": [[64, "atef.procedure.ProcedureFile.__init__"]], "children() (atef.procedure.procedurefile method)": [[64, "atef.procedure.ProcedureFile.children"]], "from_filename() (atef.procedure.procedurefile class method)": [[64, "atef.procedure.ProcedureFile.from_filename"]], "from_json() (atef.procedure.procedurefile class method)": [[64, "atef.procedure.ProcedureFile.from_json"]], "from_yaml() (atef.procedure.procedurefile class method)": [[64, "atef.procedure.ProcedureFile.from_yaml"]], "root (atef.procedure.procedurefile attribute)": [[64, "atef.procedure.ProcedureFile.root"]], "to_json() (atef.procedure.procedurefile method)": [[64, "atef.procedure.ProcedureFile.to_json"]], "to_yaml() (atef.procedure.procedurefile method)": [[64, "atef.procedure.ProcedureFile.to_yaml"]], "version (atef.procedure.procedurefile attribute)": [[64, "atef.procedure.ProcedureFile.version"]], "walk_steps() (atef.procedure.procedurefile method)": [[64, "atef.procedure.ProcedureFile.walk_steps"]], "proceduregroup (class in atef.procedure)": [[65, "atef.procedure.ProcedureGroup"]], "__init__() (atef.procedure.proceduregroup method)": [[65, "atef.procedure.ProcedureGroup.__init__"]], "allow_verify() (atef.procedure.proceduregroup method)": [[65, "atef.procedure.ProcedureGroup.allow_verify"]], "children() (atef.procedure.proceduregroup method)": [[65, "atef.procedure.ProcedureGroup.children"]], "description (atef.procedure.proceduregroup attribute)": [[65, "atef.procedure.ProcedureGroup.description"]], "name (atef.procedure.proceduregroup attribute)": [[65, "atef.procedure.ProcedureGroup.name"]], "parent (atef.procedure.proceduregroup attribute)": [[65, "atef.procedure.ProcedureGroup.parent"]], "replace_step() (atef.procedure.proceduregroup method)": [[65, "atef.procedure.ProcedureGroup.replace_step"]], "step_success_required (atef.procedure.proceduregroup attribute)": [[65, "atef.procedure.ProcedureGroup.step_success_required"]], "steps (atef.procedure.proceduregroup attribute)": [[65, "atef.procedure.ProcedureGroup.steps"]], "verify_required (atef.procedure.proceduregroup attribute)": [[65, "atef.procedure.ProcedureGroup.verify_required"]], "walk_steps() (atef.procedure.proceduregroup method)": [[65, "atef.procedure.ProcedureGroup.walk_steps"]], "procedurestep (class in atef.procedure)": [[66, "atef.procedure.ProcedureStep"]], "__init__() (atef.procedure.procedurestep method)": [[66, "atef.procedure.ProcedureStep.__init__"]], "allow_verify() (atef.procedure.procedurestep method)": [[66, "atef.procedure.ProcedureStep.allow_verify"]], "children() (atef.procedure.procedurestep method)": [[66, "atef.procedure.ProcedureStep.children"]], "description (atef.procedure.procedurestep attribute)": [[66, "atef.procedure.ProcedureStep.description"]], "name (atef.procedure.procedurestep attribute)": [[66, "atef.procedure.ProcedureStep.name"]], "parent (atef.procedure.procedurestep attribute)": [[66, "atef.procedure.ProcedureStep.parent"]], "step_success_required (atef.procedure.procedurestep attribute)": [[66, "atef.procedure.ProcedureStep.step_success_required"]], "verify_required (atef.procedure.procedurestep attribute)": [[66, "atef.procedure.ProcedureStep.verify_required"]], "pydmdisplaystep (class in atef.procedure)": [[67, "atef.procedure.PydmDisplayStep"]], "__init__() (atef.procedure.pydmdisplaystep method)": [[67, "atef.procedure.PydmDisplayStep.__init__"]], "allow_verify() (atef.procedure.pydmdisplaystep method)": [[67, "atef.procedure.PydmDisplayStep.allow_verify"]], "children() (atef.procedure.pydmdisplaystep method)": [[67, "atef.procedure.PydmDisplayStep.children"]], "description (atef.procedure.pydmdisplaystep attribute)": [[67, "atef.procedure.PydmDisplayStep.description"]], "display (atef.procedure.pydmdisplaystep attribute)": [[67, "atef.procedure.PydmDisplayStep.display"]], "name (atef.procedure.pydmdisplaystep attribute)": [[67, "atef.procedure.PydmDisplayStep.name"]], "options (atef.procedure.pydmdisplaystep attribute)": [[67, "atef.procedure.PydmDisplayStep.options"]], "parent (atef.procedure.pydmdisplaystep attribute)": [[67, "atef.procedure.PydmDisplayStep.parent"]], "step_success_required (atef.procedure.pydmdisplaystep attribute)": [[67, "atef.procedure.PydmDisplayStep.step_success_required"]], "verify_required (atef.procedure.pydmdisplaystep attribute)": [[67, "atef.procedure.PydmDisplayStep.verify_required"]], "setvaluestep (class in atef.procedure)": [[68, "atef.procedure.SetValueStep"]], "__init__() (atef.procedure.setvaluestep method)": [[68, "atef.procedure.SetValueStep.__init__"]], "actions (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.actions"]], "allow_verify() (atef.procedure.setvaluestep method)": [[68, "atef.procedure.SetValueStep.allow_verify"]], "children() (atef.procedure.setvaluestep method)": [[68, "atef.procedure.SetValueStep.children"]], "description (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.description"]], "halt_on_fail (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.halt_on_fail"]], "name (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.name"]], "parent (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.parent"]], "replace_comparison() (atef.procedure.setvaluestep method)": [[68, "atef.procedure.SetValueStep.replace_comparison"]], "require_action_success (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.require_action_success"]], "step_success_required (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.step_success_required"]], "success_criteria (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.success_criteria"]], "verify_required (atef.procedure.setvaluestep attribute)": [[68, "atef.procedure.SetValueStep.verify_required"]], "target (class in atef.procedure)": [[69, "atef.procedure.Target"]], "__init__() (atef.procedure.target method)": [[69, "atef.procedure.Target.__init__"]], "attr (atef.procedure.target attribute)": [[69, "atef.procedure.Target.attr"]], "device (atef.procedure.target attribute)": [[69, "atef.procedure.Target.device"]], "name (atef.procedure.target attribute)": [[69, "atef.procedure.Target.name"]], "pv (atef.procedure.target attribute)": [[69, "atef.procedure.Target.pv"]], "to_signal() (atef.procedure.target method)": [[69, "atef.procedure.Target.to_signal"]], "typhosdisplaystep (class in atef.procedure)": [[70, "atef.procedure.TyphosDisplayStep"]], "__init__() (atef.procedure.typhosdisplaystep method)": [[70, "atef.procedure.TyphosDisplayStep.__init__"]], "allow_verify() (atef.procedure.typhosdisplaystep method)": [[70, "atef.procedure.TyphosDisplayStep.allow_verify"]], "children() (atef.procedure.typhosdisplaystep method)": [[70, "atef.procedure.TyphosDisplayStep.children"]], "description (atef.procedure.typhosdisplaystep attribute)": [[70, "atef.procedure.TyphosDisplayStep.description"]], "devices (atef.procedure.typhosdisplaystep attribute)": [[70, "atef.procedure.TyphosDisplayStep.devices"]], "name (atef.procedure.typhosdisplaystep attribute)": [[70, "atef.procedure.TyphosDisplayStep.name"]], "parent (atef.procedure.typhosdisplaystep attribute)": [[70, "atef.procedure.TyphosDisplayStep.parent"]], "step_success_required (atef.procedure.typhosdisplaystep attribute)": [[70, "atef.procedure.TyphosDisplayStep.step_success_required"]], "verify_required (atef.procedure.typhosdisplaystep attribute)": [[70, "atef.procedure.TyphosDisplayStep.verify_required"]], "valuetotarget (class in atef.procedure)": [[71, "atef.procedure.ValueToTarget"]], "__init__() (atef.procedure.valuetotarget method)": [[71, "atef.procedure.ValueToTarget.__init__"]], "attr (atef.procedure.valuetotarget attribute)": [[71, "atef.procedure.ValueToTarget.attr"]], "device (atef.procedure.valuetotarget attribute)": [[71, "atef.procedure.ValueToTarget.device"]], "name (atef.procedure.valuetotarget attribute)": [[71, "atef.procedure.ValueToTarget.name"]], "pv (atef.procedure.valuetotarget attribute)": [[71, "atef.procedure.ValueToTarget.pv"]], "settle_time (atef.procedure.valuetotarget attribute)": [[71, "atef.procedure.ValueToTarget.settle_time"]], "timeout (atef.procedure.valuetotarget attribute)": [[71, "atef.procedure.ValueToTarget.timeout"]], "to_signal() (atef.procedure.valuetotarget method)": [[71, "atef.procedure.ValueToTarget.to_signal"]], "value (atef.procedure.valuetotarget attribute)": [[71, "atef.procedure.ValueToTarget.value"]], "create_prepared_comparison() (in module atef.procedure)": [[72, "atef.procedure.create_prepared_comparison"]], "get_re_data() (in module atef.procedure)": [[73, "atef.procedure.get_RE_data"]], "get_bs_state() (in module atef.procedure)": [[74, "atef.procedure.get_bs_state"]], "ping (class in atef.tools)": [[75, "atef.tools.Ping"]], "__init__() (atef.tools.ping method)": [[75, "atef.tools.Ping.__init__"]], "check_result_key() (atef.tools.ping method)": [[75, "atef.tools.Ping.check_result_key"]], "count (atef.tools.ping attribute)": [[75, "atef.tools.Ping.count"]], "encoding (atef.tools.ping attribute)": [[75, "atef.tools.Ping.encoding"]], "hosts (atef.tools.ping attribute)": [[75, "atef.tools.Ping.hosts"]], "ping() (atef.tools.ping method)": [[75, "atef.tools.Ping.ping"]], "run() (atef.tools.ping method)": [[75, "atef.tools.Ping.run"]], "pingresult (class in atef.tools)": [[76, "atef.tools.PingResult"]], "__init__() (atef.tools.pingresult method)": [[76, "atef.tools.PingResult.__init__"]], "add_host_result() (atef.tools.pingresult method)": [[76, "atef.tools.PingResult.add_host_result"]], "alive (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.alive"]], "from_output() (atef.tools.pingresult class method)": [[76, "atef.tools.PingResult.from_output"]], "max_time (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.max_time"]], "min_time (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.min_time"]], "num_alive (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.num_alive"]], "num_unresponsive (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.num_unresponsive"]], "result (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.result"]], "times (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.times"]], "unresponsive (atef.tools.pingresult attribute)": [[76, "atef.tools.PingResult.unresponsive"]], "tool (class in atef.tools)": [[77, "atef.tools.Tool"]], "__init__() (atef.tools.tool method)": [[77, "atef.tools.Tool.__init__"]], "check_result_key() (atef.tools.tool method)": [[77, "atef.tools.Tool.check_result_key"]], "run() (atef.tools.tool method)": [[77, "atef.tools.Tool.run"]], "toolresult (class in atef.tools)": [[78, "atef.tools.ToolResult"]], "__init__() (atef.tools.toolresult method)": [[78, "atef.tools.ToolResult.__init__"]], "result (atef.tools.toolresult attribute)": [[78, "atef.tools.ToolResult.result"]], "get_result_value_by_key() (in module atef.tools)": [[79, "atef.tools.get_result_value_by_key"]], "get_prepared_step() (in module atef.walk)": [[80, "atef.walk.get_prepared_step"]], "get_relevant_configs_comps() (in module atef.walk)": [[81, "atef.walk.get_relevant_configs_comps"]], "walk_config_file() (in module atef.walk)": [[82, "atef.walk.walk_config_file"]], "walk_procedure_file() (in module atef.walk)": [[83, "atef.walk.walk_procedure_file"]], "walk_steps() (in module atef.walk)": [[84, "atef.walk.walk_steps"]]}}) \ No newline at end of file diff --git a/v1.4.0/upcoming_changes.html b/v1.4.0/upcoming_changes.html new file mode 100644 index 00000000..09d146db --- /dev/null +++ b/v1.4.0/upcoming_changes.html @@ -0,0 +1,121 @@ + + + + + + + Upcoming Changes — atef documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Upcoming Changes

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/upcoming_release_notes/template-full.html b/v1.4.0/upcoming_release_notes/template-full.html new file mode 100644 index 00000000..df4b122b --- /dev/null +++ b/v1.4.0/upcoming_release_notes/template-full.html @@ -0,0 +1,156 @@ + + + + + + + IssueNumber Title — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

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 Breaks

+
    +
  • 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.

  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2024, SLAC National Accelerator Laboratory.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/v1.4.0/upcoming_release_notes/template-short.html b/v1.4.0/upcoming_release_notes/template-short.html new file mode 100644 index 00000000..217a94f9 --- /dev/null +++ b/v1.4.0/upcoming_release_notes/template-short.html @@ -0,0 +1,144 @@ + + + + + + + IssueNumber Title — atef documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

IssueNumber Title

+
+

API Breaks

+
    +
  • N/A

  • +
+
+
+

Features

+
    +
  • N/A

  • +
+
+
+

Bugfixes

+
    +
  • N/A

  • +
+
+
+

Maintenance

+
    +
  • N/A

  • +
+
+
+

Contributors

+
    +
  • N/A

  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2024, SLAC National Accelerator Laboratory.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/versions.json b/versions.json index 1056e3d0..647ae4ff 100644 --- a/versions.json +++ b/versions.json @@ -1 +1 @@ -{"folders": ["master", "v1.0.0", "v1.1.0", "v1.2.0", "v1.3.0"], "default-branch": "master", "labels": {"master": "master", "v1.0.0": "v1.0.0", "v1.1.0": "v1.1.0", "v1.2.0": "v1.2.0", "v1.3.0": "v1.3.0 (latest)"}, "versions": ["master", "v1.3.0", "v1.2.0", "v1.1.0", "v1.0.0"], "warnings": {"master": ["unreleased"], "v1.0.0": ["outdated"], "v1.1.0": ["outdated"], "v1.2.0": ["outdated"], "v1.3.0": []}, "latest": "v1.3.0", "downloads": {"master": [], "v1.0.0": [], "v1.1.0": [], "v1.2.0": [], "v1.3.0": []}} \ No newline at end of file +{"folders": ["master", "v1.0.0", "v1.1.0", "v1.2.0", "v1.3.0", "v1.4.0"], "default-branch": "master", "labels": {"master": "master", "v1.0.0": "v1.0.0", "v1.1.0": "v1.1.0", "v1.2.0": "v1.2.0", "v1.3.0": "v1.3.0", "v1.4.0": "v1.4.0 (latest)"}, "versions": ["master", "v1.4.0", "v1.3.0", "v1.2.0", "v1.1.0", "v1.0.0"], "warnings": {"master": ["unreleased"], "v1.0.0": ["outdated"], "v1.1.0": ["outdated"], "v1.2.0": ["outdated"], "v1.3.0": ["outdated"], "v1.4.0": []}, "latest": "v1.4.0", "downloads": {"master": [], "v1.0.0": [], "v1.1.0": [], "v1.2.0": [], "v1.3.0": [], "v1.4.0": []}} \ No newline at end of file