# Path: taskflow/types/sets.py
# def _merge_in(target, iterable=None, sentinel=_sentinel):
#     def __init__(self, iterable=None):
#     def __hash__(self):
#     def __contains__(self, value):
#     def __len__(self):
#     def __iter__(self):
#     def __setstate__(self, items):
#     def __getstate__(self):
#     def __repr__(self):
#     def copy(self):
#     def intersection(self, *sets):
#         def absorb_it(sets):
#     def issuperset(self, other):
#     def issubset(self, other):
#     def difference(self, *sets):
#         def absorb_it(sets):
#     def union(self, *sets):
# class OrderedSet(abc.Set, abc.Hashable):
# 
# Path: taskflow/utils/misc.py
# UNKNOWN_HOSTNAME = "<unknown>"
# NUMERIC_TYPES = six.integer_types + (float,)
# _SCHEME_REGEX = re.compile(r"^([A-Za-z][A-Za-z0-9+.-]*):")
# class StrEnum(str, enum.Enum):
# class StringIO(six.StringIO):
# class BytesIO(six.BytesIO):
# class cachedproperty(object):
#     def __new__(cls, *args, **kwargs):
#     def write_nl(self, value, linesep=os.linesep):
#     def reset(self):
# def get_hostname(unknown_hostname=UNKNOWN_HOSTNAME):
# def match_type(obj, matchers):
# def countdown_iter(start_at, decr=1):
# def extract_driver_and_conf(conf, conf_key):
# def reverse_enumerate(items):
# def merge_uri(uri, conf):
# def find_subclasses(locations, base_cls, exclude_hidden=True):
# def pick_first_not_none(*values):
# def parse_uri(uri):
# def disallow_when_frozen(excp_cls):
#     def decorator(f):
#         def wrapper(self, *args, **kwargs):
# def clamp(value, minimum, maximum, on_clamped=None):
# def fix_newlines(text, replacement=os.linesep):
# def binary_encode(text, encoding='utf-8', errors='strict'):
# def binary_decode(data, encoding='utf-8', errors='strict'):
# def _check_decoded_type(data, root_types=(dict,)):
# def decode_msgpack(raw_data, root_types=(dict,)):
# def decode_json(raw_data, root_types=(dict,)):
#     def __init__(self, fget=None, require_lock=True):
#     def __call__(self, fget):
#     def __set__(self, instance, value):
#     def __delete__(self, instance):
#     def __get__(self, instance, owner):
# def millis_to_datetime(milliseconds):
# def get_version_string(obj):
# def sequence_minus(seq1, seq2):
# def as_int(obj, quiet=False):
# def capture_failure():
# def is_iterable(obj):
# def safe_copy_dict(obj):


import abc
import collections
import itertools
import six
from collections import abc as cabc
from oslo_utils import reflection
from six.moves import zip as compat_zip
from taskflow.types import sets
from taskflow.utils import misc

    def pre_revert(self):
        """Code to be run prior to reverting the atom.

        This works the same as :meth:`.pre_execute`, but for the revert phase.
        """

    def revert(self, *args, **kwargs):
        """Revert this atom.

        This method should undo any side-effects caused by previous execution
        of the atom using the result of the :py:meth:`execute` method and
        information on the failure which triggered reversion of the flow the
        atom is contained in (if applicable).

        :param args: positional arguments that the atom required to execute.
        :param kwargs: any keyword arguments that the atom required to
                       execute; the special key ``'result'`` will contain
                       the :py:meth:`execute` result (if any) and
                       the ``**kwargs`` key ``'flow_failures'`` will contain
                       any failure information.
        """

    def post_revert(self):
        """Code to be run after reverting the atom.

        This works the same as :meth:`.post_execute`, but for the revert phase.
        """

    def __str__(self):

# Path: taskflow/types/sets.py
# def _merge_in(target, iterable=None, sentinel=_sentinel):
#     def __init__(self, iterable=None):
#     def __hash__(self):
#     def __contains__(self, value):
#     def __len__(self):
#     def __iter__(self):
#     def __setstate__(self, items):
#     def __getstate__(self):
#     def __repr__(self):
#     def copy(self):
#     def intersection(self, *sets):
#         def absorb_it(sets):
#     def issuperset(self, other):
#     def issubset(self, other):
#     def difference(self, *sets):
#         def absorb_it(sets):
#     def union(self, *sets):
# class OrderedSet(abc.Set, abc.Hashable):
# 
# Path: taskflow/utils/misc.py
# UNKNOWN_HOSTNAME = "<unknown>"
# NUMERIC_TYPES = six.integer_types + (float,)
# _SCHEME_REGEX = re.compile(r"^([A-Za-z][A-Za-z0-9+.-]*):")
# class StrEnum(str, enum.Enum):
# class StringIO(six.StringIO):
# class BytesIO(six.BytesIO):
# class cachedproperty(object):
#     def __new__(cls, *args, **kwargs):
#     def write_nl(self, value, linesep=os.linesep):
#     def reset(self):
# def get_hostname(unknown_hostname=UNKNOWN_HOSTNAME):
# def match_type(obj, matchers):
# def countdown_iter(start_at, decr=1):
# def extract_driver_and_conf(conf, conf_key):
# def reverse_enumerate(items):
# def merge_uri(uri, conf):
# def find_subclasses(locations, base_cls, exclude_hidden=True):
# def pick_first_not_none(*values):
# def parse_uri(uri):
# def disallow_when_frozen(excp_cls):
#     def decorator(f):
#         def wrapper(self, *args, **kwargs):
# def clamp(value, minimum, maximum, on_clamped=None):
# def fix_newlines(text, replacement=os.linesep):
# def binary_encode(text, encoding='utf-8', errors='strict'):
# def binary_decode(data, encoding='utf-8', errors='strict'):
# def _check_decoded_type(data, root_types=(dict,)):
# def decode_msgpack(raw_data, root_types=(dict,)):
# def decode_json(raw_data, root_types=(dict,)):
#     def __init__(self, fget=None, require_lock=True):
#     def __call__(self, fget):
#     def __set__(self, instance, value):
#     def __delete__(self, instance):
#     def __get__(self, instance, owner):
# def millis_to_datetime(milliseconds):
# def get_version_string(obj):
# def sequence_minus(seq1, seq2):
# def as_int(obj, quiet=False):
# def capture_failure():
# def is_iterable(obj):
# def safe_copy_dict(obj):


# Path: taskflow/atom.py
import abc
import collections
import itertools
import six
from collections import abc as cabc
from oslo_utils import reflection
from six.moves import zip as compat_zip
from taskflow.types import sets
from taskflow.utils import misc


    def pre_revert(self):
        """Code to be run prior to reverting the atom.

        This works the same as :meth:`.pre_execute`, but for the revert phase.
        """

    def revert(self, *args, **kwargs):
        """Revert this atom.

        This method should undo any side-effects caused by previous execution
        of the atom using the result of the :py:meth:`execute` method and
        information on the failure which triggered reversion of the flow the
        atom is contained in (if applicable).

        :param args: positional arguments that the atom required to execute.
        :param kwargs: any keyword arguments that the atom required to
                       execute; the special key ``'result'`` will contain
                       the :py:meth:`execute` result (if any) and
                       the ``**kwargs`` key ``'flow_failures'`` will contain
                       any failure information.
        """

    def post_revert(self):
        """Code to be run after reverting the atom.

        This works the same as :meth:`.post_execute`, but for the revert phase.
        """

    def __str__(self):

        return "%s==%s" % (self.name, misc.get_version_string(self))