def step_write_certificate

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

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

528def step_write_certificate(+input: Shape.Shape, +axes: List<&2, U32>, +plan: Layout.Plan<input, axes>, +index: U32,
529  -original_source: Core.Tensor<input>, -original_target: Core.Tensor<Layout.output(input, axes, plan)>,
530  +mapping: Layout.Mapping<input, axes, plan, index>, +value: F32,
531  -map_exact: {Done{mapping} == Layout.map_index(input, axes, plan, index) : Result<&2, &2, Layout.Error, Layout.Mapping<input, axes, plan, index>>},
532  certificate: Core.Write<Layout.output(input, axes, plan), original_target, index, value>,
533  retained: Core.Tensor<input>,
534  lift: @-pair: Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>> ->
535    {pair == Transforms.copy_written(input, axes, plan, source => target => (source, Done{target}), retained,
536      Core.write_flat(Layout.output(input, axes, plan), original_target, index, value)) :
537        Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>>} ->
538    {pair == Transforms.copy_step(input, axes, plan, original_source, original_target, index) :
539      Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>>},
540  -read_exact: {(retained, Done{value}) == Core.read_flat(input, original_source, Layout.source_index(input, axes, plan, index, mapping)) :
541    Core.Tensor<input> & Result<&2, &2, Core.Error, F32>},
542  -read_model: Core.SourceRead<input, original_source, Layout.source_index(input, axes, plan, index, mapping)>,
543  -keep_model: Core.SourceReadKeeps<input, original_source, Layout.source_index(input, axes, plan, index, mapping)>,
544  -write_model: Core.CheckedUpdateModel<Layout.output(input, axes, plan), original_target, index, value>) ->
545  Transforms.StepCertificate<input, axes, plan, index, original_source, original_target>:
546  Core.Write{target, result, exact} = certificate
547  match result:
548    case Fail{error}:
549      Transforms.StepCertificate{(retained, Fail{Transforms.TensorError{error}}),
550        lift((retained, Fail{Transforms.TensorError{error}}),
551          Equal.cong(Core.Tensor<Layout.output(input, axes, plan)> & Result<&2, &2, Core.Error, Unit>,
552            Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>>,
553            pair => Transforms.copy_written(input, axes, plan, source => target => (source, Done{target}), retained, pair),
554            (target, Fail{error}), Core.write_flat(Layout.output(input, axes, plan), original_target, index, value), exact)), Unit{}}
555    case Done{unit}:
556      Transforms.StepCertificate{(retained, Done{target}),
557        lift((retained, Done{target}),
558          Equal.cong(Core.Tensor<Layout.output(input, axes, plan)> & Result<&2, &2, Core.Error, Unit>,
559            Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Tensor<Layout.output(input, axes, plan)>>,
560            pair => Transforms.copy_written(input, axes, plan, source => target => (source, Done{target}), retained, pair),
561            (target, Done{unit}), Core.write_flat(Layout.output(input, axes, plan), original_target, index, value), exact)),
562        {\{SuccessfulStep: meaning => meaning} : SuccessfulStep<input, axes, plan, index, original_source, original_target, retained, target> ->
563          Transforms.StepMeaning(input, axes, plan, index, original_source, original_target, (retained, Done{target}))}(
564            successful_step(input, axes, plan, index, original_source, original_target, retained, target, mapping, value, unit, map_exact,
565              source_value(input, original_source, retained, Layout.source_index(input, axes, plan, index, mapping), value, read_exact, read_model),
566              source_kept(input, original_source, retained, Layout.source_index(input, axes, plan, index, mapping), value, read_exact, keep_model),
567              known_checked_update(Layout.output(input, axes, plan), original_target, target, index, value, unit, exact, write_model)))}

Uses (33)

Used by (1)