redstone-ml 0.0.0

High-performance Machine Learning, Auto-Differentiation and Tensor Algebra crate for Rust
Documentation
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]

#[cfg(apple_vdsp)]
use std::ffi::{c_double, c_float, c_int};

type vDSP_Length = usize;
type vDSP_Stride = isize;

#[cfg(apple_vdsp)]
#[link(name = "Accelerate")]
extern "C" {
    // element-wise addition
    pub(crate) fn vDSP_vadd(__A: *const c_float, __IA: isize,
                            __B: *const c_float, __IB: isize,
                            __C: *mut c_float, __IC: vDSP_Stride, __N: vDSP_Length);

    pub(crate) fn vDSP_vaddD(__A: *const c_double, __IA: isize,
                             __B: *const c_double, __IB: isize,
                             __C: *mut c_double, __IC: vDSP_Stride, __N: vDSP_Length);

    pub(crate) fn vDSP_vaddi(__A: *const c_int, __IA: isize,
                             __B: *const c_int, __IB: isize,
                             __C: *mut c_int, __IC: vDSP_Stride, __N: vDSP_Length);

    // element-wise subtraction
    pub(crate) fn vDSP_vsub(__B: *const c_float, __IB: isize,
                            __A: *const c_float, __IA: isize,
                            __C: *mut c_float, __IC: vDSP_Stride, __N: vDSP_Length);

    pub(crate) fn vDSP_vsubD(__B: *const c_double, __IB: isize,
                             __A: *const c_double, __IA: isize,
                             __C: *mut c_double, __IC: vDSP_Stride, __N: vDSP_Length);


    // element-wise multiplication
    pub(crate) fn vDSP_vmul(__A: *const c_float, __IA: isize,
                            __B: *const c_float, __IB: isize,
                            __C: *mut c_float, __IC: vDSP_Stride, __N: vDSP_Length);

    pub(crate) fn vDSP_vmulD(__A: *const c_double, __IA: isize,
                             __B: *const c_double, __IB: isize,
                             __C: *mut c_double, __IC: vDSP_Stride, __N: vDSP_Length);


    // element-wise division
    pub(crate) fn vDSP_vdiv(__B: *const c_float, __IB: isize,
                            __A: *const c_float, __IA: isize,
                            __C: *mut c_float, __IC: vDSP_Stride, __N: vDSP_Length);

    pub(crate) fn vDSP_vdivD(__B: *const c_double, __IB: isize,
                             __A: *const c_double, __IA: isize,
                             __C: *mut c_double, __IC: vDSP_Stride, __N: vDSP_Length);

    pub(crate) fn vDSP_vdivi(__B: *const c_int, __IB: isize,
                             __A: *const c_int, __IA: isize,
                             __C: *mut c_int, __IC: vDSP_Stride, __N: vDSP_Length);


    // vector-scalar addition
    pub(crate) fn vDSP_vsadd(__A: *const c_float, __IA: vDSP_Stride,
                             __B: *const c_float,
                             __C: *mut c_float, __IC: vDSP_Stride,
                             __N: vDSP_Length,
    );

    pub(crate) fn vDSP_vsaddD(__A: *const c_double, __IA: vDSP_Stride,
                              __B: *const c_double,
                              __C: *mut c_double, __IC: vDSP_Stride,
                              __N: vDSP_Length,
    );

    pub(crate) fn vDSP_vsaddi(__A: *const c_int, __IA: vDSP_Stride,
                              __B: *const c_int,
                              __C: *mut c_int, __IC: vDSP_Stride,
                              __N: vDSP_Length,
    );


    // vector-scalar multiplication
    pub(crate) fn vDSP_vsmul(__A: *const c_float, __IA: vDSP_Stride,
                             __B: *const c_float,
                             __C: *mut c_float, __IC: vDSP_Stride,
                             __N: vDSP_Length,
    );

    pub(crate) fn vDSP_vsmulD(__A: *const c_double, __IA: vDSP_Stride,
                              __B: *const c_double,
                              __C: *mut c_double, __IC: vDSP_Stride,
                              __N: vDSP_Length,
    );


    // vector-scalar division
    pub(crate) fn vDSP_vsdiv(__A: *const c_float, __IA: vDSP_Stride,
                             __B: *const c_float,
                             __C: *mut c_float, __IC: vDSP_Stride,
                             __N: vDSP_Length,
    );

    pub(crate) fn vDSP_vsdivD(__A: *const c_double, __IA: vDSP_Stride,
                              __B: *const c_double,
                              __C: *mut c_double, __IC: vDSP_Stride,
                              __N: vDSP_Length,
    );

    pub(crate) fn vDSP_vsdivi(__A: *const c_int, __IA: vDSP_Stride,
                              __B: *const c_int,
                              __C: *mut c_int, __IC: vDSP_Stride,
                              __N: vDSP_Length,
    );
    
    pub(crate) fn vDSP_svdiv(__A: *const c_float,
                             __B: *const c_float, __IB: vDSP_Stride,
                             __C: *mut c_float, __IC: vDSP_Stride,
                             __N: vDSP_Length,
    );

    pub(crate) fn vDSP_svdivD(__A: *const c_double,
                              __B: *const c_double, __IB: vDSP_Stride,
                              __C: *mut c_double, __IC: vDSP_Stride,
                              __N: vDSP_Length,
    );


    // vector fill
    pub(crate) fn vDSP_vfill(__A: *const c_float,
                             __C: *mut c_float, __IC: vDSP_Stride,
                             __N: vDSP_Length);

    pub(crate) fn vDSP_vfillD(__A: *const c_double,
                              __C: *mut c_double, __IC: vDSP_Stride,
                              __N: vDSP_Length);

    pub(crate) fn vDSP_vfilli(__A: *const c_int,
                              __C: *mut c_int, __IC: vDSP_Stride,
                              __N: vDSP_Length);


    // vector sum
    pub(crate) fn vDSP_sve(__A: *const c_float, __I: isize, __C: *mut c_float, __N: vDSP_Length);

    pub(crate) fn vDSP_sveD(__A: *const c_double, __I: isize, __C: *mut c_double, __N: vDSP_Length);


    // vector minimum & maximum
    pub(crate) fn vDSP_maxv(__A: *const c_float, __IA: isize,
                            __C: *mut c_float, __N: vDSP_Length);

    pub(crate) fn vDSP_maxvD(__A: *const c_double, __IA: isize,
                             __C: *mut c_double, __N: vDSP_Length);

    pub(crate) fn vDSP_minv(__A: *const c_float, __IA: isize,
                            __C: *mut c_float, __N: vDSP_Length);

    pub(crate) fn vDSP_minvD(__A: *const c_double, __IA: isize,
                             __C: *mut c_double, __N: vDSP_Length);


    // vector minimum & maximum magnitudes
    pub(crate) fn vDSP_maxmgv(__A: *const c_float, __IA: isize,
                              __C: *mut c_float, __N: vDSP_Length);

    pub(crate) fn vDSP_maxmgvD(__A: *const c_double, __IA: isize,
                               __C: *mut c_double, __N: vDSP_Length);

    pub(crate) fn vDSP_minmgv(__A: *const c_float, __IA: isize,
                              __C: *mut c_float, __N: vDSP_Length);

    pub(crate) fn vDSP_minmgvD(__A: *const c_double, __IA: isize,
                               __C: *mut c_double, __N: vDSP_Length);


    // vector dot product
    pub(crate) fn vDSP_dotpr(__A: *const c_float, __IA: isize,
                             __B: *const c_float, __IB: isize,
                             __C: *mut c_float, __N: vDSP_Length);

    pub(crate) fn vDSP_dotprD(__A: *const c_double, __IA: isize,
                              __B: *const c_double, __IB: isize,
                              __C: *mut c_double, __N: vDSP_Length);
}