elasticai.creator.ir#
Package Contents#
Classes#
Keep constructor signature when subclassing! |
|
Note that the fact, that |
|
Deserializes to the legacy format. |
|
Serializer for the legacy format. |
Functions#
Create AttributeMapping from other (native) data types recursively. |
API#
- class elasticai.creator.ir.AttributeMapping(**kwargs: elasticai.creator.ir._attribute.Attribute)[source]#
Bases:
collections.abc.Mapping[str,elasticai.creator.ir._attribute.Attribute]- update_path(path: tuple[str, ...], value: elasticai.creator.ir._attribute.Attribute) Self[source]#
update the entry found when following the path into nested Mappings
- merge(other: collections.abc.Mapping) Self[source]#
merge over nested mappings recursively
So instead of replacing a value found under a key, this checks wether that value is again an AttributeMapping and if so, updates it by the corresponding Mapping found in other. This happens recursively.
Opposed to that
new_withand the|operator only allow to update values in the most outer AttributeMapping. Therefore using these to update a value in a nested structure, users would have to recreate the whole outer mapping structure until they reach the mapping they want to update.Use Case:
If you would want to write
data = dict(a=dict(b=1, c=2)) data["a"]["b"] = 3 assert data["a"]["c"] == 2
You can instead
data = AttributeMapping(a=AttributeMapping(b=1, c=2)) data = data.merge(dict(a=dict(b=3))) assert data["a"]["c"] == 2
If you want to update a single value, you can use the
update_path()function instead to avoid having to build all the nested dictionaries.
- new_with(**kwargs: elasticai.creator.ir._attribute.Attribute) elasticai.creator.ir._attribute.AttributeMapping[source]#
replace key, value pairs in self by key, value pairs in kwargs
- classmethod from_dict(data: dict) elasticai.creator.ir._attribute.AttributeMapping[source]#
- elasticai.creator.ir.attribute(arg: collections.abc.Mapping[str, elasticai.creator.ir._attribute.AttributeConvertable] | elasticai.creator.ir._attribute.AttributeMapping | elasticai.creator.ir._attribute.Attribute | None = None, /, **kwargs: elasticai.creator.ir._attribute.AttributeConvertable) elasticai.creator.ir._attribute.AttributeMapping | tuple[elasticai.creator.ir._attribute.Attribute] | elasticai.creator.ir._attribute.Attribute[source]#
Create AttributeMapping from other (native) data types recursively.
The implementation assumes that any encountered AttributeMapping objects are correct, ie. they only contain Attributes themselves.
- class elasticai.creator.ir.DefaultDataGraphFactory(node_edge_factory: elasticai.creator.ir.factories.NodeEdgeFactory[N, E])[source]#
Bases:
elasticai.creator.ir.factories.StdDataGraphFactory[elasticai.creator.ir.datagraph_impl.DefaultDataGraphFactory.N,elasticai.creator.ir.datagraph_impl.DefaultDataGraphFactory.E,elasticai.creator.ir.datagraph.DataGraph]
- class elasticai.creator.ir.DefaultIrFactory[source]#
Bases:
elasticai.creator.ir.factories.StdIrFactory[elasticai.creator.ir.datagraph.Node,elasticai.creator.ir.datagraph.Edge,elasticai.creator.ir.datagraph.DataGraph[elasticai.creator.ir.datagraph.Node,elasticai.creator.ir.datagraph.Edge]]Initialization
- class elasticai.creator.ir.DefaultNodeEdgeFactory[source]#
Bases:
elasticai.creator.ir.factories.NodeEdgeFactory[elasticai.creator.ir.datagraph.Node,elasticai.creator.ir.datagraph.Edge]- node(name: str, attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping()) elasticai.creator.ir.datagraph.Node[source]#
- edge(src: str, dst: str, attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping()) elasticai.creator.ir.datagraph.Edge[source]#
- class elasticai.creator.ir.DataGraphImpl(/, factory: elasticai.creator.ir._attribute.AttributeMapping, attributes: elasticai.creator.ir.graph.Graph[str, elasticai.creator.ir._attribute.AttributeMapping], graph: elasticai.creator.ir._attribute.AttributeMapping, node_attributes)[source]#
Bases:
elasticai.creator.ir.datagraph.DataGraph[elasticai.creator.ir.datagraph_impl.DataGraphImpl.N,elasticai.creator.ir.datagraph_impl.DataGraphImpl.E]Keep constructor signature when subclassing!
Initialization
- __slots__#
(‘_factory’, ‘_graph’, ‘_attributes’, ‘_nodes’)
- property node_attributes: elasticai.creator.ir._attribute.AttributeMapping#
- property graph: elasticai.creator.ir.graph.Graph[str, elasticai.creator.ir._attribute.AttributeMapping]#
- new_from_read_only_data_graph(g: elasticai.creator.ir.datagraph.ReadOnlyDataGraph) Self[source]#
- property attributes: elasticai.creator.ir._attribute.AttributeMapping#
- property successors: collections.abc.Mapping[str, collections.abc.Mapping[str, elasticai.creator.ir._attribute.AttributeMapping]]#
- property predecessors: collections.abc.Mapping[str, collections.abc.Mapping[str, elasticai.creator.ir._attribute.AttributeMapping]]#
- add_edge(src: str | elasticai.creator.ir.datagraph.Edge, dst: str | None = None, attributes: elasticai.creator.ir._attribute.AttributeMapping | None = None, /) Self[source]#
Updates edge in case it exists already. Possibly already existing nodes remain unchanged.
- add_edges(*edges: elasticai.creator.ir.datagraph.Edge | tuple[str, str, elasticai.creator.ir._attribute.AttributeMapping] | tuple[str, str]) Self[source]#
Updates edges in case they exist already. Possibly already existing nodes remain unchanged.
- add_node(name: str | elasticai.creator.ir.datagraph.Node, attributes: elasticai.creator.ir._attribute.AttributeMapping | None = None, /) Self[source]#
Updates node in case it exists already.
- add_nodes(*nodes: elasticai.creator.ir.datagraph.Node | tuple[str, elasticai.creator.ir._attribute.AttributeMapping] | str) Self[source]#
Updates nodes in case they exist already.
- with_attributes(attributes: elasticai.creator.ir._attribute.AttributeMapping) Self[source]#
- class elasticai.creator.ir.Graph[source]#
Bases:
elasticai.creator.ir.graph.ReadOnlyGraph[elasticai.creator.ir.graph.Graph.N,elasticai.creator.ir.graph.Graph.E],typing.Protocol
- class elasticai.creator.ir.GraphImpl(default_edge_attributes_factory: collections.abc.Callable[[], E], predecessors: elasticai.creator.ir.graph.AdjacencyMap[T, E] = AdjacencyMap(), successors: elasticai.creator.ir.graph.AdjacencyMap[T, E] = AdjacencyMap())[source]#
Bases:
elasticai.creator.ir.graph.Graph[elasticai.creator.ir.graph.GraphImpl.T,elasticai.creator.ir.graph.GraphImpl.E]- property successors: elasticai.creator.ir.graph.AdjacencyMap[T, E]#
- property predecessors: elasticai.creator.ir.graph.AdjacencyMap[T, E]#
- class elasticai.creator.ir.EdgeImpl(src: str, dst: str, attributes: elasticai.creator.ir._attribute.AttributeMapping)[source]#
Bases:
elasticai.creator.ir.datagraph.Edge- __slots__#
(‘_src’, ‘_dst’, ‘_attributes’)
- property attributes: elasticai.creator.ir._attribute.AttributeMapping#
- property src: str#
- property dst: str#
- class elasticai.creator.ir.IrFactory[source]#
Bases:
elasticai.creator.ir.datagraph.NodeEdgeFactory[elasticai.creator.ir.factories.IrFactory.N,elasticai.creator.ir.factories.IrFactory.E],typing.Protocol- abstractmethod graph(attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping(), /) G[source]#
- class elasticai.creator.ir.StdNodeEdgeFactory(node_fn: collections.abc.Callable[[str, elasticai.creator.ir._attribute.AttributeMapping], N], edge_fn: collections.abc.Callable[[str, str, elasticai.creator.ir._attribute.AttributeMapping], E])[source]#
Bases:
elasticai.creator.ir.datagraph.NodeEdgeFactoryInitialization
- node(name: str, attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping()) N[source]#
- edge(src: str, dst: str, attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping()) E[source]#
- class elasticai.creator.ir.NodeImpl(name: str, attributes: elasticai.creator.ir._attribute.AttributeMapping)[source]#
Bases:
elasticai.creator.ir.datagraph.Node- __slots__#
(‘_name’, ‘_attributes’)
- property name: str#
- property type: str#
- property attributes: elasticai.creator.ir._attribute.AttributeMapping#
- class elasticai.creator.ir.StdDataGraphFactory(node_edge: elasticai.creator.ir.datagraph.NodeEdgeFactory[N, E], graph_fn: collections.abc.Callable[[elasticai.creator.ir.datagraph.NodeEdgeFactory[N, E], elasticai.creator.ir._attribute.AttributeMapping], G])[source]#
Bases:
elasticai.creator.ir.factories.DataGraphFactory[elasticai.creator.ir.factories.StdDataGraphFactory.G]- graph(attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping()) G[source]#
- class elasticai.creator.ir.StdIrFactory(node_fn: collections.abc.Callable[[str, elasticai.creator.ir._attribute.AttributeMapping], N], edge_fn: collections.abc.Callable[[str, str, elasticai.creator.ir._attribute.AttributeMapping], E], graph_fn: collections.abc.Callable[[elasticai.creator.ir.datagraph.NodeEdgeFactory[N, E], elasticai.creator.ir._attribute.AttributeMapping], G])[source]#
Bases:
elasticai.creator.ir.factories.StdNodeEdgeFactory[elasticai.creator.ir.factories.StdIrFactory.N,elasticai.creator.ir.factories.StdIrFactory.E]Initialization
- graph(attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping()) G[source]#
- class elasticai.creator.ir.DataGraph[source]#
Bases:
elasticai.creator.ir.datagraph.ReadOnlyDataGraph[elasticai.creator.ir.datagraph.N,elasticai.creator.ir.datagraph.E],elasticai.creator.ir.graph.Graph[str,elasticai.creator.ir._attribute.AttributeMapping],typing.Protocol[elasticai.creator.ir.datagraph.N,elasticai.creator.ir.datagraph.E]Note that the fact, that
add_nodeand similar methods take an argument of typeNodewhile thenodesandedgesproperties produce mappings over the generic type parametersEandN. This makesDataGraphcovariant overNandE, meaning thatDataGraph[SpecialNode, SpecialEdge]is a subtype ofDataGraph[Node, Edge]. It also means that every implementation detail in aDataGraphimplementation needs to assume that nodes and edges are of the most generalNodeorEdgetype.- abstractmethod add_nodes(*args: elasticai.creator.ir.datagraph.Node | tuple[str, elasticai.creator.ir._attribute.AttributeMapping] | str) Self[source]#
- abstractmethod add_edges(*args: elasticai.creator.ir.datagraph.Edge | tuple[str, str, elasticai.creator.ir._attribute.AttributeMapping] | tuple[str, str]) Self[source]#
- abstractmethod with_attributes(attributes: elasticai.creator.ir._attribute.AttributeMapping) Self[source]#
- class elasticai.creator.ir.Edge[source]#
Bases:
typing.Protocol- abstract property attributes: elasticai.creator.ir._attribute.AttributeMapping#
- abstract property src: str#
- abstract property dst: str#
- class elasticai.creator.ir.Node[source]#
Bases:
typing.Protocol- abstract property attributes: elasticai.creator.ir._attribute.AttributeMapping#
- abstract property type: str#
- abstract property name: str#
- class elasticai.creator.ir.NodeEdgeFactory[source]#
Bases:
typing.Protocol[elasticai.creator.ir.datagraph.N,elasticai.creator.ir.datagraph.E]- abstractmethod node(name: str, attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping(), /) elasticai.creator.ir.datagraph.N[source]#
- abstractmethod edge(src: str, dst: str, attributes: elasticai.creator.ir._attribute.AttributeMapping = AttributeMapping(), /) elasticai.creator.ir.datagraph.E[source]#
- class elasticai.creator.ir.ReadOnlyDataGraph[source]#
Bases:
elasticai.creator.ir.graph.ReadOnlyGraph[str,elasticai.creator.ir._attribute.AttributeMapping],typing.Protocol[elasticai.creator.ir.datagraph.N,elasticai.creator.ir.datagraph.E]- abstract property attributes: elasticai.creator.ir._attribute.AttributeMapping#
- abstract property nodes: collections.abc.Mapping[str, elasticai.creator.ir.datagraph.N]#
- abstract property graph: elasticai.creator.ir.graph.Graph[str, elasticai.creator.ir._attribute.AttributeMapping]#
- abstract property node_attributes: elasticai.creator.ir._attribute.AttributeMapping#
- abstract property edges: collections.abc.Mapping[tuple[str, str], elasticai.creator.ir.datagraph.E]#
- abstract property factory: elasticai.creator.ir.datagraph.NodeEdgeFactory[elasticai.creator.ir.datagraph.N, elasticai.creator.ir.datagraph.E]#
- class elasticai.creator.ir.Registry(items: collections.abc.Iterable[tuple[str, G]] | collections.abc.Mapping[str, G] | None = None, /, **kwargs)[source]#
Bases:
collections.abc.Mapping[str,elasticai.creator.ir.registry.Registry.G]
- class elasticai.creator.ir.IrDeserializer(factory: elasticai.creator.ir.factories.IrFactory[N, E, G])[source]#
Initialization
- class elasticai.creator.ir.IrDeserializerLegacy(factory: elasticai.creator.ir.factories.IrFactory[N, E, G])[source]#
Deserializes to the legacy format.
The only difference is that attributes are not stored in a dedicated field but at the top-level dict. Use this if you need to load an IR from data that was serialized using the
IrDatadata types.Initialization
- class elasticai.creator.ir.IrSerializerLegacy[source]#
Serializer for the legacy format.
The only difference is that the attributes are not saved in a dedicated field, but instead directly in the top-level dict.
Use this if you need to store the data in a format that can be read by the old
IrDatabased implementations.Initialization