- Enables extracting tiles at downsample/magnification level without resizing; use by setting `tile_um` equal to a string of format "[int/float]x", such as "10x", "40x", "2.5x". Slides will log an error if there is no matching downsample level at that layer.
- Vastly reduced time and space required for testing, with switch to tile_px=71, tile_um=1208, and mobilenet_v2 architecture
- Added single linear outcome testing to TestSuite
- TestSuite train testing now ensures results are properly returned from `P.train()`
- P.train() now returns a `dict` instead of a multiprocessing `DictProxy`
- Added unit test framework to TestSuite; tests are automatically run with `test.py`. Individual unit tests located in slideflow.test
- Optimized `Dataset.labels()` to make better use of pandas DataFrame functionality
- Added first unit tests in dataset_test.py, includes tests for Dataset.labels()
- Added type hints throughout
- Adds `SlideMap.filter_index()` method which filters x, y, point_meta, and labels of a SlideMap using the given indices
- Adds `method` argument to `SlideMap.neighbors`, allowing neighbors to be calculated from either UMAP coordinates (`'map'`) or feature vectors (`'features'`)
- Refactored PyTorch training loop within `Trainer`. Functionality remains identical, with cleaner organization and reduced code redundancy.
- Import optimization (delays importing seaborn and matplotlib)
- Added `Dataset.thumbnails()`, deprecated `Project.generate_thumbnails()`
- Added `auto_dataset` function decorator for Project functions; preparation for future removal of `filters` and `filter_blank` arguments in Project functions (instead, pass a filtered `Dataset` object)
- Deprecates` Dataset.split_patients_list()`
- Deprecated `Dataset.training_validation_split()`, use `.train_val_split()`
- Deprecated `Project.generate_tfrecord_heatmap()`. Instead, do `Dataset.tfrecord_heatmap()`
- Removed legacy, unused functions in sf.norm.utils
- Clearer error message when attempting to use a normalizer prior to calling `.fit()`
- Added pool.close() for several ThreadPools
- Fixes `sf.util.multi_warn`
- Fixed typo in Tutorial 2
- Fixed docstring typos in `Project.evaluate()` and `Project.predict()`
- Fixes erroneous error log reporting that training had failed when validation was not performed
- Fixes shape error during metrics calculation
- Fixes false positive MismatchImageFormatsError
- Fixed edge case where Torch TFRecord reading was skipping TFRecords with fewer records than the number of shards/workers
- Fixes rare runtime error when exiting an PyTorch dataloader iteration early
- Fixes Neptune logging error before training starts
- Docstring updates