backward method

void backward()

Implementation

void backward() {
  final topologicalGraph = <Value>[];
  final visited = <Value>{};

  buildTopologicalGraph(Value value) {
    if (visited.contains(value)) return;
    visited.add(value);
    for (final child in value.children) {
      buildTopologicalGraph(child);
    }
    topologicalGraph.add(value);
  }

  buildTopologicalGraph(this);

  grad = 1.0;
  for (final value in topologicalGraph.reversed) {
    value.localBackward?.call();
  }
}