Skip to content

Releases: pace-neutrons/Euphonic

v1.6.0

10 Feb 14:01

Choose a tag to compare

  • Requirements

    • Increased minimum version of SeeK-path to 2.2.1

      • Recent updates provide improved compatibility with recent spglib versions
        and allow q-point paths to be generated in the input cell orientation.
    • Security

      • Bumped wheel requirement for docs and testing to 0.46.2. (CVE-2026-24049 <https://www.cve.org/CVERecord?id=CVE-2026-24049>_)
  • Bug fixes

    • Band structures paths could be generated with incorrect
      correspondence of q-points to symmetry labels if the input cell
      was transformation of reference primitive cell. (e.g. different
      order of lattive vectors). This is now fixed by using features of
      SeeK-path 2.1+.

    • Band structure paths would be inappropriately generated and
      labelled if the input cell was a supercell of the primitive cell.
      This scenario now emits a warning (from Seek-path) and the tick
      labels will not use the traditional high-symmetry labels.

  • Improvements

    • Extended pathlib.Path support and annotations throughout the code. Removing
      references to os.path where no longer relevant.

    • Rework Spectrum*.copy() to meet Python copy <https://docs.python.org/3/library/copy.html>__ specifications.

  • Maintenance

    • Replace tmpdir in tests with tmp_path and use Path handling.

v1.5.1

06 Jan 16:17

Choose a tag to compare

  • Requirements

    • Test requirements

      • Added pytest-xdist and pytest-cov requirements for parallel
        testing at pytest level.
  • Bug fixes

    • Fix typing of calls to Spectrum.broaden() by brille_convergence
      and intensity_map command-line tools.
  • Compatibility fixes

    • Fixed handling of new SpglibError class for expected errors from spglib 2.7.0
    • Include required arguments to np.divide call, avoiding deprecation
      warning which would trigger test failure.
  • Maintenance

    • Reworked CI strategy from parallelism over tox environments to
      parallelism over unit tests. This addresses OpenMP conflicts
      between simultaneous test environments, and gives a large speedup
      when testing a single Python version. (i.e. typical local testing
      scenario before pushing to CI.)

    • Stopped testing every master push against Python 3.15

v1.5.0

15 Dec 16:10

Choose a tag to compare

  • Requirements

    • Python 3.10-3.14 is supported

    • Test requirements

      • Migrated from pytest 7 to pytest 8

      • Migrated from pytest-lazy-fixture (which appears to be
        unmaintained and incompatible) to pytest-lazy-fixtures, an
        active project with similar functionality.

  • Bug fixes

    • Added defences at runtime against OpenMP library conflicts. This
      scenario is most commonly encounted when using PyPI wheels for
      Euphonic and Brille on MacOS. If multiple OpenMP libraries are
      loaded, Euphonic will raise a warning and fallback to serial
      operation to reduce the risk of a deadlock or other unpleasant
      interaction.

      This is a known problem with OpenMP distributed in Python wheels,
      cited as a reason to avoid use of OpenMP in SciPy. See e.g.
      https://pypackaging-native.github.io/key-issues/native-dependencies/blas_openmp/

      To get high performance of Euphonic Fourier interpolation while
      loading another OpenMP-using library (such as brille) it may be
      necessary for users to build the software from source. (Pip
      install with --no-binary may be sufficient.) Compatibility can
      also be ensured when programs are distributed with a beyond-python
      package manager such as Conda or apt.

  • Improvements

    • Improved error message when C extension import fails due to
      missing dynamic libraries.

    • Random sampling functions (including deterministic sampling
      functions with a random jitter option) accept a new rng
      parameter for a numpy.random Generator (generally preferred) or
      RandomState (used for testing). This allows the user to manipulate
      the random seed and bit generator to ensure reproducible or
      independent calculations.

    • The default argument to rng is a quasi-global Generator
      instance in euphonic.util. This avoids the computational
      overhead of creating a new generator every time a random function
      is called.

  • Maintenance

    • Bumped cibuildwheel to v3.3.0

    • Bumped github action versions: actions/checkout@v6, actions/setup-python@v6

    • Started testing with Python 3.15 pre-release. (Currently there are
      Numpy build problems, this is ok.)

    • On Mac, unit tests with and without brille are run separately. This
      enables full OpenMP parallelism for tests that don't require
      brille to be loaded.

v1.4.5

20 Aug 16:57

Choose a tag to compare

Features

  • CLI tools will now accept phonopy data produced by janus-core, with filenames in the form "{label}-phonopy.yml" and "{label}-force_constants.hdf5".

Bug fixes

  • Fixed a bug in subtraction of dipole-dipole contribution from force constants with non-symmetric supercell matrix. This affects import from Phonopy results where

    a) Born effective charges and dielectric tensor were included;
    b) sc_matrix != sc_matrix.T .

Maintenance

  • Pytest configuration has been moved from tests_and_analysis/test/pytest.ini to the main pyproject.toml. This means it is more likely to be picked up automatically when running tests outside of the CI workflows.

  • Some Einstein summations have been replaced with equivalent matrix multiplications; this should improve performance and legibility.

  • Fixed a unit test which used pytest.approx() incorrectly.

v1.4.4

16 May 09:12

