cottax.core.realisation.proof module

What a graph answers to before anything runs it: every node carrying what runs it, over driven.DrivenGraph. It does not ask whether a backend can run what it finds – that is the backend’s proof, a level under this.

check_implemented[N: Label, V: Place](name: N, node: NodeDefinition[V])[source]

Every node carries what runs it – a function its body, a problem its driver’s implementation. An executable graph holds no bare condition, so that is every node.

Return type:

Iterator[Violation]

class RealisedGraph[N: Label, V: Place](graph: NestingGraph[N, V])[source]

Bases: DrivenGraph[N, V], Generic[N, V]

A driven graph with what runs every node: what a backend’s proof strengthens.

checks_node: PerLevel[tuple[Callable[[N, NodeDefinition[V]], Iterator[Violation]], ...]] = (<function check_implemented>,)

the one thing a level below adds.

Type:

(name, node) -> violations

class NoImplementation(node: object)[source]

Bases: Violation

node: object
template: AbstractClassVar[str] = '{node!r} carries nothing that runs it -- `Implement` it. Drawing, rewriting, proving and exporting a graph holding one is fine; only running it is not'

e.g. ‘output {place!r} is owned by both {other!r} and {node!r}’

Type:

Wording