tensor_band.bend checks
raw source on the hub · import stelliferous@0.0.2.0/tensor_band.bend as Tensor_band
Internal H-axis ownership. Offsets and spans are logical image rows, not element positions: offset / height identifies the image. No leaf crosses an image boundary. Its buffer stores [channels][span][width]. The common partition tree owns all buffers; shape and element type remain parameters.
13 imports
import Base import ./storage_buffer.bend as Storage import ./storage_copy.bend as Copy import ./storage_clone.bend as Clone import ./traversal_partition.bend as Partition import ./traversal_array.bend as Traversal import ./proofs/traversal_certificate.bend as TraversalCertificate import ./tensor_operations.bend as Operations import ./storage_allocation.bend as Allocation import ./tensor_view.bend as Views import ./tensor_indexed.bend as IndexedAccess import ./proofs/tensor_indexed_certificate.bend as IndexedCertificate import ./proofs/storage_certificate.bend as Certificate
Types
type Geometry source · line 19 · raw
Data
Geometry@batch:U32 -> @channels:U32 -> @height:U32 -> @width:U32 -> Geometry
type Plan source · line 84 · raw
Data
A pure ownership plan contains no Buffer. It is a concrete Data type: duplicating Tree<&2,...> through a computed type makes all constructors shared in the official compiler, including the affine Buffer tree.
Rows@first:U32 -> @count:U32 -> Plan
Split@left:Plan -> @right:Plan -> Plan
type Paired source · line 123 · raw
@-Left:Type -> @-Right:Type -> Type
Two trees of one shape, joined leaf by leaf. A left leaf without a partner keeps its own row range, so the left tree can be returned unchanged.
Both@-Left:Type -> @-Right:Type -> @left:Left -> @right:Right -> Paired<Left, Right>
Only@-Left:Type -> @-Right:Type -> @left:Left -> @first:U32 -> @rows:U32 -> Paired<Left, Right>
type Indexed source · line 208 · raw
Data
Indexed@geometry:Geometry -> @first:U32 -> @rows:U32 -> Indexed
type Filled source · line 273 · raw
@-Element:Data -> Data
Filled@-Element:Data -> @geometry:Geometry -> @fill:Element -> Filled<Element>
type Inspection source · line 431 · raw
Data
Inspection@valid:Bool -> @first:U32 -> @end:U32 -> @leaves:U32 -> Inspection
Definitions
def elements source · line 25 · raw
@geometry:Geometry -> U32
def local_count source · line 29 · raw
@geometry:Geometry -> @rows:U32 -> U32
def global_index source · line 35 · raw
@geometry:Geometry -> @+first:U32 -> @+rows:U32 -> @+index:U32 -> U32
Channel-major local indices map to the same global NCHW index for every partition. A leaf's first row is global across images; rows are image-local.
def same_plan source · line 99 · raw
@left:Plan -> @right:Plan -> Bool
def first source · line 107 · raw
@layout:Plan -> U32
def last source · line 112 · raw
@layout:Plan -> U32
def same_image source · line 117 · raw
@geometry:Geometry -> @+layout:Plan -> Bool
def index_of source · line 242 · raw
@context:Indexed -> @index:U32 -> U32
def channel_base source · line 248 · raw
@context:Indexed -> @channel:U32 -> U32
Channel c of a leaf holds the positions from c * rows * width; their global indices are consecutive from this base.
def channels_of source · line 252 · raw
@context:Indexed -> U32
def plane_of source · line 256 · raw
@context:Indexed -> U32
def row_plan source · line 375 · raw
@depth:Nat -> @split:Bool -> @+first:U32 -> @+rows:U32 -> Plan
def image_plan source · line 384 · raw
@remaining:Nat -> @+image:U32 -> @+depth:Nat -> @+height:U32 -> Plan
def join_inspection source · line 434 · raw
@left:Inspection -> @right:Inspection -> Inspection
def leaf_inspection source · line 444 · raw
@geometry:Geometry -> @+length:Nat -> @depth:Nat -> @+first:U32 -> @+rows:U32 -> Inspection
Templates
template Bands source · line 22 · raw
@-Element:Data -> Type
template planes source · line 40 · raw
@-Element:Data -> @remaining:Nat -> @+channel:U32 -> @+count:U32 -> @+source_stride:U32 -> @+destination_stride:U32 -> @+source_start:U32 -> @+destination_start:U32 -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
template destination source · line 51 · raw
@-Element:Data -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template gather_leaf source · line 55 · raw
@-Element:Data -> @geometry:Geometry -> @+first:U32 -> @+rows:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template gather source · line 62 · raw
@-Element:Data -> @+geometry:Geometry -> @bands:Bands(Element) -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
One allocation is provided by the caller. Each value is copied once, using one contiguous range per channel per band. No intermediate dense images.
template copied_leaf source · line 67 · raw
@-Element:Data -> @+first:U32 -> @+rows:U32 -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> Pair(Bands(Element), Bands(Element))
template copied_fork source · line 71 · raw
@-Element:Data -> @left:Pair(Bands(Element), Bands(Element)) -> @right:Pair(Bands(Element), Bands(Element)) -> Pair(Bands(Element), Bands(Element))
template copy source · line 76 · raw
@-Element:Data -> @bands:Bands(Element) -> Pair(Bands(Element), Bands(Element))
template plan_join source · line 88 · raw
@-Element:Data -> @left:Pair(Bands(Element), Plan) -> @right:Pair(Bands(Element), Plan) -> Pair(Bands(Element), Plan)
template plan source · line 93 · raw
@-Element:Data -> @bands:Bands(Element) -> Pair(Bands(Element), Plan)
template only source · line 127 · raw
@-Left:Type -> @-Right:Type -> @tree:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Left, Unit> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Paired<Left, Right>, Unit>
template zip source · line 132 · raw
@-Left:Type -> @-Right:Type -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Left, Unit> -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Right, Unit> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Paired<Left, Right>, Unit>
template left_leaf source · line 140 · raw
@-Left:Type -> @-Right:Type -> @pair:Paired<Left, Right> -> @first:U32 -> @rows:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Left, Unit>
template left_of source · line 145 · raw
@-Left:Type -> @-Right:Type -> @tree:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Paired<Left, Right>, Unit> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Left, Unit>
template paired source · line 150 · raw
@-Left:Type -> @-Right:Type -> @-Resource:Type -> @-Context:Data -> @-leaf:(@_:Context -> @_:U32 -> @_:U32 -> @_:Left -> @_:Right -> @_:Resource -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Left, Unit>) -> @context:Context -> @first:U32 -> @rows:U32 -> @pair:Paired<Left, Right> -> @resource:Resource -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Left, Unit>
template same source · line 160 · raw
@-Block:Type -> @tree:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Block, Unit> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Block, Unit>
template leaf_task source · line 166 · raw
@-Block:Type -> @-Output:Type -> @-Resource:Type -> @-Context:Data -> @-leaf:(@_:Context -> @_:U32 -> @_:U32 -> @_:Block -> @_:Resource -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Output, Unit>) -> @-keep:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Block, Unit> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Output, Unit>) -> @first:U32 -> @rows:U32 -> @context:Context -> @tree:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Block, Unit> -> @resource:Resource -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Output, Unit>
One leaf below a parallel split. It neither forks nor calls a closure, so the runtime keeps it as its own task for the work turn; a leaf inlined into the forking recursion would run in the grow turn on one worker per row.
template each source · line 178 · raw
@-Block:Type -> @-Output:Type -> @-Resource:Type -> @-Context:Data -> @-share:(@_:Resource -> Pair(Resource, Resource)) -> @-leaf:(@_:Context -> @_:U32 -> @_:U32 -> @_:Block -> @_:Resource -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Output, Unit>) -> @-keep:(@_:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Block, Unit> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Output, Unit>) -> @layout:Plan -> @mode:Bool -> @+enabled:Bool -> @+geometry:Geometry -> @+context:Context -> @tree:0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Block, Unit> -> @resource:Resource -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_partition.Tree<&1, Output, Unit>
The one band recursion. The plan gives every leaf its rows and decides the structure; a tree of another shape is kept. A split inside one image may run its halves in parallel, and a split across images runs them in order. share gives each half its own owner of a read-only resource.
template map_leaf source · line 211 · raw
@-Element:Data -> @-Context:Data -> @-operation:(@_:Context -> @_:Element -> Element) -> @+context:Context -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template map_whole_context source · line 217 · raw
@-Element:Data -> @-Context:Data -> @-mapper:(@+count:Nat -> @+position:U32 -> @+context:Context -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @+context:Context -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
A mapper over the whole of one band.
template map_band source · line 221 · raw
@-Element:Data -> @-Context:Data -> @-leaf:(@+context:Context -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @context:Context -> @first:U32 -> @rows:U32 -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @resource:Unit -> Bands(Element)
template map_with source · line 227 · raw
@-Element:Data -> @-Context:Data -> @-leaf:(@+context:Context -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> @+layout:Plan -> @+parallel:Bool -> @+geometry:Geometry -> @context:Context -> @bands:Bands(Element) -> Bands(Element)
Parallelism is a planner decision. Sequential execution keeps the bands and their owners: a small operation need not pay either a fork or a gather.
template scalar_value source · line 232 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @value:Element -> @element:Element -> Element
template scalar source · line 235 · raw
@-Element:Data -> @-operation:(@_:Element -> @_:Element -> Element) -> @layout:Plan -> @parallel:Bool -> @geometry:Geometry -> @value:Element -> @bands:Bands(Element) -> Bands(Element)
template result source · line 238 · raw
@-Element:Data -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, Bands(Element)) -> Bands(Element)
template indexed_buffers source · line 260 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @+count:U32 -> @+context:Indexed -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template indexed_leaf source · line 267 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @+geometry:Geometry -> @+first:U32 -> @+rows:U32 -> @fill:Element -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template indexed_band source · line 276 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @context:Filled<Element> -> @first:U32 -> @rows:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @resource:Unit -> Bands(Element)
template apply_indexed source · line 283 · raw
@-Element:Data -> @-operation:(@_:U32 -> @_:Element -> Element) -> @+layout:Plan -> @+parallel:Bool -> @+geometry:Geometry -> @fill:Element -> @bands:Bands(Element) -> Bands(Element)
template range_result source · line 288 · raw
@-Element:Data -> @+first:U32 -> @+rows:U32 -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> Pair(Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
template range_planes source · line 293 · raw
@-Element:Data -> @empty:Bool -> @+channels:U32 -> @+count:U32 -> @+source_stride:U32 -> @+destination_stride:U32 -> @+source_start:U32 -> @+destination_start:U32 -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
An empty intersection copies nothing, so it skips the per-channel loop.
template range_leaf source · line 302 · raw
@-Element:Data -> @geometry:Geometry -> @+target_first:U32 -> @+target_rows:U32 -> @target_offset:U32 -> @+first:U32 -> @+rows:U32 -> @source:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
Repartition and halo extraction share this owned range reader. Empty intersections copy zero elements; each source owner is returned unchanged.
template range_into source · line 310 · raw
@-Element:Data -> @+geometry:Geometry -> @+first:U32 -> @+rows:U32 -> @+target_offset:U32 -> @bands:Bands(Element) -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
template range source · line 319 · raw
@-Element:Data -> @geometry:Geometry -> @first:U32 -> @rows:U32 -> @bands:Bands(Element) -> @output:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(Bands(Element), 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)
template allocate source · line 322 · raw
@-Element:Data -> @fill:Element -> @+count:U32 -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template repartition source · line 325 · raw
@-Element:Data -> @+geometry:Geometry -> @+fill:Element -> @layout:Plan -> @bands:Bands(Element) -> Pair(Bands(Element), Bands(Element))
template repartitioned source · line 337 · raw
@-Element:Data -> @owners:Pair(Bands(Element), Bands(Element)) -> Bands(Element)
template align_when source · line 341 · raw
@-Element:Data -> @same:Bool -> @geometry:Geometry -> @fill:Element -> @layout:Plan -> @bands:Bands(Element) -> Bands(Element)
template align_planned source · line 346 · raw
@-Element:Data -> @geometry:Geometry -> @fill:Element -> @+layout:Plan -> @planned:Pair(Bands(Element), Plan) -> Bands(Element)
template align source · line 350 · raw
@-Element:Data -> @geometry:Geometry -> @fill:Element -> @layout:Plan -> @bands:Bands(Element) -> Bands(Element)
template dense_result source · line 353 · raw
@-Element:Data -> @+first:U32 -> @+rows:U32 -> @owners:Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>) -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, Bands(Element))
template dense_leaf source · line 357 · raw
@-Element:Data -> @geometry:Geometry -> @fill:Element -> @+first:U32 -> @+rows:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, Bands(Element))
template dense_ranges source · line 363 · raw
@-Element:Data -> @+geometry:Geometry -> @+fill:Element -> @layout:Plan -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, Bands(Element))
template from_dense source · line 372 · raw
@-Element:Data -> @geometry:Geometry -> @fill:Element -> @layout:Plan -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Bands(Element)
template split source · line 393 · raw
@-Element:Data -> @depth:Nat -> @+geometry:Geometry -> @fill:Element -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Bands(Element)
Plan metadata first, then transfer each dense channel range once. First splits and later changed boundaries share the same copy implementation.
template combined source · line 397 · raw
@-Element:Data -> @result:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_operations.Outcome<Pair(0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>)> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template combine_leaf_with source · line 402 · 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>)) -> @+count:U32 -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
template combine_band_with source · line 405 · 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>)) -> @geometry:Geometry -> @first:U32 -> @rows:U32 -> @left:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @right:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @resource:Unit -> Bands(Element)
template combine_planned_with source · line 410 · 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>)) -> @+geometry:Geometry -> @+parallel:Bool -> @planned:Pair(Bands(Element), Plan) -> @right:Bands(Element) -> Bands(Element)
template combine_with source · line 419 · 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>)) -> @geometry:Geometry -> @parallel:Bool -> @left:Bands(Element) -> @right:Bands(Element) -> Bands(Element)
The caller supplies the same plan on both sides, after shape and status checks; the plan is read from the left. Trees of another shape keep the left owner.
template transform_band source · line 422 · raw
@-Element:Data -> @-Context:Data -> @-leaf:(@_:Context -> @_:U32 -> @_:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Bands(Element)) -> @context:Context -> @first:U32 -> @rows:U32 -> @input:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @resource:Unit -> Bands(Element)
template transform source · line 426 · raw
@-Element:Data -> @-Context:Data -> @-leaf:(@_:Context -> @_:U32 -> @_:U32 -> @_:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Bands(Element)) -> @+layout:Plan -> @+parallel:Bool -> @+geometry:Geometry -> @context:Context -> @bands:Bands(Element) -> Bands(Element)
template inspected_pair source · line 439 · raw
@-Element:Data -> @left:Pair(Bands(Element), Inspection) -> @right:Pair(Bands(Element), Inspection) -> Pair(Bands(Element), Inspection)
template inspect_leaf source · line 451 · raw
@-Element:Data -> @geometry:Geometry -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+first:U32 -> @+rows:U32 -> Pair(Bands(Element), Inspection)
template inspect source · line 456 · raw
@-Element:Data -> @+geometry:Geometry -> @bands:Bands(Element) -> Pair(Bands(Element), Inspection)