Releases: GregDMeyer/dynamite
Releases · GregDMeyer/dynamite
v0.4.0
Added
- 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
Removed
--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
Changed
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
Fixed
- 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.
v0.3.1
Fixed
- 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
v0.3.1-zenodo
fix a broken zenodo release
v0.3.0
Added
- 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
Changed
- 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)
Fixed
- 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
v0.2.3
See CHANGELOG.md for details.
Release for Zenodo
First release to be archived on Zenodo.