~/bend-docscommunity

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

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.

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.

type Indexed source · line 208 · raw

Data

type Filled source · line 273 · raw

@-Element:Data -> Data

type Inspection source · line 431 · raw

Data

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 unshared source · line 157 · raw

@resource:Unit -> Pair(Unit, Unit)

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)