Skip to main content

Aleph - 0.29.0

πŸš€ Highlights​

  • Significant improvements to Aleph’s parallel-execution story: async now runs on a shared worker pool, and await_all, parallel_map, plus sleep round out the toolkit for structured concurrency.
  • Model class has been revamped. Now as opposed to adding general functions via add_term(XX, neighbourhood) we have add(term([X, X], neighbourhood)). The add method is also more general, allowing for add(neighbourhood_rule(...)) and add(coefficient(...)).
  • Model's add_observable method has been replaced with measure which takes a name and a term, (e.g.my_model.measure("name", Term(...)).
  • Term and Coefficient have been introduced as helper types when defining model, with associated factories term and coefficient.
  • Added new fermionic operators: NumberNumber which is a fused version of Number * Number, Number(List) a fused sum of number operators, NumberNumberNN a fused sum of NumberNumber operators for nearest-neighbours, and NumberNumberNNN a fused sum of NumberNumber operators for next nearest neighbours.

✨ New Features​

  • await_all(futures) waits for each Future in a list, consuming the inputs and returning the resolved values in submission order.
  • parallel_map(values, mapper) applies the mapper concurrently across the shared async pool, keeping results aligned with the original list.
  • sleep(seconds) pauses execution for a positive duration, throwing if a negative value is supplied.
  • We added an eigensolver factory that picks the appropriate eigenvalue solver based on the properties of the input matrices, solves the eigenvalue problem and returns an object representing the solution. It currently supports standard and generalized eigenvalue problems for dense matrices (real, complex, Hermitian or not). The returned object has methods eigenvalues and eigenvectors to retrieve the eponymous quantities.
  • We added an svd factory that computes the SVD decomposition of any dense matrix. It supports two algorithms: Jacobi and BDC. The default is Jacobi, which is more accurate for small and medium sized matrices, while BDC is faster for large matrices. The returned object has methods singular_values, matrix_u, and matrix_v to retrieve the eponymous quantities.
  • We added a cholesky factory that computes the Cholesky decomposition of symmetric (Hermitian) matrices. It supports two algorithms: standard (LLT) and robust (LDLT). The default is standard, which requires the matrix to be positive definite. The robust algorithm (LDLT) can handle positive or negative semidefinite matrices. The returned object has methods matrix_l and matrix_u to retrieve the factors.
  • We added an lu factory that computes the LU decomposition of any dense matrix. It supports two pivoting strategies: partial and full. The default is partial pivoting. The returned object has methods matrix_l, matrix_u, and matrix_p (and matrix_q for full pivoting) to retrieve the factors.
  • We added a qr factory that computes the QR decomposition of any dense matrix. It supports three pivoting strategies: none, partial (column pivoting), and full. The default is no pivoting. The returned object has methods matrix_q, matrix_r, and matrix_p (if pivoting is used) to retrieve the factors.
  • Add fast fourier transform (FFT) support with real-to-complex (r2c) and complex-to-complex (c2c) transforms
    • Support for 1D and 2D FFT operations via configurable axes parameter
    • Complex-to-complex transforms support forward and backward modes via fft and ifft functions
    • Real-to-complex transforms provide forward FFT only
  • Added mpo(model) function to convert lattice models to finite MPO representations. This enables direct MPO construction from a Model definitions for use in DMRG and tensor network algorithms.
  • Added observables_to_mpo(model) function to convert observables defined in a Model to MPO form, returning a map of observable names to their MPO representations.

πŸ›  Improvements​


πŸ› Fixes​

  • Container methods resize, insert, insert_at, replicate, replicated, extend and extended now clone inserted elements to match existing push_back, assignment, and constructor behavior.
  • Restores the missing documentation for List::push_back in the API reference.
  • Fixed a documentation bug regarding the factory functions make_random_mps and make_random_mpo, they were wrongly classified as functions and the first argument was missing from the documentations.

βš™οΈ Internal / Technical Changes​

  • Added copy constructors for BoundaryCondition types.

⚠️ Breaking Changes​

  • All container insertion methods now clone their inputs, so scripts that relied on resize, insert, insert_at, replicate, replicated, extend or extended mutating the original values will behave differently.

πŸ§ͺ Migration Notes​