This version has deeply modified the EPG code, with large speed-ups and new operators.
**Ludicrous speed** Parallelism based on [OpenMP](https://www.openmp.org/) has been replaced with SIMD instructions, based on [xsimd](https://xsimd.readthedocs.io/en/latest). Careful benchmarking the previous version has shown that multiple threads within a single model did not consistently provide speed-ups, and in certain cases caused slow-downs; the chosen SIMD approach better exploits the features of modern CPUs while still allowing between-models multi-threading.
On top of that, the culling of extremal and empty states was added to the regular EPG model, reducing the number of states and thus the run time.
A [DESS](http://doi.wiley.com/10.1002/mrm.1910070105) benchmark between the previous version and the current version shows a speed-up of at least x7.6. Note that since the thresholding was added to the regular EPG model for the current version, the speed-up cannot be computed for this case.
| Model | v1.2.1 (ms) | v1.3.0 (ms) | Speed-up |
| -------------------- | -------------------- | ----------- | -------- |
| Regular (ϵ=0) | 138.15 (16 threads) | 8.51 | 16.23 |
| Regular (ϵ=10⁻⁶) | N/A | 1.54 | N/A |
| Discrete (ϵ=0) | 364.43 (16 threads) | 17.42 | 20.92 |
| Discrete (ϵ=10⁻⁶) | 20.45 (1 thread) | 2.69 | 7.60 |
| Discrete 3D (ϵ=0) | 1838.18 (1 thread) | 28.95 | 63.49 |
| Discrete 3D (ϵ=10⁻⁶) | 41.91 (1 thread) | 4.44 | 9.44 |
**New EPG operators** Off-resonance and bulk motion have been added to all three EPG variants.
**Sundries**
- The [documentation](https://sycomore.readthedocs.io/) has been upgraded to use [Pweave](https://mpastell.com/pweave/): the generation of figures is now self-contained.
- The continuous integration has been moved from TravisCI to Github and improved with respect to compilation on Windows and generation of Python wheels.