Changelog
The current changelog contains information on neurocaps versions 0.19.0 and above. For changes in earlier versions (< 0.19.0), please refer to the Changelog Archive.
Note: The versions listed in this file have been or will be deployed to PyPI.
[Versioning]
0.minor.patch.postN
.minor : Introduces new features and may include potential breaking changes. Any breaking changes will be explicitly noted in the changelog (e.g., new functions or parameters, changes in parameter defaults, or function names).
.patch : Contains fixes for identified bugs and may include modifications or added parameters for improvements/enhancements. All fixes and modifications are backwards compatible.
.postN : Consists of documentation changes or metadata-related updates, such as modifications to type hints.
[0.21.8] - 2025-02-13
🚀 New/Added
CAPandTimeseriesExtractorclasses now have defined string dunder methods that return specific metadata.
[0.21.7] - 2025-02-11
🐛 Fixes
Fixed documentation rendering issues in VSCode.
📖 Documentation
Cleaned documentation in some functions.
[0.21.6] - 2025-02-06
🐛 Fixes
CAP.outer_productsproperty now no longer returns None when it is not None.
[0.21.5] - 2025-01-27
🚀 New/Added
Added new
progress_barparameter toCAP.calculate_metrics,CAP.caps2niftis,CAP.caps2surf,CAP.get_caps, andTimeseriesExtractor.get_boldto display tqdm progress bars.
📖 Documentation
Cleans version change/version added directives and references for versions under 0.19.0 to clean up documentation.
Additional minor documentation cleaning.
[0.21.4] - 2025-01-24
🐛 Fixes
Fix issue in "counts" computation in
CAP.calculate_metricsfor case where no TRs are assigned to a specific label/CAP. Instead of "counts" being 0 in this case, it would be a 1. Issue did not affect the other metrics ("temporal fraction", "persistence", etc), which would correctly be 0 in such cases.
[0.21.3] - 2025-01-17
🐛 Fixes
Added ipywidgets in optional dependencies for a better experience with the "openneuro_demo" Jupyter notebook.
[0.21.2] - 2025-01-14
🐛 Fixes
Fixes warning about ignoring mandatory keys in
fd_thresholdanddummy_scans.Also adds check to ensure that the "outlier_percentage" key is a float between 0 and 1.
Setuptools version pinned to 64.0 or greater.
[0.21.1] - 2025-01-10
🐛 Fixes
Better type validation for
fd_thresholdanddummy_scans.
📖 Documentation
Slightly clearer documentation on the criteria used for
fd_threshold.
[0.21.0] - 2025-01-02
🚀 New/Added
Added a new parameter,
slice_time_refinTimeseriesExtractor.get_boldto allow onset to be subtracted byslice_time_ref * trif desired.
[0.20.0] - 2024-12-31
🚀 New/Added
Added new log message specifying the condition being extracted if
conditionis not None.Added a new parameter,
condition_tr_shiftinTimeseriesExtractor.get_boldto allow a shift in the the starting and ending scan in TR units for a condition.
[0.19.4] - 2024-12-24
📖 Documentation
Links are fixed in the documentation.
🐛 Fixes
Fix indexing error for
visualize_boldifparcel_approach["Custom"]["nodes"]is a NumPy array instead of list.
♻ Changed
Internally, the verbose parameter is set to 0 for nilearn's
fetch_atlas_aalandfetch_atlas_schaefer. and the behavior is stated in the documentation. Cosine similarity in this case is assignednp.nanWhen creating "regions" for the "Custom" parcel approach, both a list and range can be accepted. Previously, only lists were accepted.
List method:
parcel_approach["Custom"]["regions"] = {
"Primary Visual": {"lh": [0], "rh": [180]},
"Early Visual": {"lh": [1, 2, 3], "rh": [181, 182, 183]},
"Dorsal Stream Visual": {"lh": list(range(4, 10)), "rh": list(range(184, 190))},
"Ventral Stream Visual": {"lh": list(range(10, 17)), "rh": list(range(190, 197))},
"MT+ Complex": {"lh": list(range(17, 26)), "rh": list(range(197, 206))},
"SomaSens Motor": {"lh": list(range(26, 31)), "rh": list(range(206, 211))},
"ParaCentral MidCing": {"lh": list(range(31, 40)), "rh": list(range(211, 220))},
"Premotor": {"lh": list(range(40, 47)), "rh": list(range(220, 227))},
"Posterior Opercular": {"lh": list(range(47, 52)), "rh": list(range(227, 232))},
"Early Auditory": {"lh": list(range(52, 59)), "rh": list(range(232, 239))},
"Auditory Association": {"lh": list(range(59, 67)), "rh": list(range(239, 247))},
"Insula FrontalOperc": {"lh": list(range(67, 79)), "rh": list(range(247, 259))},
"Medial Temporal": {"lh": list(range(79, 87)), "rh": list(range(259, 267))},
"Lateral Temporal": {"lh": list(range(87, 95)), "rh": list(range(267, 275))},
"TPO": {"lh": list(range(95, 100)), "rh": list(range(275, 280))},
"Superior Parietal": {"lh": list(range(100, 110)), "rh": list(range(280, 290))},
"Inferior Parietal": {"lh": list(range(110, 120)), "rh": list(range(290, 300))},
"Posterior Cingulate": {"lh": list(range(120, 133)), "rh": list(range(300, 313))},
"AntCing MedPFC": {"lh": list(range(133, 149)), "rh": list(range(313, 329))},
"OrbPolaFrontal": {"lh": list(range(149, 158)), "rh": list(range(329, 338))},
"Inferior Frontal": {"lh": list(range(158, 167)), "rh": list(range(338, 347))},
"Dorsolateral Prefrontal": {"lh": list(range(167, 180)), "rh": list(range(347, 360))},
"Subcortical Regions": {"lh": list(range(360, 393)), "rh": list(range(393, 426))},
}
List and range method:
parcel_approach["Custom"]["regions"] = {
"Primary Visual": {"lh": [0], "rh": [180]},
"Early Visual": {"lh": [1, 2, 3], "rh": [181, 182, 183]},
"Dorsal Stream Visual": {"lh": range(4, 10), "rh": range(184, 190)},
"Ventral Stream Visual": {"lh": range(10, 17), "rh": range(190, 197)},
"MT+ Complex": {"lh": range(17, 26), "rh": range(197, 206)},
"SomaSens Motor": {"lh": range(26, 31), "rh": range(206, 211)},
"ParaCentral MidCing": {"lh": range(31, 40), "rh": range(211, 220)},
"Premotor": {"lh": range(40, 47), "rh": range(220, 227)},
"Posterior Opercular": {"lh": range(47, 52), "rh": range(227, 232)},
"Early Auditory": {"lh": range(52, 59), "rh": range(232, 239)},
"Auditory Association": {"lh": range(59, 67), "rh": range(239, 247)},
"Insula FrontalOperc": {"lh": range(67, 79), "rh": range(247, 259)},
"Medial Temporal": {"lh": range(79, 87), "rh": range(259, 267)},
"Lateral Temporal": {"lh": range(87, 95), "rh": range(267, 275)},
"TPO": {"lh": range(95, 100), "rh": range(275, 280)},
"Superior Parietal": {"lh": range(100, 110), "rh": range(280, 290)},
"Inferior Parietal": {"lh": range(110, 120), "rh": range(290, 300)},
"Posterior Cingulate": {"lh": range(120, 133), "rh": range(300, 313)},
"AntCing MedPFC": {"lh": range(133, 149), "rh": range(313, 329)},
"OrbPolaFrontal": {"lh": range(149, 158), "rh": range(329, 338)},
"Inferior Frontal": {"lh": range(158, 167), "rh": range(338, 347)},
"Dorsolateral Prefrontal": {"lh": range(167, 180), "rh": range(347, 360)},
"Subcortical Regions": {"lh": range(360, 393), "rh": range(393, 426)},
}
[0.19.3.post0] - 2024-12-10
📖 Documentation
Additional documentation for
standardizefunction.
[0.19.3] - 2024-12-08
🚀 New/Added
Method chaining for several methods in the
CAPandTimeseriesExtractorclass.
[0.19.2] - 2024-12-06
🐛 Fixes
Add type hints to properties.
Improve accuracy of type hints for the properties.
Fixes type hints for certain parameters that included numpy.ndarray.
Replaces any returns that implies a plot object is returned and replaces with None for clarity.
Raise type error when
self.subject_tableinCAPis set but is not a dictionary.
[0.19.1] - 2024-11-30
Primarily to ensure all the latest distributions have the correct documentation links.
Includes some internal code changes that won't change results.
TODO for future version is to support Python 3.13.
[0.19.0] - 2024-11-28
Cleaning some of the API, specifically parameter names and properties, no defaults have been changed in this update.
🚀 New/Added
suffix_filenameadded toCAP.caps2plot,CAP.caps2surf,CAP.caps2radar, andtransition_matrix. This addition was done to allow thesuffix_titleparameter in each of the previously listed methods to only be responsible for the title of the plots. The suffix filename will also be appended to the end of the default filename.CAPclass now has acluster_scoresproperty to consolodate theinertia,davies_bouldin,silhouette, and "variance_ratio" scores into a property instead of separate properties. Consequently, theinertia,davies_bouldin,silhouette, and "variance_ratio" have been removed.
The structure of this property is:
{
"Cluster_Selection_Method": str, # e.g., "elbow", "davies_bouldin", "silhouette", or "variance_ratio"
"Scores": {
"GroupName": {
2: float, # Score for 2 clusters
3: float, # Score for 3 clusters
4: float, # Score for 4 clusters
},
}
}
♻ Changed
Any instance of
file_namein a parameter name has been changed to the more conventional parameter namefilename. For instance,suffix_file_namenow becomessuffix_filenameandfile_namesbecomesfilenames. This change effects the following functions:merge_dicts,standardize,change_dtypes,CAP.calculate_metrics,CAP.caps2niftis,TimeseriesExtractor.timeseries_to_pickle, andTimeseriesExtractor.visualize_bold.Warning logged whenever file name parameter is used but
output_diris not specified.
📖 Documentation
Fix doc parameter error for
CAP.caps2niftisthat usedsuffix_titleinstead ofsuffix_file_name, which is nowsuffix_filename.In documentation, version labels restricted to changes or additions make from 0.18.0 and above for less clutter.