Running the included algorithms
===============================
Each algorithm builds an executable file, which can be run with
various command line parameters to do different things. Run each
command with option --help to see a summary of the usage information.
In the following, we describe the set of options for the algorithms
that were implemented.
Running the bwt program
=======================
Usage for Binary Welded Tree algorithm:
---------------------------------------
Usage: bwt [OPTION...]
-h --help print usage info and exit
-C --circuit output the whole circuit (default)
-O --oracle output only the oracle
-K --oraclec output the "classical" oracle as a classical circuit
-G --graph print colored graph computed from oracle
-S --simulate run simulations of some circuit fragments for tree height n
-f <format> --format=<format> output format for circuits (default: preview)
-g <gatebase> --gatebase=<gatebase> type of gates to decompose into (default: logical)
-o <oracle> select oracle to use (default: orthodox)
-n <n> --height=<n> set tree height (positive; default 5)
-c <c> --color=<c> color to use with --oracle (0..3, default 0)
-s <s> --repeats=<s> set parameter s (iteration count; default 1)
-l --large set large problem size: n=300, s=336960
-t <dt> --dt=<dt> set parameter dt (simulation time step; default pi/180)
Possible values for format are: eps, pdf, ps, postscript, ascii, preview, gatecount.
Possible values for gatebase are: logical, binary, toffoli, cliffordt_old, cliffordt, cliffordt_keepphase, standard, strict, approximate, approximate_keepphase, exact, trimcontrols.
Possible values for oracle are: orthodox, simple, blackbox, classical, template, optimized.
Examples of command line options:
---------------------------------
* Show the complete circuit for the BWT algorithm using the
"orthodox" (official GFI) oracle, with n=5 and s=1:
./bwt -C -o orthodox -n 5 -s 1
(One can point out the different parts of the algorithm: 8 oracle
calls, and 4 very short diffusion steps).
* Show the same, using the "Template Haskell" oracle: this oracle is
much larger, but automatically generated from classical code (and
completely unoptimized):
./bwt -C -o template -n 5 -s 1
The "template oracle" is defined in BWT/Template.hs. See the
documentation of the module Quipper/CircLifting for how it works.
* Show the graph of the BWT algorithm, which is obtained by
simulating the orthodox oracle (and therefore offers some evidence
for the correctness of the oracle implementation):
./bwt -G -o orthodox -n 5
* Show the orthodox oracle for n=300. Note that this will result in a
big file. One has to zoom in substantially to see gates.
./bwt -O -o orthodox -n 300
* Show the complete circuit for the BWT algorithm, but decompose
everything into binary gates:
./bwt -C -o orthodox -n 5 -s 1 -g binary
* Show the oracle from Figure 1a (alternate oracle).
./bwt -C -o figure1a
* The same, decomposed into binary+Toffoli gates, or binary gates
only, respectively:
./bwt -C -o figure1a -g toffoli
./bwt -C -o figure1a -g binary
* Show gate counts for BWT algorithm with n=300 and s=1, using
"orthodox" oracle:
./bwt -C -o orthodox -n 300 -s 1 -f gatecount
* Show gate counts for same, after decomposition to binary gates:
./bwt -C -o orthodox -n 300 -s 1 -f gatecount -g binary
Obviously, most other combinations of command line options are also
possible, for example: decompose to toffoli gates and then simulate
and show the graph. Some other combinations are not legal: for
example, decomposing to binary gates and then simulating. (The
classical simulator will complain that the circuit is not boolean; it
contains "V" gates).
* Similarly, one can run demos for the triangle finding
algorithm using various command line options.
Note that the triangle finding algorithm is not a deliverable; it is a
work in progress. The only implemented algorithm that is officially a
deliverable is the "orthodox" BWT implementation in BWT.BWT.
Running the bf program
======================
Usage for the Boolean Formula algorithm:
----------------------------------------
Usage: bf [OPTION...]
-C --circuit output the whole circuit (default)
-D --demo run a demo of the circuit
-H --hexboard output a representation of the initial state of the given oracle, i.e. the game played so far
-p <part> --part=<part> which part of the circuit to use (default: whole)
-o <oracle> --oracle=<oracle> which oracle to use (default: small)
-m <moves> --moves=<moves> which moves have already been made (default: [])
-f <format> --format=<format> output format for circuits (default: _preview)
-d --dummy set to only use a dummy HEX gate instead of the full hex circuit
-h --help print usage info and exit
-g <gatebase> --gatebase=<gatebase> type of gates to decompose the output circuit into (default: logical)
Possible values for part are: whole, u, oracle, hex, checkwin_red, diffuse, walk, undo_oracle.
Possible values for oracle are: 9by7, small, custom x y t.
Possible values for format are: eps, pdf, ps, postscript, ascii, preview, gatecount.
Possible values for gatebase are: logical, binary, toffoli, cliffordt_old, cliffordt, cliffordt_keepphase, standard, strict, approximate, approximate_keepphase, exact, trimcontrols.
Running the cl program
======================
Usage for the Class Number algorithm:
-------------------------------------
Usage: cl [OPTION...]
-h --help print usage info and exit
-f <format> --format=<format> output format for circuits (default: ASCII)
-g <gatebase> --gatebase=<gatebase> gates to decompose into (default: Logical)
-1 output the circuit for stage 1 of the algorithm (default)
-4 output the circuit for stage 4 of the algorithm
-S <subroutine> --sub=<subroutine> output the circuit for a specific subroutine
-R --regulator classically, find the regulator, given Δ
-F classically, find the fundamental unit, given Δ
-P classically, find the fundamental solution of Pell’s equation, given Δ
-d <N> --delta=<N> discriminant Δ (a.k.a. D) (default: 28)
-s <N> --ss=<N> estimated bound on period S, for stage 1 (default: 2)
-i <N> estimated bound on log_2 S, for stage 1 (default: 1)
-r <N> --rr=<N> approximate regulator R, for stage 4 (default: 12.345)
-q <N> The parameter q, for stage 4 (default: 4)
-k <N> The parameter k, for stage 4 (default: 3)
-n <N> The parameter n, for stage 4 (default: 3)
-m <N> The parameter m, for stage 4 (default: 5)
--seed=<N> Random seed (0 for seed from time)(default: 1)
Possible values for format are: eps, pdf, ps, postscript, ascii, preview, gatecount.
Possible values for gatebase are: logical, binary, toffoli, cliffordt_old, cliffordt, cliffordt_keepphase, standard, strict, approximate, approximate_keepphase, exact, trimcontrols.
Possible values for subroutine are: rho, rhoinv, normalize, dotprod, starprod, fn.
Running the gse program
=======================
Usage for Ground State Estimation algorithm:
--------------------------------------------
Usage: gse [OPTION...]
-h --help print usage info and exit
-C --circuit output the whole circuit (default)
-T <indices> --template=<indices> output a particular circuit template
-f <format> --format=<format> output format for circuits (default: Preview)
-g <gatebase> --gatebase=<gatebase> gates to decompose into (default: Logical)
-m <N> --orbitals=<N> number of orbitals (default: 4)
-o <N> --occupied=<N> number of occupied orbitals (default: 2)
-b <N> --precision=<N> number of precision qubits (default: 3)
-D <energy> --delta_e=<energy> energy range (default: 6.5536)
-E <energy> --e_max=<energy> maximum energy (default: -3876.941)
--n0=<N> use N_k = n0 * 2^k (default: N_k = 1)
-l --large set large problem size (m=208, o=84, b=12, n0=100)
-x --orthodox use the Coulomb operator of Whitman et al.
--h1=<file> filename for one-electron data (default: "h_1e_ascii")
--h2=<file> filename for two-electron data (default: "h_2e_ascii")
-d <file> --datadir=<file> directory for one- and two-electron data (default: current)
Possible values for format are: eps, pdf, ps, postscript, ascii, preview, gatecount.
Possible values for gatebase are: logical, binary, toffoli, cliffordt_old, cliffordt, cliffordt_keepphase, standard, strict, approximate, approximate_keepphase, exact, trimcontrols.
Indices can be specified as p,q or p,q,r,s (with no spaces)
Running the qls program
=======================
Usage for Quantum Linear Systems algorithm:
-------------------------------------------
Usage: qls [OPTION...]
-h --help print usage info and exit
-C --circuit output the whole circuit (default)
-O <name> --oracle=<name> output only the oracle <name> (default: r)
-f <format> --format=<format> output format for circuits (default: gatecount)
-g <gatebase> --gatebase=<gatebase> type of gates to decompose into (default: logical)
-o <oracle> select oracle implementation to use (default: blackbox)
-p <param> --param=<param> choose a set of parameters (default: dummy).
-P <n> --peel=<n> peel <n> layers of boxed subroutines (default: 0).
Possible values for format are: ascii, gatecount.
Possible values for gatebase are: logical, binary, toffoli, cliffordt_old, cliffordt, cliffordt_keepphase, standard, strict, approximate, approximate_keepphase, exact, trimcontrols.
Possible values for oracle implementation are: matlab, blackbox.
Possible values for param are: dummy, small, large.
Possible values for oracle are: r, b, A[band][t|f]. E.g. "-OA1t" asks for band 1 with boolean argument True. For all three oracles, the factors are set up to 1.0.
Running the tf program
======================
Usage for Triangle Finding algorithm:
-------------------------------------
Usage: tf [OPTION...]
-h --help print usage info and exit
-f <format> --format=<format> output format for circuits (default: preview)
-g <gatebase> --gatebase=<gatebase> type of gates to decompose into (default: logical)
-l <l> --l=<l> parameter l (default: 4)
-n <n> --n=<n> parameter n (default: 3)
-r <r> --r=<r> parameter r (default: 2)
-C --QWTFP output the whole circuit (default)
-O --oracle output only the oracle
-s <subroutine> --subroutine=<subroutine> output the chosen subroutine (default: adder)
-Q use alternative qRAM implementation
-o <oracle> select oracle to use (default: blackbox)
-A --arith test/simulate the arithmetic routines
-T --oracletest test/simulate the oracle
Possible values for format are: eps, pdf, ps, postscript, ascii, preview, gatecount.
Possible values for gatebase are: logical, binary, toffoli, cliffordt_old, cliffordt, cliffordt_keepphase, standard, strict, approximate, approximate_keepphase, exact, trimcontrols.
Possible values for oracle are: orthodox, blackbox.
Possible values for subroutine are: zero, initialize, hadamard, setup, qwsh, diffuse, fetcht, storet, fetchstoret, fetche, fetchstoree, update, swap, a15, a16, a17, a18, gcqwalk, gcqwstep, convertnode, testequal, pow17, mod3, sub, add, mult.
Running the usv program
=======================
Usage for Unique Shortest Vector algorithm:
-------------------------------------------
Usage: usv [OPTION...]
-h --help print usage info and exit
-f <format> --format=<format> output format for circuits (default: eps)
-g <gatebase> --gatebase=<gatebase> type of gates to decompose into (default: logical)
-n <n> --n=<n> parameter n (default: 5)
-b <b> --b=<b> parameter b (default: 5X5 with entries = 1)
-s <s> --s=<s> Random number generator seed s (default: 1)
-F output subroutine f (depends on b).
-G output subroutine g (depends on b).
-H output subroutine h (depends on n).
-U output algorithm 1 (depends on b).
-Q output algorithm 2 (depends on b).
-R output algorithm 3 (depends on b).
-T output algorithm 4 (depends on n).
-S output sieving subroutine (depends on n).
-D output algorithm 5 (depends on n).
-t test subroutine h (depends on n).
Possible values for format are: eps, pdf, ps, postscript, ascii, preview, gatecount.
Possible values for gatebase are: logical, binary, toffoli, cliffordt_old, cliffordt, cliffordt_keepphase, standard, strict, approximate, approximate_keepphase, exact, trimcontrols.