Spinach vs spynach: zulf_pf6_1d (CPU)

run zulf_pf6_1d-numba, both sides present. Built by comparison/report.py; protocol in comparison/README.md.

Provenance

spinach

run date (UTC)2026-10-14T17:39:14Z
Spinach version2.13
commit03a88b7e912ffbb3122dd24829cc5d216209c804
local modificationsFalse
MATLAB26.2.0.3386108 (R2026b)
hostMacBook-Pro-8.local
platformMACA64
cores12
BLASApple Accelerate BLAS (ILP64)
computational threads12
parallel pool workers11
GPU requestedFalse
GPU device
case options{"gpu": false}

spynach

run date (UTC)2026-10-26T13:24:14Z
spynach versionv0.2.0-21-g2e8843c-dirty
commit2e8843cd088ebc17faf75fd8d06a6692f8507f71
local modificationsTrue
Python3.12.5
NumPy2.5.4
SciPy1.18.1
Numba (compiled kernels)0.68.0
hostjerschowlab25.chem.nyu.edu
platformmacOS-26.6.2-arm64-arm-64bit
cores12
BLAS{"numpy": "accelerate", "scipy": "Accelerate"}
thread settingslibrary defaults
GPU requestedFalse
GPU device
case options{}
not run

Timings

stageSpinach / sspynach / sspynach / Spinach
create1.270.000.00x
basis2.010.010.01x
hamiltonian0.510.050.09x
operators0.760.030.04x
pulse0.320.050.17x
acquisition46.6842.190.90x
processing0.030.000.01x
plot0.090.040.40x
total (wall clock)51.8342.390.82x

Data

variableSpinach shapespynach shaperelative errormax |difference|
coil_x(16384, 1)(16384,)0.000e+000.000e+00compared after squeezing singleton dimensions
coil_z(16384, 1)(16384,)0.000e+000.000e+00compared after squeezing singleton dimensions
fid(16384, 1)(16384,)1.521e-121.446e-17compared after squeezing singleton dimensions
rho0(16384, 1)(16384,)0.000e+000.000e+00compared after squeezing singleton dimensions
rho_pulse(16384, 1)(16384,)2.419e-225.295e-23compared after squeezing singleton dimensions
spectrum(16384, 1)(16384,)8.075e-112.039e-14compared after squeezing singleton dimensions

relative error = ||spynach - Spinach||F / ||Spinach||F, the metric of the oracle tests.

Figures

spinach: spectrum

figure_spectrum.png

spynach: spectrum

figure_spectrum.png

interactive figure

Profiles

spinach

by self time

functioncallsself / stotal / s
evolution>(parfor body)843.2846.62
propagator13.153.34
ParforEngine>ParforEngine.getCompleteIntervals1532.582.69
existentials10.800.80
clean_up190.190.19
create10.161.26
ParforEngine>ParforEngine.addInterval2130.100.19
run_comparison10.0951.84
ParforEngine>ParforEngine.buildParforController580.080.10
table.saveobj2000.070.09
zulf_pf6_1d_spinach10.0751.75
dlmread10.050.07
scomponents20.050.08
report3850.050.06
operator490.050.74
parallel_function>distributed_execution580.053.13
hamiltonian10.030.50
sparse2csr20.030.03
tabular.parenReference260.030.05
AbstractDataQueue>AbstractDataQueue.get.QueueLength90.020.02
ParforEngine>ParforEngine.ParforEngine580.020.13
apodisation10.020.03
parallel_function590.0249.99
num2str5120.020.04
ParforEngine>ParforEngine.allIntervalsAdded580.020.02

by total time (with callees)

