"""
======
Scheme
======

The scheme package implements and defines the underlying workflow model.

The :class:`.Scheme` class represents the workflow and is composed of a set
of :class:`.SchemeNode` connected with :class:`.SchemeLink`, defining an
directed acyclic graph (DAG). Additionally instances of
:class:`.SchemeArrowAnnotation` or :class:`.SchemeTextAnnotation` can be
inserted into the scheme.

"""

from .node import SchemeNode
from .link import SchemeLink, compatible_channels, can_connect, possible_links
from .scheme import Scheme

from .annotations import (
    BaseSchemeAnnotation, SchemeArrowAnnotation, SchemeTextAnnotation
)

from .errors import *
from .events import *

#: Alias for SchemeNode
Node = SchemeNode
#: Alias for SchemeLink
Link = SchemeLink
#: Alias for Scheme
Workflow = Scheme
#: Alias for BaseSchemeAnnotation
Annotation = BaseSchemeAnnotation
#: Alias for SchemeArrowAnnotation
Arrow = SchemeArrowAnnotation
#: Alias for SchemeTextAnnotation
Text = SchemeTextAnnotation
