The first release candidate for NiBabel 3.0 is out. As a major release, there are API changes and a greater than usual opportunity for pain. Therefore, I’m setting a minimum 1 month window (as proposed in https://github.com/nipy/nibabel/issues/734) to help us find bugs, and allow downstream tools to make any necessary adjustments. The only pull requests that will be accepted during this period will be bug fixes or documentation and testing improvements. This window can be extended, so please let me know if you need more time.
I would ask all downstream projects to add pre-release testing if they do not already. Pre-release testing requires specifically requesting pre-release packages from PyPI, so if you have not set up this up in continuous integration configuration, it is very likely that you will not install the correct package. To do this, use the
--pre flag for pip when installing nibabel.
Please report any issues to https://github.com/nipy/nibabel/issues.
The most consequential changes in this release are the removal of Python 2 support and the deprecation of the
img.get_data() accessor method to retrieve the image data block. The supported APIs for accessing data are
img.get_fdata(), which always casts to a float, and
img.dataobj, which affords more control over the interpretation of the data object.
Additionally, GIFTI images have a new
agg_data() method that simplifies the retrieval of DataArrays from GIFTI files into usable numpy arrays. Most, if not all, filenames can now be passed as
pathlib.Path objects. And there are significant updates to the streamlines module. Exercising these functionalities will be a valuable contribution during this release candidate phase.
Many thanks to everbody who took the time to investigate and report bugs, propose fixes, review pull requests and review the documentation, including first-time contributors Cameron Riddell, Hao-Ting Wang, Oscar Esteban, Dorota Jarecka, and Chris Gorgolewski. And thanks in advance to your help in making this a smooth upgrade for users.
Full changelog follows.
Most work on NiBabel so far has been by Matthew Brett (MB), Chris Markiewicz (CM), Michael Hanke (MH), Marc-Alexandre Côté (MC), Ben Cipollini (BC), Paul McCarthy (PM), Chris Cheng (CC), Yaroslav Halchenko (YOH), Satra Ghosh (SG), Eric Larson (EL), Demian Wassermann, and Stephan Gerhard.
References like “pr/298” refer to github pull request numbers.
3.0.0rc1 (Saturday 16 November 2019)
Release candidate for NiBabel 3.0, initiating a minimum one-month testing window.
Downstream projects are requested to test against the release candidate by installing with
pip install --pre nibabel.
- ArrayProxy method
get_scaled()scales data with a dtype of a specified precision, promoting as necessary to avoid overflow. This is to used in
img.get_fdata()to control memory usage. (pr/833) (CM, reviewed by Ross Markello)
- GiftiImage method
agg_data()to return usable data arrays (pr/793) (Hao-Ting Wang, reviewed by CM)
os.PathLikeobjects in place of filenames (pr/610) (Cameron Riddell, reviewed by MB, CM)
- Function to calculate obliquity of affines (pr/815) (Oscar Esteban, reviewed by MB)
get_fdata(dtype=np.float32)will attempt to avoid casting data to
np.float64when scaling parameters would otherwise promote the data type unnecessarily. (pr/833) (CM, reviewed by Ross Markello)
ArraySequencenow supports a large set of Python operators to combine or update in-place. (pr/811) (MC, reviewed by Serge Koudoro, Philippe Poulin, CM, MB)
- Warn, rather than fail, on DICOMs with unreadable Siemens CSA tags (pr/818) (Henry Braun, reviewed by CM)
- Improve clarity of coordinate system tutorial (pr/823) (Egor Panfilov, reviewed by MB)
Tractograms no longer
apply_affineto the original
Tractogram's streamlines. (pr/811) (MC, reviewed by Serge Koudoro, Philippe Poulin, CM, MB)
- Re-import externals/netcdf.py from scipy to resolve numpy deprecation (pr/821) (CM)
- Support Python >=3.5.1, including Python 3.8.0 (pr/787) (CM)
- Manage versioning with slightly customized Versioneer (pr/786) (CM)
- Reference Nipy Community Code and Nibabel Developer Guidelines in GitHub community documents (pr/778) (CM, reviewed by MB)
API changes and deprecations
ArraySequence.datain favor of
ArraySequence.get_data(), which will return a copy.
ArraySequence.datanow returns a read-only view. (pr/811) (MC, reviewed by Serge Koudoro, Philippe Poulin, CM, MB)
DataobjImage.get_data()API, to be removed in nibabel 5.0 (pr/794, pr/809) (CM, reviewed by MB)