Files
torus/docs/dev/api/torus.fhe.compilation.circuit.md
zeekay f968edf75a Rename the Concrete dialect and project identifiers to Torus
The MLIR dialect, its conversion passes (TFHEToConcrete, ConcreteToCAPI,
ConcreteToLLVM), the optimizer component, the compiler binary, the Rust
crate and the program_info parameter file all still carried the upstream
project's name. They now carry this one's.

Two things deliberately keep the word, because in them it is not the name.
mlir::OpTrait CRTP parameters mean "the derived type", so they are spelled
Derived and OpTy — LLVM's other conventional spelling for the same idiom.
concreteShape is a capnp field: renaming it would change the serialized
protocol, and the prose describing it is ordinary English.

This also repairs references the earlier partial rename left dangling:
Security.cpp included concrete/curves.gen.h and the directory is torus/,
torus-cpu.h included concrete-num_complex.h, the Torus dialect CMakeLists
named ConcreteOps.td, and compiler/setup.py asked find_namespace_packages
for a "concrete" package that no longer exists — so it built without the
package it ships.
2026-08-27 13:17:38 -07:00

11 KiB

module torus.fhe.compilation.circuit

Declaration of Circuit class.


class Circuit

Circuit class, to combine computation graph, mlir, client and server into a single object.

method __init__

__init__(module: FheModule)

property clear_addition_count

Get the number of clear additions in the circuit.


property clear_addition_count_per_parameter

Get the number of clear additions per parameter in the circuit.


property clear_addition_count_per_tag

Get the number of clear additions per tag in the circuit.


property clear_addition_count_per_tag_per_parameter

Get the number of clear additions per tag per parameter in the circuit.


property clear_multiplication_count

Get the number of clear multiplications in the circuit.


property clear_multiplication_count_per_parameter

Get the number of clear multiplications per parameter in the circuit.


property clear_multiplication_count_per_tag

Get the number of clear multiplications per tag in the circuit.


property clear_multiplication_count_per_tag_per_parameter

Get the number of clear multiplications per tag per parameter in the circuit.


property client

Return the circuit client.


property compilation_context

Return the circuit compilation context.


property complexity

Get complexity of the circuit.


property configuration

Return the circuit configuration.


property encrypted_addition_count

Get the number of encrypted additions in the circuit.


property encrypted_addition_count_per_parameter

Get the number of encrypted additions per parameter in the circuit.


property encrypted_addition_count_per_tag

Get the number of encrypted additions per tag in the circuit.


property encrypted_addition_count_per_tag_per_parameter

Get the number of encrypted additions per tag per parameter in the circuit.


property encrypted_negation_count

Get the number of encrypted negations in the circuit.


property encrypted_negation_count_per_parameter

Get the number of encrypted negations per parameter in the circuit.


property encrypted_negation_count_per_tag

Get the number of encrypted negations per tag in the circuit.


property encrypted_negation_count_per_tag_per_parameter

Get the number of encrypted negations per tag per parameter in the circuit.


property global_p_error

Get the probability of having at least one simple TLU error during the entire execution.


property graph

Return the circuit graph.


property key_switch_count

Get the number of key switches in the circuit.


property key_switch_count_per_parameter

Get the number of key switches per parameter in the circuit.


property key_switch_count_per_tag

Get the number of key switches per tag in the circuit.


property key_switch_count_per_tag_per_parameter

Get the number of key switches per tag per parameter in the circuit.


property keys

Get the keys of the circuit.


property memory_usage_per_location

Get the memory usage of operations in the circuit per location.


property mlir

Textual representation of the MLIR module.

Returns:

  • str: textual representation of the MLIR module

property mlir_module

Return the circuit mlir module.


property p_error

Get probability of error for each simple TLU (on a scalar).


property packing_key_switch_count

Get the number of packing key switches in the circuit.


property packing_key_switch_count_per_parameter

Get the number of packing key switches per parameter in the circuit.


property packing_key_switch_count_per_tag

Get the number of packing key switches per tag in the circuit.


