Skip to main content

CircuitExecutor

Trait CircuitExecutor 

Source
pub trait CircuitExecutor<F: Fancy> {
    // Required methods
    fn execute(
        &self,
        backend: &mut F,
        inputs: &[F::Item],
        channel: &mut Channel<'_>,
    ) -> Result<Vec<F::Item>>;
    fn ninputs(&self) -> usize;
    fn modulus(&self, i: usize) -> u16;
}
Expand description

Trait for executing computations directly over a Fancy object.

§Example

Below is a simple example of computing an add gate over an arbitrary modulus. The computation is defined in execute by directly calling operations on the underlying Fancy backend. We also need to track how many inputs the computation takes, and the moduli of those inputs; these are given in the ninputs and modulus methods, respectively.

struct AddCircuit(u16);
impl<F: FancyArithmetic> CircuitExecutor<F> for AddCircuit {
    fn execute(
        &self,
        backend: &mut F,
        inputs: &[F::Item],
        channel: &mut Channel,
    ) -> Result<Vec<F::Item>> {
        let output = backend.add(&inputs[0], &inputs[1]);
        Ok(vec![output])
    }

    fn ninputs(&self) -> usize {
        2
    }

    fn modulus(&self, _: usize) -> u16 {
        2
    }
}

Required Methods§

Source

fn execute( &self, backend: &mut F, inputs: &[F::Item], channel: &mut Channel<'_>, ) -> Result<Vec<F::Item>>

Execute a circuit on a given Fancy backend using the provided inputs.

Source

fn ninputs(&self) -> usize

The number of inputs to provide to CircuitExecutor::execute.

Source

fn modulus(&self, i: usize) -> u16

The modulus for input i.

Implementors§

Source§

impl<F: ArithmeticBundleGadgets> CircuitExecutor<F> for TestCrtMultiplication

Source§

impl<F: ArithmeticBundleGadgets> CircuitExecutor<F> for TestMask

Source§

impl<F: ArithmeticProjBundleGadgets> CircuitExecutor<F> for TestEqBundles

Source§

impl<F: ArithmeticProjBundleGadgets> CircuitExecutor<F> for TestMixedRadixAddition

Source§

impl<F: ArithmeticProjBundleGadgets> CircuitExecutor<F> for TestMixedRadixAdditionMSBOnly

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryAbs

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryAddition

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryAdditionNoCarry

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryAnd

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryArithmeticRightShift

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryDemux

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryDivision

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryEqBundles

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryLessThan

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryLessThanSigned

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryLogicalRightShift

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryMax

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryMultiplication

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryMultiplicationLowerHalf

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinarySubtraction

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestBinaryTwosComplement

Source§

impl<F: BinaryGadgets> CircuitExecutor<F> for TestConstantBundle

Source§

impl<F: BundleGadgets> CircuitExecutor<F> for TestBundleInputOutput

Source§

impl<F: BundleGadgets> CircuitExecutor<F> for TestShiftExtend

Source§

impl<F: CrtGadgets> CircuitExecutor<F> for TestCrtAddition

Source§

impl<F: CrtGadgets> CircuitExecutor<F> for TestCrtCmul

Source§

impl<F: CrtGadgets> CircuitExecutor<F> for TestCrtSubtraction

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestComplexGadget

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestCrtCexp

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestCrtDivision

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestCrtRemainder

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestCrtToPmr

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestLeq

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestMax

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestPmrGreaterThanOrEqual

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestPmrLessThan

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestRelu

Source§

impl<F: CrtProjGadgets> CircuitExecutor<F> for TestSgn

Source§

impl<F: Fancy> CircuitExecutor<F> for TestBinaryConstant

Source§

impl<F: Fancy> CircuitExecutor<F> for TestBinaryOutputs

Source§

impl<F: FancyArithmetic> CircuitExecutor<F> for TestAddMany

Source§

impl<F: FancyArithmetic> CircuitExecutor<F> for TestAddition

Source§

impl<F: FancyArithmetic> CircuitExecutor<F> for TestCmul

Source§

impl<F: FancyArithmetic> CircuitExecutor<F> for TestConstants

Source§

impl<F: FancyArithmetic> CircuitExecutor<F> for TestMulGate

Source§

impl<F: FancyArithmetic> CircuitExecutor<F> for TestMulGateUnequalMods

Source§

impl<F: FancyArithmetic> CircuitExecutor<F> for TestSubtraction

Source§

impl<F: FancyBinary> CircuitExecutor<F> for TestAndGate

Source§

impl<F: FancyBinary> CircuitExecutor<F> for TestAndGateFanN

Source§

impl<F: FancyBinary> CircuitExecutor<F> for TestBinaryNegate

Source§

impl<F: FancyBinary> CircuitExecutor<F> for TestNegateGate

Source§

impl<F: FancyBinary> CircuitExecutor<F> for TestOrGateFanN

Source§

impl<F: FancyBinary> CircuitExecutor<F> for TestXorGateFanN

Source§

impl<F: FancyBinary> CircuitExecutor<F> for BinaryCircuit

Source§

impl<F: FancyProj + FancyArithmetic> CircuitExecutor<F> for TestAddManyModChange

Source§

impl<F: FancyProj> CircuitExecutor<F> for TestModChange

Source§

impl<F: FancyProj> CircuitExecutor<F> for TestProj

Source§

impl<F: FancyProj> CircuitExecutor<F> for TestProjRand