Terminology and Structure

Terminology

Some terms used throughout the project include:

  • computation graph - a data structure to represent a computation. This is basically a directed acyclic graph in which nodes are either inputs, constants or operations on other nodes.

  • tracing - the technique that takes a Python function from the user and generates the corresponding computation graph in an easy to read format.

  • bounds - before a computation graph is converted to MLIR, we need to know which node will output which type (e.g., uint3 vs euint5). Computation graphs with different inputs must remember the minimum and maximum values for each node, which is what we call bounds, and use bounds to determine the appropriate type for each node

  • circuit - the result of compilation. A circuit is made of the client and server components and has methods, everything from printing to evaluation.

Module structure

In this section, we will discuss the module structure of Concrete Numpy briefly. You are encouraged to check individual .py files to learn more.

  • Concrete

    • Numpy

      • dtypes - data type specifications

      • values - value specifications (i.e., data type + shape + encryption status)

      • representation - representation of computation

      • tracing - tracing of Python functions

      • extensions - custom functionality which is not available in NumPy (e.g., direct table lookups)

      • MLIR - MLIR conversion

      • compilation - compilation from a Python function to a circuit, client/server architecture

    • ONNX

      • convolution - custom convolution operations that follow the behavior of ONNX

Last updated