Changes from the SWIG-based versions

Version 2 replaces the SWIG bindings with pybind11, and the old setup.py with CMake and scikit-build-core. The Python interface is almost entirely unchanged, apart from these differences:

  • The separate Quaternions module is now GWFrames.Quaternions, so import Quaternions becomes from GWFrames import Quaternions, and GWFrames.Quaternion is also available.

  • Methods that modify a Waveform in place and return it (such as TransformToCorotatingFrame) return the very same Python object, including for PNWaveform.

Several bugs were fixed along the way, notably that Quaternion objects compared equal exactly when they were not equal, and that Hybridize read past the end of an array and could not handle waveforms in an inertial frame.