Spinach vs spynach: noesy_strychnine (CPU)
run noesy_strychnine-numba, both sides present. Built by comparison/report.py; protocol in comparison/README.md.
Provenance
spinach
| run date (UTC) | 2026-10-14T17:38:16Z |
|---|---|
| Spinach version | 2.13 |
| commit | 03a88b7e912ffbb3122dd24829cc5d216209c804 |
| local modifications | False |
| MATLAB | 26.2.0.3386108 (R2026b) |
| host | MacBook-Pro-8.local |
| platform | MACA64 |
| cores | 12 |
| BLAS | Apple Accelerate BLAS (ILP64) |
| computational threads | 12 |
| parallel pool workers | 11 |
| GPU requested | False |
| GPU device | |
| case options | {"gpu": false} |
spynach
| run date (UTC) | 2026-10-26T13:23:31Z |
|---|---|
| spynach version | v0.2.0-21-g2e8843c-dirty |
| commit | 2e8843cd088ebc17faf75fd8d06a6692f8507f71 |
| local modifications | True |
| Python | 3.12.5 |
| NumPy | 2.5.4 |
| SciPy | 1.18.1 |
| Numba (compiled kernels) | 0.68.0 |
| host | jerschowlab25.chem.nyu.edu |
| platform | macOS-26.6.2-arm64-arm-64bit |
| cores | 12 |
| BLAS | {"numpy": "accelerate", "scipy": "Accelerate"} |
| thread settings | library defaults |
| GPU requested | False |
| GPU device | |
| case options | {} |
| not run |
Timings
| stage | Spinach / s | spynach / s | spynach / Spinach |
|---|---|---|---|
| create | 20.31 | 0.01 | 0.00x |
| basis | 2.26 | 0.06 | 0.03x |
| liquid/noesy | 88.66 | 68.32 | 0.77x |
| processing | 0.12 | 0.04 | 0.35x |
| plot | 1.86 | 0.11 | 0.06x |
| total (wall clock) | 113.24 | 68.54 | 0.61x |
Data
| variable | Spinach shape | spynach shape | relative error | max |difference| | |
|---|---|---|---|---|---|
| fid_cos | (512, 512) | (512, 512) | 2.187e-12 | 3.968e-16 | |
| fid_sin | (512, 512) | (512, 512) | 2.267e-12 | 1.627e-16 | |
| spectrum | (2048, 2048) | (2048, 2048) | 1.316e-12 | 1.268e-12 |
relative error = ||spynach - Spinach||F / ||Spinach||F, the metric of the oracle tests.
Figures
spinach: noesy
Profiles
spinach
by self time
| function | calls | self / s | total / s |
|---|---|---|---|
| ParforEngine>ParforEngine.getCompleteIntervals | 492 | 79.10 | 80.67 |
| ClusterClientSession>iWaitForAllWorkerServices | 1 | 13.73 | 13.87 |
| ParforEngine>ParforEngine.addInterval | 1741 | 2.60 | 3.01 |
| HTMLCanvasPlugin.HTMLCanvasPlugin>HTMLCanvasPlugin.createCanvas | 1 | 1.05 | 1.10 |
| hamiltonian | 4 | 0.77 | 10.09 |
| existentials | 1 | 0.62 | 0.79 |
| CJSKeyValueStore>iWriteDataFile | 100 | 0.50 | 0.50 |
| CJSKeyValueStore>iReadDataFile | 25 | 0.45 | 0.45 |
| DataQueue>DataQueue.dispatchContinuation | 1483 | 0.36 | 0.47 |
| redfield_integral_async | 1 | 0.34 | 2.80 |
| AbstractClusterPool.AbstractClusterPool>iPostLaunchSetup | 1 | 0.34 | 0.43 |
| cell2mat>concatenateCellContents | 22 | 0.32 | 0.32 |
| CJSKeyValueStore>CJSKeyValueStore.putSingleVariable | 100 | 0.28 | 0.82 |
| table.saveobj | 1920 | 0.26 | 0.42 |
| cheap_norm | 718 | 0.25 | 0.26 |
| evolution | 12 | 0.25 | 61.98 |
| report | 2387 | 0.24 | 0.27 |
| noesy_strychnine_spinach | 1 | 0.22 | 113.21 |
| clean_up | 143 | 0.22 | 0.22 |
| CJSKeyValueStore>CJSKeyValueStore.getSingleVariable | 25 | 0.20 | 0.70 |
| tabular.parenReference | 244 | 0.20 | 0.39 |
| step>(parfor body) | 1160 | 0.19 | 0.23 |
| autoexec | 1 | 0.19 | 0.36 |
| DataQueue>DataQueue.maybeDrainAndDispatchAllDataOnQueue | 478 | 0.19 | 0.93 |
| tabular.dotParenReference | 159406 | 0.17 | 0.17 |
by total time (with callees)
| function | calls | self / s | total / s |
|---|---|---|---|
| run | 1 | 0.00 | 113.26 |
| run_comparison | 1 | 0.05 | 113.26 |
| noesy_strychnine_spinach | 1 | 0.22 | 113.21 |
| liquid | 1 | 0.02 | 88.65 |
| parallel_function | 47 | 0.04 | 85.57 |
| parallel_function>distributed_execution | 43 | 0.13 | 85.07 |
| ParforEngine>ParforEngine.getCompleteIntervals | 492 | 79.10 | 80.67 |
| noesy | 1 | 0.05 | 75.48 |
| evolution | 12 | 0.25 | 61.98 |
| create | 1 | 0.07 | 20.29 |
| Cluster.parpool | 1 | 0.00 | 17.53 |
| doParpool | 1 | 0.02 | 17.50 |
| AbstractClusterPool.AbstractClusterPool>AbstractClusterPool.hBuildPool | 1 | 0.03 | 17.33 |
| AbstractClusterPool.AbstractClusterPool>iStartClient | 1 | 0.00 | 16.46 |
| AbstractInteractiveClient>AbstractInteractiveClient.start | 1 | 0.03 | 16.45 |
| ClusterClientSession>ClusterClientSession.waitForConnections | 1 | 0.16 | 14.70 |
| ClusterClientSession>iWaitForAllWorkerServices | 1 | 13.73 | 13.87 |
| step | 47 | 0.09 | 13.22 |
| relaxation | 1 | 0.08 | 10.61 |
| hamiltonian | 4 | 0.77 | 10.09 |
| ParforEngine>ParforEngine.addInterval | 1741 | 2.60 | 3.01 |
| redfield_integral_async | 1 | 0.34 | 2.80 |
| basis | 1 | 0.05 | 2.25 |
| unihash | 1 | 0.00 | 2.02 |
| plot_2d | 1 | 0.06 | 1.74 |
spynach
by self time
| function | calls | self / s | total / s |
|---|---|---|---|
| matmul (utilities.py:72) | 16919 | 51.71 | 52.64 |
| taylor_term (kernels.py:315) | 756 | 6.77 | 6.78 |
| <built-in method scipy.sparse._sparsetools.csr_matmat> | 1285 | 1.35 | 1.35 |
| matlab_round (kernels.py:63) | 3654 | 1.04 | 1.04 |
| <built-in method scipy.sparse._sparsetools.csr_matmat_maxnnz> | 1285 | 0.85 | 0.85 |
| csr_times_dense (kernels.py:297) | 4211 | 0.82 | 0.83 |
| <built-in method scipy.sparse._sparsetools.csr_sort_indices> | 737 | 0.80 | 0.80 |
| _reordered_taylor (propagation.py:126) | 47 | 0.75 | 7.70 |
| <built-in method numpy._core._multiarray_umath.count_nonzero> | 3901 | 0.42 | 0.42 |
| <lambda> (kernels.py:278) | 1152 | 0.30 | 0.02 |
| _detect (propagation.py:447) | 4096 | 0.29 | 0.30 |
| _superop_side_build (operators.py:290) | 1490 | 0.29 | 0.63 |
| <built-in method scipy.sparse._sparsetools.csr_plus_csr> | 743 | 0.24 | 0.24 |
| <built-in method scipy.sparse._sparsetools.csr_eliminate_zeros> | 1171 | 0.20 | 0.20 |
| step (propagation.py:78) | 47 | 0.16 | 7.89 |
| <built-in method numpy.array> | 24704 | 0.16 | 0.16 |
| _evolve_trajectory (propagation.py:426) | 24 | 0.10 | 5.89 |
| <method 'nonzero' of 'numpy.ndarray' objects> | 36157 | 0.09 | 0.09 |
| evolution (propagation.py:245) | 12 | 0.09 | 57.22 |
| <method 'reduce' of 'numpy.ufunc' objects> | 80982 | 0.09 | 0.09 |
| <method 'copy' of 'numpy.ndarray' objects> | 11087 | 0.08 | 0.08 |
| _round_numpy (kernels.py:70) | 1218 | 0.07 | 1.12 |
| <method 'searchsorted' of 'numpy.ndarray' objects> | 19196 | 0.07 | 0.07 |
| <built-in method scipy.sparse._sparsetools.coo_tocsr> | 103 | 0.06 | 0.06 |
| <built-in method scipy.sparse._sparsetools.csr_sum_duplicates> | 738 | 0.06 | 0.06 |
by total time (with callees)
| function | calls | self / s | total / s |
|---|---|---|---|
| run (noesy_strychnine_spynach.py:13) | 1 | 0.00 | 68.54 |
| simulate (noesy_strychnine.py:65) | 1 | 0.00 | 68.43 |
| liquid (contexts.py:32) | 1 | 0.00 | 68.32 |
| noesy (sequences.py:96) | 1 | 0.00 | 65.08 |
| evolution (propagation.py:245) | 12 | 0.09 | 57.22 |
| matmul (utilities.py:72) | 16919 | 51.71 | 52.64 |
| _evolve_observable (propagation.py:379) | 8 | 0.01 | 50.64 |
| step (propagation.py:78) | 47 | 0.16 | 7.89 |
| _reordered_taylor (propagation.py:126) | 47 | 0.75 | 7.70 |
| taylor_term (backend.py:94) | 756 | 0.00 | 6.78 |
| taylor_term (kernels.py:315) | 756 | 6.77 | 6.78 |
| _evolve_trajectory (propagation.py:426) | 24 | 0.10 | 5.89 |
| propagator (propagation.py:25) | 61 | 0.00 | 4.97 |
| matmul_clean (utilities.py:62) | 984 | 0.02 | 4.48 |
| _dissipators (contexts.py:310) | 1 | 0.00 | 3.06 |
| relaxation (relaxation.py:51) | 1 | 0.00 | 3.06 |
| _redfield (relaxation.py:231) | 1 | 0.00 | 2.98 |
| clean_up (utilities.py:25) | 1199 | 0.01 | 2.49 |
| __matmul__ (_base.py:1006) | 3972 | 0.00 | 2.45 |
| _matmul_dispatch (_base.py:875) | 4048 | 0.00 | 2.45 |
| _matmul_sparse (_compressed.py:415) | 1285 | 0.01 | 2.28 |
| result_iterator (_base.py:612) | 1176 | 0.00 | 2.22 |
| expmint (relaxation.py:213) | 25 | 0.00 | 1.39 |
| <built-in method scipy.sparse._sparsetools.csr_matmat> | 1285 | 1.35 | 1.35 |
| round_array (backend.py:77) | 1275 | 0.00 | 1.32 |
Console logs
- spinach: console.log
- spynach: console.log