quantumlib / qsim

Schrödinger and Schrödinger-Feynman simulators for quantum circuits.
Apache License 2.0
428 stars 145 forks source link

Unable to build qsimcirq on MacOS #242

Closed JacobBeckey closed 9 months ago

JacobBeckey commented 3 years ago

When running "pip install qsimcirq" on my mac I get the following two error messages:

``` ERROR: Command errored out with exit status 1: command: /Users/jacobbeckey/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py'"'"'; __file__='"'"'/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-wheel-pqkk359w cwd: /private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/ Complete output (69 lines): running bdist_wheel running build running build_py creating build creating build/lib.macosx-10.9-x86_64-3.7 creating build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/qsim_circuit.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/__init__.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/qsimh_simulator.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/qsim_simulator.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq running build_ext -- The C compiler identification is AppleClang 11.0.3.11030032 -- The CXX compiler identification is AppleClang 11.0.3.11030032 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found PythonInterp: /Users/jacobbeckey/anaconda3/bin/python (found version "3.7.6") -- Found PythonLibs: /Users/jacobbeckey/anaconda3/lib/libpython3.7m.dylib -- Performing Test HAS_CPP14_FLAG -- Performing Test HAS_CPP14_FLAG - Failed -- Performing Test HAS_CPP11_FLAG -- Performing Test HAS_CPP11_FLAG - Failed CMake Error at build/temp.macosx-10.9-x86_64-3.7/_deps/pybind11-src/tools/pybind11Tools.cmake:32 (message): Unsupported compiler -- pybind11 requires C++11 support! Call Stack (most recent call first): build/temp.macosx-10.9-x86_64-3.7/_deps/pybind11-src/CMakeLists.txt:33 (include) -- Configuring incomplete, errors occurred! See also "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/build/temp.macosx-10.9-x86_64-3.7/CMakeFiles/CMakeOutput.log". See also "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/build/temp.macosx-10.9-x86_64-3.7/CMakeFiles/CMakeError.log". Traceback (most recent call last): File "", line 1, in File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 93, in packages=['qsimcirq']) File "/Users/jacobbeckey/anaconda3/lib/python3.7/site-packages/setuptools/__init__.py", line 144, in setup return distutils.core.setup(**attrs) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/core.py", line 148, in setup dist.run_commands() File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 966, in run_commands self.run_command(cmd) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/Users/jacobbeckey/anaconda3/lib/python3.7/site-packages/wheel/bdist_wheel.py", line 223, in run self.run_command('build') File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/cmd.py", line 313, in run_command self.distribution.run_command(command) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/command/build.py", line 135, in run self.run_command(cmd_name) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/cmd.py", line 313, in run_command self.distribution.run_command(command) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 36, in run self.build_extension(ext) File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 65, in build_extension ['cmake', ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env) File "/Users/jacobbeckey/anaconda3/lib/python3.7/subprocess.py", line 363, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['cmake', '/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/build/lib.macosx-10.9-x86_64-3.7/qsimcirq', '-DPYTHON_EXECUTABLE=/Users/jacobbeckey/anaconda3/bin/python', '-DCMAKE_BUILD_TYPE=Release']' returned non-zero exit status 1. ---------------------------------------- ERROR: Failed building wheel for qsimcirq ```

The rest of the error was:

``` Failed to build qsimcirq Installing collected packages: qsimcirq Running setup.py install for qsimcirq ... error ERROR: Command errored out with exit status 1: command: /Users/jacobbeckey/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py'"'"'; __file__='"'"'/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-record-ir9b1dj5/install-record.txt --single-version-externally-managed --compile --install-headers /Users/jacobbeckey/anaconda3/include/python3.7m/qsimcirq cwd: /private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/ Complete output (71 lines): running install running build running build_py creating build creating build/lib.macosx-10.9-x86_64-3.7 creating build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/qsim_circuit.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/__init__.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/qsimh_simulator.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq copying qsimcirq/qsim_simulator.py -> build/lib.macosx-10.9-x86_64-3.7/qsimcirq running build_ext -- The C compiler identification is AppleClang 11.0.3.11030032 -- The CXX compiler identification is AppleClang 11.0.3.11030032 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found PythonInterp: /Users/jacobbeckey/anaconda3/bin/python (found version "3.7.6") -- Found PythonLibs: /Users/jacobbeckey/anaconda3/lib/libpython3.7m.dylib -- Performing Test HAS_CPP14_FLAG -- Performing Test HAS_CPP14_FLAG - Failed -- Performing Test HAS_CPP11_FLAG -- Performing Test HAS_CPP11_FLAG - Failed CMake Error at build/temp.macosx-10.9-x86_64-3.7/_deps/pybind11-src/tools/pybind11Tools.cmake:32 (message): Unsupported compiler -- pybind11 requires C++11 support! Call Stack (most recent call first): build/temp.macosx-10.9-x86_64-3.7/_deps/pybind11-src/CMakeLists.txt:33 (include) -- Configuring incomplete, errors occurred! See also "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/build/temp.macosx-10.9-x86_64-3.7/CMakeFiles/CMakeOutput.log". See also "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/build/temp.macosx-10.9-x86_64-3.7/CMakeFiles/CMakeError.log". Traceback (most recent call last): File "", line 1, in File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 93, in packages=['qsimcirq']) File "/Users/jacobbeckey/anaconda3/lib/python3.7/site-packages/setuptools/__init__.py", line 144, in setup return distutils.core.setup(**attrs) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/core.py", line 148, in setup dist.run_commands() File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 966, in run_commands self.run_command(cmd) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/Users/jacobbeckey/anaconda3/lib/python3.7/site-packages/setuptools/command/install.py", line 61, in run return orig.install.run(self) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/command/install.py", line 545, in run self.run_command('build') File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/cmd.py", line 313, in run_command self.distribution.run_command(command) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/command/build.py", line 135, in run self.run_command(cmd_name) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/cmd.py", line 313, in run_command self.distribution.run_command(command) File "/Users/jacobbeckey/anaconda3/lib/python3.7/distutils/dist.py", line 985, in run_command cmd_obj.run() File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 36, in run self.build_extension(ext) File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 65, in build_extension ['cmake', ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env) File "/Users/jacobbeckey/anaconda3/lib/python3.7/subprocess.py", line 363, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['cmake', '/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq', '-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/build/lib.macosx-10.9-x86_64-3.7/qsimcirq', '-DPYTHON_EXECUTABLE=/Users/jacobbeckey/anaconda3/bin/python', '-DCMAKE_BUILD_TYPE=Release']' returned non-zero exit status 1. ---------------------------------------- ERROR: Command errored out with exit status 1: /Users/jacobbeckey/anaconda3/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py'"'"'; __file__='"'"'/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-record-ir9b1dj5/install-record.txt --single-version-externally-managed --compile --install-headers /Users/jacobbeckey/anaconda3/include/python3.7m/qsimcirq Check the logs for full command output. ```

