# module `concrete.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__` ```python __init__( graph: Graph, mlir: Module, compilation_context: CompilationContext, configuration: Optional[Configuration] = None ) ``` --- #### 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 complexity Get complexity of the circuit. --- #### 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 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 mlir Textual representation of the MLIR module. **Returns:** - `str`: textual representation of the 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 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` ```python cleanup() ``` Cleanup the temporary library output directory. --- ### method `decrypt` ```python 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` ```python 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` ```python enable_fhe_execution() ``` Enable FHE execution. --- ### method `enable_fhe_simulation` ```python enable_fhe_simulation() ``` Enable FHE simulation. --- ### method `encrypt` ```python 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` ```python 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` ```python keygen( force: bool = False, seed: Optional[int] = None, encryption_seed: Optional[int] = 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 --- ### method `run` ```python 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` ```python simulate(*args: Any) → Any ``` Simulate execution of the circuit. **Args:** *args (Any): inputs to the circuit **Returns:** Any: result of the simulation