def copy_when
stelliferous@0.0.2.0 · tensor_operations.bend:30
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_view.bend as Views
import stelliferous@0.0.2.0/tensor_access.bend as Access
import stelliferous@0.0.2.0/proofs/tensor_access_certificate.bend as AccessCertificate
30def copy_when(~Element: Data,valid: Bool,count: Maybe<&2,U32>,+source: Views.View,target: Views.View,
31 input: Storage.Buffer<Element>,output: Storage.Buffer<Element>) -> Outcome<(Storage.Buffer<Element> & Storage.Buffer<Element>)>:
32 match valid count:
33 case True{} Some{+count}:
34 Views.View{axes,+offset} = target
35 Storage.Buffer{input,input_length,input_certificate} = input
36 Storage.Buffer{output,output_length,output_certificate} = output
37 +contiguous = Views.is_contiguous(source)
38 Accepted{pair_buffers(~Element,input_length,output_length,
39 Access.copy_run(~Element,contiguous,U32.to_nat(count),source,offset,input,output),
40 AccessCertificate.copy(~Element,contiguous,U32.to_nat(count),source,offset,input,output,input_certificate,output_certificate))}
41 case valid count: Rejected{(input,output)}