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
Upsample@-Element:Data -> @geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @scale:U32 -> @fill:Element -> Upsample<Element>
type Survey source · line 282 · raw
Data
Concatenation along an axis.
Survey@valid:Bool -> @total:U32 -> @status:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor.Status -> @workers:U32 -> Survey
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.
Constant@-Element:Data -> @value:Element -> Border<Element>
Edge@-Element:Data -> Border<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.