cutcutcodec.core.compilation.tree_to_graph

Create the graph from an cutcutcodec.core.classes.container.ContainerOutput.

Functions

new_node(graph, node)

Compiles a node in an existing assembly graph context.

tree_to_graph(container_out)

Create the graph from an implicit dynamic tree.

Details

cutcutcodec.core.compilation.tree_to_graph.new_node(graph: MultiDiGraph, node: Node) tuple[str, dict[str]][source]

Compiles a node in an existing assembly graph context.

Parameters

graphnetworkx.MultiDiGraph

The graph on which we add the node.

nodecutcutcodec.core.classes.node.Node

The node that we want to name and extract properties.

Returns

namestr

The name of the node, this name is not already present in the graph.

attrsdict[str]

The attributes, the state of the node allowing to complete the graph.

Notes

The graph remains unchanged, it is only used for analysis.

Examples

>>> from pprint import pprint
>>> from cutcutcodec.core.classes.container import ContainerOutput
>>> from cutcutcodec.core.compilation.tree_to_graph import tree_to_graph, new_node
>>> from cutcutcodec.core.generation.audio.noise import GeneratorAudioNoise
>>> node = GeneratorAudioNoise(0)
>>> graph = tree_to_graph(ContainerOutput(node.out_streams))
>>> pprint(new_node(graph, node))
('generator_audio_noise_2',
 {'class': <class 'cutcutcodec.core.generation.audio.noise.GeneratorAudioNoise'>,
  'state': {'layout': 'stereo', 'seed': 0.0}})
>>>
cutcutcodec.core.compilation.tree_to_graph.tree_to_graph(container_out: ContainerOutput) MultiDiGraph[source]

Create the graph from an implicit dynamic tree.

The generated assembly graph abstracts and simplifies the modification of the pipeline. Gives a representation of the assembly tree in the form of a manipulable graph.

Parameters

container_outcutcutcodec.core.classes.container.ContainerOutput

The output of the dynamic graph.

Returns

assembly_graphnetworkx.MultiDiGraph

The strictly equivalent assembly graph.

Examples

>>> from pprint import pprint
>>> from cutcutcodec.core.classes.container import ContainerOutput
>>> from cutcutcodec.core.compilation.tree_to_graph import tree_to_graph
>>> from cutcutcodec.core.filter.audio.cat import FilterAudioCat
>>> from cutcutcodec.core.filter.audio.subclip import FilterAudioSubclip
>>> from cutcutcodec.core.generation.audio.noise import GeneratorAudioNoise
>>>
>>> (s_audio_0,) = FilterAudioSubclip(GeneratorAudioNoise(0).out_streams, 1, 2).out_streams
>>> (s_audio_1,) = GeneratorAudioNoise(.5).out_streams
>>> (s_chain_audio,) = FilterAudioCat([s_audio_0, s_audio_1]).out_streams
>>> graph = tree_to_graph(ContainerOutput([s_chain_audio]))
>>>
>>> pprint(sorted(graph.nodes))
['container_output_1',
 'filter_audio_cat_1',
 'filter_audio_subclip_1',
 'generator_audio_noise_1',
 'generator_audio_noise_2']
>>> pprint(sorted(graph.edges))
[('filter_audio_cat_1', 'container_output_1', '0->0'),
 ('filter_audio_subclip_1', 'filter_audio_cat_1', '0->0'),
 ('generator_audio_noise_1', 'filter_audio_subclip_1', '0->0'),
 ('generator_audio_noise_2', 'filter_audio_cat_1', '0->1')]
>>>