dantro._dag_utils module¶
Private low-level helper classes and functions for the DAG framework
NOTE This is imported by dantro.tools to register classes with YAML.
-
class
dantro._dag_utils.DAGReference(ref: str)[source]¶ Bases:
objectThe DAGReference class is the base class of all DAG reference objects.
While it does not implement __hash__ by itself, it is yaml-representable and thus hashable after a parent object created a YAML representation.
-
__eq__(other) → bool[source]¶ Only objects with exactly the same type and data are regarded as equal; specifically, this makes instances of subclasses always unequal to instances of the DAGReference base class.
-
property
ref¶ The associated reference of this object
-
_resolve_ref(*, dag: TransformationDAG) → str[source]¶ Return the hash reference; for the base class, the data is already the hash reference, so no DAG is needed. Derived classes _might_ need the DAG to resolve their reference hash.
-
convert_to_ref(*, dag: TransformationDAG) → DAGReference[source]¶ Create a new object that is a hash ref to the same object this tag refers to.
-
resolve_object(*, dag: TransformationDAG) → Any[source]¶ Resolve the object by looking up the reference in the DAG’s object database.
-
yaml_tag= '!dag_ref'¶
-
classmethod
to_yaml(representer, node)[source]¶ Create a YAML representation of a DAGReference, carrying only the _data attribute over…
As YAML expects scalar data to be str-like, a type cast is done. The subclasses that rely on certain argument types should take care that they can parse arguments that are str-like.
-
-
class
dantro._dag_utils.DAGTag(name: str)[source]¶ Bases:
dantro._dag_utils.DAGReferenceA DAGTag object stores a name of a tag, which serves as a named reference to some object in the DAG.
While it does not implement __hash__ by itself, it is yaml-representable and thus hashable after a parent object created a YAML representation.
-
yaml_tag= '!dag_tag'¶
-
property
name¶ The name of the tag within the DAG that this object references
-
_resolve_ref(*, dag: TransformationDAG) → str[source]¶ Return the hash reference by looking up the tag in the DAG
-
__eq__(other) → bool¶ Only objects with exactly the same type and data are regarded as equal; specifically, this makes instances of subclasses always unequal to instances of the DAGReference base class.
-
convert_to_ref(*, dag: TransformationDAG) → DAGReference¶ Create a new object that is a hash ref to the same object this tag refers to.
-
classmethod
from_yaml(constructor, node)¶ Construct a DAGReference from a scalar YAML node
-
property
ref¶ The associated reference of this object
-
resolve_object(*, dag: TransformationDAG) → Any¶ Resolve the object by looking up the reference in the DAG’s object database.
-
classmethod
to_yaml(representer, node)¶ Create a YAML representation of a DAGReference, carrying only the _data attribute over…
As YAML expects scalar data to be str-like, a type cast is done. The subclasses that rely on certain argument types should take care that they can parse arguments that are str-like.
-
-
class
dantro._dag_utils.DAGNode(idx: int)[source]¶ Bases:
dantro._dag_utils.DAGReferenceA DAGNode is a reference by the index within the DAG’s node list.
While it does not implement __hash__ by itself, it is yaml-representable and thus hashable after a parent object created a YAML representation.
-
yaml_tag= '!dag_node'¶
-
__init__(idx: int)[source]¶ Initialize a DAGNode object with a node index.
- Parameters
idx (int) – The idx value to set this reference to. Can also be a negative value, in which case the node list is traversed from the back.
- Raises
TypeError – On invalid type (not int-convertible)
-
property
idx¶ The idx to the referenced node within the DAG’s node list
-
_resolve_ref(*, dag: TransformationDAG) → str[source]¶ Return the hash reference by looking up the node index in the DAG
-
__eq__(other) → bool¶ Only objects with exactly the same type and data are regarded as equal; specifically, this makes instances of subclasses always unequal to instances of the DAGReference base class.
-
convert_to_ref(*, dag: TransformationDAG) → DAGReference¶ Create a new object that is a hash ref to the same object this tag refers to.
-
classmethod
from_yaml(constructor, node)¶ Construct a DAGReference from a scalar YAML node
-
property
ref¶ The associated reference of this object
-
resolve_object(*, dag: TransformationDAG) → Any¶ Resolve the object by looking up the reference in the DAG’s object database.
-
classmethod
to_yaml(representer, node)¶ Create a YAML representation of a DAGReference, carrying only the _data attribute over…
As YAML expects scalar data to be str-like, a type cast is done. The subclasses that rely on certain argument types should take care that they can parse arguments that are str-like.
-
-
class
dantro._dag_utils.DAGObjects[source]¶ Bases:
objectAn objects database for the DAG framework.
It uses a flat dict containing (hash, object ref) pairs. The interface is slightly restricted compared to a regular dict; especially, item deletion is not made available.
Objects are added to the database via the
add_objectmethod. They need to have ahashstrproperty, which returns a hash string deterministically representing the object; note that this is not equivalent to the Python builtin hash() function which invokes the __hash__ magic method.-
add_object(obj, *, custom_hash: str = None) → str[source]¶ Add an object to the object database, storing it under its hash.
Note that the object cannot be just any object that is hashable but it needs to return a string-based hash via the
hashstrproperty. This is a dantro DAG framework-internal interface.Also note that the object will NOT be added if an object with the same hash is already present. The object itself is of no importance, only the returned hash is.
- Parameters
obj – Some object that has the
hashstrproperty, i.e. is hashable as required by the DAG interfacecustom_hash (str, optional) – A custom hash to use instead of the hash extracted from
obj. Can only be given whenobjdoes not have ahashstrproperty.
- Returns
- The hash string of the given object. If a custom hash string
was given, it is also the return value
- Return type
str
- Raises
TypeError – When attempting to pass
custom_hashwhileobjhas ahashstrpropertyValueError – If the given
custom_hashalready exists.
-
-
dantro._dag_utils.parse_dag_minimal_syntax(params: Union[str, dict]) → dict[source]¶ Parses the minimal syntax parameters, effectively translating a string- like argument to a dict with the string specified as the
operationkey.
-
dantro._dag_utils.parse_dag_syntax(*, operation: str = None, args: list = None, kwargs: dict = None, tag: str = None, with_previous_result: bool = False, salt: int = None, file_cache: dict = None, ignore_hooks: bool = False, **ops) → dict[source]¶ Given the parameters of a transform operation, possibly in a shorthand notation, returns a dict with normalized content by expanding the shorthand notation.
- Keys that will be available in the resulting dict:
operation,args,kwargs,tag.
- Parameters
operation (str, optional) – Which operation to carry out; can only be specified if there is no
opsargument.args (list, optional) – Positional arguments for the operation; can only be specified if there is no
opsargument.kwargs (dict, optional) – Keyword arguments for the operation; can only be specified if there is no
opsargument.tag (str, optional) – The tag to attach to this transformation
with_previous_result (bool, optional) – Whether the result of the previous transformation is to be used as first positional argument of this transformation.
salt (int, optional) – A salt to the Transformation object, thereby changing its hash.
file_cache (dict, optional) – File cache parameters
ignore_hooks (bool, optional) – If True, there will be no lookup in the operation hooks.
**ops – The operation that is to be carried out. May contain one and only one operation.
- Returns
The normalized dict of transform parameters.
- Return type
dict
- Raises
ValueError – For invalid notation, e.g. unambiguous specification of arguments or the operation.
-
dantro._dag_utils.op_hook_expression(operation, *args, **kwargs) → Tuple[str, list, dict][source]¶ An operation hook for the
expressionoperation, attempting to auto-detect which symbols are specified in the given expression. From those,DAGTagobjects are created, making it more convenient to specify an expression that is based on other DAG tags.The detected symbols are added to the
kwargs.symbols, if no symbol of the same name is already explicitly defined there.This hook accepts as positional arguments both the
(expr,)form and the(prev_node, expr)form, making it more robust when thewith_previous_resultflag was set.If the expression contains the
prevorprevious_resultsymbols, the correspondingDAGNodewill be added to the symbols additionally.For more information on operation hooks, see DAG Syntax Operation Hooks.