NiBabel 3.0 Release Candidate (Please test!)

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 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)
  • 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 to np.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 Tractograms no longer apply_affine to 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)

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 of ArraySequence.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)
2 Likes

Hello Chris, we could put this call for testers on INCF’s blog and Twitter, if you’d like? Unless you prefer a more controlled range of testers. /Malin

@malin Thanks for the offer. As broad a set of testers as is feasible would be great.

Ok then, happy to help spread! I’ll ping you on twitter if there are questions, or send people here. /Malin

1 Like

Bumping this thread to announce 3.0.0rc2. Another round of testing before next week’s release would be appreciated!

1 Like