~/bend-docscommunity

tensor_layout.bend checks

raw source on the hub · import stelliferous@0.0.2.0/tensor_layout.bend as Tensor_layout

Layout operations consume their arguments. Copy and nearest upsampling preserve row bands. Other layout operations first obtain one dense owner; reshape relabels it, while the remaining operations use checked view copies.

10 imports
import Base
import ./storage_buffer.bend as Storage
import ./tensor_shape.bend as Shapes
import ./tensor_view.bend as Views
import ./tensor_operations.bend as Operations
import ./tensor.bend as Tensors
import ./tensor_band.bend as Bands
import ./traversal_partition.bend as Partition
import ./tensor_band_concat.bend as BandConcat
import ./tensor_band_schedule.bend as BandSchedule

Types

type Upsample source · line 169 · raw

@-Element:Data -> Data

type Survey source · line 282 · raw

Data

Concatenation along an axis.

type Border source · line 478 · raw

@-Element:Data -> Data

Padding. Constant fills the new elements with one value and writes the tensor once, whatever the axes; Edge repeats the nearest element of the tensor one axis after another, so a corner holds the nearest corner element.

Definitions

def extents source · line 15 · raw

@view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> List<&2, U32>

def naturals source · line 20 · raw

@values:List<&2, U32> -> List<&2, Nat>

def permuted source · line 81 · raw

@view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @order:List<&2, Nat> -> Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View>

def sliced source · line 96 · raw

@view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @axis:U32 -> @start:U32 -> @count:U32 -> @step:U32 -> Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View>

def same_count source · line 111 · raw

@left:Maybe<&2, U32> -> @right:Maybe<&2, U32> -> Bool

def prepend_repeated source · line 136 · raw

@axis:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis -> @rest:Maybe<&2, List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis>> -> Maybe<&2, List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis>>

Nearest-neighbour upsampling repeats each element of the last two axes scale times, by copying from a view whose repeated axes have stride zero.

def repeated_axes source · line 141 · raw

@axes:List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis> -> @+scale:U32 -> Maybe<&2, List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis>>

def with_offset source · line 149 · raw

@axes:Maybe<&2, List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis>> -> @offset:U32 -> Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View>

def repeated source · line 154 · raw

@view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @scale:U32 -> Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View>

def scaled_extents source · line 159 · raw

@extents:List<&2, U32> -> @+scale:U32 -> List<&2, U32>

def count_or_zero source · line 221 · raw

@count:Maybe<&2, U32> -> U32

def extent_at source · line 226 · raw

@extents:List<&2, U32> -> @axis:Nat -> U32

def same_extents source · line 243 · raw

@slice:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @part_shape:List<&2, U32> -> Bool

def surveyed source · line 285 · raw

@survey:Survey -> @+first:List<&2, U32> -> @+shape:List<&2, U32> -> @+axis:Nat -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @workers:U32 -> Survey

def with_extent source · line 314 · raw

@extents:List<&2, U32> -> @axis:Nat -> @+extent:U32 -> List<&2, U32>

def interior source · line 517 · raw

@before:List<&2, U32> -> @shape:List<&2, U32> -> @view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @+axis:U32 -> Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View>

The view of the padded extents that holds the tensor: on every axis, the extent of the tensor starting after the elements added in front.

def all_zero source · line 522 · raw

@values:List<&2, U32> -> Bool

def padded_count source · line 547 · raw

@shape:Maybe<&2, List<&2, U32>> -> Maybe<&2, U32>

Templates

template copied source · line 25 · raw

@-Element:Data -> @name:String -> @+source_shape:List<&2, U32> -> @+target_shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template gather_views source · line 34 · raw

@-Element:Data -> @name:String -> @source_view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @target_view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @count:Maybe<&2, U32> -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+source_shape:List<&2, U32> -> @+target_shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template gather_status source · line 45 · raw

@-Element:Data -> @name:String -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @source_view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @+view_shape:List<&2, U32> -> @+target_shape:List<&2, U32> -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+source_shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

Copy the elements selected by source_view, in its row-major order, into a new tensor whose storage is laid out as view_shape and labelled target_shape.

template result_of source · line 55 · raw

@-Element:Data -> @pair:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template swapped source · line 59 · raw

@-Element:Data -> @pair:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>) -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template copy_bands source · line 64 · raw

@-Element:Data -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

The only layout operation that keeps its argument: (original, copy).

template copy source · line 75 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template transpose_view source · line 86 · raw

@-Element:Data -> @+source:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template transpose source · line 91 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @order:List<&2, U32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

The result's axis i is the source axis order[i].

template slice_view source · line 101 · raw

