Changelog#
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.
5.0.3 (2026-XX-XX)#
Prodigy XY data loader
Added 1D dataset support (e.g. XPS)
Removed unused Prodigy class; simplified workflow
Improved header parsing (regex) and dimension handling
Refactored names for clarity
Tests and minor fixes
Updated tests for the XY loader
Updated docstrings and type annotations
DSNP_UMCS plugin: do not assume presence of the “nonenergy” coordinate
Refactoring
moved convert_to_kspace out of utilities.conversion.core into utilities.conversion.api
split lower-level coordinate conversion responsibilities into more focused modules
updated package exports and API references to match the new conversion entry point
cleaned up analysis and accessor utilities, including _bin behavior and meshgrid-related helpers
improved plotting utilities, especially colorbar removal behavior
applied Ruff- and typing-driven fixes across analysis, fitting, plotting, conversion, and loader code
updated tests to reflect the refactors and adjusted a few expected numeric values
refreshed documentation links, Sphinx configuration, API docs, and changelog scaffolding
migrated uv development dependencies to dependency groups
5.0.2 (2025-12-23)#
Module structure refactoring
areps.utilities.conversion.forward moves to arpes.analysis.forward_conversion
apply_dataarray and lift_dataarray move to arpes.analysis.value_transform from areps.utilities.xarray
Refactoring by introducing Enum (SpectrumType, AngleUnit)
5.0.1 (2025-12-20)#
Tidy-up (about documentaion)
Refactoring dark_background & get_colorbar functions in plotting.utils
Module name change in preparation
axis_preparation → axis
coord_preparation → coord
hemispher_preparation → hemisphere
tof_preparation → tof
5.0.0 (2025-10-28)#
Add class for interactive analysis (ProfileApp, TaylorApp, ProfileApp)
Internal change
xarray_extensions.py is split into several files in xarray_extensions directory.
5.0.0-per5 (2025-7-19)#
Internal change
Introduce ConfigManager to manage the configuration, instead of many global variables.
Split functions in plotting/holoviews.py into several files in ui/
argument name change
repeat_n -> iteration_n in gaussian_filter_arr and boxcar_filter_arr
Add new class for interactive analysis
SmoothApp, DifferentiateApp
5.0.0-per4 (2025-07-01)#
Remove math.py
fermi_distribution in math.py, which is already used in fit_models.functional_forms
The definition of inv_fermi_distribution has not been required.
polarization: the meaning is ambiguous. (This is the “spin” polarization. But who knows?). Furthermore, this is used only once in sarpes.py.
Remove gaussian_filter, and boxcar_filter
They are not used. Use gaussian_filter_arr and boxcar_filter_arr instead.
Set as Deprecated
stack_dispersion_plot
flat_stack_plot
analysis.general.condense
5.0.0-per3 (2025-04-25)#
Remove ‘GStepBStdevModel’, which is useless. Use GstepBModel.
5.0.0-pre2 (2025-03-24)#
Fix problem in kz-conversion.py
I’m not perfectly sure this fix is right. Need further check.
5.0.0-pre1 (2024-05-24)#
Changed#
Drop broadcast_model.
xarray now has a curve_fit function. And a package that extends it to support lmfit has recently appeared on github. (xarray-lmfit) This is a pretty good implementation and easy to use. “Let’s use the libraries we can use.” I believe it’s a good policy, and it is good to have less code to maintain.
XModelMixin class is also removed.
Improve the compatibiltiies with the lmfit.
Note that some parameter names have been changed.
Remove
S.correct_angle_by
S.corrected_angle_by
S.transpose_to_front
S.transpose_to_back
S.to_arrays
S.scan_degrees_of_freedom, S.degrees_of_freedom and spectrum_degrees_of_freedom
arrange_by_indices and unarrange_by_indices (defined in utilities/__init__.py). They are not used internally.
sum_annotation and mean_annotation in plotting.utils
F.fit_dimensions
Remove some Model classes
TwoLorEdgeModel
FermiDiracAffGaussModel (AffineBroadenedFD is same)
TwoBandEdgeBModel
QuadraticModel (already in lmfit)
AffineBackgroundModel (This is same as LinearModel in lmfit)
Remove some functional_forms for fit
gaussian (Use lmfit)
lorentzian (Use lmfit)
twolorentzian (No need)
Change Parammeter name in fit function
lin_bkg -> lin_slope
4.2.4 (2025-03-20)#
Changed#
Rename inset_cut_locator -> insert_cut_locator
Remove sum_annotation and mean_annotation in plotting.utils
Remove to_arrays in xarray_extensions.py because of too-simple.
Remove src/arpes/optics.py
This should not be included in pyarpes, because it is not closely related to arpes analysis.
Remove src/arpes/utilities/image.py
In certain special situations, this may be a meaningful function. However, as a practical matter, direct reading of image data is not likely to produce meaningful data (data that can be used in a paper).
Remove arpes.exceptions: pragmatically, it has not been used. And I don’t think the own class for exception is good idea.
Remove arg keep_parent_ref in provenance and provenance_multiple_parents
Remove load_data_for_figure from plotting.utils
Remove CoincidentLinePlot (Same (at least similar) feature can be done with fill_between)
Remove zero_nans arg in shift_by. Use da.fillna(0), instead.
Remove utilities/transfer.py because it’s essentially empty.
Remove cut_nan_coords. Use
dropnalike this:for cname in da.coords: da = da.dropna(dim=cname, how="any")
Move utilities/convert/trapezoid.py -> correction/trapezoid.py
Change method name: S.swap_angle_unit -> S.switch_angle_unit
Deprecated
S.correct_angle_by
S.corrected_angle_by
S.transpose_to_front
S.transpose_to_back
S.to_arrays
S.scan_degrees_of_freedom, S.degrees_of_freedom and spectrum_degrees_of_freedom
arrange_by_indices and unarrange_by_indices (defined in utilities/__init__.py). They are not used internally.
Refactoring
ConvertTrapezoidalCorrection: More general
4.2.3 (2025-1-5)#
Changed#
Deprecated: arrange_by_indices, unarrange_by_indice in utilities/__init__
4.2.2 (2024-12-31)#
Changed#
Update S.fat_sel.
Add figure_gallery.ipynb
Rename IF_UMCS to DSN_UMCS
4.2.1 (2024-12-26)#
Changed#
Changed internally. repair.py is removed. API does not change.
4.2.0 (2024-12-25)#
Changed#
Not recommend to use the number to identify the file in io.load_data.
Update plot_movie(), build_crosscorrelation and add a new function, plot_movie_with_appropriate_args() (#63, #67, #68)
Remove keep_parent_ref arg
Method name change
S.correct_angle_by -> S.correct_coords [DeprecatedWarning]
S.corrected_angle_by -> S.corrected_coords [DeprecatedWarning]
S.transpose_to_front -> S.transpose_to_front [DeprecatedWarning]
Deprecated method
transpose_to_front (Use standard Xarray transform) [DeprecatedWarning] (#65)
transpose_to_back (Use standard Xarray transform) [DeprecatedWarning] (#65)
Remove unused or not so deeply related to ARPES file * optics.py, exceptions.py, and images.py
Minor#
Method name change
These methods are used internally, so most users don’t need to care the change.
S.shift_coords -> shift_meshgrid
S.scale_coords -> scale_meshgrid
S.transform_coords -> transform_meshgrid
Chenge the energy notation name (Kintic -> Final) This is used internally, so most users don’t need to care the change.
4.1.0 (2024-11-20)#
Changed#
As this version, we can begin with import arpes.
Add new endstation
Logging and endstation plugin can be selected from local_config.py
Minor#
Recommend to use uv, instead of rye.
4.0.1 (2024-07-21)#
Changed#
The name change
corrections -> correction
This is somehow backwards incopatibilities. However, the effect for most is really minor, because this functionalities are not so frequently used. Thus the major version number has not been changed.
New UI
concat_along_phi_ui (based on holoviews)
Remove Qt related modules. (Move them to legacy_files)
4.0.0 (2024-07-12)#
New#
Non-original author update.
Provide SPD_main.py and prodigy_itx.py to load the data measured with SPECS prodigy.
A new method S.swap_angle_unit() to change the angle unit (deg <-> radian)
Changed#
Required python version >= 3.11
Introduce type hints.
Type annotation sometimes limits the python’s flexibility, but for induces the robustness, which is essentially useful for scientific analyais.
Because of the same reason, drop the “flexibile” (from a certain view points, it may be pythonic) codes.
Drop PyQt5, use PySide6 instead.
Drop the Bokeh based functionalities because they are not compatible with the current jupyter.
curvature_tool, comparison_tool
While some of them might be useful, but at least when I started to use this, the compatibility was broken. I don’t know how these were useful.
Remove arpes.all
And very many breaking Changes.
Remove G.extent
Remove overlapped_stack_dispersion_plot
use stack_dispersion_plot_with_appropriate_args
Revise the k-conversion. The original version is correct from the view of the coding, but incorrect from the physics!
introduce new attrs, “energy_notation”. if not specified, attrs[“energy_notation”] = “Binding” is assumed to keep the consistency from the previous version.
see Changes.md for others
In coding style:
Drop carelessly set default=None
Fixed#
broadcast_model concatenation error #18 (chstan/arpes#18)
Fix error in BZ plot due to the recent version of ASE #20
Fix the import error in BZ plotting example #7
3.0.1 (2021-07-27)#
New#
Changed#
Added tests for momentum conversion and for Qt tools.
Fixed#
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)#
New#
Numba has been adopted to accelerate k-space conversion resulting in 10-50x speedup compared to the older plain numpy versions of code.
Additional example data has been added so that representative ARPES data covering standard types of experiments are available.
The documentation site has been moved from Netlify to https://arpes.readthedocs.io/ and the content available greatly expanded.
Tutorials for common types of analysis are available as Jupyter notebooks.
An organized API documentation page is available.
Docstrings have been massively expanded to cover the public API and most of the internal API.
The documentation build process has been simplified.
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.
Deep learning utilities upstreamed.
Multithreaded curve fitting.
Fit introspection utilities upstreamed.
Numerous small but compatible changes to the public API.
Changed#
The xarray data accessor previously at .T has been named to .G to prevent shadowing the transpose function.
pylint -> black
Bump dependency versions, largely due to compatibility requirements with pyqtgraph.
Old .csv/spreadsheet driven APIs removed.
Fixed#
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)#
New#
Igor loader, aliased to ‘pxt’, ‘wave’, etc.
Changed#
Improved documentation and intro videos
Fixed#
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)#
New#
Added a Qt-based waypoint data browser similar to what’s available at the Spectromicroscopy beamline,
path_tool.Added a Qt-based masking tool
mask_toolAdded a Qt-based background subtraction tool
bkg_tool.Generic Qt tools that interact with “paths” or “regions” are now simple to add with
CoreTool
Changed#
Unitful axes on all Qt-based utilities
2.4.0 (2019-11-24)#
New#
Data loading code for the Spectromicroscopy beamline at Elettra.
Added a number of interactive utilities
Documentation/tutorial on adding interactive utilities
qt_ktoolBorrow code from DAQuiri for UI generation
Changed#
Improved the documentation and FAQ.
Refactor file finding to support subfolders and endstation specific behavior
2.3.0 (2019-10-28)#
New#
More moiré analysis tools including commensurability measures.
FallbackEndstation, see the changed section below.
Changed#
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.
Fixed#
2.2.0 (2019-08-21)#
New#
Moiré analysis module with some code to generate primitive moiré unit cells and plot them
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.
More or less fully fledged k-independent self energy analysis module (arpes.analysis.self_energy)
BZ exploration tool
Large refactor to data provenance
Now guaranteed produced for every plot using
savefigBy default we configure IPython to log all code execution
Most recent cell/notebook evaluations are included in provenance information
convert_coordinatesis now nearly an inverse transform toconvert_to_kspaceon the coordinates as is appropriate. In particular, this conversion is exact as opposed to small angle approximated
Minor#
Some wrappers around getting Jupyter/IPython state
imreadwrapper that chooses backend betweenimageioandcv2Plotting utilities
dark_backgroundcontext manager changes text and spines to whiteData unit/axis unit conversions (
data_to_axis_unitsand friends)mean_annotationas supplement tosum_annotation
xarray_extensions:with_values-> generates a copy with replaced datawith_stanard_coords-> renames deduped (eV-spectrum0for instance) coords back to standard on a xr.DataArray.logical_offsetscalculates logical offsets for the ‘x,y,z’ motor setCorrectly prefers
hvfrom coords nowmean_otheras complement tosum_othertransform: Onemapto rule them all
Changed#
Fixed#
2.1.4 (2019-08-07)#
New#
Changed#
Prevent PyPI builds unless conda build succeeds, so that we can have a single package-time test harness (run_tests.py).
Fixed#
Fix documentation to better explain conda installation. In particular, current instructions avoid a possible error arising from installing BLAS through conda-forge.
colorama now listed as a dependency in conda appropriately.
2.1.3 (2019-08-07)#
New#
Changed#
pylinted
Fixed#
Fix manifest typo that prevents example data being included
2.1.2 (2019-08-06)#
New#
Changed#
Fixed#
Removed type annotation for optional library breaking builds
2.1.1 (2019-08-06)#
New#
Improved type annotations
Slightly safer data loading in light of plugins: no need to call
load_plugins()manually.
Changed#
Fixed#
Data moved to a location where it is available in PyPI builds
2.1.0 (2019-08-06)#
New:#
Improved API documentation.
Most recent interactive 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.Improved provenance coverage for builtins.
Changed:#
Metadata reworked to a common format across all endstations. This is now documented appropriately with the data model.
Fixed:#
MBS data loader now warns about unsatisfiable attributes and produces otherwise correct coordinates in the PyARPES format.
Some improvements made in the ANTARES data loader, still not as high quality as I would like though.
2.0.0 (2019-07-31)#
New:#
Major rework in order to provide a consistent angle convention
New momentum space conversion widget allows setting offsets interactively
Fermi surface conversion functions now allow azimuthal rotations
New
experimentmodule contains primitives for exporting scan sequences. This is an early addition towards being able to perform ARPES experiments from inside PyARPES.As an example: After conducting nano-XPS, you can use PCA to select your sample region and export a scan sequence just over the sample ROI or over the border between your sample and another area.
Changed:#
All loaded data comes with all angles and positions as coordinates
All loaded data should immediately convert to momentum space without issue (though normal emission is not guaranteed!)
Documentation changes to reflect these adjustments to the data model
Fixed:#
Documentation link in README.rst is now correct.
1.2.0 (2019-07-18)#
New:#
Ship example data so that people can try what is in the documentation immediately after installing
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.Users are better warned when spreadsheets are not in the correct format. Spreadsheet loading is also generally more permissive, see below.
Changed:#
Added more tests, especially around data loading, spreadsheet loading and normalization.
Fixed:#
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.
Spreadsheet loading now appropriately uses safe_read universally.
modern_clean_xlsx_datasetis functionally deprecated, but will stay in at least for a little while I consider its removal.Spreadsheet loading now appropriately handles files with ‘cleaned’ in their name.
Spreadsheet writing will not include the index and therefore an unnamed column when saving to disk.
1.1.0 (2019-07-11)#
New:#
Add a self-check utility for debugging installs,
import arpes; arpes.check()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.
local_config.pynow has a programmatic interface inarpes.config.override_settings.Add
arpes.utilities.collections.deep_update
Changed:#
Documentation overhaul, focusing on legibility for new users and installation instructions
Fixed:#
Version requirements on
lmfitare now correct after Nick addedSplitLorentzianxarray compatible models
1.0.2 (2019-07-08)#
New:#
Moved to CI/CD on Azure Pipelines (https://dev.azure.com/lanzara-group/PyARPES)
Tests available for data loading and some limited analysis routines
Changed:#
Lanzara group Main Chamber data loading code will set a photon energy of 5.93 eV on all datasets by default
Fixed:#
arpes.analysis.derivative.dn_along_axisnow properly accepts a smoothing function (smooth_fn) with the signaturexr.DataArray -> xr.DataArray.
1.0.0 (June 2019)#
New:#
First official release. API should be largely in place around most of PyARPES.