I would be grateful for any input as to how I could circumvent this issue. I am not sure how to interpret all of this error message, but the one part indicates

Unsupported compiler -- pybind11 requires C++11 support!

So, I attempted to use home brew to update my gcc but that also did not work.

95-martin-orion commented 3 years ago

Hi @JacobBeckey,

Before digging too deeply into this, I'll note that we recommend our Docker build instructions for running on MacOS. Since Docker builds run in a container, this would avoid any OS-specific issues you might be experiencing.

If Docker isn't an option:

The error messages point to an issue with CMake. Depending on how your version of CMake is configured, it may or may not use C++11 by default; based on the Performing Test HAS_CPP11_FLAG - Failed line above, I'm guessing it's not set in your case. There are a couple of options that may resolve this:

JacobBeckey commented 3 years ago

Thank you for your response. I uninstalled cmake and updated and that did not work. I then downloaded the repo, changed the CMakeLists.txt file to set C++11 as the default. I saved the file, restarted my terminal, changed into the directory containing qsimcirq and then ran pip install qsimcirq and sadly got the same error as before. Any ideas?

95-martin-orion commented 3 years ago

{...} changed into the directory containing qsimcirq and then ran pip install qsimcirq and sadly got the same error as before. Any ideas?

Try this again but with pip install . (The . here tells pip to install from the current directory instead of the public release of qsimcirq.)

If that doesn't work...since you're installing qsimcirq, I assume you are also using Cirq? Depending on your use case, you may be able to get by using the built-in Cirq simulators. They're not as fast as qsim, but for up to ~12 qubits the difference in runtime is usually less than a second.

JacobBeckey commented 3 years ago

Sadly that still did not work. I appreciate your help though.

Does cirq.DensityMatrixSimulator() work roughly the same as cirq.mixedsimulator then? The former ran fine on my machine and the latter was the root of this whole issue (it tells me to pip install qismcirq).

95-martin-orion commented 3 years ago

Where is cirq.mixedsimulator defined/documented? I wasn't able to find it in my local clone of Cirq. Assuming you're trying to do mixed-state simulation though, cirq.DensityMatrixSimulator() should work; note however that it operates on density matrices and therefore has a much lower maximum-qubit count than the basic cirq.Simulator().

JacobBeckey commented 3 years ago

Hey, this is the mixed simulator I was attempting to use: https://pennylane-cirq.readthedocs.io/en/latest/devices/mixed_simulator.html

But, okay, I really only need to work with 8 or so qubits max for what I am attempting to accomplish.

95-martin-orion commented 3 years ago

Ah, that checks out. Yes, cirq.DensityMatrixSimulator() will give the behavior you need and should have similar performance to cirq.mixedsimulator; both use the density matrix representation for quantum states.

I'll keep this issue open to highlight the need for non-Docker options on MacOS.

balopat commented 3 years ago

FWIW I tried this quickly and went down the rabbithole on my mac. Not sure it will be easy but could be worthwhile. I don't have a solution yet, some partial findings:

I started with the same error as @JacobBeckey. After adding set(CMAKE_CXX_STANDARD 11) to CMakeLists.txt: clang: error: unsupported option '-fopenmp' After this I realized calling make results in the same error, and I know a bit more about make than CMake so I continued on that path.

I installed brew install llvm libomp and then in ./Makefile: CXX=/usr/local/opt/llvm/bin/clang++ CXXFLAGS=-O3 -march=native -I/usr/local/opt/llvm/include -I/usr/local/opt/libomp/include -fopenmp -lomp -L/usr/local/opt/llvm/lib -L/usr/local/opt/libomp/lib

This makes make qsim work yay!

However make pybind was still failing:

