- Detailed example scripts (in
examples/scripts
) Operator.expectation()
, convenience function to compute the expectation value of the operator with respect to a statedynamite.tools.MPI_COMM_WORLD()
which returns PETSc's MPI communicator objectOperator.precompute_diagonal
flag allows user to tune whether the matrix diagonal should be precomputed and saved, for shell matricesState.entanglement_entropy
member function (a more convenient way of usingcomputations.entanglement_entropy
, which also remains)tools.get_memory_usage
which can measure memory usage on a total, per rank, or per node basis- Multi-GPU parallelism via GPU-aware MPI
--track_memory
flag tobenchmark.py
---now memory usage is always reported by the benchmarking scripttools.get_max_memory_usage
andtools.get_cur_memory_usage
in favor of a single functiontools.get_memory_usage
Operator.msc_size
renamed toOperator.nterms
, and now invokes a call toOperator.reduce_msc()
- shell matrix-vector multiplications are now considerably faster
- Improved automatic version check; no longer leaves
.dynamite
files in working directory - GPU builds now automatically switch to CPU if a GPU is not found (and print a warning)
- Changed default bind mount location for Docker images to the container user's home directory,
/home/dnm
- Renamed some values of
which
argument ofeigsolve()
:smallest
→lowest
andlargest
→highest
- Shift-invert ("target") eigsolving on GPU disabled, as PETSc does not support it well
- Explicit subspace sometimes failed conservation check even when operator was actually conserved
- Build was broken with Cython 3
- Work around broken
petsc4py
andslepc4py
builds withpip>=23.1
(see PETSc issue) Operator.__str__
andOperator.table()
were formatted poorly for operators with complex coefficients- various issues in
dynamite.extras
- Performance was bad on Ampere (e.g. A100) GPUs unless a particular SLEPc flag was set. The flag is now automatically set.
- compiler flags from PETSc were not being applied to the Cython parts of dynamite
- large memory usage due to a change in PETSc garbage collection
- Dynamite now automatically checks that an operator is the same across all MPI ranks before building it (thus catching bugs due to e.g. different random number generator seeds on different ranks)
computations.eigsolve()
andcomputations.evolve()
now take amax_its
flag to adjust the solver's iteration limit- More descriptive error messages when solvers fail to converge
- Methods
.scale()
,.axpy()
,.scale_and_sum()
,+
,+=
,-
,-=
,*
,*=
for thestates.State
class, allowing states to be summed together and multiplied by scalars - More descriptive output when
str()
is called onstates.State
class, and LaTeX representation of states in Jupyter State.set_all_by_function()
which takes a user-supplied function and applies it to set each element of a state vectorState.set_uniform()
to set the state to a uniform superpositionOperator.infinity_norm()
- The
run_all_tests.py
script (intests/integration
) now has an optional flag--test-set <filename>
, which accepts a file listing tests to be run (instead of simply running all available tests) L
can now be passed to most subspaces as an argumentL
for theState
class can be inferred from the length of string passed to thestate
argument of the constructorL
for state class can now be set directly via theState.L
parameterXParity
subspace, which implements Parity but in the X basis and can be applied on top of other subspaces
- Order of arguments to
State
class changed - Moved
operators.load_from_file
into the Operator class, asoperators.Operator.load
- Moved
operators.from_bytes
into the Operator class, asoperators.Operator.from_bytes
- Switched to using
pyproject.toml
for package metadata and build configuration operators.Operator.scale()
no longer returns the operator it's called on, to avoid confusion about whether a new operator is being created- Initial product states can be specified with either the characters
U
andD
or0
and1
(previously onlyU
andD
were allowed) states.State.normalize()
now has no return value (previously returned the scale factor used for normalization)hash(subspace)
now is only the same for two subspaces ifsubspace.identical
would returnTrue
- Subspace methods
idx_to_state
andstate_to_idx
now return a scalar when passed a scalar, instead of returning a length-1 array - Removed
spinflip
argument fromSpinConserve
(replaced byXParity
subspace)
- An exception is now raised if an unknown keyword argument is passed to
computations.evolve()
- Ensure compatibility when saving operators to disk using a 64 bit dynamite install but loading with a 32 bit install
- Ensure spin indices passed to operator constructors fall within valid range
computations.entanglement_entropy()
andcomputations.dm_entanglement_entropy()
sometimes returned bad values due to uninitialized memory being included in the computation- Imaginary time evolution is now possible (for entirely real Hamiltonians), when dynamite is built without complex numbers
- Edge case where matrix norm was incorrect for a few very specific operators, with SpinConserve + spinflip subspace
- Bug in shell matrix-vector multiply for certain operators when L>31
- Ensure backend gets recompiled if
PETSC_ARCH
changes hash(subspace)
is now much more performant for large Hilbert spaces- Incorrect memory usage reported by
benchmark.py
- Matrix-vector multiplication was incorrect for
Parity
subspace when operator did not conserve the subspace - Deprecated
np.float
type
Subspace.identical
method determines whether two subspaces are exactly the same (both equal and of the same type)Operator.has_subspace
method returns whether a given subspace has been registered with the operatorState.save
andState.from_file
methods to allow saving states to disk and loading them laterState.initialized
flag to track whether the state's vector has been filled with dataState.set_initialized
andState.assert_initialized
methods to set and check the flag- Expanded Jupyter notebook tutorial
Operator.conserves
method returns whether the given subspace is conserved by the operator- When the matrix for an operator is built, subspaces are automatically checked for conservation/compatibility
Operator.allow_projection
property allows the automatic subspace check to be turned off- Ability to flag integration tests and skip them based on that flag
- Automatically disable thread-based parallelism when running with more than one MPI rank
L
of operators and states is now stored in their subspaces- The value of
L
in a Subspace object now cannot be modified after it is set - Moved package source into
src/
directory - Operators must share the same value of all settable properties (e.g. L, shell, etc.) in order to be added or multiplied together, rather than ambiguously inheriting one of the differing values
- Changed default SLEPc solver for computation of time evolution to 'expokit', which seems to be faster and more stable
- Ensure that the
L
of all of an operator's subspaces remains consistent - Ensure that product states passed as an integer to
State.str_to_state
correspond to valid states of the given length L - Small fixes and improvements to documentation
- Do not require
mpi4py
to be installed if running with only 1 rank - Creation of Auto subspace is now significantly faster
State.project()
method to project states onto a particular spin valueOperator.truncate()
method to remove small termsOperator.estimate_memory()
to estimate the memory an operator will use during computation- docker builds with 64-bit integers
- default JupyterLab port is now 8887 to avoid conflict with any other running instances of JupyterLab
- memory usage tracking functions now report results in gigabytes instead of bytes
- Improvements to docker build process
- Update deprecated petsc macros in backend
- broken int64 test
- Improvements to docker build process
- Colors in output of integration tests
- Set desired CUDA compute capability using environment variable, for PETSc config scripts
- Enabled GPU computations by default when dynamite is compiled with GPU support
- Install petsc4py and slepc4py directly from PETSc/SLEPc source tree instead of PyPI
- Possible out-of-bounds memory access in the Explicit subspace
Beginning of changelog.