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}})