Ren¶
Ren is a lazy polynomial IR, scheduler, and runtime for RNS quotient-ring computation. User code works with Poly values or higher-level CKKS objects, while Ren builds a graph and only runs backend programs when a concrete result is needed.
You will move between runnable examples, source files, and design context while learning the project. Start with the CKKS path if your first task is encrypted computation. Use the engine pages when you need Ren's execution model.
Ren's core polynomial object lives in a quotient ring such as \(R_q = \mathbb{Z}_q[X] / (X^n + 1)\). In CKKS paths, encoded plaintext and ciphertext polynomials use several RNS primes, and Ren tracks whether each polynomial is in coefficient or NTT representation.
Start here¶
- Getting started runs the first polynomial, CKKS, and JIT examples from a fresh checkout.
- Build a CKKS circuit walks through a reusable encrypted computation with visible output.
- CKKS workflow is the main entry point for encoding values, encrypting them, running encrypted computations, and decoding results.
- First polynomial graph is the smallest complete lesson for creating a graph, inspecting it, and forcing coefficients.
Main topics¶
- CKKS concepts explains levels, scales, message bounds, keys, and parameter presets.
- Engine overview maps the path from
Polyand CKKS values to scheduled backend work. ren.jitreplay covers capture, cache keys, replay, and failure modes.- Polynomial engine explains rings, RNS storage, domains, nodes, constants, and views.
- Execution pipeline explains how lazy graphs become scheduled kernels and backend work.
- Scheduling and Runtime explain the deeper engine paths in the order they run.
- API reference: CKKS, Polynomial, and
ren.jitcome from source docstrings for lookup while reading code or writing examples.