Quantum++
v1.0.0-beta1
C++11 quantum computing library
|
Quantum++ is a C++11 general purpose quantum computing library, composed solely of template header files. Quantum++ is written in standard C++11 and has very low external dependencies, using only the Eigen 3 linear algebra header-only template library and, if available, the OpenMP multi-processing library.
Quantum++ is not restricted to qubit systems or specific quantum information processing tasks, being capable of simulating arbitrary quantum processes. The main design factors taken in consideration were the ease of use, high portability, and high performance.
If you are interesting in contributing, please contact me. To contribute, you need to have a good knowledge of C++ (preferably C++11), including templates and the standard library, a basic knowledge of quantum computing and linear algebra, and working experience with Eigen 3.
For additional Eigen 3 documentation see http://eigen.tuxfamily.org/dox/. For a simple Eigen 3 quick ASCII reference see http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt.
Copyright (c) 2013 - 2016 Vlad Gheorghiu, vgheorgh AT gmail DOT com.
Quantum++ is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Quantum++ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Quantum++. If not, see http://www.gnu.org/licenses/.
$HOME/eigen
$HOME/qpp
/Applications/MATLAB_R2016a.app/extern/include
/Applications/MATLAB_R2016a.app/bin/maci64
$HOME/qpp/examples/minimal.cpp
$HOME/qpp/examples/minimal
$HOME/qpp/examples
g++ -pedantic -std=c++11 -Wall -Wextra -Weffc++ -fopenmp \ -O3 -DNDEBUG -DEIGEN_NO_DEBUG \ -isystem $HOME/eigen -I $HOME/qpp/include \ minimal.cpp -o minimal
g++ -pedantic -std=c++11 -Wall -Wextra -Weffc++ -fopenmp \ -g3 -DDEBUG \ -isystem $HOME/eigen -I $HOME/qpp/include \ minimal.cpp -o minimal
g++ -pedantic -std=c++11 -Wall -Wextra -Weffc++ -fopenmp \ -O3 -DNDEBUG -DEIGEN_NO_DEBUG \ -isystem $HOME/eigen -I $HOME/qpp/include \ -I/Applications/MATLAB_R2016a.app/extern/include \ -L/Applications/MATLAB_R2016a.app/bin/maci64 \ -lmx -lmat minimal.cpp -o minimal
g++ -pedantic -std=c++11 -Wall -Wextra -Weffc++ -fopenmp \ -g3 -DDEBUG \ -isystem $HOME/eigen -I $HOME/qpp/include \ -I /Applications/MATLAB_R2016a.app/extern/include \ -L /Applications/MATLAB_R2016a.app/bin/maci64 \ -lmx -lmat minimal.cpp -o minimal
The current version of the repository has a ./CMakeLists.txt
configuration file for building examples using cmake. To build an example using cmake, I recommend an out-of-source build, i.e., from the root of the project (where ./include
is located), type
mkdir ./build cd ./build cmake .. make
The above commands build the relase version (default) executable qpp
, from the source file ./examples/minimal.cpp
, without MATLAB support (default), inside the directory ./build
. To build a different configuration, e.g. debug version with MATLAB support, type from the root of the project
cd ./build rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_MATLAB=ON .. make
Or, to disable OpenMP support (enabled by default), type
cd ./build rm -rf * cmake -DWITH_OPENMP=OFF .. make
To change the name of the example file, the location of the Eigen 3 library or the location of MATLAB installation, edit the ./CMakeLists.txt
file. See also ./CMakeLists.txt
for additional options. Do not forget to remove everything from the ./build
directory before a fresh build!
Google Mock 1.7.0 is included with the project. I strongly recommend to use cmake version 3.0.0 or later as a building system. By default the current CMakeLists.txt
automatically builds all unit tests as ./build/unit_tests/tests/qpp_testing
. To disable automatic building of unit tests, type
cmake -DWITH_UNIT_TESTS=OFF ..
from inside ./build
.
<cmath>
using the provided patch ./cmath_cygwin.patch
.DYLD_LIBRARY_PATH
is set to point to the MATLAB compiler library location, see the run_OSX_MATLAB
script. Otherwise, you will get a runtime error like dyld: Library not loaded: @rpath/libmat.dylib
. * I recommend running via a script, as otherwise setting the `DYLD_LIBRARY_PATH` globally may interfere with [macports](https://www.macports.org/)' [cmake](http://www.cmake.org/) installation (in case you use [cmake](http://www.cmake.org/) from [macports](https://www.macports.org/)). If you use a script, then the environment variable is local to the script and does not interfere with the rest of the system. * Example of script, assumed to be located in the root directory of Quantum++: #!/bin/sh MATLAB=/Applications/MATLAB_R2016a.app export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$MATLAB/bin/maci64 ./build/qpp
-fno-weak
compiler flag. See http://stackoverflow.com/questions/23330641/gnu-gdb-can-not-step-into-template-functions-os-x-mavericks for more details about this problem.