Files
zeekay b832ba2c39 Initial Torus commit
Forked from upstream concrete (BSD-3-Clause-Clear, © 2024 ZAMA) at HEAD
ecb729bb. Modifications copyright © 2026 Lux Industries Inc.

Rebranding scope:
  - Python module concrete → torus (across frontends/torus-python)
  - Rust module concrete-* → torus-* (across frontends/torus-rust)
  - MLIR dialect concretelang → toruslang (across compilers/torus-compiler)
  - Compiler optimizer concrete-optimizer → torus-optimizer
  - Backend concrete-cpu / concrete-cuda → torus-cpu / torus-cuda
  - Wire protocol concrete-protocol → torus-protocol
  - Parameter-curves concrete-security-curves-* → torus-security-curves-*
  - Public symbols concretelib → toruslib, ConcreteLang → TorusLang
  - URLs github.com/zama-ai/concrete → github.com/luxfhe/torus
  - URLs docs.zama.ai/concrete → docs.luxfhe.com/torus

Legal compliance:
  - LICENSE.txt retains original Copyright © 2024 ZAMA verbatim (§1-§2)
  - LICENSE.txt adds modifications copyright © 2026 Lux Industries Inc.
  - §3 endorsement clause: Torus is marketed exclusively as a Lux product;
    no Zama name used in README, docs, or marketing
  - NOTICE file provides factual attribution per legal best practice
    (not endorsement; required by upstream BSD-3-Clause-Clear)

README + NOTICE rewritten from scratch with Lux brand:
  - Quick-start in Python (torus.fhe)
  - Architecture diagram showing the gen-1 vtbl integration path
    (luxcpp/gpu → lux-private/gpu-kernels for CUDA/Metal/WebGPU)
  - Scheme coverage table: TFHE (luxfi/fhe), CKKS/BGV/BFV (luxfi/lattice)
  - Lux FHE family table: Torus / TorusVM / TorusEVM / TorusML / TorusNet

Known limitations (phase-2A scope):
  - PyPI package torus-fhe not yet published; the torus Python module
    is renamed structurally but pip-installable distribution is a
    follow-up (Phase 2A.1)
  - MLIR dialect rename is text-level; the compiler-internal LLVM
    rebuild (concrete-compiler-internal-llvm-project submodule) is
    structural and works; tablegen files renamed concrete→torus but the
    generated .inc files in the source tree will regenerate at build
    time
  - backends/torus-cuda/implementation/ is an upstream submodule
    pointer to the tfhe-rs source (not fetched in the staging clone);
    the CUDA backend body is delivered out-of-tree
  - ~100 test-fixture variable names like concrete_encoded_sample
    retain "concrete" as a math term (vs symbolic); these are inside
    tests/, not the public API; cleanup is a follow-up commit
  - 295 Python `from concrete import ...` residuals in luxfhe/ml-sdk
    consumer remain; that repo's import update is Phase 2B

This commit is the seed for the luxfhe/torus repo. Push as the first
commit to a fresh GitHub repo; do not re-import upstream Zama git
history.
2026-05-29 14:16:47 -07:00

241 lines
13 KiB
Plaintext

