def append_tree

stelliferous@0.0.2.0 · tensor_band_concat.bend:102

import stelliferous@0.0.2.0/tensor_band_concat.bend as TensorBandConcat
import Base
import stelliferous@0.0.2.0/tensor.bend as Tensors
import stelliferous@0.0.2.0/tensor_band.bend as Bands
import stelliferous@0.0.2.0/storage_buffer.bend as Storage
import stelliferous@0.0.2.0/traversal_partition.bend as Partition

102def append_tree(~Element: Data,output: Bands.Bands(~Element),+geometry: Bands.Geometry,+channel: U32,input: Tensors.Tensor<Element>) -> Tensors.Tensor<Element> & Bands.Bands(~Element):
103  match output:
104    case Partition.Leaf{output,+first,+count,details}:
105      Storage.bind_pair(~Tensors.Tensor<Element>,~Storage.Buffer<Element>,~(Tensors.Tensor<Element> & Bands.Bands(~Element)),
106        rows(~Element,geometry,first,count,channel,input,output),input => output => (input,Partition.Leaf{output,first,count,Unit{}}))
107    case Partition.Fork{left,right}:
108      Storage.bind_pair(~Tensors.Tensor<Element>,~Bands.Bands(~Element),~(Tensors.Tensor<Element> & Bands.Bands(~Element)),
109        append_tree(~Element,left,geometry,channel,input),input => left =>
110          Storage.bind_pair(~Tensors.Tensor<Element>,~Bands.Bands(~Element),~(Tensors.Tensor<Element> & Bands.Bands(~Element)),
111            append_tree(~Element,right,geometry,channel,input),input => right => (input,Partition.Fork{left,right})))

Uses (11)

Used by (2)