Releases: bids-standard/pybids
0.9.5
Release Notes
Bug fix release in the 0.9.x series.
Final planned release with Python 2 support.
With thanks to new contributors Ashley Gillman, Satra Ghosh and Hans Johnson.
Changes
- FIX: Filter before downsampling (#529)
- FIX: Copy input dict in
replace_entities
; Typos indefault_path_patterns
(#517) - FIX: Use string dtype for all entities when using regex search (#511)
- FIX: Update Sphinx docs for 2.2 (#507)
- ENH: Enable automatic derivative database caching (#523)
- ENH: Raise ValueError if BIDSLayout.build_path fails to match any pattern (#508)
- RF: Subclass analysis Node from object (#528)
- DOC: Unify docstring format (#499)
- DOC: Auto-generate stubs (#513)
- STY: .sql is a misleading extension to sqlite files (#531)
- STY: General cleanups (#526, #527)
0.9.4
Release Notes
Bug fix release in the 0.9.x series.
With thanks to new contributor Jon Haitz Legarreta.
Changes
- FIX: Ignore
default_ignore
paths by default (#495) - FIX: Filter and sort on scalar metadata in
get_nodes()
(#488) - FIX: Automatically sanitize dtype of
get()
arguments (#492) - FIX: Check that
default_path_patterns
is notNone
before using inbuild_path
(#485) - FIX: Add CBV and phase modalities to func datatype path pattern (#479)
- FIX: Drop bold suffix constraint from echo entity (#477)
- ENH: Enforce dtypes on spec-defined columns when reading in DFs (#494)
- ENH: Validate built paths (#496)
- ENH: Update contrast enhancing agent query name (ceagent) (#497)
- DOC: Add citation information to README (#493)
- DOC: Improve wording in Python notebook example comment (#484)
- DOC: Finish sentence in Python Notebook example documentation (#483)
- DOC: Add JOSS Badge (#472)
- STY: Apply syntax highlight to Python notebook example doc (#482)
- MAINT: Move setup configuration to setup.cfg (#448)
- MAINT: Additional Zenodo metadata (#470)
- MAINT/CI: Use
extras_require
to declare dependencies for tests (#471)
0.9.3
Release Notes
This version includes a number of minor fixes and improvements, one of which
breaks the existing API (by renaming two entities; see #464).
With thanks to new contributor Remi Gau.
Changes
0.9.2
Release Notes
This version includes a number of minor fixes and improvements. EEG files are better handled, and BIDSLayout
and BIDSFile
play more nicely with Path
-like objects.
With thanks to new contributor Cecile Madjar.
Changes
- FIX: Instantiate
ignore
/force_index
after root validation (#457) - FIX: Restore
<entity>=None
query returning files lacking the entity (#458) - ENH: Add
BIDSJSONFile
(#444) - ENH: Add
BIDSFile.__fspath__
to work with pathlib (#449) - ENH: Add
eeg
datatype to layout config (#455) - RF: Remove unused kwargs to BIDSFile (#443)
- DOC: Improve docstring consistency, style (#443)
- DOC: Address final JOSS review (#453)
- STY: PEP8 Fixes (#456)
- MAINT: Set name explicitly in setup.py (#450)
0.9.1
0.9.0
Release notes
Version 0.9 replaces the native Python backend with a SQLite database managed
via SQLAlchemy. The layout module has been refactored (again), but API changes
are minimal. This release also adds many new features and closes a number of
open issues.
API CHANGES/DEPRECATIONS:
- The
extensions
argument has now been banished forever; instead, use
extension
, which is now defined as a first-class entity. The former will
continue to work until at least the 0.11 release (closes #404). - Relatedly, values for
extension
should no longer include a leading.
,
though this should also continue to work for the time being. - The
BIDSLayout
init argumentindex_associated
has been removed as the
various other filtering/indexing options mean there is longer a good reason for
users to manipulate this. bids.layout.MetadataIndex
no longer exists. It's unlikely that anyone will
notice this.BIDSLayout.get_metadata()
no longer takes additional entities as optional
keyword arguments (they weren't necessary for anything).- Direct access to most
BIDSFile
properties is discouraged, and in one case
is broken in 0.9 (for.metadata
, which was unavoidable, because it's reserved
by SQLAlchemy). Instead, users should use getters (get_metadata
,get_image
,
get_df
, etc.) whenever possible.
NEW FUNCTIONALITY:
- All file and metadata indexing and querying is now supported by a
relational (SQLite) database (see #422). While this has few API implications,
the efficiency of many operations is improved, and complex user-generated
queries can now be performed via the SQLAlchemy.session
stored in each
BIDSLayout
. - Adds
.save()
method to theBIDSLayout
that saves the current SQLite DB
to the specified location. Conversely, passing a filename asdatabase_file
at
init will use the specified store instead of re-indexing all files. This
eliminates the need for a pickling strategy (#435). - Related to the above, the
BIDSLayout
init adds areset_database
argument
that forces reindexing even if adatabase_file
is specified. - The
BIDSLayout
has a newindex_metadata
flag that controls whether or
not the contents of JSON metadata files are indexed. - Added
metadata
flag toBIDSLayout.to_df()
that controls whether or not
metadata columns are included in the returned pandasDataFrame
(#232). - Added
get_entities()
method toBIDSLayout
that allows retrieval of all
Entity
instances available within a specified scope (#346). - Adds
drop_invalid_filters
argument toBIDSLayout.get()
, enabling users to
(optionally) ensure that invalid filters don't clobber all search results
(#402). BIDSFile
instances now have aget_associations()
method that returns
associated files (see #431).- The
BIDSFile
class has been split into a hierarchy, withBIDSImageFile
andBIDSDataFile
subclasses. The former adds aget_image()
method (returns
a NiBabel image); the latter adds aget_df()
method (returns a pandas DF).
AllBIDSFile
instances now also have aget_entities()
method.
BUG FIXES AND OTHER MINOR CHANGES:
- Metadata key/value pairs and file entities are now treated identically,
eliminating a source of ambiguity in search (see #398). - Metadata no longer bleeds between raw and derivatives directories unless
explicitly specified (see #383). BIDSLayout.get_collections()
no longer drops user-added columns (#273).- Various minor fixes/improvements/changes to tests.
- The tutorial Jupyter notebook has been fixed and updated to reflect the
latest changes.
0.8.0
Release notes
Version 0.8 refactors much of the layout module. It drops the grabbit
dependency, overhauls the file indexing process, and features a number of other
improvements. However, changes to the public API are very minimal, and in the
vast majority of cases, 0.8 should be a drop-in replacement for 0.7.*.
API-breaking changes
- Changes to (rarely-used) BIDSLayout initialization arguments:
include
andexclude
have been replaced withignore
and
force_index
. Paths passed toignore
will be ignored from indexing;
paths passed toforce_index
will be forcibly indexed even if they are
otherwise BIDS-non-compliant.force_index
takes precedence overignore
.
- Most querying/selection methods add a new
scope
argument that controls
scope of querying (e.g.,'raw'
,'derivatives'
,'all'
, etc.). In some
cases this replaces the more limitedderivatives
argument. - No more
domains
: with the grabbit removal (see below), the notion of a
'domain'
has been removed. This should impact few users, but those who need
to restrict indexing or querying to specific parts of a BIDS project should be
able to use thescope
argument more effectively.
Other changes
- FIX: Path indexing issues in
get_file()
(#379) - FIX: Duplicate file returns under certain conditions (#350)
- FIX: Pass new variable args as kwargs in split() (#386) @effigies
- TEST: Update naming conventions for synthetic dataset (#385) @effigies
- REF: The grabbit package is no longer a dependency; as a result, much of the
functionality from grabbit has been ported over to pybids. - REF: Required functionality from six and inflect is now bundled with pybids
inbids.external
, minimizing external dependencies. - REF: Core modules have been reorganized. Key data structures and containers
(e.g.,BIDSFile
,Entity
, etc.) are now in a newbids.layout.core
module. - REF: A new
Config
class has been introduced to house the information
found inbids.json
and other layout configuration files. - REF: The file-indexing process has been completely refactored. A new
hierarchy ofBIDSNode
objects has been introduced. While this has no real
impact on the public API, and isn't really intended for public consumption yet,
it will in future make it easier for users to work with BIDS projects in a
tree-like way, while also laying the basis for a more sensible approach to
reading and accessing associated BIDS data (e.g., .tsv files). - MNT: All invocations of
pd.read_table
have been replaced withread_csv
.
0.7.1
Release Notes
This is a bug fix release in the 0.7 series. The primary API change is improved handling of Path
objects.
CHANGES
- FIX: Path validation (#342)
- FIX: Ensure consistent entities at all levels (#326)
- FIX: Edge case where a resampled column was too-long-by-one (#365)
- FIX: Use BIDS metadata for TR over nii header (#357)
- FIX: Add check for
run_info
to be a list, passrun_info
in correct position. (#353) - FIX: If
sampling_rate
is'auto'
, set to first rate ofDenseRunVariables
(#351) - FIX: Get the absolute path of the test data directory (#347)
- FIX: Update reports to be 0.7-compatible (#341)
- ENH: Rename
sr
variable to more intuitiveinterval
(#366) - ENH: Support
pathlib.Path
and otherstr
-castable types (#307) - MNT: Updates link to derivative config file in notebook (#344)
- MNT: Add bids-validator dependency (#363)
- MNT: Require pandas >= 0.23.0 (#348)
- MNT: Bump grabbit version (#338)
- CI: Ignore OSX Python 3.5 failures (#372)
- CI: Build with Python 3.7 on Travis, deploy on 3.6 (#337)
0.7.0
Release notes
This is a major, API-breaking release. It introduces a large number of new features, bug fixes, and improvements.
API-BREAKING CHANGES:
- A number of entities (or keywords) have been renamed to align more closely with the BIDS specification documents:
- 'type' becomes 'suffix'
- 'modality' becomes 'datatype'
- 'acq' is removed (use 'acquisition')
- 'mod' becomes 'modality'
- The following directories are no longer indexed by default: derivatives/, code/, stimuli/, models/, sourcedata/. They must be explicitly included using the 'include' initialization argument.
- The grabbids module has been renamed to layout and BIDSLayout.py and BIDSvalidator.py are now layout.py and validation.py, respectively.
- The BIDS validator is now enabled by default at layout initialization (i.e.,
validate=True
) - The
exclude
initialization argument has been removed. BIDSLayout.parse_entities
utility has been removed (use the more flexibleparse_file_entities
).- Calls to
.get()
now returnBIDSFile
objects, rather than namedtuples, by default (#281). TheBIDSFile
API has been tweaked to ensure backwards incompatibility in nearly all cases. - Naming conventions throughout the codebase have been updated to ensure consistency with the BIDS specs. This is most salient in the
analysis
module, where snake_case has been replaced with CamelCase throughout.
NEW FEATURES:
- File metadata (i.e., in JSON sidecars) is now searchable by default, and behaves just like native BIDS entities (e.g., metadata keys can be passed as arguments to
.get()
calls) - A new BIDSFile wrapper provides easy access to
.metadata
and.image
- HRF convolution is now supported via bundling of nistats' hemodynamic_models module; convolution is handled via the
convolve_HRF
transformation. - Named config paths that customize how projects are processed can be added at run-time (#313)
- Preliminary support for BIDS-Derivatives RC1 (mainly core keywords)
MINOR IMPROVEMENTS AND BUG FIXES:
- Specifying 'derivatives' in a path specification now automatically includes 'bids' (#246)
- Zenodo DOIs are now minted with new releases (#308)
- Variable loading via load_variables can now be done incrementally
- Expanded and improved path-building via
layout.build_path()
get_collections
no longer breaks whenmerge=True
and the list is empty (#202)- Layout initialization no longer fails when
validate=True
(#222) - The auto_contrasts field in the modeling tools now complies with the BIDS-Model spec (#234)
- Printing a
BIDSFile
now provides more useful information, including path (#298) - Resample design matrix to 1/TR by default (#309)
- Fix the Sum transformation
- Ensure that resampling works properly when a sampling rate is passed to
get_design_matrix
(#297) - Propagate derivative entities into top-level dynamic getters (#306)
- Deprecated
get_header
call in nibabel removed (#300) - Fix bug in entity indexing for
BIDSVariableCollection
(#319) - Exclude modules with heavy dependencies from root namespace for performance reasons (#321)
- Fix bug that caused in-place updating of input selectors in
Analysis
objects (#323) - Add a DropNA transformation (#325)
- Add a
get_tr()
method toBIDSLayout
(#327) - Add entity hints when calling
get()
with atarget
argument (#328) - Improved test coverage
0.6.5
Release Notes
This release includes a number of documentation improvements, BIDS-MEG support, as well as some bug fixes.
CHANGES
- FIX: Do not drop rows of NaNs (#217) @adelavega
- FIX: Declare run as having integer type (#236) @effigies
- ENH: MEG support (#229) @jasmainak
- REF: rename grabbids to layout, closes #228 (#230) @ltirrell
- DOC: add .get_collection examples to tutorial (#219) @Shotgunosine
- DOC: Fix link in README to point to documentation (#223) @KirstieJane
- DOC: Add binder link for tutorial (#225) @KirstieJane
- MAINT: Restore "analysis" installation extra (#218) @yarikoptic
- MAINT: Do not import tests in __init__.py (#226) @tyarkoni