def swept_pulls
bendtorch-core@0.1.0.0 · src/autograd/tensor_chain_PROOF.bend:408
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/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
408
409def swept_pulls(entries: List<&1, Backward.Entry>, state: Laws.Slots(), -slots: List<&1, Gradient.Slot>, +count: Nat, -log: Laws.Log(),
410 pushed: Pushed(state, slots, count, log)) -> Out(entries, state, count, slots, log):
411 match entries state:
412 case Nil{} Fail{error}:
413 Stop{Nil{}, {==}}
414 case Nil{} Done{pending}:
415 Kept{Nil{}, pending, {==}, gathered(pending, count, slots, log, pushed)}
416 case Con{Backward.Entry{+node, +shape, value, saved, slot}, rest} Fail{error}:
417 Stop{Backward.Entry{node, shape, value, saved, slot} <> rest, {==}}
418 case Con{Backward.Entry{+node, +shape, value, saved, slot}, rest} Done{pending}:
419 stepped(node, shape, value, saved, slot, rest, pending, count, slots, log, pushed,
420 after => slots2 => count2 => log2 => pushed2 => swept_pulls(rest, after, slots2, count2, log2, pushed2))