Files
concrete/docs/dev/api/concrete.fhe.compilation.circuit.md
Benoit Chevallier-Mames e37a840e7e docs(compiler): adding API doc
2024-03-13 17:10:00 +01:00

11 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__(
    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

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
)

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

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