``` pybind_main.cpp:353:33: warning: lambda capture 'circuit' is not used [-Wunused-lambda-capture] auto measure = [&bitstrings, &circuit, &litudes]( ~~~^~~~~~~ 1 warning generated. Undefined symbols for architecture x86_64: "_PyBaseObject_Type", referenced from: pybind11::detail::make_object_base_type(_typeobject*) in pybind_main-6cad78.o "_PyBuffer_Release", referenced from: pybind11::buffer_info::~buffer_info() in pybind_main-6cad78.o "_PyBytes_AsString", referenced from: pybind11::detail::string_caster, std::__1::allocator >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o bool pybind11::detail::string_caster, std::__1::allocator >, false>::load_bytes(std::__1::enable_if::value, pybind11::handle>::type) in pybind_main-6cad78.o "_PyBytes_AsStringAndSize", referenced from: pybind11::str::operator std::__1::basic_string, std::__1::allocator >() const in pybind_main-6cad78.o "_PyBytes_Size", referenced from: pybind11::detail::string_caster, std::__1::allocator >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o bool pybind11::detail::string_caster, std::__1::allocator >, false>::load_bytes(std::__1::enable_if::value, pybind11::handle>::type) in pybind_main-6cad78.o "_PyCFunction_NewEx", referenced from: pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o "_PyCFunction_Type", referenced from: pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o "_PyCapsule_GetContext", referenced from: pybind11::capsule::capsule(void const*, void (*)(void*))::'lambda'(_object*)::__invoke(_object*) in pybind_main-6cad78.o "_PyCapsule_GetName", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o pybind11::detail::type_caster_generic::try_load_foreign_module_local(pybind11::handle) in pybind_main-6cad78.o pybind11::class_ > >::get_function_record(pybind11::handle) in pybind_main-6cad78.o "_PyCapsule_GetPointer", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o pybind11::detail::type_caster_generic::try_load_foreign_module_local(pybind11::handle) in pybind_main-6cad78.o pybind11::class_ > >::get_function_record(pybind11::handle) in pybind_main-6cad78.o pybind11::capsule::capsule(void const*, void (*)(void*))::'lambda'(_object*)::__invoke(_object*) in pybind_main-6cad78.o pybind11::detail::npy_api::lookup() in pybind_main-6cad78.o ... "_PyCapsule_New", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o pybind11::detail::generic_type::initialize(pybind11::detail::type_record const&) in pybind_main-6cad78.o pybind11::capsule::capsule(void const*, void (*)(void*)) in pybind_main-6cad78.o "_PyCapsule_SetContext", referenced from: pybind11::capsule::capsule(void const*, void (*)(void*)) in pybind_main-6cad78.o "_PyCapsule_Type", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyComplex_FromDoubles", referenced from: pybind11::handle pybind11::detail::list_caster, std::__1::allocator > >, std::__1::complex >::cast, std::__1::allocator > > >(std::__1::vector, std::__1::allocator > >&&, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o "_PyDict_Contains", referenced from: pybind11::detail::enum_base::value(char const*, pybind11::object, char const*) in pybind_main-6cad78.o bool pybind11::dict::contains(char const*&) const in pybind_main-6cad78.o "_PyDict_Copy", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyDict_DelItemString", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyDict_GetItemString", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyDict_New", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o void pybind11::cpp_function::initialize, std::__1::allocator > > (*&)(pybind11::dict const&), std::__1::vector, std::__1::allocator > >, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [24]>(std::__1::vector, std::__1::allocator > > (*&)(pybind11::dict const&), std::__1::vector, std::__1::allocator > > (*)(pybind11::dict const&), pybind11::name const&, pybind11::scope const&, pybind11::sibling const&, char const (&) [24])::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize (*&)(pybind11::dict const&), pybind11::array_t, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [57]>(pybind11::array_t (*&)(pybind11::dict const&), pybind11::array_t (*)(pybind11::dict const&), pybind11::name const&, pybind11::scope const&, pybind11::sibling const&, char const (&) [57])::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize > (*&)(pybind11::dict const&), std::__1::vector >, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [22]>(std::__1::vector > (*&)(pybind11::dict const&), std::__1::vector > (*)(pybind11::dict const&), pybind11::name const&, pybind11::scope const&, pybind11::sibling const&, char const (&) [22])::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize, std::__1::allocator > > (*&)(pybind11::dict const&), std::__1::vector, std::__1::allocator > >, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [25]>(std::__1::vector, std::__1::allocator > > (*&)(pybind11::dict const&), std::__1::vector, std::__1::allocator > > (*)(pybind11::dict const&), pybind11::name const&, pybind11::scope const&, pybind11::sibling const&, char const (&) [25])::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o _pybind11_get_dict in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool) in pybind_main-6cad78.o ... "_PyDict_Next", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda0'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda2'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::export_values() in pybind_main-6cad78.o pybind11::detail::map_caster, std::__1::allocator >, float, std::__1::less, std::__1::allocator > >, std::__1::allocator, std::__1::allocator > const, float> > >, std::__1::basic_string, std::__1::allocator >, float>::load(pybind11::handle, bool) in pybind_main-6cad78.o ... "_PyDict_Size", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyDict_Type", referenced from: pybind11::dict::dict(pybind11::object&&) in pybind_main-6cad78.o "_PyErr_Clear", referenced from: pybind11::detail::string_caster, std::__1::allocator >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster& pybind11::detail::load_type(pybind11::detail::type_caster&, pybind11::handle const&) in pybind_main-6cad78.o pybind11::module& pybind11::module::def, std::__1::allocator > > (*)(pybind11::dict const&), char [24]>(char const*, std::__1::vector, std::__1::allocator > > (*&&)(pybind11::dict const&), char const (&) [24]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def (*)(pybind11::dict const&), char [57]>(char const*, pybind11::array_t (*&&)(pybind11::dict const&), char const (&) [57]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def > (*)(pybind11::dict const&), char [22]>(char const*, std::__1::vector > (*&&)(pybind11::dict const&), char const (&) [22]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def, std::__1::allocator > > (*)(pybind11::dict const&), char [25]>(char const*, std::__1::vector, std::__1::allocator > > (*&&)(pybind11::dict const&), char const (&) [25]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def > const&, std::__1::map, std::__1::allocator >, float, std::__1::less, std::__1::allocator > >, std::__1::allocator, std::__1::allocator > const, float> > > const&, qsim::Circuit >*), char [34]>(char const*, void (*&&)(qsim::Cirq::GateKind, unsigned int, std::__1::vector > const&, std::__1::map, std::__1::allocator >, float, std::__1::less, std::__1::allocator > >, std::__1::allocator, std::__1::allocator > const, float> > > const&, qsim::Circuit >*), char const (&) [34]) in pybind_main-6cad78.o ... "_PyErr_ExceptionMatches", referenced from: pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyErr_Fetch", referenced from: pybind11::error_already_set::error_already_set() in pybind_main-6cad78.o pybind11::detail::error_string() in pybind_main-6cad78.o pybind11::error_already_set::~error_already_set() in pybind_main-6cad78.o "_PyErr_Format", referenced from: _PyInit_qsim in pybind_main-6cad78.o _pybind11_set_dict in pybind_main-6cad78.o "_PyErr_NormalizeException", referenced from: pybind11::detail::error_string() in pybind_main-6cad78.o "_PyErr_Occurred", referenced from: pybind11::detail::error_string() in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyErr_Restore", referenced from: pybind11::detail::translate_local_exception(std::exception_ptr) in pybind_main-6cad78.o pybind11::detail::translate_exception(std::exception_ptr) in pybind_main-6cad78.o pybind11::detail::error_string() in pybind_main-6cad78.o pybind11::error_already_set::~error_already_set() in pybind_main-6cad78.o pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyErr_SetString", referenced from: _PyInit_qsim in pybind_main-6cad78.o pybind11::detail::translate_exception(std::exception_ptr) in pybind_main-6cad78.o pybind11::detail::error_string() in pybind_main-6cad78.o pybind11::cast_error::set_error() const in pybind_main-6cad78.o _pybind11_object_init in pybind_main-6cad78.o pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o _pybind11_getbuffer in pybind_main-6cad78.o ... "_PyErr_WarnEx", referenced from: pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o "_PyEval_AcquireThread", referenced from: pybind11::gil_scoped_acquire::gil_scoped_acquire() in pybind_main-6cad78.o "_PyEval_GetBuiltins", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyEval_InitThreads", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyEval_SaveThread", referenced from: pybind11::gil_scoped_acquire::~gil_scoped_acquire() in pybind_main-6cad78.o "_PyExc_BufferError", referenced from: _pybind11_getbuffer in pybind_main-6cad78.o "_PyExc_FutureWarning", referenced from: pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o "_PyExc_ImportError", referenced from: _PyInit_qsim in pybind_main-6cad78.o "_PyExc_IndexError", referenced from: pybind11::detail::translate_exception(std::exception_ptr) in pybind_main-6cad78.o "_PyExc_MemoryError", referenced from: pybind11::detail::translate_exception(std::exception_ptr) in pybind_main-6cad78.o "_PyExc_OverflowError", referenced from: pybind11::detail::translate_exception(std::exception_ptr) in pybind_main-6cad78.o "_PyExc_RuntimeError", referenced from: pybind11::detail::translate_exception(std::exception_ptr) in pybind_main-6cad78.o pybind11::detail::error_string() in pybind_main-6cad78.o pybind11::cast_error::set_error() const in pybind_main-6cad78.o pybind11::reference_cast_error::set_error() const in pybind_main-6cad78.o "_PyExc_SystemError", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyExc_TypeError", referenced from: _pybind11_object_init in pybind_main-6cad78.o pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o _pybind11_set_dict in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster_generic::src_and_type(void const*, std::type_info const&, std::type_info const*) in pybind_main-6cad78.o pybind11::type_error::set_error() const in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o ... "_PyExc_ValueError", referenced from: pybind11::detail::translate_exception(std::exception_ptr) in pybind_main-6cad78.o pybind11::value_error::set_error() const in pybind_main-6cad78.o "_PyException_SetTraceback", referenced from: pybind11::detail::error_string() in pybind_main-6cad78.o "_PyFloat_AsDouble", referenced from: pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyFloat_Type", referenced from: pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyFrame_GetLineNumber", referenced from: pybind11::detail::error_string() in pybind_main-6cad78.o "_PyGILState_Ensure", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyGILState_GetThisThreadState", referenced from: pybind11::gil_scoped_acquire::gil_scoped_acquire() in pybind_main-6cad78.o "_PyGILState_Release", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyImport_ImportModule", referenced from: pybind11::detail::npy_api::lookup() in pybind_main-6cad78.o "_PyInstanceMethod_New", referenced from: pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o "_PyInstanceMethod_Type", referenced from: _pybind11_meta_getattro in pybind_main-6cad78.o pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o pybind11::class_ > >::get_function_record(pybind11::handle) in pybind_main-6cad78.o "_PyList_Append", referenced from: pybind11::detail::loader_life_support::add_patient(pybind11::handle) in pybind_main-6cad78.o "_PyList_GetItem", referenced from: pybind11::detail::accessor::get_cache() const in pybind_main-6cad78.o "_PyList_New", referenced from: qsimh_simulate(pybind11::dict const&) in pybind_main-6cad78.o pybind11::handle pybind11::detail::list_caster, std::__1::allocator > >, std::__1::complex >::cast, std::__1::allocator > > >(std::__1::vector, std::__1::allocator > >&&, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o pybind11::handle pybind11::detail::list_caster >, unsigned int>::cast > >(std::__1::vector >&&, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o pybind11::detail::type_record::type_record() in pybind_main-6cad78.o pybind11::detail::loader_life_support::add_patient(pybind11::handle) in pybind_main-6cad78.o pybind11::handle pybind11::detail::list_caster, std::__1::allocator > >, qsim::Gate >::cast, std::__1::allocator > > const&>(std::__1::vector, std::__1::allocator > > const&, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o "_PyList_Size", referenced from: pybind11::detail::generic_type::initialize(pybind11::detail::type_record const&) in pybind_main-6cad78.o "_PyLong_AsUnsignedLong", referenced from: pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyLong_FromLong", referenced from: pybind11::detail::enum_base::init(bool, bool)::'lambda'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda0'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda2'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::export_values() in pybind_main-6cad78.o "_PyLong_FromSize_t", referenced from: pybind11::handle pybind11::detail::list_caster >, unsigned int>::cast > >(std::__1::vector >&&, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o void pybind11::cpp_function::initialize > >& pybind11::class_ > >::def_readwrite >, unsigned int>(char const*, unsigned int qsim::Circuit >::*)::'lambda'(qsim::Circuit > const&), unsigned int const&, qsim::Circuit > const&, pybind11::is_method>(qsim::Circuit >&&, unsigned int (*)(), pybind11::class_ > >& pybind11::class_ > >::def_readwrite >, unsigned int>(char const*, unsigned int qsim::Circuit >::*)::'lambda'(qsim::Circuit > const&) const&...)::'lambda'(pybind11::detail::function_call&)::__invoke(pybind11::detail::function_call&) in pybind_main-6cad78.o void pybind11::cpp_function::initialize::enum_<>(pybind11::handle const&, char const*)::'lambda'(qsim::Cirq::GateKind), unsigned int, qsim::Cirq::GateKind, pybind11::name, pybind11::is_method, pybind11::sibling>(&&, pybind11::enum_::enum_<>(pybind11::handle const&, char const*)::'lambda'(qsim::Cirq::GateKind) (*)(unsigned int...), qsim::Cirq::GateKind const&)::'lambda'(pybind11::detail::function_call&)::__invoke(pybind11::detail::function_call&) in pybind_main-6cad78.o void pybind11::cpp_function::initialize::enum_<>(pybind11::handle const&, char const*)::'lambda0'(qsim::Cirq::GateKind), unsigned int, qsim::Cirq::GateKind, pybind11::name, pybind11::is_method, pybind11::sibling>(&&, pybind11::enum_::enum_<>(pybind11::handle const&, char const*)::'lambda0'(qsim::Cirq::GateKind) (*)(unsigned int...), qsim::Cirq::GateKind const&)::'lambda'(pybind11::detail::function_call&)::__invoke(pybind11::detail::function_call&) in pybind_main-6cad78.o "_PyMem_Calloc", referenced from: pybind11::detail::instance::allocate_layout() in pybind_main-6cad78.o "_PyMem_Free", referenced from: pybind11::detail::instance::deallocate_layout() in pybind_main-6cad78.o "_PyMethod_Type", referenced from: pybind11::class_ > >::get_function_record(pybind11::handle) in pybind_main-6cad78.o "_PyModule_AddObject", referenced from: pybind11::module::add_object(char const*, pybind11::handle, bool) in pybind_main-6cad78.o "_PyModule_Create2", referenced from: pybind11::module::module(char const*, char const*) in pybind_main-6cad78.o "_PyModule_Type", referenced from: pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o "_PyNumber_And", referenced from: pybind11::detail::enum_base::init(bool, bool)::'lambda5'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda6'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o "_PyNumber_Check", referenced from: pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyNumber_Float", referenced from: pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyNumber_Invert", referenced from: pybind11::detail::enum_base::init(bool, bool)::'lambda'(pybind11::object)::operator()(pybind11::object) const in pybind_main-6cad78.o "_PyNumber_Long", referenced from: pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::int_::int_(pybind11::object const&) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyNumber_Or", referenced from: pybind11::detail::enum_base::init(bool, bool)::'lambda7'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda8'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o "_PyNumber_Xor", referenced from: pybind11::detail::enum_base::init(bool, bool)::'lambda9'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda10'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o "_PyObject_CallFunctionObjArgs", referenced from: pybind11::dict::dict(pybind11::object&&) in pybind_main-6cad78.o "_PyObject_CallObject", referenced from: pybind11::object pybind11::detail::object_api >::operator()<(pybind11::return_value_policy)1, char const* const&>(char const* const&) const in pybind_main-6cad78.o pybind11::object pybind11::detail::object_api >::operator()<(pybind11::return_value_policy)1>() const in pybind_main-6cad78.o pybind11::object pybind11::detail::object_api >::operator()<(pybind11::return_value_policy)1, pybind11::handle&, pybind11::handle&>(pybind11::handle&, pybind11::handle&) const in pybind_main-6cad78.o pybind11::object pybind11::detail::object_api::operator()<(pybind11::return_value_policy)1, pybind11::handle, pybind11::handle, pybind11::none, pybind11::str>(pybind11::handle&&, pybind11::handle&&, pybind11::none&&, pybind11::str&&) const in pybind_main-6cad78.o pybind11::object pybind11::detail::object_api::operator()<(pybind11::return_value_policy)1, pybind11::cpp_function>(pybind11::cpp_function&&) const in pybind_main-6cad78.o pybind11::object pybind11::detail::object_api::operator()<(pybind11::return_value_policy)1, pybind11::cpp_function, pybind11::none, pybind11::none, char const (&) [1]>(pybind11::cpp_function&&, pybind11::none&&, pybind11::none&&, char const (&) [1]) const in pybind_main-6cad78.o pybind11::object pybind11::detail::object_api >::operator()<(pybind11::return_value_policy)1, pybind11::object&, pybind11::handle const&>(pybind11::object&, pybind11::handle const&) const in pybind_main-6cad78.o ... "_PyObject_ClearWeakRefs", referenced from: pybind11::detail::clear_instance(_object*) in pybind_main-6cad78.o "_PyObject_GetAttrString", referenced from: pybind11::detail::accessor::get_cache() const in pybind_main-6cad78.o pybind11::module& pybind11::module::def, std::__1::allocator > > (*)(pybind11::dict const&), char [24]>(char const*, std::__1::vector, std::__1::allocator > > (*&&)(pybind11::dict const&), char const (&) [24]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def (*)(pybind11::dict const&), char [57]>(char const*, pybind11::array_t (*&&)(pybind11::dict const&), char const (&) [57]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def > (*)(pybind11::dict const&), char [22]>(char const*, std::__1::vector > (*&&)(pybind11::dict const&), char const (&) [22]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def, std::__1::allocator > > (*)(pybind11::dict const&), char [25]>(char const*, std::__1::vector, std::__1::allocator > > (*&&)(pybind11::dict const&), char const (&) [25]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def > const&, std::__1::map, std::__1::allocator >, float, std::__1::less, std::__1::allocator > >, std::__1::allocator, std::__1::allocator > const, float> > > const&, qsim::Circuit >*), char [34]>(char const*, void (*&&)(qsim::Cirq::GateKind, unsigned int, std::__1::vector > const&, std::__1::map, std::__1::allocator >, float, std::__1::less, std::__1::allocator > >, std::__1::allocator, std::__1::allocator > const, float> > > const&, qsim::Circuit >*), char const (&) [34]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def > const&, std::__1::vector > const&, qsim::Circuit >*), char [63]>(char const*, void (*&&)(unsigned int, std::__1::vector > const&, std::__1::vector > const&, qsim::Circuit >*), char const (&) [63]) in pybind_main-6cad78.o ... "_PyObject_GetItem", referenced from: pybind11::detail::accessor::get_cache() const in pybind_main-6cad78.o "_PyObject_HasAttrString", referenced from: pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o pybind11::module::add_object(char const*, pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::generic_type::initialize(pybind11::detail::type_record const&) in pybind_main-6cad78.o pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o pybind11::detail::type_caster_generic::try_load_foreign_module_local(pybind11::handle) in pybind_main-6cad78.o "_PyObject_IsInstance", referenced from: _pybind11_meta_setattro in pybind_main-6cad78.o "_PyObject_Malloc", referenced from: pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o "_PyObject_Repr", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyObject_RichCompareBool", referenced from: pybind11::detail::enum_base::init(bool, bool)::'lambda'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda0'(pybind11::handle)::operator()(pybind11::handle) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda0'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda2'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool)::'lambda3'(pybind11::object, pybind11::object)::operator()(pybind11::object, pybind11::object) const in pybind_main-6cad78.o ... "_PyObject_SetAttr", referenced from: pybind11::class_ > >& pybind11::class_ > >::def::execute > >, 0>(pybind11::class_ > >&)::'lambda'(pybind11::detail::value_and_holder&), pybind11::detail::is_new_style_constructor>(char const*, pybind11::class_ > >&&) in pybind_main-6cad78.o pybind11::class_& pybind11::class_::def::enum_<>(pybind11::handle const&, char const*)::'lambda'(qsim::Cirq::GateKind)>(char const*, &&, pybind11::enum_::enum_<>(pybind11::handle const&, char const*)::'lambda'(qsim::Cirq::GateKind) const&...) in pybind_main-6cad78.o pybind11::class_& pybind11::class_::def::enum_<>(pybind11::handle const&, char const*)::'lambda0'(qsim::Cirq::GateKind)>(char const*, &&, pybind11::enum_::enum_<>(pybind11::handle const&, char const*)::'lambda0'(qsim::Cirq::GateKind) const&...) in pybind_main-6cad78.o pybind11::class_& pybind11::class_::def::enum_<>(pybind11::handle const&, char const*)::'lambda'(unsigned int), pybind11::detail::void_type (*)(), qsim::Cirq::GateKind (unsigned int), pybind11::detail::void_type ()>::execute >(pybind11::class_&) &&::'lambda'(pybind11::detail::value_and_holder&, unsigned int), pybind11::detail::is_new_style_constructor>(char const*, pybind11::class_&&) in pybind_main-6cad78.o pybind11::detail::enum_base::value(char const*, pybind11::object, char const*) in pybind_main-6cad78.o void pybind11::detail::accessor::operator= >(pybind11::detail::accessor&&) && in pybind_main-6cad78.o "_PyObject_SetAttrString", referenced from: pybind11::detail::make_static_property_type() in pybind_main-6cad78.o pybind11::detail::make_default_metaclass() in pybind_main-6cad78.o pybind11::detail::make_object_base_type(_typeobject*) in pybind_main-6cad78.o void pybind11::detail::accessor::operator=(char const (&) [16]) && in pybind_main-6cad78.o pybind11::detail::generic_type::initialize(pybind11::detail::type_record const&) in pybind_main-6cad78.o pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o pybind11::detail::generic_type::def_property_static_impl(char const*, pybind11::handle, pybind11::handle, pybind11::detail::function_record*) in pybind_main-6cad78.o ... "_PyObject_SetItem", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o void pybind11::detail::accessor::operator= >(pybind11::detail::accessor&&) && in pybind_main-6cad78.o void pybind11::detail::accessor::operator= >(std::__1::pair&&) && in pybind_main-6cad78.o "_PyObject_Str", referenced from: pybind11::detail::error_string() in pybind_main-6cad78.o pybind11::detail::type_caster, std::__1::allocator >, void>& pybind11::detail::load_type, std::__1::allocator >, void>(pybind11::detail::type_caster, std::__1::allocator >, void>&, pybind11::handle const&) in pybind_main-6cad78.o std::__1::enable_if::value), bool>::type pybind11::move(pybind11::object&&) in pybind_main-6cad78.o pybind11::detail::type_caster& pybind11::detail::load_type(pybind11::detail::type_caster&, pybind11::handle const&) in pybind_main-6cad78.o std::__1::enable_if, std::__1::allocator > >::value), std::__1::basic_string, std::__1::allocator > >::type pybind11::move, std::__1::allocator > >(pybind11::object&&) in pybind_main-6cad78.o pybind11::str::str(pybind11::object&&) in pybind_main-6cad78.o pybind11::str::str(pybind11::object const&) in pybind_main-6cad78.o ... "_PyProperty_Type", referenced from: pybind11::detail::make_static_property_type() in pybind_main-6cad78.o _pybind11_static_get in pybind_main-6cad78.o _pybind11_static_set in pybind_main-6cad78.o pybind11::detail::generic_type::def_property_static_impl(char const*, pybind11::handle, pybind11::handle, pybind11::detail::function_record*) in pybind_main-6cad78.o pybind11::detail::enum_base::init(bool, bool) in pybind_main-6cad78.o "_PySequence_Check", referenced from: pybind11::detail::list_caster, std::__1::allocator > >, qsim::Gate >::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::list_caster >, unsigned int>::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::list_caster >, float>::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PySequence_GetItem", referenced from: pybind11::detail::accessor::get_cache() const in pybind_main-6cad78.o "_PySequence_List", referenced from: pybind11::list::list(pybind11::object&&) in pybind_main-6cad78.o "_PySequence_Size", referenced from: pybind11::detail::list_caster, std::__1::allocator > >, qsim::Gate >::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::list_caster >, unsigned int>::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::list_caster >, float>::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PySequence_Tuple", referenced from: pybind11::tuple::tuple(pybind11::object const&) in pybind_main-6cad78.o "_PyThreadState_Clear", referenced from: pybind11::gil_scoped_acquire::dec_ref() in pybind_main-6cad78.o "_PyThreadState_DeleteCurrent", referenced from: pybind11::gil_scoped_acquire::dec_ref() in pybind_main-6cad78.o "_PyThreadState_Get", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyThreadState_New", referenced from: pybind11::gil_scoped_acquire::gil_scoped_acquire() in pybind_main-6cad78.o "_PyThread_tss_alloc", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyThread_tss_create", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o "_PyThread_tss_get", referenced from: pybind11::gil_scoped_acquire::gil_scoped_acquire() in pybind_main-6cad78.o "_PyThread_tss_set", referenced from: pybind11::detail::get_internals() in pybind_main-6cad78.o pybind11::gil_scoped_acquire::gil_scoped_acquire() in pybind_main-6cad78.o pybind11::gil_scoped_acquire::dec_ref() in pybind_main-6cad78.o "_PyTuple_GetItem", referenced from: pybind11::detail::accessor::get_cache() const in pybind_main-6cad78.o "_PyTuple_New", referenced from: pybind11::tuple pybind11::make_tuple<(pybind11::return_value_policy)1, char const* const&>(char const* const&) in pybind_main-6cad78.o pybind11::object pybind11::detail::object_api >::operator()<(pybind11::return_value_policy)1>() const in pybind_main-6cad78.o pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o pybind11::tuple pybind11::make_tuple<(pybind11::return_value_policy)1, pybind11::handle&, pybind11::handle&>(pybind11::handle&, pybind11::handle&) in pybind_main-6cad78.o pybind11::tuple pybind11::make_tuple<(pybind11::return_value_policy)1, pybind11::handle, pybind11::handle, pybind11::none, pybind11::str>(pybind11::handle&&, pybind11::handle&&, pybind11::none&&, pybind11::str&&) in pybind_main-6cad78.o pybind11::tuple pybind11::make_tuple<(pybind11::return_value_policy)1, pybind11::object&, pybind11::handle const&>(pybind11::object&, pybind11::handle const&) in pybind_main-6cad78.o pybind11::tuple pybind11::make_tuple<(pybind11::return_value_policy)1, pybind11::object&>(pybind11::object&) in pybind_main-6cad78.o ... "_PyTuple_SetItem", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "_PyTuple_Size", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o "_PyType_IsSubtype", referenced from: pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o bool pybind11::detail::type_caster_generic::load_impl(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o pybind11::array::array(pybind11::dtype const&, pybind11::detail::any_container, pybind11::detail::any_container, void const*, pybind11::handle) in pybind_main-6cad78.o pybind11::detail::type_caster::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyType_Ready", referenced from: pybind11::detail::make_static_property_type() in pybind_main-6cad78.o pybind11::detail::make_default_metaclass() in pybind_main-6cad78.o pybind11::detail::make_object_base_type(_typeobject*) in pybind_main-6cad78.o pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o "_PyType_Type", referenced from: pybind11::detail::make_static_property_type() in pybind_main-6cad78.o pybind11::detail::make_default_metaclass() in pybind_main-6cad78.o _pybind11_meta_setattro in pybind_main-6cad78.o _pybind11_meta_getattro in pybind_main-6cad78.o "_PyUnicode_AsEncodedString", referenced from: pybind11::detail::string_caster, std::__1::allocator >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o "_PyUnicode_AsUTF8String", referenced from: pybind11::str::operator std::__1::basic_string, std::__1::allocator >() const in pybind_main-6cad78.o "_PyUnicode_DecodeUTF8", referenced from: pybind11::detail::type_caster::cast(char const*, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o void pybind11::cpp_function::initialize, std::__1::allocator >, pybind11::handle>(pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::handle)&&, std::__1::basic_string, std::__1::allocator > (*)(pybind11::handle))::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o "_PyUnicode_FromFormat", referenced from: pybind11::detail::make_new_python_type(pybind11::detail::type_record const&) in pybind_main-6cad78.o "_PyUnicode_FromString", referenced from: (anonymous namespace)::getCircuit(pybind11::dict const&) in pybind_main-6cad78.o (anonymous namespace)::getBitstrings(pybind11::dict const&, int) in pybind_main-6cad78.o unsigned int (anonymous namespace)::parseOptions(pybind11::dict const&, char const*) in pybind_main-6cad78.o qsimh_simulate(pybind11::dict const&) in pybind_main-6cad78.o pybind11::detail::get_internals() in pybind_main-6cad78.o pybind11::detail::make_static_property_type() in pybind_main-6cad78.o pybind11::detail::make_default_metaclass() in pybind_main-6cad78.o ... "_PyWeakref_NewRef", referenced from: pybind11::detail::all_type_info_get_cache(_typeobject*) in pybind_main-6cad78.o pybind11::detail::keep_alive_impl(pybind11::handle, pybind11::handle) in pybind_main-6cad78.o "_Py_GetVersion", referenced from: _PyInit_qsim in pybind_main-6cad78.o "__PyObject_GetDictPtr", referenced from: pybind11::detail::clear_instance(_object*) in pybind_main-6cad78.o _pybind11_traverse in pybind_main-6cad78.o _pybind11_clear in pybind_main-6cad78.o _pybind11_get_dict in pybind_main-6cad78.o _pybind11_set_dict in pybind_main-6cad78.o "__PyThreadState_UncheckedGet", referenced from: pybind11::gil_scoped_acquire::gil_scoped_acquire() in pybind_main-6cad78.o pybind11::gil_scoped_acquire::dec_ref() in pybind_main-6cad78.o "__PyType_Lookup", referenced from: _pybind11_meta_setattro in pybind_main-6cad78.o _pybind11_meta_getattro in pybind_main-6cad78.o "__Py_Dealloc", referenced from: (anonymous namespace)::getCircuit(pybind11::dict const&) in pybind_main-6cad78.o (anonymous namespace)::getBitstrings(pybind11::dict const&, int) in pybind_main-6cad78.o unsigned int (anonymous namespace)::parseOptions(pybind11::dict const&, char const*) in pybind_main-6cad78.o qsim_simulate_fullstate(pybind11::dict const&) in pybind_main-6cad78.o qsimh_simulate(pybind11::dict const&) in pybind_main-6cad78.o _PyInit_qsim in pybind_main-6cad78.o pybind11::detail::get_internals() in pybind_main-6cad78.o ... "__Py_FalseStruct", referenced from: pybind11::detail::type_caster& pybind11::detail::load_type(pybind11::detail::type_caster&, pybind11::handle const&) in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda0'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda2'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda3'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda4'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o ... "__Py_NoneStruct", referenced from: pybind11::detail::type_caster::cast(char const*, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o pybind11::detail::type_caster& pybind11::detail::load_type(pybind11::detail::type_caster&, pybind11::handle const&) in pybind_main-6cad78.o pybind11::cpp_function::initialize_generic(pybind11::detail::function_record*, char const*, std::type_info const* const*, unsigned long) in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::all_type_info_get_cache(_typeobject*)::'lambda'(pybind11::handle)&&, void (*)(pybind11::handle))::'lambda'(pybind11::detail::function_call&)::__invoke(pybind11::detail::function_call&) in pybind_main-6cad78.o pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o pybind11::module& pybind11::module::def, std::__1::allocator > > (*)(pybind11::dict const&), char [24]>(char const*, std::__1::vector, std::__1::allocator > > (*&&)(pybind11::dict const&), char const (&) [24]) in pybind_main-6cad78.o pybind11::module& pybind11::module::def (*)(pybind11::dict const&), char [57]>(char const*, pybind11::array_t (*&&)(pybind11::dict const&), char const (&) [57]) in pybind_main-6cad78.o ... "__Py_NotImplementedStruct", referenced from: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) in pybind_main-6cad78.o "__Py_TrueStruct", referenced from: pybind11::detail::type_caster& pybind11::detail::load_type(pybind11::detail::type_caster&, pybind11::handle const&) in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda0'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda2'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda3'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o void pybind11::cpp_function::initialize(pybind11::detail::enum_base::init(bool, bool)::'lambda4'(pybind11::object, pybind11::object)&&, bool (*)(pybind11::object, pybind11::object), pybind11::is_method const&)::'lambda'(pybind11::detail::function_call&)::operator()(pybind11::detail::function_call&) const in pybind_main-6cad78.o ... ld: symbol(s) not found for architecture x86_64 clang-11: error: linker command failed with exit code 1 (use -v to see invocation) make[1]: *** [pybind] Error 1 make: *** [pybind] Error 2 ```

