The goal of this PR is to create a bellpepper utility that could help us handle the loop + accumulator pattern in a circuit more efficiently.
This implementation will be able to generate a number N of circuits based on the number of intermediate accumulator values Nav and a desired number of accumulator updates per circuit Nau (N = Nav / Nau).
There is an example for a simple additive accumulator integrated in Supernova.
Usage
The current implementation only implements some chunking at the gadget level. This means that there is no actual generation of some folding steps, which would require a dependency on arecibo
From bellpepper-chunk, the user will have to implement the inner ChunkStepCircuit that will be synthesize at each fold of our RecursiveNova.
Finally, the user will also have to develop the plumbing for StepCircuit and NonUniformCircuit from arecibo. Some of the methods implementation functions can be used through the use of the API of FoldStep and InnerCircuit (see example).
Open discussion
As you may know, there was some design discussions around adding arecibo as a dependency to abstract more of the implementation load from the user.
For now we do not rely on arecibo but it could be added quite easily if we wish to do so.
Goal of this PR
The goal of this PR is to create a bellpepper utility that could help us handle the
loop + accumulator
pattern in a circuit more efficiently.This implementation will be able to generate a number
N
of circuits based on the number of intermediate accumulator valuesNav
and a desired number of accumulator updates per circuitNau
(N
=Nav
/Nau
).There is an example for a simple additive accumulator integrated in Supernova.
Usage
The current implementation only implements some chunking at the gadget level. This means that there is no actual generation of some folding steps, which would require a dependency on
arecibo
From
bellpepper-chunk
, the user will have to implement the innerChunkStepCircuit
that will besynthesize
at each fold of ourRecursiveNova
.Finally, the user will also have to develop the plumbing for
StepCircuit
andNonUniformCircuit
fromarecibo
. Some of the methods implementation functions can be used through the use of the API ofFoldStep
andInnerCircuit
(see example).Open discussion
As you may know, there was some design discussions around adding
arecibo
as a dependency to abstract more of the implementation load from the user.For now we do not rely on
arecibo
but it could be added quite easily if we wish to do so.