Files
concrete/frontends/concrete-python/tests/execution/test_composition_compression.py

50 lines
1.5 KiB
Python

"""
Tests composition + compression
"""
from concrete import fhe
def test_composable_with_input_compression(helpers):
"""
Test that the composable circuit and compression works together
"""
conf = helpers.configuration()
if conf.parameter_selection_strategy != fhe.ParameterSelectionStrategy.MULTI:
# Composability is for now only valid with multi
return
@fhe.compiler({"x": "encrypted"})
def f(x):
return (x**2) % 2**3
conf.composable = True
conf.compress_input_ciphertexts = True
circuit = f.compile(fhe.inputset(fhe.uint3), conf)
result = circuit.run(circuit.run(circuit.encrypt(2)))
assert circuit.decrypt(result) == f(f(2))
def test_composable_with_input_compression_decrypt_fresh_encrypted(helpers):
"""
Test that we can decrypt a value which has just been encrypted with compression,
it requires composability as we need to ensure input and output partitions are the same.
https://github.com/zama-ai/concrete-internal/issues/758
"""
conf = helpers.configuration()
if conf.parameter_selection_strategy != fhe.ParameterSelectionStrategy.MULTI:
# Composability is for now only valid with multi
return
@fhe.compiler({"x": "encrypted"})
def f(x):
return x**2
inputset = [2, 3, 4, 5]
conf.composable = True
conf.compress_input_ciphertexts = True
circuit = f.compile(inputset, conf)
assert circuit.decrypt(circuit.encrypt(2)) == 2