def newer_step

bendtorch-core@0.1.0.0 · src/autograd/tensor_chain_PROOF.bend:555

import bendtorch-core@0.1.0.0/src/autograd/tensor_chain_PROOF.bend as TensorChainPROOF
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/core.bend as Core
import bendtorch-core@0.1.0.0/src/autograd/gradient.bend as Gradient
import bendtorch-core@0.1.0.0/src/autograd/tensor_backward.bend as Backward
import bendtorch-core@0.1.0.0/src/autograd/tensor_chain_LAWS.bend as Laws

555def newer_step(+node: Backward.Node, +shape: Shape.Shape, -value: Core.Dynamic, -saved: Backward.Saved, -slot: Gradient.Slot,
556  -rest: List<&1, Backward.Entry>, -below: Nat, +older: Nat, -slots: List<&1, Gradient.Slot>,
557  out: Passed<rest, below, older, Backward.at_head(below, older), slots>) ->
558  Passed<Backward.Entry{node, shape, value, saved, slot} <> rest, 1n+below, older, False{}, Gradient.Unset{} <> slots>:
559  match out:
560    case PassKept{done, gradients, passed, chained}:
561      PassKept{Backward.Entry{node, shape, value, saved, slot} <> done, Gradient.Unset{} <> gradients,
562        Equal.cong(Backward.Swept(), Backward.Swept(),
563          pair => Backward.finished(Backward.Entry{node, shape, value, saved, slot}, Gradient.Unset{}, pair),
564          Backward.pass(rest, below, older, Backward.at_head(below, older)), (done, Done{gradients}), passed),
565        Equal.cong(Laws.Slots(), Laws.Slots(), result => Backward.prepend(Gradient.Slot, Gradient.Unset{}, result),
566          Laws.chained(rest, slots, below, Nil{}), Done{gradients}, chained)}
567    case PassStopped{done, error, passed}:
568      PassStopped{Backward.Entry{node, shape, value, saved, slot} <> done, error,
569        Equal.cong(Backward.Swept(), Backward.Swept(),
570          pair => Backward.finished(Backward.Entry{node, shape, value, saved, slot}, Gradient.Unset{}, pair),
571          Backward.pass(rest, below, older, Backward.at_head(below, older)), (done, Fail{error}), passed)}

Uses (20)

Used by (1)