sisl 0.16.0 Release Notes

Released on 2025-04-10.

New features

  • Enable in MD-slices of siesta output siles

    Allowed read_scf(imd=…) to ease the understanding of everything. Partly resolves #835.

    (PR835)

  • Added Nambu spin configuration

    Allowed sisl to operate with the Nambu spin-configuration. This spin-configuration is made for spin-orbit + super-conductivity.

    Nearly all functionality that is available for SOC is also availiable for BdG (Nambu) spin configuration.

    This goes in line with the recent additions to the Siesta code with superconductivity.

    (PR896)

  • Added atom borders in sisl.viz plots

    The possibility to add and modify borders of plotted atoms has been added. In geometry plots, atoms_style now accepts the keys border_color and border_width. By default now atoms are plotted with a black border.

    (PR897)

  • Enabled implicit conversion of unknown objects

    Now users can automatically convert unknown objects and use them directly in sisl methods that are implemented for various methods.

    E.g.

    import ase
    import sisl
    
    gr = sisl.geom.graphene()
    sisl_rotated = sisl.rotate(gr, ...)
    
    gr = ase.Atoms(...)
    atoms_rotated = sisl.rotate(gr, ...)
    
    gr = ase.Atoms(...)
    sisl_rotated = sisl.rotate(gr, ..., ret_sisl=True)
    

    will all work, the first and last will return a Geometry, while the middle one will return an ase.Atoms object.

    To forcefully return the sisl object, use the latter form with ret_sisl.

    (PR898)

  • Enabled for atoms= arguments

    Makes selecting all atoms slightly more intuitive if wanted.

Changes and improvements

  • Enabled astype for sparse matrices

    This enables changing the data-type of sparse matrices in a consistent manner without having to use the transform which would be impossible in the real->complex conversion.

    (PR865)

  • Enabled hsxSileSiesta.write_hamiltonian

    Finally we can write Hamiltonians from sisl in the HSX file format.

    For further details see: here

    (PR884)

  • Use towncrier

    We change the release notes to be constructed by towncrier.

    This will make pull requests less prone to conflicts due to the merge of the CHANGELOG.md file. That file is now deprecated, see changes/README.rst for details.

    (PR893)

  • Changed hermitian => conjugate

    Now one should use H.transpose(conjugate=True, ...) instead. The Hermitian argument did not make sense, since the transpose was implicit of the function name.

    It is now also more obvious how conjugate=..., spin=... works together.

    Also, all arguments to this method are forced keywords.

    A len(H) == H.no * 4 for Nambu spin configuration.

    The diagonalization of the Hamiltonian will return an eigenvalue symmetric spectrum (about E=0). Hence this one will be dependent on the shift of the spectrum.

    (PR896)

  • Enabled creating Hamiltonian matrices from other Hamiltonians

    Previously, Hamiltonian.fromsp would only parse scipy.sparse.csr_matrix objects. This was limiting the functionality.

    Now, all sparse matrices can be converted through any fromsp matrices. When the passed object is a SparseGeometry it will decide whether it is orthogonal or not. Otherwise, a user can manually specify the orthogonal argument.

    The method will automatically remove any overlap parts (if passed as the matrix), and will automatically extract the overlap parts if a matrix has been passed in S=.

    (PR904)

  • Added ADOS extraction of TBtrans PDOS data in sisl.viz

    Now plotting the ADOS from TBtrans output files can intrinsically be handled by sisl.viz.

  • Added read_brillouinzone to multiple Siesta files

    This will allow reading BrillouinZone objects from intrinsic Siesta output files.

  • All E arguments for tbtSile cannot be indices

    Prior versions of sisl allowed one to use indices instead of E arguments. However, this led to confusion when dealing with E=0.0. E.g. E=0 and E=0.0 could behave differently.

    Now, everything is handled via energies. For looping those, its better to do:

    tbt = tbt...Sile(...)
    iE = tbt.Eindex(0.84)
    E = tbt.E[iE] # will get you the closest energy point to 0.84
    
    # or for looping:
    for E in tbt.E:
        ... do something
    
  • Clarified gauge arguments

    Now the gauge names are lattice vs. atomic which should clarify a bit more with respect to the older values: cell and atom. The older values will still be respected. A comply_gauge method should be used for external projects if required.

  • Enabled easier submodule access

    Allows:

    import sisl
    sisl.geom
    

    and basically all variants. Using this mechanism the imports are lazily done.

    So now import sisl.geom is generally not required!

  • Performance improvements for k-point creation of matrices

    The internal Cython code was restructured for much better performance. This yields a significant performance improvement for DFT matrices (many couplings) but a very minor perf. hit for small TB matrices (few couplings + few rows).

  • Quaternions now default to use radians for input

    This follows the general mathematical notation in cos/sin/tan geometrical routines.

  • Removed dtype argument from Spin class

    The data-type is now contained in the parent structure. This removes a duplicate definition that was hard to maintain in the code. It should be of minor importance as most would define the Spin class without passing the dtype argument.

  • Removed possibility of doing Hk of integer datatypes

    It increased compilation times significantly, with little gain. Use float32/64 or complex64/128.

  • WideBandSE.self_energy changed its behavior of eta

    Now, the first argument is the energy, from which only the imaginary value will be used. Also, the energy will be scaled with np.pi to get the correct integration.

    Additionally, when the WideBandSE object is instantiated with a sparsematrix, it will use the overlap matrix to account for this.

Bugfixes

  • hamiltonianSile wrote wrong overlap and supercell connections

    Fixes and speeds up the writing of the overlap and supercell connections of the hamiltonianSile. This file type is largely not used, and likely shouldn’t be used, but might be useful for educational purposes.

    Also allowed the file format to handle skewed lattices with 6 input parameters from the cell block.

    (PR887)

  • Non-collinear transposing was buggy

    The code for transposing + conjugating (adjoint operator) was wrong for non-collinear matrices. This is now finally fixed, and checked for.

    Fixed documentation in trs method for matrices.

    Fixed overlap conjugation for transpose when complex numbers are used.

    (PR896)

  • Fix fatbands plots when there is a jump in the band structure.

    (PR906)

  • Fixed orbitals=slice(x, None) arguments

    It now correctly uses geometry.no instead of geometry.na.

    Likely nobody used slice arguments anyway.

  • Now geometry.to(ase.Atoms) will work

    The dispatch method expected it to be geometry.to[ase.Atoms]() which is counter-intuitive as all the other dispatchers does not require this. The __getitem__ method will still work as that will get you the method by witch the dispatch will happen.

  • projection arguments for all functions has been streamlined

    The projection argument has gotten a major overhaul. Now the projections are generalized and streamlined across the code base using a common comply_projection method that decides on what it should convert to.

    All old values are still allowed, but newer ones will be preferred:

    Here are all the allowed (new) projection options:

    • matrix matrix product, ij components

    • trace return sum of the ii components

    • diagonal return the ii components

    • hadamard elementwise ij components (not equivalent to matrix!)

    • hadamard:atoms elementwise ij components, but summed for each atom

  • fixed future deprecation for ast.Num

Contributors

A total of 3 people contributed to this release. People with a “+” by their names contributed a patch for the first time.

  • Nick Papior

  • Pol Febrer Calabozo

  • Thomas Frederiksen

Pull requests merged

A total of 8 pull requests were merged for this release.

Maintenance pull requests merged