security level: 80
target p_error: 2.9e-39
per precision and log norm2:
- 1: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 4, 8, 512, 1, 19, 2, 6, 20, 5.1e-41
- 1 : 4, 8, 512, 1, 19, 2, 6, 20, 6.1e-41
- 2 : 4, 8, 512, 1, 19, 2, 6, 20, 1.3e-40
- 3 : 4, 8, 512, 1, 19, 2, 6, 20, 2.0e-39
- 4 : 2, 9, 512, 1, 19, 2, 6, 23, 4.8e-84
- 5 : 2, 9, 512, 1, 19, 2, 6, 23, 4.9e-40
- 6 : 5, 8, 512, 1, 24, 2, 6, 25, 3.7e-40
- 7 : 5, 8, 512, 1, 24, 3, 5, 26, 1.8e-41
- 8 : 4, 8, 512, 2, 13, 2, 6, 29, 1.0e-40
- 9 : 4, 8, 512, 2, 13, 2, 6, 29, 1.0e-39
- 10: 2, 9, 512, 2, 13, 2, 6, 33, 4.3e-88
- 11: 2, 9, 512, 2, 13, 2, 6, 33, 1.0e-43
- 12: 5, 8, 512, 2, 16, 2, 6, 36, 1.9e-40
- 13: 5, 8, 512, 2, 16, 2, 6, 36, 2.5e-40
- 14: 5, 8, 512, 2, 16, 2, 6, 36, 6.3e-40
- 15: 5, 8, 512, 2, 16, 3, 5, 38, 1.7e-40
- 16: 3, 9, 512, 2, 16, 2, 6, 47, 1.4e-48
- 17: 5, 8, 512, 3, 12, 2, 6, 48, 2.8e-40
- 18: 5, 8, 512, 3, 12, 2, 6, 48, 1.1e-39
- 19: 5, 8, 512, 3, 12, 3, 5, 49, 1.4e-39
- 20: 5, 8, 512, 4, 10, 2, 6, 59, 1.5e-39
- 21: 5, 8, 512, 4, 10, 4, 4, 61, 2.4e-39
- 22: 5, 8, 512, 5, 8, 3, 5, 71, 1.7e-41
- 23: 5, 8, 512, 6, 7, 3, 5, 83, 2.6e-41
- 24: 5, 8, 512, 7, 6, 3, 5, 94, 5.3e-41
- 25: 5, 8, 512, 9, 5, 3, 5, 116, 1.3e-40
- 26: 5, 8, 512, 11, 4, 3, 5, 139, 4.6e-40
- 27: 3, 9, 512, 11, 4, 2, 6, 173, 9.6e-42
- 28: 3, 9, 512, 22, 2, 2, 6, 327, 1.5e-58
- 29: 3, 9, 512, 45, 1, 2, 6, 649, 6.9e-40
# no solution starting from log norm2 = 30
- 2: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 2, 9, 512, 1, 19, 3, 5, 24, 2.0e-41
- 1 : 2, 9, 512, 1, 19, 3, 5, 24, 4.3e-41
- 2 : 2, 9, 512, 1, 19, 3, 5, 24, 8.7e-40
- 3 : 1, 10, 512, 1, 19, 2, 6, 30, 6.3e-60
- 4 : 2, 9, 512, 2, 13, 3, 5, 34, 1.5e-41
- 5 : 2, 9, 512, 2, 13, 3, 5, 34, 1.6e-41
- 6 : 2, 9, 512, 2, 13, 3, 5, 34, 1.9e-41
- 7 : 2, 9, 512, 2, 13, 3, 5, 34, 3.8e-41
- 8 : 2, 9, 512, 2, 13, 3, 5, 34, 5.4e-40
- 9 : 1, 10, 512, 2, 13, 2, 6, 43, 5.7e-60
- 10: 2, 9, 512, 3, 10, 3, 5, 43, 4.9e-41
- 11: 2, 9, 512, 3, 10, 3, 5, 43, 1.4e-39
- 12: 3, 9, 512, 2, 16, 3, 5, 48, 2.5e-40
- 13: 3, 9, 512, 2, 16, 3, 5, 48, 1.9e-39
- 14: 3, 9, 512, 3, 12, 3, 5, 62, 1.3e-40
- 15: 3, 9, 512, 3, 12, 3, 5, 62, 1.6e-40
- 16: 3, 9, 512, 3, 12, 3, 5, 62, 3.4e-40
- 17: 3, 9, 512, 3, 12, 4, 4, 64, 1.3e-40
- 18: 3, 9, 512, 4, 9, 3, 5, 76, 4.4e-40
- 19: 3, 9, 512, 4, 9, 4, 4, 78, 3.7e-40
- 20: 3, 9, 512, 5, 8, 3, 5, 90, 6.4e-40
- 21: 3, 9, 512, 5, 8, 4, 4, 92, 1.6e-39
- 22: 3, 9, 512, 6, 7, 5, 3, 107, 1.6e-39
- 23: 3, 9, 512, 8, 5, 4, 4, 134, 1.3e-39
- 24: 3, 9, 515, 11, 4, 3, 5, 175, 2.8e-39
- 25: 3, 9, 512, 14, 3, 5, 3, 219, 2.7e-39
- 26: 3, 9, 512, 22, 2, 5, 3, 331, 2.0e-39
- 27: 2, 10, 512, 43, 1, 3, 5, 933, 1.2e-39
# no solution starting from log norm2 = 28
- 3: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 1, 10, 512, 1, 19, 4, 4, 32, 1.9e-40
- 1 : 1, 10, 521, 1, 19, 4, 4, 32, 2.9e-39
- 2 : 1, 10, 512, 2, 13, 4, 4, 45, 6.0e-41
- 3 : 1, 10, 512, 2, 13, 4, 4, 45, 6.1e-41
- 4 : 1, 10, 512, 2, 13, 4, 4, 45, 6.4e-41
- 5 : 1, 10, 512, 2, 13, 4, 4, 45, 8.0e-41
- 6 : 1, 10, 512, 2, 13, 4, 4, 45, 1.9e-40
- 7 : 1, 10, 520, 2, 13, 4, 4, 45, 2.9e-39
- 8 : 1, 10, 512, 3, 10, 4, 4, 58, 8.7e-41
- 9 : 1, 10, 512, 3, 10, 4, 4, 58, 2.7e-40
- 10: 1, 10, 512, 3, 10, 5, 3, 59, 1.0e-39
- 11: 1, 10, 512, 4, 8, 4, 4, 71, 4.3e-40
- 12: 1, 10, 512, 4, 8, 8, 2, 75, 1.7e-39
- 13: 1, 11, 514, 2, 15, 3, 5, 94, 1.5e-39
- 14: 2, 10, 519, 3, 12, 4, 4, 96, 2.7e-39
- 15: 2, 10, 512, 3, 12, 5, 3, 97, 5.6e-40
- 16: 2, 10, 518, 4, 9, 4, 4, 117, 2.8e-39
- 17: 2, 10, 512, 4, 9, 5, 3, 118, 2.7e-40
- 18: 2, 10, 512, 5, 8, 5, 3, 139, 9.8e-41
- 19: 2, 10, 512, 5, 8, 6, 3, 141, 2.0e-39
- 20: 2, 10, 512, 6, 7, 8, 2, 166, 5.6e-40
- 21: 2, 10, 512, 7, 6, 8, 2, 187, 1.5e-39
- 22: 2, 10, 512, 10, 4, 9, 2, 252, 2.7e-39
- 23: 1, 11, 512, 10, 4, 4, 4, 320, 4.7e-46
- 24: 1, 11, 514, 14, 3, 3, 5, 431, 1.6e-39
- 25: 1, 11, 512, 22, 2, 4, 4, 656, 2.9e-40
# no solution starting from log norm2 = 26
- 4: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 1, 11, 528, 1, 23, 6, 3, 74, 2.7e-39
- 1 : 1, 11, 529, 1, 23, 6, 3, 74, 2.7e-39
- 2 : 1, 11, 534, 1, 23, 6, 3, 74, 2.8e-39
- 3 : 1, 11, 523, 1, 23, 9, 2, 79, 2.9e-39
- 4 : 1, 11, 528, 2, 15, 6, 3, 102, 2.5e-39
- 5 : 1, 11, 528, 2, 15, 6, 3, 102, 2.5e-39
- 6 : 1, 11, 528, 2, 15, 6, 3, 102, 2.5e-39
- 7 : 1, 11, 528, 2, 15, 6, 3, 102, 2.6e-39
- 8 : 1, 11, 529, 2, 15, 6, 3, 103, 2.5e-39
- 9 : 1, 11, 531, 2, 15, 6, 3, 103, 2.9e-39
- 10: 1, 11, 515, 2, 15, 8, 2, 104, 2.8e-39
- 11: 1, 11, 528, 3, 11, 6, 3, 131, 2.8e-39
- 12: 1, 11, 512, 3, 11, 8, 2, 132, 5.3e-40
- 13: 1, 11, 512, 3, 11, 8, 2, 132, 1.9e-39
- 14: 1, 11, 512, 4, 9, 8, 2, 160, 4.3e-40
- 15: 1, 11, 512, 4, 9, 8, 2, 160, 8.8e-40
- 16: 1, 11, 523, 4, 9, 9, 2, 165, 2.9e-39
- 17: 1, 11, 516, 5, 8, 9, 2, 191, 2.7e-39
- 18: 1, 11, 524, 6, 7, 9, 2, 222, 2.9e-39
- 19: 1, 11, 512, 7, 6, 17, 1, 262, 2.1e-39
- 20: 1, 11, 514, 10, 4, 9, 2, 331, 2.5e-39
- 21: 1, 11, 512, 14, 3, 9, 2, 442, 2.6e-39
- 22: 1, 11, 512, 21, 2, 17, 1, 654, 2.4e-39
- 23: 1, 12, 513, 22, 2, 8, 2, 1422, 2.8e-39
# no solution starting from log norm2 = 24
- 5: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 1, 13, 560, 1, 22, 4, 4, 329, 7.0e-40
- 1 : 1, 13, 563, 1, 22, 4, 4, 331, 4.3e-40
- 2 : 1, 13, 548, 1, 22, 6, 3, 340, 7.1e-40
- 3 : 1, 13, 536, 2, 15, 6, 3, 467, 2.8e-40
- 4 : 1, 13, 536, 2, 15, 6, 3, 467, 2.9e-40
- 5 : 1, 13, 536, 2, 15, 6, 3, 467, 3.1e-40
- 6 : 1, 13, 536, 2, 15, 6, 3, 467, 4.2e-40
- 7 : 1, 13, 536, 2, 15, 6, 3, 467, 1.4e-39
- 8 : 1, 13, 538, 2, 15, 6, 3, 469, 2.3e-40
- 9 : 1, 13, 545, 2, 15, 6, 3, 474, 1.2e-39
- 10: 1, 13, 536, 3, 11, 6, 3, 601, 6.4e-40
- 11: 1, 13, 537, 3, 11, 6, 3, 602, 2.3e-40
- 12: 1, 13, 540, 3, 11, 6, 3, 605, 4.1e-40
- 13: 1, 13, 570, 3, 11, 6, 3, 637, 2.1e-39
- 14: 1, 13, 539, 4, 9, 6, 3, 739, 2.0e-39
- 15: 1, 13, 561, 4, 9, 6, 3, 768, 1.5e-39
- 16: 1, 13, 550, 5, 8, 9, 2, 917, 2.0e-39
- 17: 1, 13, 525, 7, 6, 9, 2, 1139, 2.0e-39
- 18: 1, 13, 527, 8, 5, 9, 2, 1275, 6.0e-40
- 19: 1, 13, 531, 10, 4, 9, 2, 1550, 1.1e-39
- 20: 1, 13, 535, 14, 3, 9, 2, 2096, 1.0e-39
- 21: 1, 13, 565, 22, 2, 10, 2, 3351, 2.9e-39
# no solution starting from log norm2 = 22
- 6: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 1, 14, 585, 1, 22, 6, 3, 758, 2.1e-39
- 1 : 1, 14, 576, 2, 15, 6, 3, 1054, 4.7e-40
- 2 : 1, 14, 576, 2, 15, 6, 3, 1054, 4.8e-40
- 3 : 1, 14, 576, 2, 15, 6, 3, 1054, 5.2e-40
- 4 : 1, 14, 576, 2, 15, 6, 3, 1054, 7.0e-40
- 5 : 1, 14, 576, 2, 15, 6, 3, 1054, 2.3e-39
- 6 : 1, 14, 578, 2, 15, 6, 3, 1057, 8.8e-40
- 7 : 1, 14, 587, 2, 15, 6, 3, 1073, 1.3e-39
- 8 : 1, 14, 576, 3, 11, 6, 3, 1360, 9.5e-40
- 9 : 1, 14, 577, 3, 11, 6, 3, 1362, 4.1e-40
- 10: 1, 14, 580, 3, 11, 6, 3, 1369, 7.7e-40
- 11: 1, 14, 598, 3, 11, 7, 3, 1428, 2.4e-39
- 12: 1, 14, 580, 4, 9, 6, 3, 1677, 1.6e-39
- 13: 1, 14, 602, 4, 9, 7, 3, 1757, 1.8e-39
- 14: 1, 14, 601, 5, 8, 10, 2, 2130, 2.9e-39
- 15: 1, 14, 567, 7, 6, 9, 2, 2598, 1.9e-39
- 16: 1, 14, 569, 8, 5, 9, 2, 2909, 1.4e-39
- 17: 1, 14, 570, 10, 4, 10, 2, 3537, 1.5e-39
- 18: 1, 14, 576, 14, 3, 10, 2, 4798, 1.2e-39
- 19: 1, 14, 568, 41, 1, 19, 1, 13040, 2.5e-39
# no solution starting from log norm2 = 20
- 7: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 1, 15, 633, 2, 15, 5, 4, 2383, 1.1e-39
- 1 : 1, 15, 633, 2, 15, 5, 4, 2383, 1.2e-39
- 2 : 1, 15, 633, 2, 15, 5, 4, 2383, 1.6e-39
- 3 : 1, 15, 634, 2, 15, 5, 4, 2387, 2.4e-40
- 4 : 1, 15, 635, 2, 15, 5, 4, 2390, 1.7e-39
- 5 : 1, 15, 644, 2, 15, 5, 4, 2422, 1.5e-39
- 6 : 1, 15, 614, 3, 11, 7, 3, 3083, 2.3e-40
- 7 : 1, 15, 614, 3, 11, 7, 3, 3083, 1.7e-39
- 8 : 1, 15, 617, 3, 11, 7, 3, 3097, 4.4e-40
- 9 : 1, 15, 635, 3, 11, 7, 3, 3184, 1.2e-39
- 10: 1, 15, 617, 4, 9, 7, 3, 3792, 2.9e-39
- 11: 1, 15, 646, 4, 9, 7, 3, 3964, 2.0e-39
- 12: 1, 15, 632, 5, 7, 7, 3, 4592, 1.1e-39
- 13: 1, 15, 634, 6, 6, 7, 3, 5319, 2.9e-39
- 14: 1, 15, 607, 8, 5, 10, 2, 6578, 8.5e-40
- 15: 1, 15, 611, 10, 4, 10, 2, 7995, 1.2e-39
- 16: 1, 15, 617, 14, 3, 11, 2, 10887, 2.8e-39
- 17: 1, 15, 605, 41, 1, 21, 1, 29434, 1.7e-39
# no solution starting from log norm2 = 18
- 8: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 1, 16, 654, 2, 14, 7, 3, 5325, 5.0e-40
- 1 : 1, 16, 654, 2, 14, 7, 3, 5325, 1.2e-39
- 2 : 1, 16, 655, 2, 14, 7, 3, 5333, 2.7e-39
- 3 : 1, 16, 662, 2, 14, 7, 3, 5387, 1.1e-39
- 4 : 1, 16, 654, 3, 11, 7, 3, 6879, 7.1e-40
- 5 : 1, 16, 655, 3, 11, 7, 3, 6889, 3.1e-40
- 6 : 1, 16, 658, 3, 11, 7, 3, 6919, 4.8e-40
- 7 : 1, 16, 674, 3, 11, 8, 3, 7165, 1.6e-39
- 8 : 1, 16, 659, 4, 9, 7, 3, 8494, 7.5e-40
- 9 : 1, 16, 693, 4, 9, 8, 3, 9006, 2.5e-39
- 10: 1, 16, 668, 5, 7, 7, 3, 10193, 2.4e-39
- 11: 1, 16, 649, 6, 6, 11, 2, 11777, 2.1e-39
- 12: 1, 16, 646, 8, 5, 11, 2, 14793, 8.0e-40
- 13: 1, 16, 650, 10, 4, 11, 2, 17970, 1.1e-39
- 14: 1, 16, 679, 13, 3, 12, 2, 23683, 2.7e-39
- 15: 1, 16, 660, 40, 1, 12, 2, 65350, 1.3e-39
# no solution starting from log norm2 = 16
- 9: # bits
-ln2: k, N, n, br_l,br_b, ks_l,ks_b, cost, p_error
- 0 : 1, 17, 711, 2, 14, 6, 4, 11890, 2.5e-39
- 1 : 1, 17, 715, 2, 14, 6, 4, 11954, 1.2e-39
- 2 : 1, 17, 724, 2, 14, 13, 2, 13367, 2.7e-39
- 3 : 1, 17, 692, 3, 11, 8, 3, 15392, 3.0e-40
- 4 : 1, 17, 694, 3, 11, 8, 3, 15435, 2.4e-39
- 5 : 1, 17, 714, 3, 11, 8, 3, 15865, 2.8e-39
- 6 : 1, 17, 696, 4, 9, 8, 3, 18958, 3.0e-40
- 7 : 1, 17, 731, 4, 9, 13, 2, 20802, 2.9e-39
- 8 : 1, 17, 700, 5, 7, 8, 3, 22564, 1.2e-39
- 9 : 1, 17, 702, 6, 6, 8, 3, 26137, 9.9e-40
- 10: 1, 17, 685, 8, 5, 12, 2, 33053, 2.1e-39
- 11: 1, 17, 690, 10, 4, 12, 2, 40191, 9.5e-40
- 12: 1, 17, 711, 13, 3, 12, 2, 52063, 2.8e-39
- 13: 1, 17, 695, 40, 1, 12, 2, 144728, 1.6e-39
# no solution starting from log norm2 = 14
- 10: # bits
# no solution at all