Files
concrete/docs/dev/api/concrete.fhe.compilation.circuit.md
2025-01-07 09:17:59 +01:00

12 KiB

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__

__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