singe-npp 0.1.0-alpha.8

Safe Rust wrappers for NVIDIA Performance Primitives library (NPP).
Documentation
use crate::{
    context::StreamContext,
    error::Result,
    signal::{
        memory::Signal,
        view::{SignalView, SignalViewMut},
    },
    types::ZeroCrossingType,
    workspace::ScratchBuffer,
};

#[derive(Debug)]
pub struct SignalMinMax<T> {
    pub min: Signal<T>,
    pub max: Signal<T>,
}

#[derive(Debug)]
pub struct SignalMeanStandardDeviation<T> {
    pub mean: Signal<T>,
    pub standard_deviation: Signal<T>,
}

#[derive(Debug)]
pub struct SignalIndexedValue<T> {
    pub value: Signal<T>,
    pub index: Signal<i32>,
}

pub trait ScalarStatisticSignal<T> {
    fn sum_buffer_size(stream_context: &StreamContext, source: &SignalView<'_, T>)
    -> Result<usize>;

    fn sum_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn sum_natural_logarithm_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn sum_natural_logarithm_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn mean_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn mean_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn standard_deviation_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn standard_deviation_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn norm_inf_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn norm_inf_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn norm_l1_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn norm_l1_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn norm_l2_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn norm_l2_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait BinaryScalarStatisticSignal<T> {
    fn norm_diff_inf_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn norm_diff_inf_with_scratch(
        stream_context: &StreamContext,
        source1: &SignalView<'_, T>,
        source2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn norm_diff_l1_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn norm_diff_l1_with_scratch(
        stream_context: &StreamContext,
        source1: &SignalView<'_, T>,
        source2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn norm_diff_l2_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn norm_diff_l2_with_scratch(
        stream_context: &StreamContext,
        source1: &SignalView<'_, T>,
        source2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn dot_product_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn dot_product_with_scratch(
        stream_context: &StreamContext,
        source1: &SignalView<'_, T>,
        source2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait ExtremumStatisticSignal<T> {
    fn max_buffer_size(stream_context: &StreamContext, source: &SignalView<'_, T>)
    -> Result<usize>;

    fn max_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn min_buffer_size(stream_context: &StreamContext, source: &SignalView<'_, T>)
    -> Result<usize>;

    fn min_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait AbsoluteExtremumStatisticSignal<T> {
    fn max_absolute_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn max_absolute_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn min_absolute_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn min_absolute_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait PairStatisticSignal<T> {
    fn min_max_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn min_max_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        min: &mut SignalViewMut<'_, T>,
        max: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait MeanStandardDeviationStatisticSignal<T> {
    fn mean_standard_deviation_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn mean_standard_deviation_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        mean: &mut SignalViewMut<'_, T>,
        standard_deviation: &mut SignalViewMut<'_, T>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait IndexedStatisticSignal<T> {
    fn max_index_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn max_index_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        value: &mut SignalViewMut<'_, T>,
        index: &mut SignalViewMut<'_, i32>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn min_index_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn min_index_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        value: &mut SignalViewMut<'_, T>,
        index: &mut SignalViewMut<'_, i32>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait AbsoluteIndexedStatisticSignal<T> {
    fn max_absolute_index_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn max_absolute_index_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        value: &mut SignalViewMut<'_, T>,
        index: &mut SignalViewMut<'_, i32>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn min_absolute_index_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn min_absolute_index_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        value: &mut SignalViewMut<'_, T>,
        index: &mut SignalViewMut<'_, i32>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait EveryStatisticSignal<T> {
    fn min_every_in_place(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
    ) -> Result<()>;

    fn max_every_in_place(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, T>,
    ) -> Result<()>;
}

pub trait ErrorMetricStatisticSignal<T> {
    fn maximum_error_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn maximum_error_with_scratch(
        stream_context: &StreamContext,
        source_1: &SignalView<'_, T>,
        source_2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, f64>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn average_error_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn average_error_with_scratch(
        stream_context: &StreamContext,
        source_1: &SignalView<'_, T>,
        source_2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, f64>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn maximum_relative_error_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn maximum_relative_error_with_scratch(
        stream_context: &StreamContext,
        source_1: &SignalView<'_, T>,
        source_2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, f64>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;

    fn average_relative_error_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn average_relative_error_with_scratch(
        stream_context: &StreamContext,
        source_1: &SignalView<'_, T>,
        source_2: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, f64>,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}

pub trait ZeroCrossingStatisticSignal<T> {
    fn zero_crossing_buffer_size(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
    ) -> Result<usize>;

    fn zero_crossing_with_scratch(
        stream_context: &StreamContext,
        source: &SignalView<'_, T>,
        destination: &mut SignalViewMut<'_, f32>,
        zero_crossing_type: ZeroCrossingType,
        scratch: &mut ScratchBuffer,
    ) -> Result<()>;
}