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