Changes are listed with most recent versions at the top.

Dates are in YYYY/MM/DD format.

Primary (X.-.-) version numbers are used to denote backwards incompatibilities between versions, while minor (-.X.-) numbers primarily indicate new features and documentation.

3.0.1 (2021-07-27)



Added tests for momentum conversion and for Qt tools.


Bugfix release to fix Qt API after bumping Qt versions. Tests have been added which hit large parts of the Qt code to prevent problems like this in the future.

3.0.0 (2021-07-27)


  1. Numba has been adopted to accelerate k-space conversion resulting in 10-50x speedup compared to the older plain numpy versions of code.

  2. Additional example data has been added so that representative ARPES data covering standard types of experiments are available.

  3. The documentation site has been moved from Netlify to and the content available greatly expanded.

    • Tutorials for common types of analysis are available as Jupyter notebooks.

    • An organized API documentation page is availabe.

    • Docstrings have been massively expanded to cover the public API and most of the internal API.

    • The documentation build process has been simplified.

  4. The momentum conversion API has been expanded with utility functions

    • arpes.utilities.conversion.forward.convert_through_angular_point: Performs a cut in momentum at a particular angle and passing through the angular coordinate provided.

    • arpes.utilities.conversion.forward.convert_through_angular_pair: Performs a cut in momentum passing through two given angular coordinates.

    These are very helpful in getting high symmetry cuts rapidly.

  5. Deep learning utilities upstreamed.

  6. Multithreaded curve fitting.

  7. Fit introspection utilities upstreamed.

  8. Numerous small but compatible changes to the public API.


  1. The xarray data accessor previously at .T has been named to .G to prevent shadowing the transpose function.

  2. pylint -> black

  3. Bump dependency versions, largely due to compatibility requirements with pyqtgraph.

  4. Old .csv/spreadsheet driven APIs removed.


  1. Circular references have been removed from tools which use Qt which previously lead to crashes due to objects being freed in C++/Qt5 but retained in Python/PyQt5.

    Additionally, some diagnostics have been added to help deal with similar problems in the future.

2.6.0 (2020-1-20)


  1. Igor loader, aliased to ‘pxt’, ‘wave’, etc.


  1. Improved documentation and intro videos


  1. Made loading pxt files more stable by adding a utility to safely decode strings when the encoding used is not known but is a common format

2.5.0 (2019-12-5)


  1. Added a Qt-based waypoint data browser similar to what’s available at the Spectromicroscopy beamline, path_tool.

  2. Added a Qt-based masking tool mask_tool

  3. Added a Qt-based background subtraction tool bkg_tool.

  4. Generic Qt tools that interact with “paths” or “regions” are now simple to add with CoreTool


  1. Unitful axes on all Qt-based utilities

2.4.0 (2019-11-24)


  1. Data loading code for the Spectromicroscopy beamline at Elettra.

  2. Added a number of interactive utilities

  3. Documentation/tutorial on adding interactive utilities

  4. qt_ktool

  5. Borrow code from DAQuiri for UI generation


  1. Improved the documentation and FAQ.

  2. Refactor file finding to support subfolders and endstation specific behavior

2.3.0 (2019-10-28)


  1. More moiré analysis tools including commensurability measures.

  2. FallbackEndstation, see the changed section below.


Serious refactor to data loading. On the surface not much is different, except that most things are more permissive by default now. In particular, you can often get away with not passing the location= keyword but it is recommended still.

There is now a FallbackEndstation that tries to determine which endstation to use in the case of missing location key. This is to reduce the barrier to entry for new users.


2.2.0 (2019-08-21)


  1. Moiré analysis module with some code to generate primitive moiré unit cells and plot them

  2. Subpixel alignment in 1D and 2D based on image convolution and quadratic fitting this is useful for tracking and correcting shifts in valence data due to work function changes, charging, etc.

  3. More or less fully fledged k-independent self energy analysis module (arpes.analysis.self_energy)

  4. BZ exploration tool

  5. Large refactor to data provenance

    1. Now guaranteed produced for every plot using savefig

    2. By default we configure IPython to log all code execution

    3. Most recent cell/notebook evaluations are included in provenance information

  6. convert_coordinates is now nearly an inverse transform to convert_to_kspace on the coordinates as is appropriate. In particular, this conversion is exact as opposed to small angle approximated

  1. Some wrappers around getting Jupyter/IPython state

  2. imread wrapper that chooses backend between imageio and cv2

  3. Plotting utilities

    1. dark_background context manager changes text and spines to white

    2. Data unit/axis unit conversions (data_to_axis_units and friends)

    3. mean_annotation as supplement to sum_annotation

  4. xarray_extensions:

    1. with_values -> generates a copy with replaced data

    2. with_stanard_coords -> renames deduped (eV-spectrum0 for instance) coords back to standard on a xr.DataArray

    3. .logical_offsets calculates logical offsets for the ‘x,y,z’ motor set

    4. Correctly prefers hv from coords now

    5. mean_other as complement to sum_other

    6. transform: One map to rule them all



