Hi all,
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
.
New features
- ArrayProxy method
get_scaled()
scales data with a dtype of a specified precision, promoting as necessary to avoid overflow. This is to used inimg.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) - Accept
os.PathLike
objects 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)
Enhancements
-
get_fdata(dtype=np.float32)
will attempt to avoid casting data tonp.float64
when scaling parameters would otherwise promote the data type unnecessarily. (pr/833) (CM, reviewed by Ross Markello) -
ArraySequence
now 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)
Bug fixes
- Sliced
Tractogram
s no longerapply_affine
to the originalTractogram
'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)
Maintenance
- 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
- Deprecate
ArraySequence.data
in favor ofArraySequence.get_data()
, which will return a copy.ArraySequence.data
now returns a read-only view. (pr/811) (MC, reviewed by Serge Koudoro, Philippe Poulin, CM, MB) - Deprecate
DataobjImage.get_data()
API, to be removed in nibabel 5.0 (pr/794, pr/809) (CM, reviewed by MB)