mirror of
https://github.com/zama-ai/concrete.git
synced 2026-01-14 07:17:57 -05:00
37 lines
1.3 KiB
Markdown
37 lines
1.3 KiB
Markdown
# Simulation
|
|
|
|
During development, the speed of homomorphic execution can be a blocker for fast prototyping. You could call the function you're trying to compile directly, of course, but it won't be exactly the same as FHE execution, which has a certain probability of error (see [Exactness](../getting-started/exactness.md)).
|
|
|
|
To overcome this issue, simulation is introduced:
|
|
|
|
```python
|
|
from concrete import fhe
|
|
import numpy as np
|
|
|
|
@fhe.compiler({"x": "encrypted"})
|
|
def f(x):
|
|
return (x + 1) ** 2
|
|
|
|
inputset = [np.random.randint(0, 10, size=(10,)) for _ in range(10)]
|
|
circuit = f.compile(inputset, p_error=0.1, fhe_simulation=True)
|
|
|
|
sample = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
|
|
|
|
actual = f(sample)
|
|
simulation = circuit.simulate(sample)
|
|
|
|
print(actual.tolist())
|
|
print(simulation.tolist())
|
|
```
|
|
|
|
After the simulation runs, it prints the following:
|
|
|
|
```
|
|
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
|
|
[1, 4, 9, 16, 16, 36, 49, 64, 81, 100]
|
|
```
|
|
|
|
{% hint style="warning" %}
|
|
There are some operations which are not supported in simulation yet. They will result in compilation failures. You can revert to simulation using graph execution using `circuit.graph(...)` instead of `circuit.simulate(...)`, which won't simulate FHE, but it will evaluate the computation graph, which is like simulating the operations without any errors due to FHE.
|
|
{% endhint %}
|