Unofficial bindings to Rigetti Forest, a quantum computing service. These bindings are directly based off of the forest module of pyQuil.

Currently, this library is written for pedagogical example of the API, not for efficiency.


Below are a few examples using the Rigetti Forest API.

Here we construct a Bell pair, and measure the pair. The interesting property about Bell states is that they always measure to the same value. Here we measure the Bell pair 10 times.

CL-FOREST> (run (quil "H 0"
                      "CNOT 0 1"
                      "MEASURE 0 [0]"
                      "MEASURE 1 [1]")
                '(0 1)

((0 0) (1 1) (1 1) (1 1) (1 1) (0 0) (0 0) (1 1) (0 0) (0 0))

Next, we show that a Bell pair is exactly the state (|00> + |11>)/sqrt(2) by looking directly at the wavefunction.

CL-FOREST> (wavefunction (quil "H 0"
                               "CNOT 0 1"))

#(#C(0.7071067811865475d0 0.0d0) #C(0.0d0 0.0d0) #C(0.0d0 0.0d0)
  #C(0.7071067811865475d0 0.0d0))

We can recover the probabilities of each of these by computing the square modulus of each amplitude:

CL-USER> (map 'vector (lambda (a) (expt (abs a) 2)) *)

#(0.4999999999999999d0 0.0d0 0.0d0 0.4999999999999999d0)

We see immediately that |00> and |11> both have a 50% chance of being observed.


Before starting, you'll need to set your API key by setting the variable cl-forest:*api-key*.

(setf cl-forest:*api-key* "<< YOUR API KEY >>")

You can check that it works by pinging the server:

> (cl-forest:ping)
"pong 3696180851"

Once your API key is set, you can construct Quil programs (which are currently just represented as strings) conveniently using the quil function, and then use run or wavefunction to run that program.

Robert Smith
Apache 2.0