Expand description
This module provides a framework for constructing and evaluating arithmetic circuits. It supports operations such as addition, multiplication, and custom operations through hint gates. The circuits can be constructed dynamically, evaluated in parallel layers, and verified with equality constraints. This flexible architecture is suitable for applications requiring configurable computational graphs, such as in cryptographic schemes or complex algorithm simulations.
§Example Usage:
use capy_graph::Circuit;
use std::sync::Arc;
let mut circuit = Circuit::new();
let x = circuit.constant(10);
let y = circuit.add(x, x);
let custom_operation = Arc::new(|val: u32| val * 2);
let z = circuit.hint(x, custom_operation);
circuit.assert_equal(y, z);
let input_values = vec![10];
let debug = true;
assert!(circuit.evaluate(&input_values, debug).is_ok());
assert!(circuit.check_constraints().is_ok());
This example demonstrates creating a circuit with constant inputs, adding two nodes, applying a custom doubling operation, and asserting equality conditions. It also shows how to evaluate the circuit with debugging enabled to trace computation values and performance.
Structs§
- Circuit
- Represents an arithmetic circuit. This struct manages nodes, gates, and the evaluation process of the circuit. It supports adding various types of nodes, including constants, variables, and operations, and provides methods to evaluate the circuit, check constraints, and apply custom operations.
Enums§
- Circuit
Error - Enum to represent errors that can occur within the Circuit operations.
- Gate
- Represents a gate in an arithmetic circuit.
- Node
- Represents a node within an arithmetic circuit.