After some digging it turns out -undefined dynamic_lookup helps in pybind_interface/Makefile:

# The flags for the compilation of the Pybind11 interface
PYBINDFLAGS = -Wall -shared -std=c++17 -undefined dynamic_lookup -fPIC  `python3 -m pybind11 --includes`

So now make works!

But I have no clue how to make that work with CMake just yet :)

mpharrigan commented 3 years ago

I've simplified @balopat 's instructions to avoid modifying Makefiles :)

Note, the three environment variables being set; You can put this in your .bashrc if you want to live on the edge and then it's just python setup.py develop (or install as the case may be).

Note for those who may try to follow along: if you try to build once and then monkey with the environment variables, any changes likely won't get picked up and it will continue to fail in the same way. CMake caches everything in the build/ directory. While testing, I found it helpful to blow away this directory every time I tried something new.

mpharrigan commented 3 years ago

We'd have to be very careful packaging this as a wheel, though, as it links to our homebrew libomp

$ otool -L qsim.cpython-37m-darwin.so
qsim.cpython-37m-darwin.so:
    /usr/local/opt/libomp/lib/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 902.1.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.100.1)
balopat commented 3 years ago

Super cool! Thanks for adding to the solutions! I confirm that this compiles.

VolodyaCO commented 1 year ago

The above recommendations (both modifying the Makefile as well as CMakeLists.txt) have failed in my case (Apple M1 Max)

I'm getting errors of the following sort:

/opt/homebrew/Cellar/llvm/15.0.5/lib/clang/15.0.5/include/smmintrin.h:14:2: error: "This header is only meant to be used on x86 and x64 architecture"
95-martin-orion commented 1 year ago

@VolodyaCO Please see this comment - in short, the M1 architecture does not support the vector instructions qsim uses for fast simulation. Some alternatives are suggested in the linked comment.

VolodyaCO commented 1 year ago

Thank you for linking the comment!

basnijholt commented 9 months ago

https://github.com/quantumlib/qsim/pull/643 and https://github.com/quantumlib/qsim/pull/644 were just merged which enables Apple Silicon compatibility :tada:

v0.19.0 was also just released.