# module `concrete.fhe.compilation.module`
Declaration of `FheModule` classes.
---
## class `ExecutionRt`
Runtime object class for execution.
### method `__init__`
```python
__init__(client, server, auto_schedule_run)
```
---
## class `SimulationRt`
Runtime object class for simulation.
---
## class `FheFunction`
Fhe function class, allowing to run or simulate one function of an fhe module.
### method `__init__`
```python
__init__(
name: str,
execution_runtime: Lazy[ExecutionRt],
simulation_runtime: Lazy[SimulationRt],
graph: Graph,
configuration: Configuration
)
```
---
#### property clear_addition_count
Get the number of clear additions in the function.
---
#### property clear_addition_count_per_parameter
Get the number of clear additions per parameter in the function.
---
#### property clear_addition_count_per_tag
Get the number of clear additions per tag in the function.
---
#### property clear_addition_count_per_tag_per_parameter
Get the number of clear additions per tag per parameter in the function.
---
#### property clear_multiplication_count
Get the number of clear multiplications in the function.
---
#### property clear_multiplication_count_per_parameter
Get the number of clear multiplications per parameter in the function.
---
#### property clear_multiplication_count_per_tag
Get the number of clear multiplications per tag in the function.
---
#### property clear_multiplication_count_per_tag_per_parameter
Get the number of clear multiplications per tag per parameter in the function.
---
#### property encrypted_addition_count
Get the number of encrypted additions in the function.
---
#### property encrypted_addition_count_per_parameter
Get the number of encrypted additions per parameter in the function.
---
#### property encrypted_addition_count_per_tag
Get the number of encrypted additions per tag in the function.
---
#### property encrypted_addition_count_per_tag_per_parameter
Get the number of encrypted additions per tag per parameter in the function.
---
#### property encrypted_negation_count
Get the number of encrypted negations in the function.
---
#### property encrypted_negation_count_per_parameter
Get the number of encrypted negations per parameter in the function.
---
#### property encrypted_negation_count_per_tag
Get the number of encrypted negations per tag in the function.
---
#### property encrypted_negation_count_per_tag_per_parameter
Get the number of encrypted negations per tag per parameter in the function.
---
#### property key_switch_count
Get the number of key switches in the function.
---
#### property key_switch_count_per_parameter
Get the number of key switches per parameter in the function.
---
#### property key_switch_count_per_tag
Get the number of key switches per tag in the function.
---
#### property key_switch_count_per_tag_per_parameter
Get the number of key switches per tag per parameter in the function.
---
#### property packing_key_switch_count
Get the number of packing key switches in the function.
---
#### property packing_key_switch_count_per_parameter
Get the number of packing key switches per parameter in the function.
---
#### property packing_key_switch_count_per_tag
Get the number of packing key switches per tag in the function.
---
#### property packing_key_switch_count_per_tag_per_parameter
Get the number of packing key switches per tag per parameter in the function.
---
#### property programmable_bootstrap_count
Get the number of programmable bootstraps in the function.
---
#### property programmable_bootstrap_count_per_parameter
Get the number of programmable bootstraps per bit width in the function.
---
#### property programmable_bootstrap_count_per_tag
Get the number of programmable bootstraps per tag in the function.
---
#### property programmable_bootstrap_count_per_tag_per_parameter
Get the number of programmable bootstraps per tag per bit width in the function.
---
#### property size_of_inputs
Get size of the inputs of the function.
---
#### property size_of_outputs
Get size of the outputs of the function.
---
#### property statistics
Get all statistics of the function.
---
### method `decrypt`
```python
decrypt(
*results: Union[Value, Tuple[Value, ], Awaitable[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 function.
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 `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 function, and decrypt the outputs in one go.
**Args:**
*args (Union[int, numpy.ndarray]): inputs to the function
**Returns:**
Union[int, np.ndarray, Tuple[Union[int, np.ndarray], ...]]: clear result of homomorphic evaluation
---
### method `run`
```python
run(
*args: Optional[Value, Tuple[Optional[Value], ]]
) → Union[Value, Tuple[Value, ], Awaitable[Union[Value, Tuple[Value, ]]]]
```
Evaluate the function.
**Args:**
*args (Value): argument(s) for evaluation
**Returns:**
Union[Value, Tuple[Value, ...], Awaitable[Union[Value, Tuple[Value, ...]]]]: result(s) of evaluation or future of result(s) of evaluation if configured with async_run=True
---
### method `run_async`
```python
run_async(
*args: Optional[Value, Tuple[Optional[Value], ]]
) → Union[Value, Tuple[Value, ], Awaitable[Union[Value, Tuple[Value, ]]]]
```
Evaluate the function asynchronuously.
**Args:**
*args (Value): argument(s) for evaluation
**Returns:**
Union[Awaitable[Value], Awaitable[Tuple[Value, ...]]]: result(s) a future of the evaluation
---
### method `run_sync`
```python
run_sync(*args: Optional[Value, Tuple[Optional[Value], ]]) → Any
```
Evaluate the function synchronuously.
**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 function.
**Args:**
*args (Any): inputs to the function
**Returns:**
Any: result of the simulation
---
## class `FheModule`
Fhe module class, to combine computation graphs, mlir, runtime objects into a single object.
### method `__init__`
```python
__init__(
graphs: Dict[str, Graph],
mlir: Module,
compilation_context: CompilationContext,
configuration: Optional[Configuration] = None,
composition_rules: Optional[Iterable[CompositionRule]] = None
)
```
---
#### property client
Returns the execution client object tied to the module.
---
#### property complexity
Get complexity of the module.
---
#### property function_count
Returns the number of functions in the module.
---
#### property global_p_error
Get the probability of having at least one simple TLU error during the entire execution.
---
#### property keys
Get the keys of the module.
---
#### 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 server
Get the execution server object tied to the module.
---
#### property simulator
Returns the simulation server object tied to the module.
---
#### property size_of_bootstrap_keys
Get size of the bootstrap keys of the module.
---
#### property size_of_keyswitch_keys
Get size of the key switch keys of the module.
---
#### property size_of_secret_keys
Get size of the secret keys of the module.
---
#### property statistics
Get all statistics of the module.
---
### method `cleanup`
```python
cleanup()
```
Cleanup the temporary library output directory.
---
### method `functions`
```python
functions() → Dict[str, FheFunction]
```
Return a dictionnary containing all the functions of the module.
---
### method `keygen`
```python
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