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