type TransposeRestoration

bendtorch-core@0.1.0.0 · src/tensor/transform_totality.bend:148

import bendtorch-core@0.1.0.0/src/tensor/transform_totality.bend as TransformTotality
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

148type TransposeRestoration<-input: Shape.Shape, -original: Core.Tensor<input>, -a: U32, -b: U32> is Data:
149  TransposeRestoration{-first: Layout.Plan<input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0)>,
150    -retained: Core.Tensor<input>, -middle: Core.Tensor<Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first)>,
151    -first_exact: {(retained, Done{Core.Packed{Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), middle}}) ==
152      Transforms.transpose_copy(input, original, a, b) : Core.Tensor<input> & Result<&2, &1, Transforms.Error, Core.Dynamic>},
153    -second: Layout.Plan<Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), inverse_axes(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0))>,
154    -middle_retained: Core.Tensor<Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first)>,
155    -restored: Core.Tensor<Layout.output(Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), inverse_axes(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0)), second)>,
156    -second_exact: {(Core.Packed{Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), middle_retained},
157      Done{Core.Packed{Layout.output(Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), inverse_axes(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0)), second), restored}}) ==
158        Transforms.transpose_dynamic(Core.Packed{Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), middle}, a, b) : Core.Dynamic & Result<&2, &1, Transforms.Error, Core.Dynamic>},
159    -dimensions: {Shape.dimensions(Layout.output(Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), inverse_axes(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0)), second)) == Shape.dimensions(input) : List<&2, U32>},
160    -linear: @+index: U32 -> @-inside: {Nat.is_lt(U32.to_nat(index), Shape.logical_numel(Shape.dimensions(input))) == True{} : Bool} ->
161      {Core.observe(Layout.output(Layout.output(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0), first), inverse_axes(input, Layout.transpose_axes(Shape.dimensions(input), a, b, 0)), second), restored, index) == Core.observe(input, original, index) : Maybe<&2, F32>}}

Uses (23)

Used by (3)