def reduce_when
stelliferous@0.0.2.0 · tensor_operations.bend:269
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
269def reduce_when(~Element: Data,~Accumulator: Data,~operation: Accumulator -> Element -> Accumulator,
270 valid: Bool,count: Maybe<&2,U32>,+view: Views.View,buffer: Storage.Buffer<Element>,initial: Accumulator) ->
271 Outcome<(Storage.Buffer<Element> & Accumulator)>:
272 match valid count:
273 case True{} Some{+count}:
274 Storage.Buffer{storage,length,certificate} = buffer
275 +fast = Views.is_contiguous(view)
276 Accepted{reduce_buffer(~Element,~Accumulator,length,
277 Access.reduce_run(~Element,~Accumulator,~operation,fast,U32.to_nat(count),view,storage,initial),
278 AccessCertificate.reduce(~Element,~Accumulator,~operation,fast,U32.to_nat(count),view,storage,initial,certificate))}
279 case valid count: Rejected{(buffer,initial)}