mirror of
https://github.com/zama-ai/concrete.git
synced 2026-01-14 15:27:58 -05:00
50 lines
1.5 KiB
Python
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
|