@-Element:Data -> @+source:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template slice source · line 106 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @axis:U32 -> @start:U32 -> @count:U32 -> @step:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

Elements start, start + step, ... (count of them) along one axis.

template relabel_ready source · line 116 · raw

@-Element:Data -> @accepted:Bool -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+target:List<&2, U32> -> @fill:Element -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template relabel source · line 122 · raw

@-Element:Data -> @accepted:Bool -> @current:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+target:List<&2, U32> -> @fill:Element -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template reshape source · line 129 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+shape:List<&2, U32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

Same elements in the same row-major order under new extents.

template upsample_view source · line 165 · raw

@-Element:Data -> @+source:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+scale:U32 -> @fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template upsample_leaf source · line 172 · raw

@-Element:Data -> @context:Upsample<Element> -> @first:U32 -> @rows:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element)

template upsample_supported source · line 182 · raw

@-Element:Data -> @valid:Bool -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+shape:List<&2, U32> -> @+scale:U32 -> @+fill:Element -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template upsample_bands source · line 195 · raw

@-Element:Data -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+shape:List<&2, U32> -> @+scale:U32 -> @+fill:Element -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template upsample_nearest source · line 209 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+scale:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template settle source · line 215 · raw

@-Element:Data -> @valid:Bool -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)> -> Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool)

template settled source · line 229 · raw

@-Element:Data -> @name:String -> @valid:Bool -> @part:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @target:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+target_shape:List<&2, U32> -> @+part_shape:List<&2, U32> -> @target_fill:Element -> @part_fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template placed source · line 237 · raw

@-Element:Data -> @name:String -> @+target_shape:List<&2, U32> -> @+part_shape:List<&2, U32> -> @target_fill:Element -> @part_fill:Element -> @+workers:U32 -> @result:Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool) -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template place source · line 249 · raw

@-Element:Data -> @name:String -> @empty:Bool -> @slice:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @source:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @target:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+target_shape:List<&2, U32> -> @target_fill:Element -> @part:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+part_shape:List<&2, U32> -> @part_fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

The part written through a view of the target storage: one checked copy, which rejects a view whose extents differ from the part. A part with no element writes nothing; its extents are compared here.

template place_status source · line 259 · raw

@-Element:Data -> @name:String -> @target_status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @part_status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @slice:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @target:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+target_shape:List<&2, U32> -> @+target_fill:Element -> @part:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+part_shape:List<&2, U32> -> @+part_fill:Element -> @+workers:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

template set_slice source · line 272 · raw

@-Element:Data -> @target:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+axis:U32 -> @start:U32 -> @part:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

target[..., start : start + part extent, ...] = part along axis: the part is written through the slice of the target that it replaces.

template prepend_survey source · line 294 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @result:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Survey) -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Survey)

template survey source · line 299 · raw

@-Element:Data -> @parts:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element> -> @+first:List<&2, U32> -> @+axis:Nat -> @summary:Survey -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Survey)

Summarizes the extents of every part and returns the parts in order.

template append_at source · line 317 · raw

@-Element:Data -> @+axis:U32 -> @+start:U32 -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @part:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, U32)

template append_part source · line 322 · raw

@-Element:Data -> @+axis:U32 -> @state:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, U32) -> @part:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, U32)

template appended_all source · line 326 · raw

@-Element:Data -> @state:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, U32) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template append_parts source · line 330 · raw

@-Element:Data -> @parts:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element> -> @+axis:U32 -> @state:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, U32) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template join_selected source · line 335 · raw

@-Element:Data -> @geometry:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry> -> @count:Maybe<&2, U32> -> @shape:List<&2, U32> -> @axis:U32 -> @fill:Element -> @workers:U32 -> @layout:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan> -> @parts:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template join_discovered source · line 341 · raw

@-Element:Data -> @+shape:List<&2, U32> -> @+axis:U32 -> @fill:Element -> @workers:U32 -> @discovered:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan>) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template join_compatible_selected source · line 348 · raw

@-Element:Data -> @compatible:Bool -> @+shape:List<&2, U32> -> @+axis:U32 -> @+fill:Element -> @+workers:U32 -> @discovered:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan>) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

The final branch is one Bool. Plan comparison stays in the metadata pass, outside every element-copy loop. Dense append gathers each band source once.

template join_compatible source · line 356 · raw

@-Element:Data -> @+shape:List<&2, U32> -> @+axis:U32 -> @+fill:Element -> @+workers:U32 -> @discovered:Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan>), Bool) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template join_status source · line 361 · raw

@-Element:Data -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @valid:Bool -> @+first:List<&2, U32> -> @+shape:List<&2, U32> -> @+axis:U32 -> @+fill:Element -> @+workers:U32 -> @parts:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template joined source · line 368 · raw

