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
Axis@extent:Nat -> @remaining:Nat -> @stride:U32 -> @rewind:U32 -> Axis
type Level source · line 26 · raw
@-Rest:Data -> Data
A level with no remaining count never moves; it stands for an absent axis.
Level@-Rest:Data -> @axis:Axis -> @rest:Rest -> Level<Rest>
type Cursor source · line 72 · raw
Data
Cursor@axes:Levels -> @address:U32 -> Cursor
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.
Stride@address:U32 -> @stride:U32 -> Stride
type CursorPair source · line 128 · raw
Data
CursorPair@left:Cursor -> @right:Cursor -> CursorPair
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>)