tensor.bend checks
raw source on the hub · import stelliferous@0.0.2.0/tensor.bend as Tensor
Public tensors own dense row-major storage or image-row bands, their extents, the value used to initialize allocations, a sticky status, and the number of workers their operations may use. A failed operation leaves values untouched and records why; later operations skip a failed tensor, and check is the only way to observe or clear the failure.
10 imports
import Base import ./storage_buffer.bend as Storage import ./storage_allocation.bend as Allocation import ./tensor_shape.bend as Shapes import ./tensor_view.bend as Views import ./tensor_operations.bend as Operations import ./machine_limits.bend as Machine import ./default_machine_limits.bend as Default import ./tensor_band.bend as Bands import ./tensor_band_schedule.bend as BandSchedule
Types
type Reason source · line 17 · raw
Data
ShapeMismatch@left:List<&2, U32> -> @right:List<&2, U32> -> Reason
InvalidShape@shape:List<&2, U32> -> Reason
InvalidArgument@shape:List<&2, U32> -> Reason
FileFault@path:String -> @detail:String -> Reason
MissingName@name:String -> Reason
type Problem source · line 24 · raw
Data
Problem@operation:String -> @reason:Reason -> Problem
type Status source · line 27 · raw
Data
UsableStatus
Failed@problem:Problem -> Status
type Tensor source · line 35 · raw
@-Element:Data -> Type
Like a PyTorch tensor's device, workers is execution context: the size of the runtime's worker pool, read once with IO.thread_count and set with with_workers. Pure constructors cannot read it and use one worker. Results keep the largest worker count of their operands. It never changes a value.
Tensor@-Element:Data -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @shape:List<&2, U32> -> @fill:Element -> @status:Status -> @workers:U32 -> Tensor<Element>
Banded@-Element:Data -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @shape:List<&2, U32> -> @fill:Element -> @status:Status -> @workers:U32 -> Tensor<Element>
type Parts source · line 42 · raw
@-Element:Data -> Type
A nonempty sequence of tensors. Base List is not used for tensors: the compiler shares every constructor of a list type that is duplicated anywhere, and that sharing would reach the certificate inside each tensor's storage.
Single@-Element:Data -> @tensor:Tensor<Element> -> Parts<Element>
Cons@-Element:Data -> @tensor:Tensor<Element> -> @rest:Parts<Element> -> Parts<Element>
Definitions
def within source · line 47 · raw
@fits:Bool -> @count:U32 -> Maybe<&2, U32>
Element count of a shape that the default machine can allocate.
def allocatable source · line 52 · raw
@count:Maybe<&2, U32> -> Maybe<&2, U32>
def count_of source · line 57 · raw
@+shape:List<&2, U32> -> Maybe<&2, U32>
def known_count source · line 60 · raw
@count:Maybe<&2, U32> -> U32
def count_or_zero source · line 66 · raw
@+shape:List<&2, U32> -> U32
The element count as a number; a shape too large to allocate counts 0.
def view_of source · line 69 · raw
@+shape:List<&2, U32> -> Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View>
def significant_bits source · line 75 · raw
@remaining:Nat -> @+value:U32 -> @+bits:Nat -> @zero:Bool -> Nat
Bits of value, counted by tail recursion. Storage.bit_length is not tail recursive, and a non-tail recursive callee turns the calling chain into worklist dispatch: measured allocation of 2^20 floats took twice as long.
def depth_for source · line 79 · raw
@+count:U32 -> Nat
The smallest depth whose capacity holds count elements (at least one).
def mismatch source · line 110 · raw
@same:Bool -> @left:List<&2, U32> -> @right:List<&2, U32> -> Reason
def same_or_invalid source · line 115 · raw
@+left:List<&2, U32> -> @+right:List<&2, U32> -> Reason
def matches_count source · line 149 · raw
@count:Maybe<&2, U32> -> @length:Nat -> Bool
def first_failure source · line 246 · raw
@left:Status -> @right:Status -> Status
def stretched source · line 265 · raw
@view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @+target:List<&2, U32> -> Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View>
A view of an operand read with the extents target; see Views.stretch.
def indexed_width_positive source · line 447 · raw
@geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> Bool
def broadcast_axes source · line 511 · raw
@axes:List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis> -> List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis>
Scalar operands are read through a stride-zero view of one element.
def broadcast source · line 516 · raw
@view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View
def show_extents source · line 554 · raw
@extents:List<&2, U32> -> String
def show_shape source · line 560 · raw
@extents:List<&2, U32> -> String
def explain source · line 563 · raw
@reason:Reason -> String
def describe source · line 576 · raw
@problem:Problem -> String
Templates
template buffer source · line 82 · raw
@-Element:Data -> @+fill:Element -> @+count:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template with_dense source · line 85 · raw
@-Element:Data -> @-Result:Type -> @tensor:Tensor<Element> -> @body:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:List<&2, U32> -> @_:Element -> @_:Status -> @_:U32 -> Result) -> Result
template with_metadata source · line 93 · raw
@-Element:Data -> @-Result:Type -> @tensor:Tensor<Element> -> @body:(@_:Tensor<Element> -> @_:List<&2, U32> -> @_:Element -> @_:Status -> @_:U32 -> Result) -> Result
Metadata inspection retains the original layout and affine storage.
template failed source · line 99 · raw
@-Element:Data -> @operation:String -> @reason:Reason -> @shape:List<&2, U32> -> @+fill:Element -> @workers:U32 -> Tensor<Element>
template rejected source · line 103 · raw
@-Element:Data -> @name:String -> @tensor:Tensor<Element> -> Tensor<Element>
A usable tensor fails with an invalid argument of the operation; a failed one keeps its problem.
template full_count source · line 120 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @count:Maybe<&2, U32> -> @+value:Element -> Tensor<Element>
template full source · line 125 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @+value:Element -> Tensor<Element>
template listed_count source · line 128 · raw
@-Element:Data -> @matches:Bool -> @+shape:List<&2, U32> -> @+count:U32 -> @values:List<&2, Element> -> @+fill:Element -> Tensor<Element>
template listed source · line 134 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @count:Maybe<&2, U32> -> @+values:List<&2, Element> -> @+fill:Element -> Tensor<Element>
template from_list source · line 141 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @+values:List<&2, Element> -> @+fill:Element -> Tensor<Element>
fill initializes storage this tensor or its results allocate; it is never observable in a successful result.
template stored source · line 144 · raw
@-Element:Data -> @matches:Bool -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @fill:Element -> Tensor<Element>
template storage_of source · line 154 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @count:Maybe<&2, U32> -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @fill:Element -> Tensor<Element>
template from_storage source · line 159 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+fill:Element -> Tensor<Element>
Storage handed over by foreign I/O keeps its documented trust boundary.
template with_workers source · line 165 · raw
@-Element:Data -> @tensor:Tensor<Element> -> @+count:U32 -> Tensor<Element>
Sets the worker count, at least one; values and status are unchanged.
template workers source · line 170 · raw
@-Element:Data -> @tensor:Tensor<Element> -> Pair(Tensor<Element>, U32)
template shape source · line 177 · raw
@-Element:Data -> @tensor:Tensor<Element> -> Pair(Tensor<Element>, List<&2, U32>)
template checked source · line 182 · raw
@-Element:Data -> @status:Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @shape:List<&2, U32> -> @fill:Element -> @workers:U32 -> Result<&1, &1, Pair(Tensor<Element>, Problem), Tensor<Element>>
template checked_bands source · line 188 · raw
@-Element:Data -> @status:Status -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @shape:List<&2, U32> -> @fill:Element -> @workers:U32 -> Result<&1, &1, Pair(Tensor<Element>, Problem), Tensor<Element>>
template check source · line 194 · raw
@-Element:Data -> @tensor:Tensor<Element> -> Result<&1, &1, Pair(Tensor<Element>, Problem), Tensor<Element>>
template released source · line 199 · raw
@-Element:Data -> @status:Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Result<&2, &1, Problem, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>>
template into_storage source · line 204 · raw
@-Element:Data -> @tensor:Tensor<Element> -> Result<&2, &1, Problem, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>>
template listed_values source · line 207 · raw
@-Element:Data -> @status:Status -> @storage:Array<Element> -> @length:Nat -> Result<&2, &2, Problem, List<&2, Element>>
template listed_buffer source · line 212 · raw
@-Element:Data -> @status:Status -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Result<&2, &2, Problem, List<&2, Element>>
template to_list source · line 216 · raw
@-Element:Data -> @tensor:Tensor<Element> -> Result<&2, &2, Problem, List<&2, Element>>
template only_value source · line 220 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @values:List<&2, Element> -> Result<&2, &2, Problem, Element>
template single source · line 225 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @values:Result<&2, &2, Problem, List<&2, Element>> -> Result<&2, &2, Problem, Element>
template item source · line 230 · raw
@-Element:Data -> @tensor:Tensor<Element> -> Result<&2, &2, Problem, Element>
template value_or source · line 236 · raw
@-Value:Data -> @result:Result<&2, &2, Problem, Value> -> @fallback:Value -> Value
The value read, or fallback when the tensor carries a failure.
template combined source · line 251 · raw
@-Element:Data -> @operation:String -> @+left_shape:List<&2, U32> -> @+right_shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)> -> Tensor<Element>
template combine_views_with source · line 257 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @left_view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @right_view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+left_shape:List<&2, U32> -> @+fill:Element -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+right_shape:List<&2, U32> -> @+workers:U32 -> Tensor<Element>
template combined_fresh_with source · line 274 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @target:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @copied:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)> -> Tensor<Element>
The left operand was copied through its stretched view into new storage of the common extents; the right operand is then combined into that storage. The view of that storage is built once for each of the two steps: using one view value twice would make the compiler share every View constructor.
template combine_fresh_views_with source · line 282 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @left_view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @right_view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @target:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @output:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @count:Maybe<&2, U32> -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Tensor<Element>
template combine_stretched_with source · line 297 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @in_place:Bool -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+left_shape:List<&2, U32> -> @+fill:Element -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+right_shape:List<&2, U32> -> @+shape:List<&2, U32> -> @+workers:U32 -> Tensor<Element>
Operands of different extents with the common extents shape. When shape is the left extents, only the right operand is stretched and the result reuses the left storage. Otherwise the left operand is first copied through its stretched view into new storage, which the right operand is combined into; both steps run the innermost axis as one loop, which the three-buffer combination with two cursors does not.
template combine_broadcast_with source · line 306 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @shape:Maybe<&2, List<&2, U32>> -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+left_shape:List<&2, U32> -> @+fill:Element -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+right_shape:List<&2, U32> -> @+workers:U32 -> Tensor<Element>
template combine_shapes_with source · line 315 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @same:Bool -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+left_shape:List<&2, U32> -> @+fill:Element -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+right_shape:List<&2, U32> -> @+workers:U32 -> Tensor<Element>
Equal extents take the direct path. Different extents follow NumPy broadcasting (Shapes.broadcast) and fail only when they are incompatible.
template combine_status_with source · line 321 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @status:Status -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+left_shape:List<&2, U32> -> @+fill:Element -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+right_shape:List<&2, U32> -> @+workers:U32 -> Tensor<Element>
template combine_dense_with source · line 329 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @left:Tensor<Element> -> @right:Tensor<Element> -> Tensor<Element>
Band layout is kept only for equal extents: operands that need broadcasting are gathered and combined on dense storage.
template with_status source · line 334 · raw
@-Element:Data -> @status:Status -> @tensor:Tensor<Element> -> Tensor<Element>
template aligned source · line 339 · raw
@-Element:Data -> @geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan -> @tensor:Tensor<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element)
template combine_bands_checked_with source · line 344 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @operations:F32 -> @status:Status -> @same:Bool -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+layout:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan -> @+left_shape:List<&2, U32> -> @+right_shape:List<&2, U32> -> @fill:Element -> @+workers:U32 -> @left:Tensor<Element> -> @right:Tensor<Element> -> Tensor<Element>
template combine_bands_plan_with source · line 353 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @operations:F32 -> @status:Status -> @same:Bool -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+left_shape:List<&2, U32> -> @+right_shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> @right:Tensor<Element> -> @planned:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan) -> Tensor<Element>
template combine_right_plan_with source · line 359 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @operations:F32 -> @status:Status -> @same:Bool -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+left_shape:List<&2, U32> -> @+right_shape:List<&2, U32> -> @left_fill:Element -> @+right_fill:Element -> @+workers:U32 -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @planned:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan) -> Tensor<Element>
template combine_pair_plans_with source · line 367 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @operations:F32 -> @status:Status -> @same:Bool -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @right_geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+left_shape:List<&2, U32> -> @+right_shape:List<&2, U32> -> @+left_fill:Element -> @right_fill:Element -> @+workers:U32 -> @left:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan) -> @right:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Plan) -> Tensor<Element>
template combine_with source · line 378 · raw
@-Element:Data -> @-kernel:(@+count:Nat -> @+right_view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> @+offset:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)) -> @name:String -> @operations:F32 -> @left:Tensor<Element> -> @right:Tensor<Element> -> Tensor<Element>
operation(left element, right element), retaining band layout when either operand is banded. Alignment is done once, before any parallel leaf work. operations counts the operation's scalar work for the band schedule.
template combine source · line 393 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @operations:F32 -> @left:Tensor<Element> -> @right:Tensor<Element> -> Tensor<Element>
The elementwise form: the kernel applies operation to each pair in order.
template applied source · line 396 · raw
@-Element:Data -> @name:String -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>> -> Tensor<Element>
template apply_view_context source · line 401 · raw
@-Element:Data -> @-Context:Data -> @-mapper:(@+count:Nat -> @+position:U32 -> @+context:Context -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @context:Context -> @name:String -> @view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Tensor<Element>
template apply_status_context source · line 407 · raw
@-Element:Data -> @-Context:Data -> @-mapper:(@+count:Nat -> @+position:U32 -> @+context:Context -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @context:Context -> @name:String -> @status:Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Tensor<Element>
template apply_bands_context source · line 413 · raw
@-Element:Data -> @-Context:Data -> @-mapper:(@+count:Nat -> @+position:U32 -> @+context:Context -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @context:Context -> @operations:F32 -> @status:Status -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @shape:List<&2, U32> -> @fill:Element -> @+workers:U32 -> Tensor<Element>
template apply_context source · line 419 · raw
@-Element:Data -> @-Context:Data -> @-mapper:(@+count:Nat -> @+position:U32 -> @+context:Context -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @context:Context -> @name:String -> @operations:F32 -> @tensor:Tensor<Element> -> Tensor<Element>
template apply source · line 424 · raw
@-Element:Data -> @-mapper:(@+count:Nat -> @+position:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @name:String -> @operations:F32 -> @tensor:Tensor<Element> -> Tensor<Element>
template indexed source · line 429 · raw
@-Element:Data -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)> -> Tensor<Element>
The function also receives each element's row-major index.
template apply_indexed_count source · line 434 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @count:Maybe<&2, U32> -> @view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Tensor<Element>
template apply_indexed_status source · line 441 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @status:Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Tensor<Element>
template apply_indexed_positive source · line 453 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @positive:Bool -> @operations:F32 -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Tensor<Element>
Empty widths use the existing dense indexed operation after one gather. The choice is made once, before the band scheduler or element loop.
template apply_indexed_bands source · line 462 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @operations:F32 -> @status:Status -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> Tensor<Element>
template apply_indexed source · line 468 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @operations:F32 -> @tensor:Tensor<Element> -> Tensor<Element>
template reduced source · line 474 · raw
@-Element:Data -> @-Accumulator:Data -> @name:String -> @+shape:List<&2, U32> -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, Accumulator)> -> Result<&2, &2, Problem, Accumulator>
Reductions visit elements in row-major order.
template reduce_view source · line 480 · raw
@-Element:Data -> @-Accumulator:Data -> @-operation:(@_:Accumulator -> @_:Element -> Accumulator) -> @name:String -> @view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @initial:Accumulator -> Result<&2, &2, Problem, Accumulator>
template reduce_status source · line 486 · raw
@-Element:Data -> @-Accumulator:Data -> @-operation:(@_:Accumulator -> @_:Element -> Accumulator) -> @name:String -> @status:Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @initial:Accumulator -> Result<&2, &2, Problem, Accumulator>
template reduce source · line 492 · raw
@-Element:Data -> @-Accumulator:Data -> @-operation:(@_:Accumulator -> @_:Element -> Accumulator) -> @name:String -> @tensor:Tensor<Element> -> @initial:Accumulator -> Result<&2, &2, Problem, Accumulator>
template scalar_result source · line 498 · raw
@-Element:Data -> @+fill:Element -> @+count:U32 -> @result:Result<&2, &2, Problem, Element> -> Tensor<Element>
A reduction as a rank-0 tensor, so a failure propagates like any result.
template reduce_counted source · line 503 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @pair:Pair(Tensor<Element>, U32) -> @+initial:Element -> Tensor<Element>
template reduce_all source · line 507 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @tensor:Tensor<Element> -> @+initial:Element -> Tensor<Element>
template scalar_applied source · line 520 · raw
@-Element:Data -> @name:String -> @+shape:List<&2, U32> -> @+fill:Element -> @+workers:U32 -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)> -> Tensor<Element>
template scalar_view source · line 526 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @view:Maybe<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View> -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> @+value:Element -> @+workers:U32 -> Tensor<Element>
template scalar_status source · line 533 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @status:Status -> @storage:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+shape:List<&2, U32> -> @+fill:Element -> @+value:Element -> @+workers:U32 -> Tensor<Element>
template scalar_bands source · line 540 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @operations:F32 -> @status:Status -> @bands:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Bands(Element) -> @+geometry:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_band.Geometry -> @shape:List<&2, U32> -> @fill:Element -> @+workers:U32 -> @value:Element -> Tensor<Element>
Updates every element x to operation(x, value).
template combine_scalar source · line 546 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @name:String -> @operations:F32 -> @tensor:Tensor<Element> -> @+value:Element -> Tensor<Element>
template expected source · line 580 · raw
@-Element:Data -> @result:Result<&1, &1, Pair(Tensor<Element>, Problem), Tensor<Element>> -> IO(Tensor<Element>)
template expect source · line 586 · raw
@-Element:Data -> @tensor:Tensor<Element> -> IO(Tensor<Element>)
Stops the program with the recorded problem, for scripts and examples.
template expected_storage source · line 589 · raw
@-Element:Data -> @result:Result<&2, &1, Problem, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>> -> IO(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
template expect_storage source · line 594 · raw
@-Element:Data -> @tensor:Tensor<Element> -> IO(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
template then source · line 599 · raw
@-First:Type -> @-Second:Type -> @-Result:Type -> @pair:Pair(First, Second) -> @body:(@_:First -> @_:Second -> Result) -> Result
Read-only operations return their tensor in a pair; Bend destructures only parameters, so a continuation receives both halves.