@-Element:Data -> @+first:List<&2, U32> -> @+axis:U32 -> @+fill:Element -> @surveyed:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Survey) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template lead source · line 373 · raw

@-Element:Data -> @parts:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Pair(List<&2, U32>, Element))

template concat_first source · line 386 · raw

@-Element:Data -> @+axis:U32 -> @parts:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template concat_led source · line 390 · raw

@-Element:Data -> @+axis:U32 -> @led:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element>, Pair(List<&2, U32>, Element)) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template concat source · line 396 · raw

@-Element:Data -> @parts:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Parts<Element> -> @+axis:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

Parts agree on every extent except axis; the result stacks them in order.

template broadcast_status source · line 400 · raw

@-Element:Data -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+target:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

Broadcasting to given extents: one checked copy from a stretched view.

template broadcast_to source · line 407 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+target:List<&2, U32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

The tensor repeated to the extents target under NumPy broadcasting.

template fold_slice source · line 415 · raw

@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @valid:Bool -> @slice:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @target:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool)

Reduction along one axis. The output starts at the initial value and takes the slices of the axis in increasing index, so each output element is operation(... operation(operation(initial, x[0]), x[1]) ..., x[extent - 1]).

template fold_step source · line 424 · raw

@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @index:U32 -> @axis:U32 -> @shape:List<&2, U32> -> @unit:List<&2, U32> -> @state:Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool) -> Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool)

The views are built from the extents at every step: a loop that carried one View value through its iterations would make the compiler share every View constructor of the program.

template fold_slices source · line 430 · raw

@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @remaining:Nat -> @+index:U32 -> @+axis:U32 -> @+shape:List<&2, U32> -> @+unit:List<&2, U32> -> @state:Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool) -> Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool)

template folded_valid source · line 437 · raw

@-Element:Data -> @name:String -> @valid:Bool -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @shape:List<&2, U32> -> @result_shape:List<&2, U32> -> @fill:Element -> @workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template folded source · line 443 · raw

@-Element:Data -> @name:String -> @shape:List<&2, U32> -> @result_shape:List<&2, U32> -> @fill:Element -> @workers:U32 -> @result:Pair(Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>), Bool) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template reduce_axis_count source · line 451 · raw

@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @count:Maybe<&2, U32> -> @+axis:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @unit:List<&2, U32> -> @+initial:Element -> @+fill:Element -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

unit is the shape with extent 1 at the axis: the layout of the output and the extents of every slice.

template reduce_axis_status source · line 459 · raw

@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @valid:Bool -> @+axis:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+initial:Element -> @+fill:Element -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template reduce_axis source · line 469 · raw

@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @+initial:Element -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+axis:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

The result has the extents of the tensor without axis.

template border_name source · line 482 · raw

@-Element:Data -> @border:Border<Element> -> String

template blank source · line 487 · raw

@-Element:Data -> @count:Maybe<&2, U32> -> @+shape:List<&2, U32> -> @+value:Element -> @+fill:Element -> @+workers:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template edge_strip source · line 493 · raw

@-Element:Data -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+axis:U32 -> @from_end:Bool -> @+count:U32 -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>)

The elements at one end of axis, repeated count times: (strip, tensor).

template pad_edge_axis source · line 501 · raw

@-Element:Data -> @unchanged:Bool -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+axis:U32 -> @+before:U32 -> @+after:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template pad_edge_axes source · line 509 · raw

@-Element:Data -> @before:List<&2, U32> -> @after:List<&2, U32> -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+axis:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template pad_constant source · line 529 · raw

@-Element:Data -> @unchanged:Bool -> @+value:Element -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+before:List<&2, U32> -> @+padded:List<&2, U32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

Constant padding: storage of the padded extents filled with the value, then the tensor written through the interior view. One copy whatever the axes.

template pad_border source · line 542 · raw

@-Element:Data -> @border:Border<Element> -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+before:List<&2, U32> -> @+after:List<&2, U32> -> @padded:Maybe<&2, List<&2, U32>> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template pad_valid source · line 552 · raw

@-Element:Data -> @+border:Border<Element> -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @valid:Bool -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @shape:List<&2, U32> -> @before:List<&2, U32> -> @after:List<&2, U32> -> @padded:Maybe<&2, List<&2, U32>> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

template pad source · line 561 · raw

@-Element:Data -> @+border:Border<Element> -> @tensor:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element> -> @+before:List<&2, U32> -> @+after:List<&2, U32> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Tensor<Element>

before[i] elements are added in front of axis i and after[i] behind it. Both lists have one entry per axis and the padded extents must be allocatable.