Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to build qsimcirq on MacOS #242

Closed
JacobBeckey opened this issue Nov 19, 2020 · 15 comments · Fixed by #643
Closed

Unable to build qsimcirq on MacOS #242

JacobBeckey opened this issue Nov 19, 2020 · 15 comments · Fixed by #643

Comments

@JacobBeckey
Copy link

JacobBeckey commented Nov 19, 2020

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 "<string>", line 1, in <module>
    File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 93, in <module>
      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 "<string>", line 1, in <module>
      File "/private/var/folders/cx/21nh2p2d4pd4gz06mvt1bqjr0000gn/T/pip-install-ymbzxiss/qsimcirq/setup.py", line 93, in <module>
        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
Copy link
Collaborator

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:

  • Update CMake (this may provide C++11 as default, but I was unable to find docs explicitly confirming it)
  • Set the CMAKE_CXX_STANDARD flag as outlined in this StackOverflow question: How to activate C++11 in CMake. Since the CMakeLists.txt is part of the qsim repo, you'll need to clone the repo locally and pip-install from your modified version.

@JacobBeckey
Copy link
Author

JacobBeckey commented Nov 19, 2020

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
Copy link
Collaborator

{...} 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
Copy link
Author

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
Copy link
Collaborator

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
Copy link
Author

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
Copy link
Collaborator

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
Copy link
Contributor

