/* automatically generated by rust-bindgen 0.69.5 */

pub const ENABLE_ALU: u32 = 1;
pub const ENABLE_DEVRAND: u32 = 1;
pub const ENABLE_ENV_VARS: u32 = 1;
pub const ENABLE_FMA: u32 = 1;
pub const ENABLE_INTRINSICS: u32 = 1;
pub const ENABLE_OCL_MEM_GUARDS: u32 = 1;
pub const ENABLE_OPENCL: u32 = 1;
pub const ENABLE_OOO_OCL: u32 = 1;
pub const ENABLE_PTHREAD: u32 = 1;
pub const ENABLE_QBDT: u32 = 1;
pub const SEED_DEVRAND: u32 = 1;
pub const ENABLE_QUNIT_CPU_PARALLEL: u32 = 1;
pub const FPPOW: u32 = 5;
pub const PSTRIDEPOW: u32 = 12;
pub const QBCAPPOW: u32 = 8;
pub const UINTPOW: u32 = 6;
pub const CPP_STD: u32 = 14;
pub const ENABLE_COMPLEX_X2: u32 = 1;
#[repr(C)]
#[repr(align(16))]
#[derive(Debug, Copy, Clone)]
pub struct max_align_t {
    pub __clang_max_align_nonce1: ::std::os::raw::c_longlong,
    pub __bindgen_padding_0: u64,
    pub __clang_max_align_nonce2: u128,
}
#[test]
fn bindgen_test_layout_max_align_t() {
    const UNINIT: ::std::mem::MaybeUninit<max_align_t> = ::std::mem::MaybeUninit::uninit();
    let ptr = UNINIT.as_ptr();
    assert_eq!(
        ::std::mem::size_of::<max_align_t>(),
        32usize,
        concat!("Size of: ", stringify!(max_align_t))
    );
    assert_eq!(
        ::std::mem::align_of::<max_align_t>(),
        16usize,
        concat!("Alignment of ", stringify!(max_align_t))
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).__clang_max_align_nonce1) as usize - ptr as usize },
        0usize,
        concat!(
            "Offset of field: ",
            stringify!(max_align_t),
            "::",
            stringify!(__clang_max_align_nonce1)
        )
    );
    assert_eq!(
        unsafe { ::std::ptr::addr_of!((*ptr).__clang_max_align_nonce2) as usize - ptr as usize },
        16usize,
        concat!(
            "Offset of field: ",
            stringify!(max_align_t),
            "::",
            stringify!(__clang_max_align_nonce2)
        )
    );
}
pub type uintq = ::std::os::raw::c_ulonglong;
pub type intq = ::std::os::raw::c_longlong;
pub type IdCallback = ::std::option::Option<unsafe extern "C" fn(arg1: uintq)>;
pub type ProbAmpCallback =
    ::std::option::Option<unsafe extern "C" fn(arg1: usize, arg2: f64, arg3: f64) -> bool>;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _QrackTimeEvolveOpHeader {
    _unused: [u8; 0],
}
pub type real1_s = f32;
extern "C" {
    pub fn get_error(sid: uintq) -> ::std::os::raw::c_int;
}
extern "C" {
    pub fn init_count_type(
        q: uintq,
        tn: bool,
        md: bool,
        sd: bool,
        sh: bool,
        bdt: bool,
        pg: bool,
        nw: bool,
        hy: bool,
        oc: bool,
        hp: bool,
        sp: bool,
    ) -> uintq;
}
extern "C" {
    pub fn init_count(q: uintq, hp: bool, sp: bool) -> uintq;
}
extern "C" {
    pub fn init_count_pager(q: uintq, hp: bool, sp: bool) -> uintq;
}
extern "C" {
    pub fn init_count_stabilizer(q: uintq) -> uintq;
}
extern "C" {
    pub fn init() -> uintq;
}
extern "C" {
    pub fn init_clone(sid: uintq) -> uintq;
}
extern "C" {
    pub fn destroy(sid: uintq);
}
extern "C" {
    pub fn seed(sid: uintq, s: uintq);
}
extern "C" {
    pub fn set_concurrency(sid: uintq, p: uintq);
}
extern "C" {
    pub fn set_device(sid: uintq, did: intq);
}
extern "C" {
    pub fn set_device_list(sid: uintq, n: uintq, dids: *mut intq);
}
extern "C" {
    pub fn qstabilizer_out_to_file(sid: uintq, f: *mut ::std::os::raw::c_char);
}
extern "C" {
    pub fn qstabilizer_in_from_file(sid: uintq, f: *mut ::std::os::raw::c_char);
}
extern "C" {
    pub fn HighestProbAll(sid: uintq, r: *mut uintq);
}
extern "C" {
    pub fn HighestProbAllN(sid: uintq, n: uintq, r: *mut uintq);
}
extern "C" {
    pub fn ProbAll(sid: uintq, n: uintq, q: *mut uintq, p: *mut real1_s);
}
extern "C" {
    pub fn Prob(sid: uintq, q: uintq) -> f64;
}
extern "C" {
    pub fn ProbRdm(sid: uintq, q: uintq) -> f64;
}
extern "C" {
    pub fn PermutationProb(sid: uintq, n: uintq, q: *mut uintq, c: *mut bool) -> f64;
}
extern "C" {
    pub fn PermutationProbRdm(sid: uintq, n: uintq, q: *mut uintq, c: *mut bool, r: bool) -> f64;
}
extern "C" {
    pub fn PermutationExpectation(sid: uintq, n: uintq, q: *mut uintq) -> f64;
}
extern "C" {
    pub fn PermutationExpectationRdm(sid: uintq, n: uintq, q: *mut uintq, r: bool) -> f64;
}
extern "C" {
    pub fn FactorizedExpectation(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        m: uintq,
        c: *mut uintq,
    ) -> f64;
}
extern "C" {
    pub fn FactorizedExpectationRdm(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        m: uintq,
        c: *mut uintq,
        r: bool,
    ) -> f64;
}
extern "C" {
    pub fn Variance(sid: uintq, n: uintq, q: *mut uintq) -> f64;
}
extern "C" {
    pub fn VarianceRdm(sid: uintq, n: uintq, q: *mut uintq, r: bool) -> f64;
}
extern "C" {
    pub fn FactorizedVariance(sid: uintq, n: uintq, q: *mut uintq, m: uintq, c: *mut uintq) -> f64;
}
extern "C" {
    pub fn FactorizedVarianceRdm(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        m: uintq,
        c: *mut uintq,
        r: bool,
    ) -> f64;
}
extern "C" {
    pub fn FactorizedExpectationFp(sid: uintq, n: uintq, q: *mut uintq, c: *mut real1_s) -> f64;
}
extern "C" {
    pub fn FactorizedExpectationFpRdm(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        c: *mut real1_s,
        r: bool,
    ) -> f64;
}
extern "C" {
    pub fn UnitaryExpectation(sid: uintq, n: uintq, q: *mut uintq, b: *mut real1_s) -> f64;
}
extern "C" {
    pub fn MatrixExpectation(sid: uintq, n: uintq, q: *mut uintq, b: *mut real1_s) -> f64;
}
extern "C" {
    pub fn UnitaryExpectationEigenVal(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        b: *mut real1_s,
        e: *mut real1_s,
    ) -> f64;
}
extern "C" {
    pub fn MatrixExpectationEigenVal(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        b: *mut real1_s,
        e: *mut real1_s,
    ) -> f64;
}
extern "C" {
    pub fn FactorizedVarianceFp(sid: uintq, n: uintq, q: *mut uintq, c: *mut real1_s) -> f64;
}
extern "C" {
    pub fn FactorizedVarianceFpRdm(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        c: *mut real1_s,
        r: bool,
    ) -> f64;
}
extern "C" {
    pub fn UnitaryVariance(sid: uintq, n: uintq, q: *mut uintq, b: *mut real1_s) -> f64;
}
extern "C" {
    pub fn MatrixVariance(sid: uintq, n: uintq, q: *mut uintq, b: *mut real1_s) -> f64;
}
extern "C" {
    pub fn UnitaryVarianceEigenVal(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        b: *mut real1_s,
        e: *mut real1_s,
    ) -> f64;
}
extern "C" {
    pub fn MatrixVarianceEigenVal(
        sid: uintq,
        n: uintq,
        q: *mut uintq,
        b: *mut real1_s,
        e: *mut real1_s,
    ) -> f64;
}
extern "C" {
    pub fn PauliExpectation(sid: uintq, n: uintq, q: *mut uintq, b: *mut uintq) -> f64;
}
extern "C" {
    pub fn PauliVariance(sid: uintq, n: uintq, q: *mut uintq, b: *mut uintq) -> f64;
}
extern "C" {
    pub fn DumpIds(sid: uintq, callback: IdCallback);
}
extern "C" {
    pub fn Dump(sid: uintq, callback: ProbAmpCallback);
}
extern "C" {
    pub fn InKet(sid: uintq, ket: *mut real1_s);
}
extern "C" {
    pub fn OutKet(sid: uintq, ket: *mut real1_s);
}
extern "C" {
    pub fn OutProbs(sid: uintq, ket: *mut real1_s);
}
extern "C" {
    pub fn OutReducedDensityMatrix(sid: uintq, n: uintq, q: *mut uintq, rdm: *mut real1_s);
}
extern "C" {
    pub fn random_choice(sid: uintq, n: usize, p: *mut f64) -> usize;
}
extern "C" {
    pub fn PhaseParity(sid: uintq, lambda: f64, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn PhaseRootN(sid: uintq, p: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn JointEnsembleProbability(
        sid: uintq,
        n: uintq,
        b: *mut ::std::os::raw::c_int,
        q: *mut uintq,
    ) -> f64;
}
extern "C" {
    pub fn ResetAll(sid: uintq);
}
extern "C" {
    pub fn allocateQubit(sid: uintq, qid: uintq);
}
extern "C" {
    pub fn release(sid: uintq, q: uintq) -> bool;
}
extern "C" {
    pub fn num_qubits(sid: uintq) -> uintq;
}
extern "C" {
    pub fn X(sid: uintq, q: uintq);
}
extern "C" {
    pub fn Y(sid: uintq, q: uintq);
}
extern "C" {
    pub fn Z(sid: uintq, q: uintq);
}
extern "C" {
    pub fn H(sid: uintq, q: uintq);
}
extern "C" {
    pub fn S(sid: uintq, q: uintq);
}
extern "C" {
    pub fn SX(sid: uintq, q: uintq);
}
extern "C" {
    pub fn SY(sid: uintq, q: uintq);
}
extern "C" {
    pub fn T(sid: uintq, q: uintq);
}
extern "C" {
    pub fn AdjS(sid: uintq, q: uintq);
}
extern "C" {
    pub fn AdjSX(sid: uintq, q: uintq);
}
extern "C" {
    pub fn AdjSY(sid: uintq, q: uintq);
}
extern "C" {
    pub fn AdjT(sid: uintq, q: uintq);
}
extern "C" {
    pub fn U(sid: uintq, q: uintq, theta: f64, phi: f64, lambda: f64);
}
extern "C" {
    pub fn Mtrx(sid: uintq, m: *mut f64, q: uintq);
}
extern "C" {
    pub fn MCX(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCY(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCZ(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCH(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCS(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCT(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCAdjS(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCAdjT(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MCU(sid: uintq, n: uintq, c: *mut uintq, q: uintq, theta: f64, phi: f64, lambda: f64);
}
extern "C" {
    pub fn MCMtrx(sid: uintq, n: uintq, c: *mut uintq, m: *mut f64, q: uintq);
}
extern "C" {
    pub fn MACX(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACY(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACZ(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACH(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACS(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACT(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACAdjS(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACAdjT(sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn MACU(sid: uintq, n: uintq, c: *mut uintq, q: uintq, theta: f64, phi: f64, lambda: f64);
}
extern "C" {
    pub fn MACMtrx(sid: uintq, n: uintq, c: *mut uintq, m: *mut f64, q: uintq);
}
extern "C" {
    pub fn UCMtrx(sid: uintq, n: uintq, c: *mut uintq, m: *mut f64, q: uintq, p: uintq);
}
extern "C" {
    pub fn Multiplex1Mtrx(sid: uintq, n: uintq, c: *mut uintq, q: uintq, m: *mut f64);
}
extern "C" {
    pub fn MX(sid: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn MY(sid: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn MZ(sid: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn R(sid: uintq, b: uintq, phi: f64, q: uintq);
}
extern "C" {
    pub fn MCR(sid: uintq, b: uintq, phi: f64, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn Exp(sid: uintq, n: uintq, b: *mut ::std::os::raw::c_int, phi: f64, q: *mut uintq);
}
extern "C" {
    pub fn MCExp(
        sid: uintq,
        n: uintq,
        b: *mut ::std::os::raw::c_int,
        phi: f64,
        nc: uintq,
        cs: *mut uintq,
        q: *mut uintq,
    );
}
extern "C" {
    pub fn M(sid: uintq, q: uintq) -> uintq;
}
extern "C" {
    pub fn ForceM(sid: uintq, q: uintq, r: bool) -> uintq;
}
extern "C" {
    pub fn MAll(sid: uintq) -> uintq;
}
extern "C" {
    pub fn MAllLong(sid: uintq, r: *mut uintq);
}
extern "C" {
    pub fn Measure(sid: uintq, n: uintq, b: *mut ::std::os::raw::c_int, q: *mut uintq) -> uintq;
}
extern "C" {
    pub fn MeasureShots(sid: uintq, n: uintq, q: *mut uintq, s: uintq, m: *mut uintq);
}
extern "C" {
    pub fn SWAP(sid: uintq, qi1: uintq, qi2: uintq);
}
extern "C" {
    pub fn ISWAP(sid: uintq, qi1: uintq, qi2: uintq);
}
extern "C" {
    pub fn AdjISWAP(sid: uintq, qi1: uintq, qi2: uintq);
}
extern "C" {
    pub fn FSim(sid: uintq, theta: f64, phi: f64, qi1: uintq, qi2: uintq);
}
extern "C" {
    pub fn CSWAP(sid: uintq, n: uintq, c: *mut uintq, qi1: uintq, qi2: uintq);
}
extern "C" {
    pub fn ACSWAP(sid: uintq, n: uintq, c: *mut uintq, qi1: uintq, qi2: uintq);
}
extern "C" {
    pub fn Compose(sid1: uintq, sid2: uintq, q: *mut uintq);
}
extern "C" {
    pub fn Decompose(sid: uintq, n: uintq, q: *mut uintq) -> uintq;
}
extern "C" {
    pub fn Dispose(sid: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn AND(sid: uintq, qi1: uintq, qi2: uintq, qo: uintq);
}
extern "C" {
    pub fn OR(sid: uintq, qi1: uintq, qi2: uintq, qo: uintq);
}
extern "C" {
    pub fn XOR(sid: uintq, qi1: uintq, qi2: uintq, qo: uintq);
}
extern "C" {
    pub fn NAND(sid: uintq, qi1: uintq, qi2: uintq, qo: uintq);
}
extern "C" {
    pub fn NOR(sid: uintq, qi1: uintq, qi2: uintq, qo: uintq);
}
extern "C" {
    pub fn XNOR(sid: uintq, qi1: uintq, qi2: uintq, qo: uintq);
}
extern "C" {
    pub fn CLAND(sid: uintq, ci: bool, qi: uintq, qo: uintq);
}
extern "C" {
    pub fn CLOR(sid: uintq, ci: bool, qi: uintq, qo: uintq);
}
extern "C" {
    pub fn CLXOR(sid: uintq, ci: bool, qi: uintq, qo: uintq);
}
extern "C" {
    pub fn CLNAND(sid: uintq, ci: bool, qi: uintq, qo: uintq);
}
extern "C" {
    pub fn CLNOR(sid: uintq, ci: bool, qi: uintq, qo: uintq);
}
extern "C" {
    pub fn CLXNOR(sid: uintq, ci: bool, qi: uintq, qo: uintq);
}
extern "C" {
    pub fn QFT(sid: uintq, n: uintq, c: *mut uintq);
}
extern "C" {
    pub fn IQFT(sid: uintq, n: uintq, c: *mut uintq);
}
extern "C" {
    pub fn ADD(sid: uintq, na: uintq, a: *mut uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn SUB(sid: uintq, na: uintq, a: *mut uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn ADDS(sid: uintq, na: uintq, a: *mut uintq, s: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn SUBS(sid: uintq, na: uintq, a: *mut uintq, s: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn MCADD(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        nc: uintq,
        c: *mut uintq,
        nq: uintq,
        q: *mut uintq,
    );
}
extern "C" {
    pub fn MCSUB(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        nc: uintq,
        c: *mut uintq,
        nq: uintq,
        q: *mut uintq,
    );
}
extern "C" {
    pub fn MUL(sid: uintq, na: uintq, a: *mut uintq, n: uintq, q: *mut uintq, o: *mut uintq);
}
extern "C" {
    pub fn DIV(sid: uintq, na: uintq, a: *mut uintq, n: uintq, q: *mut uintq, o: *mut uintq);
}
extern "C" {
    pub fn MULN(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        m: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn DIVN(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        m: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn POWN(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        m: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn MCMUL(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        nc: uintq,
        c: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn MCDIV(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        nc: uintq,
        c: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn MCMULN(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        nc: uintq,
        c: *mut uintq,
        m: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn MCDIVN(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        nc: uintq,
        c: *mut uintq,
        m: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn MCPOWN(
        sid: uintq,
        na: uintq,
        a: *mut uintq,
        nc: uintq,
        c: *mut uintq,
        m: *mut uintq,
        n: uintq,
        q: *mut uintq,
        o: *mut uintq,
    );
}
extern "C" {
    pub fn LDA(
        sid: uintq,
        ni: uintq,
        qi: *mut uintq,
        nv: uintq,
        qv: *mut uintq,
        t: *mut ::std::os::raw::c_uchar,
    );
}
extern "C" {
    pub fn ADC(
        sid: uintq,
        s: uintq,
        ni: uintq,
        qi: *mut uintq,
        nv: uintq,
        qv: *mut uintq,
        t: *mut ::std::os::raw::c_uchar,
    );
}
extern "C" {
    pub fn SBC(
        sid: uintq,
        s: uintq,
        ni: uintq,
        qi: *mut uintq,
        nv: uintq,
        qv: *mut uintq,
        t: *mut ::std::os::raw::c_uchar,
    );
}
extern "C" {
    pub fn Hash(sid: uintq, n: uintq, q: *mut uintq, t: *mut ::std::os::raw::c_uchar);
}
extern "C" {
    pub fn TrySeparate1Qb(sid: uintq, qi1: uintq) -> bool;
}
extern "C" {
    pub fn TrySeparate2Qb(sid: uintq, qi1: uintq, qi2: uintq) -> bool;
}
extern "C" {
    pub fn TrySeparateTol(sid: uintq, n: uintq, q: *mut uintq, tol: f64) -> bool;
}
extern "C" {
    pub fn Separate(sid: uintq, n: uintq, q: *mut uintq);
}
extern "C" {
    pub fn GetUnitaryFidelity(sid: uintq) -> f64;
}
extern "C" {
    pub fn ResetUnitaryFidelity(sid: uintq);
}
extern "C" {
    pub fn SetSdrp(sid: uintq, sdrp: f64);
}
extern "C" {
    pub fn SetNcrp(sid: uintq, ncrp: f64);
}
extern "C" {
    pub fn SetReactiveSeparate(sid: uintq, irs: bool);
}
extern "C" {
    pub fn SetTInjection(sid: uintq, iti: bool);
}
extern "C" {
    pub fn SetNoiseParameter(sid: uintq, np: f64);
}
extern "C" {
    pub fn SetAceMaxQb(sid: uintq, qb: uintq);
}
extern "C" {
    pub fn SetSparseAceMaxMb(sid: uintq, mb: usize);
}
extern "C" {
    pub fn Normalize(sid: uintq);
}
extern "C" {
    pub fn TimeEvolve(
        sid: uintq,
        t: f64,
        n: uintq,
        teos: *mut _QrackTimeEvolveOpHeader,
        mn: uintq,
        mtrx: *mut f64,
    );
}
extern "C" {
    pub fn init_qneuron(sid: uintq, n: uintq, c: *mut uintq, q: uintq) -> uintq;
}
extern "C" {
    pub fn clone_qneuron(nid: uintq) -> uintq;
}
extern "C" {
    pub fn destroy_qneuron(nid: uintq);
}
extern "C" {
    pub fn set_qneuron_angles(nid: uintq, angles: *mut real1_s);
}
extern "C" {
    pub fn get_qneuron_angles(nid: uintq, angles: *mut real1_s);
}
extern "C" {
    pub fn set_qneuron_sim(nid: uintq, sid: uintq, n: uintq, c: *mut uintq, q: uintq);
}
extern "C" {
    pub fn qneuron_predict(
        nid: uintq,
        angles: *mut real1_s,
        e: bool,
        r: bool,
        f: uintq,
        a: f64,
    ) -> f64;
}
extern "C" {
    pub fn qneuron_unpredict(nid: uintq, angles: *mut real1_s, e: bool, f: uintq, a: f64) -> f64;
}
extern "C" {
    pub fn qneuron_learn_cycle(nid: uintq, angles: *mut real1_s, e: bool, f: uintq, a: f64) -> f64;
}
extern "C" {
    pub fn qneuron_learn(
        nid: uintq,
        angles: *mut real1_s,
        eta: f64,
        e: bool,
        r: bool,
        f: uintq,
        a: f64,
    );
}
extern "C" {
    pub fn qneuron_learn_permutation(
        nid: uintq,
        angles: *mut real1_s,
        eta: f64,
        e: bool,
        r: bool,
        f: uintq,
        a: f64,
    );
}
extern "C" {
    pub fn init_qcircuit(collapse: bool, clifford: bool) -> uintq;
}
extern "C" {
    pub fn init_qcircuit_clone(cid: uintq) -> uintq;
}
extern "C" {
    pub fn qcircuit_inverse(cid: uintq) -> uintq;
}
extern "C" {
    pub fn qcircuit_past_light_cone(cid: uintq, n: uintq, q: *mut uintq) -> uintq;
}
extern "C" {
    pub fn destroy_qcircuit(cid: uintq);
}
extern "C" {
    pub fn get_qcircuit_qubit_count(cid: uintq) -> uintq;
}
extern "C" {
    pub fn qcircuit_swap(cid: uintq, q1: uintq, q2: uintq);
}
extern "C" {
    pub fn qcircuit_append_1qb(cid: uintq, m: *mut f64, q: uintq);
}
extern "C" {
    pub fn qcircuit_append_mc(cid: uintq, m: *mut f64, n: uintq, c: *mut uintq, q: uintq, p: uintq);
}
extern "C" {
    pub fn qcircuit_run(cid: uintq, sid: uintq);
}
extern "C" {
    pub fn qcircuit_out_to_file(cid: uintq, f: *mut ::std::os::raw::c_char);
}
extern "C" {
    pub fn qcircuit_in_from_file(cid: uintq, f: *mut ::std::os::raw::c_char);
}
extern "C" {
    pub fn qcircuit_out_to_string_length(cid: uintq) -> usize;
}
extern "C" {
    pub fn qcircuit_out_to_string(cid: uintq, f: *mut ::std::os::raw::c_char);
}
