~/bend-docscommunity

tensor_cursor.bend checks

raw source on the hub · import stelliferous@0.0.2.0/tensor_cursor.bend as Tensor_cursor

Least-significant axis first. Singleton axes are omitted. The two innermost axes are flat levels, so an element step changes registers only; outer axes stay in a list that is rebuilt only when every level wraps. Every step is a direct template or a tail call, so native code keeps the advance in one loop.

3 imports
import Base
import ./tensor_view.bend as Views
import ./traversal_array.bend as Traversal

Types

type Axis source · line 9 · raw

Data

type Level source · line 26 · raw

@-Rest:Data -> Data

A level with no remaining count never moves; it stands for an absent axis.

type Cursor source · line 72 · raw

Data

type Stride source · line 108 · raw

Data

One run of the innermost axis reads address, address + stride, ... with no countdown. Its two words stay in registers in whatever program the cursor is compiled into; the full cursor is advanced once, at the end of the run.

type CursorPair source · line 128 · raw

Data

Definitions

def include_axis source · line 12 · raw

@active:Bool -> @+extent:U32 -> @+stride:U32 -> @axes:List<&2, Axis> -> List<&2, Axis>

def axes source · line 19 · raw

@source:List<&2, 0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.Axis> -> @reversed:List<&2, Axis> -> List<&2, Axis>

def absent source · line 29 · raw

Axis

def restore source · line 33 · raw

@reset:List<&2, Axis> -> @axes:List<&2, Axis> -> List<&2, Axis>

Outer axes: reset axes are kept reversed and restored after the carry stops.

def carry source · line 38 · raw

@axes:List<&2, Axis> -> @address:U32 -> @reset:List<&2, Axis> -> Pair(List<&2, Axis>, U32)

def advance_outer source · line 46 · raw

@axes:List<&2, Axis> -> @address:U32 -> Pair(List<&2, Axis>, U32)

def Depth0 source · line 60 · raw

Data

def Depth1 source · line 63 · raw

Data

def Levels source · line 66 · raw

Data

def advance_levels source · line 69 · raw

@axes:Levels -> @address:U32 -> Pair(Levels, U32)

def moved source · line 75 · raw

@result:Pair(Levels, U32) -> Cursor

def advance source · line 79 · raw

@axes:Levels -> @address:U32 -> Cursor

def outer source · line 87 · raw

@axes:List<&2, Axis> -> List<&2, Axis>

def split source · line 90 · raw

@axes:List<&2, Axis> -> Levels

def prepare source · line 93 · raw

@view:0x9be3b13bf249759bc81e1958bcd1a4c0/tensor_view.View -> Cursor

def target source · line 120 · raw

@cursor:Cursor -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.Target<Cursor>

The address a scatter stores at, with the cursor of the next element.

def target_stride source · line 124 · raw

@cursor:Stride -> 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.Target<Stride>

Templates

template reset source · line 49 · raw

@-Rest:Data -> @+extent:Nat -> @stride:U32 -> @rewind:U32 -> @result:Pair(Rest, U32) -> Pair(Level<Rest>, U32)

template step source · line 53 · raw

@-Rest:Data -> @-next:(@_:Rest -> @_:U32 -> Pair(Rest, U32)) -> @level:Level<Rest> -> @address:U32 -> Pair(Level<Rest>, U32)

template split_level source · line 82 · raw

@-Rest:Data -> @-split_rest:(@_:List<&2, Axis> -> Rest) -> @axes:List<&2, Axis> -> Level<Rest>

template read_value source · line 97 · raw

@-Element:Data -> @axes:Levels -> @address:U32 -> @result:Pair(Array<Element>, Element) -> Pair(Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.Visited<Cursor, Element>)

template read source · line 101 · raw

@-Element:Data -> @storage:Array<Element> -> @cursor:Cursor -> Pair(Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.Visited<Cursor, Element>)

template stride_value source · line 111 · raw

@-Element:Data -> @address:U32 -> @+stride:U32 -> @result:Pair(Array<Element>, Element) -> Pair(Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.Visited<Stride, Element>)

template read_stride source · line 115 · raw

@-Element:Data -> @storage:Array<Element> -> @cursor:Stride -> Pair(Array<Element>, 0x9be3b13bf249759bc81e1958bcd1a4c0/traversal_array.Visited<Stride, Element>)