Choose a tag to compare

  • Requirements

    • The minimum required version of spglib is increased to 2.1.0
  • Bug fixes

    • euphonic-intensity-map incorrectly rejecting files with phonon
      mode data for coherent scattering calculations. (Introduced in
      v1.4.3.)
  • Maintenance

    • Numpy random number generators have been updated to use a Generator from
      np.random.default_rng
    • Improved test coverage of error states

v1.4.3

14 Apr 10:05

Choose a tag to compare

  • Features

    • Add methods get_bin_edges, get_bin_centers to
      Spectrum2DCollection, making interface consistent with other
      Spectrum classes.
  • Bug fixes

    • Fix tox version number in Pyproject.toml; installation with [ci]
      "extra" was broken.
    • Fix the mode_gradients_unit argument to
      euphonic.readers.castep.read_phonon_dos_data; this was
      returning consistent data/units but ignoring the preference
      expressed in that argument.
  • Maintenance

    • Avoid incompatible-pointer-types in C compilation; this is an
      error in GCC14 and warning in older versions.

    • Moved unit register definition to new "ureg" module. This is to defend against
      internal import loops: users remain welcome to access things via
      from euphonic import ureg, Quantity.

    • Introduced ruff-based linting with a (fair-sized) subset of rules enabled.

      • This cleanup may have introduced some small improvements to error and
        warning messages.

      • The executable bits on some files have changed, for better
        consistency and to express more clearly how they are used.

    • Improved test coverage, removed some unused code

v1.4.2

21 Feb 17:02

Choose a tag to compare

  • Bug fixes

    • Make Spectrum directly accessible from euphonic.spectra. (This was
      accidentally lost in a refactor, affecting downstream that uses
      Spectrum as a type annotation.)

v1.4.1

13 Feb 22:54

Choose a tag to compare

  • Bug fixes

    • CASTEP 25.1 allows Born effective charges to be calculated by
      Berry Phase methods without a corresponding dielectric tensor. In
      such cases, no long-range term can be subtracted from the Force
      Constants (or reconstructed). Euphonic uses the presence of Born
      effective charges to indicate such a subtraction; to prevent
      ill-defined cases, ForceConstants now sets both Born charges and
      dielectric tensor to None if only one was provided.

    • An optional parameter is provided to change how bin edges are
      obtained from bin centres: previously the bin edges were constrained
      to the initial data range, but this can lead to incorrect scaling
      when performing broadening. Variable-width broadening schemes are
      now allowed to extrapolate the bin edges in order to get the correct
      width scaling.

      Outside of broadening, the default behaviour is unchanged in order
      to maintain backward compatibility. This is likely to be changed
      in the next "major version" (i.e. API-breaking release) of
      Euphonic.

  • Maintenance

    • The euphonic.spectra module has been broken up into a subpackage
      with the single-spectrum classes defined in euphonic.spectra.base
      and the collections in euphonic.spectra.collections. This is not a
      breaking change: the public classes, functions and type annotations
      remain importable from euphonic.spectra.

    • CASTEP 25.1 includes an extra field in .castep_bin files,
      indicating whether Born effective charges were read from an
      external file. For clarity and safety, this field is now
      explicitly read by the Euphonic .castep_bin parser, but remains unused.

    • The release process has been reworked to reduce manual steps: a
      top-level "release" action will now sequence most of the
      steps. (Post-release testing is still separate.)

v1.4.1rc2

12 Feb 16:01

Choose a tag to compare

v1.4.1rc2 Pre-release
Pre-release

This pre-release was created to test changes to release workflow. See v1.4.1rc1 for summary of changes.

v1.4.1rc1

12 Feb 11:34

Choose a tag to compare

v1.4.1rc1 Pre-release
Pre-release
  • Bug fixes

    • CASTEP 25.1 allows Born effective charges to be calculated by
      Berry Phase methods without a corresponding dielectric tensor. In
      such cases, no long-range term can be subtracted from the Force
      Constants (or reconstructed). Euphonic uses the presence of Born
      effective charges to indicate such a subtraction; to prevent
      ill-defined cases, ForceConstants now sets both Born charges and
      dielectric tensor to None if only one was provided.

    • An optional parameter is provided to change how bin edges are
      obtained from bin centres: previously the bin edges were constrained
      to the initial data range, but this can lead to incorrect scaling
      when performing broadening. Variable-width broadening schemes are
      now allowed to extrapolate the bin edges in order to get the correct
      width scaling.

      Outside of broadening, the default behaviour is unchanged in order
      to maintain backward compatibility. This is likely to be changed
      in the next "major version" (i.e. API-breaking release) of
      Euphonic.

  • Maintenance

    • The euphonic.spectra module has been broken up into a subpackage
      with the single-spectrum classes defined in euphonic.spectra.base
      and the collections in euphonic.spectra.collections. This is not a
      breaking change: the public classes, functions and type annotations
      remain importable from euphonic.spectra.

    • CASTEP 25.1 includes an extra field in .castep_bin files,
      indicating whether Born effective charges were read from an
      external file. For clarity and safety, this field is now
      explicitly read by the Euphonic .castep_bin parser, but remains unused.

    • The release process has been reworked to reduce manual steps: a
      top-level "release" action will now sequence most of the
      steps. (Post-release testing is still separate.)