functioncallsself / stotal / s
run10.0051.84
run_comparison10.0951.84
zulf_pf6_1d_spinach10.0751.75
parallel_function590.0249.99
evolution20.0147.00
evolution>(parfor body)843.2846.62
propagator13.153.34
parallel_function>distributed_execution580.053.13
ParforEngine>ParforEngine.getCompleteIntervals1532.582.69
basis10.012.01
unihash10.001.95
create10.161.26
existentials10.800.80
operator490.050.74
hamiltonian10.030.50
state210.000.39
reduce20.000.22
ParforEngine>ParforEngine.addInterval2130.100.19
clean_up190.190.19
path_trace20.010.18
parallel_function>@(initData,F)createEngine(M,initData,F,N)580.000.14
PoolOptions>PoolOptions.createEngine580.000.14
ClusterPoolEngine>ClusterPoolEngine.createParforEngine580.000.14
ParforEngine>ParforEngine.ParforEngine580.020.13
VariableBuffer>@(varargin)obj.supply(varargin{:})2140.000.11

spynach

by self time

functioncallsself / stotal / s
matmul (utilities.py:72)1641337.9037.93
matmul_clean (utilities.py:62)123.213.84
<built-in method numpy._core._multiarray_umath.count_nonzero>400.360.36
<built-in method scipy.sparse._sparsetools.csr_matvecs>40.230.23
_detect (propagation.py:447)163840.070.14
<built-in method numpy.array>10960.060.06
<method 'nonzero' of 'numpy.ndarray' objects>9160.060.06
<method 'conj' of 'numpy.ndarray' objects>163840.060.06
_add (propagation.py:452)90.040.06
_evolve_observable (propagation.py:379)10.0442.18
taylor_term (kernels.py:315)1480.030.03
round_array (kernels.py:231)240.030.10
<built-in method scipy.sparse._sparsetools.csr_todense>260.020.02
<built-in method scipy.sparse._sparsetools.csr_sort_indices>40.020.02
_superop_side_build (operators.py:290)990.020.04
<method 'searchsorted' of 'numpy.ndarray' objects>6720.010.01
<built-in method scipy.sparse._sparsetools.csr_matmat>150.010.01
<built-in method builtins.isinstance>384790.010.02
<method 'sort' of 'numpy.ndarray' objects>20.010.01
<built-in method _abc._abc_instancecheck>176730.010.01
<built-in method numpy.zeros>10620.010.01
<method 'reshape' of 'numpy.ndarray' objects>166330.010.01
<built-in method scipy.sparse._sparsetools.csr_plus_csr>270.010.01
<lambda> (kernels.py:278)480.010.00
matlab_round (kernels.py:63)450.010.01

by total time (with callees)

functioncallsself / stotal / s
run (zulf_pf6_1d_spynach.py:14)10.0042.39
simulate (zulf_pf6_1d.py:73)10.0042.35
evolution (propagation.py:245)20.0042.25
_evolve_observable (propagation.py:379)10.0442.18
matmul (utilities.py:72)1641337.9037.93
propagator (propagation.py:25)20.004.08
matmul_clean (utilities.py:62)123.213.84
clean_up (utilities.py:25)170.000.41
count_nonzero (numeric.py:483)410.000.36
<built-in method numpy._core._multiarray_umath.count_nonzero>400.360.36
_choose_storage (utilities.py:50)180.000.33
_matmul_dispatch (_base.py:875)620.000.26
__matmul__ (_base.py:1006)570.000.26
nnz (utilities.py:20)280.000.25
_matmul_multivector (_compressed.py:399)40.000.24
<built-in method scipy.sparse._sparsetools.csr_matvecs>40.230.23
_detect (propagation.py:447)163840.070.14
nnz (backend.py:73)100.000.12
round_array (backend.py:77)240.000.10
round_array (kernels.py:231)240.030.10
__init__ (_compressed.py:30)3610.000.08
<built-in method numpy.array>10960.060.06
<method 'nonzero' of 'numpy.ndarray' objects>9160.060.06
<method 'conj' of 'numpy.ndarray' objects>163840.060.06
__init__ (_coo.py:32)560.000.06

Console logs