def written_step

bendtorch-core@0.1.0.0 · src/tensor/from_values_contract.bend:219

import bendtorch-core@0.1.0.0/src/tensor/from_values_contract.bend as FromValuesContract
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/storage/main.bend as Storage
import bendtorch-core@0.1.0.0/src/storage/LAWS.bend as StorageLaws
import bendtorch-core@0.1.0.0/src/storage/arith.bend as Arith
import bendtorch-core@0.1.0.0/src/tensor/core.bend as Core
import bendtorch-core@0.1.0.0/src/tensor/lifecycle.bend as Lifecycle
import bendtorch-core@0.1.0.0/src/tensor/observation.bend as Observation

219def written_step(+shape: Shape.Shape, +value: F32, -rest: List<&2, F32>, +cursor: Nat, +prefix: List<&2, StorageLaws.Op>, +index: U32,
220  pair: Core.Tensor<shape> & Result<&2, &2, Core.Error, Unit>,
221  done: {Observation.write_done_pair(shape, pair) == True{} : Bool},
222  moved: {written_storage(shape, pair) == StorageLaws.written(base(shape, prefix), index, value) : Storage.Storage},
223  -P: Result<&2, &1, Core.Error, Core.Tensor<shape>> -> Type,
224  next: @-valid: {Lifecycle.logical_length(base(shape, List.append(&2, StorageLaws.Op, prefix, [StorageLaws.Write{index, value}]))) ==
225    Shape.logical_numel(Shape.dimensions(shape)) : Nat} ->
226    P(Core.fill_values(rest, shape, Core.TTensor{base(shape, List.append(&2, StorageLaws.Op, prefix, [StorageLaws.Write{index, value}])), valid}, 1n+cursor))) ->
227  P(Core.fill_values_step(shape, tensor => Core.fill_values(rest, shape, tensor, 1n+cursor), pair)):
228  match pair:
229    case (Core.TTensor{storage, valid}, Fail{error}):
230      Empty.absurd(P(Fail{error}), Arith.clash(done))
231    case (Core.TTensor{storage, valid}, Done{unit}):
232      moved_lift(shape, rest, cursor, base(shape, List.append(&2, StorageLaws.Op, prefix, [StorageLaws.Write{index, value}])), storage,
233        Equal.trans(Storage.Storage, base(shape, List.append(&2, StorageLaws.Op, prefix, [StorageLaws.Write{index, value}])),
234          StorageLaws.written(base(shape, prefix), index, value), storage,
235          replay_snoc(prefix, StorageLaws.Write{index, value}, StorageLaws.created(Shape.count(shape), 0.0)),
236          Equal.sym(Storage.Storage, storage, StorageLaws.written(base(shape, prefix), index, value), moved)),
237        P, next)(valid)

Uses (32)

Used by (1)