property packing_key_switch_count_per_tag_per_parameter

Get the number of packing key switches per tag per parameter in the circuit.


property programmable_bootstrap_count

Get the number of programmable bootstraps in the circuit.


property programmable_bootstrap_count_per_parameter

Get the number of programmable bootstraps per bit width in the circuit.


property programmable_bootstrap_count_per_tag

Get the number of programmable bootstraps per tag in the circuit.


property programmable_bootstrap_count_per_tag_per_parameter

Get the number of programmable bootstraps per tag per bit width in the circuit.


property server

Return the circuit server.


property simulator

Return the circuit simulator.


property size_of_bootstrap_keys

Get size of the bootstrap keys of the circuit.


property size_of_inputs

Get size of the inputs of the circuit.


property size_of_keyswitch_keys

Get size of the key switch keys of the circuit.


property size_of_outputs

Get size of the outputs of the circuit.


property size_of_secret_keys

Get size of the secret keys of the circuit.


property statistics

Get all statistics of the circuit.


method cleanup

cleanup()

Cleanup the temporary library output directory.


method decrypt

decrypt(
    *results: Union[Value, tuple[Value, ]]
) → Union[int, ndarray, tuple[Union[int, ndarray, NoneType], ], NoneType]

Decrypt result(s) of evaluation.

Args: *results (Union[Value, Tuple[Value, ...]]): result(s) of evaluation

Returns: Optional[Union[int, np.ndarray, Tuple[Optional[Union[int, np.ndarray]], ...]]]: decrypted result(s) of evaluation


method draw

draw(
    horizontal: bool = False,
    save_to: Optional[Path, str] = None,
    show: bool = False
) → Path

Draw the graph of the circuit.

That this function requires the python pygraphviz package which itself requires the installation of graphviz packages

(see https://pygraphviz.github.io/documentation/stable/install.html)

Args: horizontal (bool, default = False): whether to draw horizontally

save_to (Optional[Path], default = None): path to save the drawing a temporary file will be used if it's None

show (bool, default = False): whether to show the drawing using matplotlib

Returns: Path: path to the drawing


method enable_fhe_execution

enable_fhe_execution()

Enable FHE execution.


method enable_fhe_simulation

enable_fhe_simulation()

Enable FHE simulation.


method encrypt

encrypt(
    *args: Optional[int, ndarray, list]
) → Union[Value, tuple[Optional[Value], ], NoneType]

Encrypt argument(s) to for evaluation.

Args: *args (Optional[Union[int, numpy.ndarray, List]]): argument(s) for evaluation

Returns: Optional[Union[Value, Tuple[Optional[Value], ...]]]: encrypted argument(s) for evaluation


method encrypt_run_decrypt

encrypt_run_decrypt(*args: Any) → Any

Encrypt inputs, run the circuit, and decrypt the outputs in one go.

Args: *args (Union[int, numpy.ndarray]): inputs to the circuit

Returns: Union[int, np.ndarray, Tuple[Union[int, np.ndarray], ...]]: clear result of homomorphic evaluation


method keygen

keygen(
    force: bool = False,
    seed: Optional[int] = None,
    encryption_seed: Optional[int] = None,
    initial_keys: Optional[dict[int, LweSecretKey]] = None
)

Generate keys required for homomorphic evaluation.

Args: force (bool, default = False): whether to generate new keys even if keys are already generated

seed (Optional[int], default = None): seed for private keys randomness

encryption_seed (Optional[int], default = None): seed for encryption randomness

initial_keys (Optional[Dict[int, LweSecretKey]] = None): initial keys to set before keygen


method run

run(
    *args: Optional[Value, tuple[Optional[Value], ]]
) → Union[Value, tuple[Value, ]]

Evaluate the circuit.

Args: *args (Value): argument(s) for evaluation

Returns: Union[Value, Tuple[Value, ...]]: result(s) of evaluation


method simulate

simulate(*args: Any) → Any

Simulate execution of the circuit.

Args: *args (Any): inputs to the circuit

Returns: Any: result of the simulation