balopat commented Nov 20, 2020

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, &amplitudes](
                             ~~~^~~~~~~
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::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      bool pybind11::detail::string_caster<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::load_bytes<char>(std::__1::enable_if<std::is_same<char, char>::value, pybind11::handle>::type) in pybind_main-6cad78.o
  "_PyBytes_AsStringAndSize", referenced from:
      pybind11::str::operator std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >() const in pybind_main-6cad78.o
  "_PyBytes_Size", referenced from:
      pybind11::detail::string_caster<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      bool pybind11::detail::string_caster<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::load_bytes<char>(std::__1::enable_if<std::is_same<char, char>::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_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >::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_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >::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::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > >, std::__1::complex<float> >::cast<std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > >(std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > >&&, 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*&>(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::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&)(pybind11::dict const&), std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > >, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [24]>(std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&)(pybind11::dict const&), std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*)(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::array_t<float, 16> (*&)(pybind11::dict const&), pybind11::array_t<float, 16>, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [57]>(pybind11::array_t<float, 16> (*&)(pybind11::dict const&), pybind11::array_t<float, 16> (*)(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<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > (*&)(pybind11::dict const&), std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [22]>(std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > (*&)(pybind11::dict const&), std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > (*)(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::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&)(pybind11::dict const&), std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > >, pybind11::dict const&, pybind11::name, pybind11::scope, pybind11::sibling, char [25]>(std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&)(pybind11::dict const&), std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*)(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::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, float> > >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, 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::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<bool, void>& pybind11::detail::load_type<bool, void>(pybind11::detail::type_caster<bool, void>&, pybind11::handle const&) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*)(pybind11::dict const&), char [24]>(char const*, std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&&)(pybind11::dict const&), char const (&) [24]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<pybind11::array_t<float, 16> (*)(pybind11::dict const&), char [57]>(char const*, pybind11::array_t<float, 16> (*&&)(pybind11::dict const&), char const (&) [57]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > (*)(pybind11::dict const&), char [22]>(char const*, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > (*&&)(pybind11::dict const&), char const (&) [22]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*)(pybind11::dict const&), char [25]>(char const*, std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&&)(pybind11::dict const&), char const (&) [25]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<void (*)(qsim::Cirq::GateKind, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > const&, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, float> > > const&, qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >*), char [34]>(char const*, void (*&&)(qsim::Cirq::GateKind, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > const&, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, float> > > const&, qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >*), char const (&) [34]) in pybind_main-6cad78.o
      ...
  "_PyErr_ExceptionMatches", referenced from:
      pybind11::detail::type_caster<unsigned int, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<float, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned long long, void>::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<unsigned int, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<float, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned long long, void>::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<unsigned int, void>::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<float, void>::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<float, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
  "_PyFloat_Type", referenced from:
      pybind11::detail::type_caster<unsigned int, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<float, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned long long, void>::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_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >::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<pybind11::detail::accessor_policies::list_item>::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::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > >, std::__1::complex<float> >::cast<std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > >(std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > >&&, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o
      pybind11::handle pybind11::detail::list_caster<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >, unsigned int>::cast<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > >(std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >&&, 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::vector<qsim::Gate<float, qsim::Cirq::GateKind>, std::__1::allocator<qsim::Gate<float, qsim::Cirq::GateKind> > >, qsim::Gate<float, qsim::Cirq::GateKind> >::cast<std::__1::vector<qsim::Gate<float, qsim::Cirq::GateKind>, std::__1::allocator<qsim::Gate<float, qsim::Cirq::GateKind> > > const&>(std::__1::vector<qsim::Gate<float, qsim::Cirq::GateKind>, std::__1::allocator<qsim::Gate<float, qsim::Cirq::GateKind> > > 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<unsigned int, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned long long, void>::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<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >, unsigned int>::cast<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > >(std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >&&, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o
      void pybind11::cpp_function::initialize<pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >& pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >::def_readwrite<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >, unsigned int>(char const*, unsigned int qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >::*)::'lambda'(qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > const&), unsigned int const&, qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > const&, pybind11::is_method>(qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >&&, unsigned int (*)(), pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >& pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >::def_readwrite<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >, unsigned int>(char const*, unsigned int qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >::*)::'lambda'(qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > const&) const&...)::'lambda'(pybind11::detail::function_call&)::__invoke(pybind11::detail::function_call&) in pybind_main-6cad78.o
      void pybind11::cpp_function::initialize<pybind11::enum_<qsim::Cirq::GateKind>::enum_<>(pybind11::handle const&, char const*)::'lambda'(qsim::Cirq::GateKind), unsigned int, qsim::Cirq::GateKind, pybind11::name, pybind11::is_method, pybind11::sibling>(&&, pybind11::enum_<qsim::Cirq::GateKind>::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<pybind11::enum_<qsim::Cirq::GateKind>::enum_<>(pybind11::handle const&, char const*)::'lambda0'(qsim::Cirq::GateKind), unsigned int, qsim::Cirq::GateKind, pybind11::name, pybind11::is_method, pybind11::sibling>(&&, pybind11::enum_<qsim::Cirq::GateKind>::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_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >::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<unsigned int, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<float, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned long long, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
  "_PyNumber_Float", referenced from:
      pybind11::detail::type_caster<float, void>::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<unsigned int, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::int_::int_(pybind11::object const&) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned long long, void>::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<pybind11::detail::accessor<pybind11::detail::accessor_policies::str_attr> >::operator()<(pybind11::return_value_policy)1, char const* const&>(char const* const&) const in pybind_main-6cad78.o
      pybind11::object pybind11::detail::object_api<pybind11::detail::accessor<pybind11::detail::accessor_policies::str_attr> >::operator()<(pybind11::return_value_policy)1>() const in pybind_main-6cad78.o
      pybind11::object pybind11::detail::object_api<pybind11::detail::accessor<pybind11::detail::accessor_policies::str_attr> >::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<pybind11::handle>::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<pybind11::handle>::operator()<(pybind11::return_value_policy)1, pybind11::cpp_function>(pybind11::cpp_function&&) const in pybind_main-6cad78.o
      pybind11::object pybind11::detail::object_api<pybind11::handle>::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<pybind11::detail::accessor<pybind11::detail::accessor_policies::str_attr> >::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<pybind11::detail::accessor_policies::str_attr>::get_cache() const in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*)(pybind11::dict const&), char [24]>(char const*, std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&&)(pybind11::dict const&), char const (&) [24]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<pybind11::array_t<float, 16> (*)(pybind11::dict const&), char [57]>(char const*, pybind11::array_t<float, 16> (*&&)(pybind11::dict const&), char const (&) [57]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > (*)(pybind11::dict const&), char [22]>(char const*, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > (*&&)(pybind11::dict const&), char const (&) [22]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*)(pybind11::dict const&), char [25]>(char const*, std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&&)(pybind11::dict const&), char const (&) [25]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<void (*)(qsim::Cirq::GateKind, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > const&, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, float> > > const&, qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >*), char [34]>(char const*, void (*&&)(qsim::Cirq::GateKind, unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > const&, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, float> > > const&, qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >*), char const (&) [34]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<void (*)(unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > const&, std::__1::vector<float, std::__1::allocator<float> > const&, qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >*), char [63]>(char const*, void (*&&)(unsigned int, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> > const&, std::__1::vector<float, std::__1::allocator<float> > const&, qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> >*), char const (&) [63]) in pybind_main-6cad78.o
      ...
  "_PyObject_GetItem", referenced from:
      pybind11::detail::accessor<pybind11::detail::accessor_policies::generic_item>::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_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >& pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >::def<void pybind11::detail::initimpl::constructor<>::execute<pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >, 0>(pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >&)::'lambda'(pybind11::detail::value_and_holder&), pybind11::detail::is_new_style_constructor>(char const*, pybind11::class_<qsim::Circuit<qsim::Gate<float, qsim::Cirq::GateKind> > >&&) in pybind_main-6cad78.o
      pybind11::class_<qsim::Cirq::GateKind>& pybind11::class_<qsim::Cirq::GateKind>::def<pybind11::enum_<qsim::Cirq::GateKind>::enum_<>(pybind11::handle const&, char const*)::'lambda'(qsim::Cirq::GateKind)>(char const*, &&, pybind11::enum_<qsim::Cirq::GateKind>::enum_<>(pybind11::handle const&, char const*)::'lambda'(qsim::Cirq::GateKind) const&...) in pybind_main-6cad78.o
      pybind11::class_<qsim::Cirq::GateKind>& pybind11::class_<qsim::Cirq::GateKind>::def<pybind11::enum_<qsim::Cirq::GateKind>::enum_<>(pybind11::handle const&, char const*)::'lambda0'(qsim::Cirq::GateKind)>(char const*, &&, pybind11::enum_<qsim::Cirq::GateKind>::enum_<>(pybind11::handle const&, char const*)::'lambda0'(qsim::Cirq::GateKind) const&...) in pybind_main-6cad78.o
      pybind11::class_<qsim::Cirq::GateKind>& pybind11::class_<qsim::Cirq::GateKind>::def<void pybind11::detail::initimpl::factory<pybind11::enum_<qsim::Cirq::GateKind>::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_<qsim::Cirq::GateKind> >(pybind11::class_<qsim::Cirq::GateKind>&) &&::'lambda'(pybind11::detail::value_and_holder&, unsigned int), pybind11::detail::is_new_style_constructor>(char const*, pybind11::class_<qsim::Cirq::GateKind>&&) 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<pybind11::detail::accessor_policies::obj_attr>::operator=<pybind11::detail::accessor<pybind11::detail::accessor_policies::generic_item> >(pybind11::detail::accessor<pybind11::detail::accessor_policies::generic_item>&&) && 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<pybind11::detail::accessor_policies::str_attr>::operator=<char const (&) [16]>(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<pybind11::detail::accessor_policies::generic_item>::operator=<pybind11::detail::accessor<pybind11::detail::accessor_policies::generic_item> >(pybind11::detail::accessor<pybind11::detail::accessor_policies::generic_item>&&) && in pybind_main-6cad78.o
      void pybind11::detail::accessor<pybind11::detail::accessor_policies::generic_item>::operator=<std::__1::pair<pybind11::object, char const*> >(std::__1::pair<pybind11::object, char const*>&&) && in pybind_main-6cad78.o
  "_PyObject_Str", referenced from:
      pybind11::detail::error_string() in pybind_main-6cad78.o
      pybind11::detail::type_caster<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void>& pybind11::detail::load_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void>(pybind11::detail::type_caster<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void>&, pybind11::handle const&) in pybind_main-6cad78.o
      std::__1::enable_if<!(detail::move_never<bool>::value), bool>::type pybind11::move<bool>(pybind11::object&&) in pybind_main-6cad78.o
      pybind11::detail::type_caster<bool, void>& pybind11::detail::load_type<bool, void>(pybind11::detail::type_caster<bool, void>&, pybind11::handle const&) in pybind_main-6cad78.o
      std::__1::enable_if<!(detail::move_never<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::value), std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::type pybind11::move<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(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::vector<qsim::Gate<float, qsim::Cirq::GateKind>, std::__1::allocator<qsim::Gate<float, qsim::Cirq::GateKind> > >, qsim::Gate<float, qsim::Cirq::GateKind> >::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::list_caster<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >, unsigned int>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::list_caster<std::__1::vector<float, std::__1::allocator<float> >, float>::load(pybind11::handle, bool) in pybind_main-6cad78.o
  "_PySequence_GetItem", referenced from:
      pybind11::detail::accessor<pybind11::detail::accessor_policies::sequence_item>::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::vector<qsim::Gate<float, qsim::Cirq::GateKind>, std::__1::allocator<qsim::Gate<float, qsim::Cirq::GateKind> > >, qsim::Gate<float, qsim::Cirq::GateKind> >::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::list_caster<std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >, unsigned int>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::list_caster<std::__1::vector<float, std::__1::allocator<float> >, 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<pybind11::detail::accessor_policies::tuple_item>::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<pybind11::detail::accessor<pybind11::detail::accessor_policies::str_attr> >::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::detail::type_caster_generic>(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned int, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::detail::type_caster<float, void>::load(pybind11::handle, bool) in pybind_main-6cad78.o
      pybind11::array::array(pybind11::dtype const&, pybind11::detail::any_container<long>, pybind11::detail::any_container<long>, void const*, pybind11::handle) in pybind_main-6cad78.o
      pybind11::detail::type_caster<unsigned long long, void>::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::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, false>::load(pybind11::handle, bool) in pybind_main-6cad78.o
  "_PyUnicode_AsUTF8String", referenced from:
      pybind11::str::operator std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >() const in pybind_main-6cad78.o
  "_PyUnicode_DecodeUTF8", referenced from:
      pybind11::detail::type_caster<char, void>::cast(char const*, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o
      void pybind11::cpp_function::initialize<pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::handle), std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, pybind11::handle>(pybind11::detail::enum_base::init(bool, bool)::'lambda1'(pybind11::handle)&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > (*)(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<unsigned int>(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<unsigned int>(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<bool, void>& pybind11::detail::load_type<bool, void>(pybind11::detail::type_caster<bool, void>&, 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>(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>(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>(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>(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>(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>(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<char, void>::cast(char const*, pybind11::return_value_policy, pybind11::handle) in pybind_main-6cad78.o
      pybind11::detail::type_caster<bool, void>& pybind11::detail::load_type<bool, void>(pybind11::detail::type_caster<bool, void>&, 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>(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::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*)(pybind11::dict const&), char [24]>(char const*, std::__1::vector<std::__1::complex<float>, std::__1::allocator<std::__1::complex<float> > > (*&&)(pybind11::dict const&), char const (&) [24]) in pybind_main-6cad78.o
      pybind11::module& pybind11::module::def<pybind11::array_t<float, 16> (*)(pybind11::dict const&), char [57]>(char const*, pybind11::array_t<float, 16> (*&&)(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<bool, void>& pybind11::detail::load_type<bool, void>(pybind11::detail::type_caster<bool, void>&, 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>(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>(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>(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>(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>(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>(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
Copy link

mpharrigan commented Jan 29, 2021

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

  • add set(CMAKE_CXX_STANDARD 11) to CMakeLists.txt (we should do this in master)
  • brew install llvm libomp
  • CC=/usr/local/opt/llvm/bin/clang CXX=/usr/local/opt/llvm/bin/clang++ LDFLAGS=-L/usr/local/opt/libomp/lib python setup.py develop

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
Copy link

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
Copy link
Contributor

balopat commented Jan 29, 2021

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

@VolodyaCO
Copy link

VolodyaCO commented Dec 1, 2022

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
Copy link
Collaborator

@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
Copy link

Thank you for linking the comment!

@basnijholt
Copy link
Contributor

#643 and #644 were just merged which enables Apple Silicon compatibility 🎉

v0.19.0 was also just released.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants