def combine_with

stelliferous@0.0.2.0 · tensor_operations.bend:103

import stelliferous@0.0.2.0/tensor_operations.bend as TensorOperations
import Base
import stelliferous@0.0.2.0/storage_buffer.bend as Storage
import stelliferous@0.0.2.0/tensor_shape.bend as Shapes
import stelliferous@0.0.2.0/tensor_view.bend as Views
import stelliferous@0.0.2.0/proofs/storage_certificate.bend as Certificate

103def combine_with(~Element: Data,~kernel: @+count: Nat -> @+right_view: Views.View -> @+offset: U32 -> Storage.Buffer<Element> -> Storage.Buffer<Element> -> Storage.Buffer<Element> & Storage.Buffer<Element>,
104  left: Storage.Buffer<Element>,+left_view: Views.View,right: Storage.Buffer<Element>,+right_view: Views.View) ->
105  Outcome<(Storage.Buffer<Element> & Storage.Buffer<Element>)>:
106  Storage.Buffer{left,+left_length,left_certificate} = left
107  Certificate.Certificate{+left_depth,left_equation} = left_certificate
108  Storage.Buffer{right,+right_length,right_certificate} = right
109  Certificate.Certificate{+right_depth,right_equation} = right_certificate
110  combine_when_with(~Element,~kernel,Shapes.same(Views.shape(left_view),Views.shape(right_view)) && Views.is_contiguous(left_view) &&
111    valid_buffer(left_length,U32.shln(1,left_depth),left_view) &&
112    valid_buffer(right_length,U32.shln(1,right_depth),right_view),Views.numel(left_view),right_view,left_view,
113    Storage.Buffer{left,left_length,Certificate.Certificate{left_depth,left_equation}},Storage.Buffer{right,right_length,Certificate.Certificate{right_depth,right_equation}})

Uses (15)

Used by (4)