2.1.4 (2019-08-07)



  1. Prevent PyPI builds unless conda build succeeds, so that we can have a single package-time test harness (


  1. Fix documentation to better explain conda installation. In particular, current instructions avoid a possible error arising from installing BLAS through conda-forge.

  2. colorama now listed as a dependency in conda appropriately.

2.1.3 (2019-08-07)



  1. pylinted


  1. Fix manifest typo that prevents example data being included

2.1.2 (2019-08-06)




  1. Removed type annotation for optional library breaking builds

2.1.1 (2019-08-06)


  1. Improved type annotations

  2. Slightly safer data loading in light of plugins: no need to call load_plugins() manually.



  1. Data moved to a location where it is available in PyPI builds

2.1.0 (2019-08-06)


  1. Improved API documentation.

  2. Most recent interative plot context is saved to arpes.config.CONFIG['CURRENT_CONTEXT']. This allows simple and transparent recovery in case you forget to save the context and performed a lot of work in an interactive session. Additionally, this means that matplotlib interactive tools should work transparently, as the relevant widgets are guaranteed to be kept in memory.

  3. Improved provenance coverage for builtins.


  1. Metadata reworked to a common format accross all endstations. This is now documented appropriately with the data model.


  1. MBS data loader now warns about unsatisfiable attributes and produces otherwise correct coordinates in the PyARPES format.

  2. Some improvements made in the ANTARES data loader, still not as high quality as I would like though.

2.0.0 (2019-07-31)


  1. Major rework in order to provide a consistent angle convention

  2. New momentum space conversion widget allows setting offsets interactively

  3. Fermi surface conversion functions now allow azimuthal rotations

  4. New experiment module contains primitives for exporting scan sequences. This is an early addition towards being able to perform ARPES experiments from inside PyARPES.

    1. As an example: After conducting nano-XPS, you can use PCA to select your sample region and export a scan sequnce just over the sample ROI or over the border between your sample and another area.


  1. All loaded data comes with all angles and positions as coordinates

  2. All loaded data should immediately convert to momentum space without issue (though normal emission is not guaranteed!)

  3. Documentation changes to reflect these adjustments to the data model


  1. Documentation link in README.rst is now correct.

1.2.0 (2019-07-18)


  1. Ship example data so that people can try what is in the documentation immediately after installing

  2. Users can now load data directly, i.e. without a spreadsheet, with load_without_dataset, in the future this will support matches based on the current working directory.

  3. Users are better warned when spreadsheets are not in the correct format. Spreadsheet loading is also generally more permissive, see below.


  1. Added more tests, especially around data loading, spreadsheet loading and normalization.


  1. Spreadsheet loading no longer relatively silently fails due to whitespace in column names, we might nevertheless consider doing more significant cleaning of data at the very initial stages of spreadsheet loading.

  2. Spreadsheet loading now appropriately uses safe_read universally. modern_clean_xlsx_dataset is functionally deprecated, but will stay in at least for a little while I consider its removal.

  3. Spreadsheet loading now appropriately handles files with ‘cleaned’ in their name.

  4. Spreadsheet writing will not include the index and therefore an unnamed column when saving to disk.

1.1.0 (2019-07-11)


  1. Add a self-check utility for debugging installs, import arpes; arpes.check()

  2. PyARPES can generate scan directives to make working at beamlines or nanoARPES endstations simpler. You can now export a region or boundary of a region from a PyARPES analysis to a (first pass) LabView compatible scan specification. For now this consists of a coordinate list and optional spectrum declaration.

  3. now has a programmatic interface in arpes.config.override_settings.

  4. Add arpes.utilities.collections.deep_update


  1. Documentation overhaul, focusing on legibility for new users and installation instructions


  1. Version requirements on lmfit are now correct after Nick added SplitLorentzian xarray compatible models

1.0.2 (2019-07-08)


  1. Moved to CI/CD on Azure Pipelines (

  2. Tests available for data loading and some limited analysis routines


  1. Lanzara group Main Chamber data loading code will set a photon energy of 5.93 eV on all datasets by default


  1. arpes.analysis.derivative.dn_along_axis now properly accepts a smoothing function (smooth_fn) with the signature xr.DataArray -> xr.DataArray.

1.0.0 (June 2019)


  1. First official release. API should be largely in place around most of PyARPES.