def step_mapped_certificate

bendtorch-core@0.1.0.0 · src/tensor/transform_PROOF.bend:623

import bendtorch-core@0.1.0.0/src/tensor/transform_PROOF.bend as TransformPROOF
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/layout.bend as Layout
import bendtorch-core@0.1.0.0/src/tensor/core.bend as Core
import bendtorch-core@0.1.0.0/src/tensor/transforms.bend as Transforms

623def step_mapped_certificate(+input: Shape.Shape, +axes: List<&2, U32>, +plan: Layout.Plan<input, axes>, +index: U32,
624  source: Core.Tensor<input>, target: Core.Tensor<Layout.output(input, axes, plan)>,
625  result: Result<&2, &2, Layout.Error, Layout.Mapping<input, axes, plan, index>>,
626  exact: {result == Layout.map_index(input, axes, plan, index) : Result<&2, &2, Layout.Error, Layout.Mapping<input, axes, plan, index>>}) ->
627  Transforms.StepCertificate<input, axes, plan, index, source, target>:
628  match result:
629    case Fail{error}:
630      Transforms.StepCertificate{(source, Fail{Transforms.LayoutError{error}}),
631        Equal.cong(Result<&2, &2, Layout.Error, Layout.Mapping<input, axes, plan, index>>,
632          Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>>,
633          mapped => Transforms.copy_mapped(input, axes, plan, index, source => target => (source, Done{target}), source, target, mapped),
634          Fail{error}, Layout.map_index(input, axes, plan, index), exact), Unit{}}
635    case Done{+mapping}:
636      step_read_certificate(input, axes, plan, index, source, target, mapping, exact,
637        pair => equality => Equal.trans(Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>>,
638          pair, Transforms.copy_mapped(input, axes, plan, index, source => target => (source, Done{target}), source, target, Done{mapping}),
639          Transforms.copy_step(input, axes, plan, source, target, index), equality,
640          Equal.cong(Result<&2, &2, Layout.Error, Layout.Mapping<input, axes, plan, index>>,
641            Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>>,
642            mapped => Transforms.copy_mapped(input, axes, plan, index, source => target => (source, Done{target}), source, target, mapped),
643            Done{mapping}, Layout.map_index(input, axes, plan, index), exact)),
644        Core.read_certificate(input, source, Layout.source_index(input, axes, plan, index, mapping)))

Uses (22)

Used by (1)