def scatter_when

stelliferous@0.0.2.0 · tensor_operations.bend:54

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

54# output[address of element i of target] = input[offset of source + i]: a
55# contiguous source written through a strided target view, in row-major order.
56def scatter_when(~Element: Data,valid: Bool,count: Maybe<&2,U32>,source: Views.View,+target: Views.View,
57  input: Storage.Buffer<Element>,output: Storage.Buffer<Element>) -> Outcome<(Storage.Buffer<Element> & Storage.Buffer<Element>)>:
58  match valid count:
59    case True{} Some{+count}:
60      Views.View{axes,+offset} = source
61      Storage.Buffer{input,input_length,input_certificate} = input
62      Storage.Buffer{output,output_length,output_certificate} = output
63      Accepted{pair_buffers(~Element,input_length,output_length,
64        Access.scatter_run(~Element,U32.to_nat(count),target,offset,input,output),
65        AccessCertificate.scatter(~Element,U32.to_nat(count),target,offset,input,output,input_certificate,output_certificate))}
66    case valid count: Rejected{(input,output)}

Uses (12)

Used by (1)