Skip to content

v0.3.0

Compare
Choose a tag to compare
@GregDMeyer GregDMeyer released this 08 Feb 22:31
· 84 commits to master since this release

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() and computations.evolve() now take a max_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 the states.State class, allowing states to be summed together and multiplied by scalars
  • More descriptive output when str() is called on states.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 vector
  • State.set_uniform() to set the state to a uniform superposition
  • Operator.infinity_norm()
  • The run_all_tests.py script (in tests/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 argument
  • L for the State class can be inferred from the length of string passed to the state argument of the constructor
  • L for state class can now be set directly via the State.L parameter
  • XParity 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, as operators.Operator.load
  • Moved operators.from_bytes into the Operator class, as operators.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 and D or 0 and 1 (previously only U and D 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 if subspace.identical would return True
  • Subspace methods idx_to_state and state_to_idx now return a scalar when passed a scalar, instead of returning a length-1 array
  • Removed spinflip argument from SpinConserve (replaced by XParity 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() and computations.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