def source_index

bendtorch-core@0.1.0.0 · src/tensor/permute_build_proof.bend:156

import bendtorch-core@0.1.0.0/src/tensor/permute_build_proof.bend as PermuteBuildProof
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/axis_spec.bend as Axis
import bendtorch-core@0.1.0.0/src/tensor/layout.bend as Layout
import bendtorch-core@0.1.0.0/src/tensor/observation.bend as Values
import bendtorch-core@0.1.0.0/src/tensor/permute_build.bend as Build

156# The build's index map is `permute_source_index`.
157def source_index(+input: Shape.Shape, +axes: List<&2, U32>, +index: Nat) ->
158  {Build.source(Build.recipe(Build.Request{input, axes}), index) == Values.permute_source_index(input, axes, index) : Nat}:
159  +dims = Shape.dimensions(input)
160  +out = Shape.naturals(Axis.order(U32, dims, Shape.naturals(axes)))
161  +x = U32.to_nat(U32.from_nat(index))
162  +picks = Build.picks(Shape.rank_dimensions(dims), Shape.naturals(axes), out, 0n)
163  Equal.sym(Nat, Values.permute_source_index(input, axes, index), Build.found(picks, Build.strides(Shape.naturals(dims)), index),
164    %Equal.sym(Maybe<&2, List<&2, U32>>, Axis.scatter(U32, Shape.rank_dimensions(dims), Shape.naturals(axes), Shape.words(Shape.digits(out, x)), 0n),
165      coordinates_of(picks, x), scatter_digits(Shape.rank_dimensions(dims), Shape.naturals(axes), out, x, 0n)) :
166      {U32.to_nat(Maybe.default(&2, U32, Layout.reference_source_coordinates(dims, _), 0)) ==
167        Build.found(picks, Build.strides(Shape.naturals(dims)), index) : Nat}
168    found_coordinates(dims, picks, index))

Uses (27)

Used by (1)