Summary
This release contains several important developments:
- Spatial transcriptomics: alpha version of the feature.
- Performance improvements: particularly for
tiledbsoma.io.to_anndata
/tiledbsoma.io.to_h5ad
- Seurat I/O: incremental work for Seurat v5
- New shape feature: https://documentation.cloud.tiledb.com/academy/structure/life-sciences/single-cell/tutorials/shapes/
- Documentation infrastructure: more thorough class coverage, and more clickable links
- The TileDB-Py package is no longer a required dependency.
New features added
Spatial transcriptomics
- [python] Add
to_spatial_data
method toExperimentAxisQuery
#3431 - [python] Export full experiment to SpatialData #3409
- [python] Fix typos and import order in the spatial outgest #3381
- [python] Fix output type when exporting
PointCloudDataFrame
to SpatialData points #3408 - [python] Update Scene create method in the Python API #3356
- [python] Change import
experimental
->io.spatial
in test #3394 - [python] Add support for exporting to SpatialData without transform #3392
- [python] Rename
to_spatial_data
->to_spatialdata
#3449 - [python] Move
experimental
module toio.spatial
#3384 - [python] Add export for
MultiscaleImage
to SpatialData by @jp-dark in #3355 - [python] Add
PointCloudDataFrame
to SpatialData points model by @jp-dark in #3357 - [python] Add MultiscaleImage level SpatialData exporter by @jp-dark in #3342
- [python] Spatial changes required for somacore 1.0.24 by @jp-dark in #3333
- [python] Fix and test SpatialData transformation exporter by @jp-dark in #3330
- [python] Rewrite Xarray support to use dask arrays by @jp-dark in #3325
- [python] Return identity for
MultiscaleImage
transform to/from level 0 by @jp-dark in #3323 - [python] Add
MultiscaleImage
methods to access level URI by @jp-dark in #3322 - [python] Add export for
PointCloudDataFrame
toSpatialData
shapes by @jp-dark in #3298 - [python] Create
xarray
backend for DataArray types by @jp-dark in #3243 - [python] Update spatial API to match somacore 1.0.23 by @jp-dark in #3274
- [c++] Cast vertex list to WKB by @XanthosXanthopoulos in #3222
- [c++] Geometry Dataframe by @XanthosXanthopoulos in #3212
Performance improvements
- [python] Remove double open For
SOMAArray
reads #3293 - [python,c++] Improve error handling in
IntIndexer
#3441 - [python] Some memory-reduction for append mode #3404
- [python] Extend #3354 to categoricals of arbitrary value type #3415
- [python] Protect against huge enum-of-strings input #3354
- [python] Optimization of
ExperimentAxisQuery
to_anndata
by @bkmartinjr in #3359 - [python] Fix incorrect type handling in
ExperimentAxisQuery
sparse reader by @bkmartinjr in #3375 - [python/C++] Release GIL in
IntIndexer
C++ code by @bkmartinjr in #3344 - [python] Partition sparse matrix reads in
tiledbsoma.io.to_anndata
by @bkmartinjr in #3328 - [python/c++] COO to CSX conversion optimization by @bkmartinjr in #3304
- [python] Performance improvement for experiment-level resize by @johnkerl in #3308
- [python] Add
ManagedQuery
bindings by @nguyenv in #3281 - [python] Ingest
somacore
classes by @ryan-williams in #3307 - [c++] Fix heap management in
fastercsx
by @johnkerl in #3365 - [c++] Add
ManagedQuery
constructor that takesSOMAArray
by @nguyenv in #3279 - [c++] Add
ManagedQuery::set_layout
by @nguyenv in #3278 - [c++] Use schema from
tiledb::Array
instead ofManagedQuery
by @nguyenv in #3277 - [c++] Move casting from
SOMAArray
toManagedQuery
by @nguyenv in #3275
Seurat I/O
- [r] Add initial support for ragged array writing for Seurat v5 by @mojaveazure in #2523
New shape
- [c++] Some
use_current_domain
unit-test/feature-flag teardown, part 4/n #3372 - [c++] Some
use_current_domain
unit-test/feature-flag teardown, part 3 of 4 #3371 - [c++] Some
use_current_domain
unit-test/feature-flag teardown, part 2/n #3370 - [c++] Some
use_current_domain
unit-test/feature-flag teardown, part 1 of 4 #3369 - [c++] Use valid ASCII for wide-as-possible string current domain #3367
- [c++] Match zero-basing for old/new sparse-array shapes #3439
- [r] Add
check_only
support for domain/shape updates #3400 - [python/r] Update docstrings for
domain
argument tocreate
#3396 - [r] Vignette for new-shape feature #3302
- [c++] Fix upgrade-soma-joinid-shape for dataframes having non-standard dimensions #3416
- [python/r] Docstring audit for new shape #3399
- [c++] Some
use_current_domain
unit-test/feature-flag teardown, part 4 of 4 by @johnkerl in #3372 - [c++] Some
use_current_domain
unit-test/feature-flag teardown, part 3 of 4 by @johnkerl in #3371 - [c++] Some
use_current_domain
unit-test/feature-flag teardown, part 2 of 4 by @johnkerl in #3370 - [python/r] Remove 2.27-related feature flag by @johnkerl in #3368
- [r/python] Revert #3300 by @johnkerl in #3358
- [python/r] Enforce dataframe domain lower bound == 0 by @johnkerl in #3300
- [c++] Use valid ASCII for wide-as-possible string current domain by @johnkerl in #3367
- [python] Use new shape in one more spot by @johnkerl in #3321
- [python] Fix bad merge of soma-shapes notebook by @johnkerl in #3309
- [python] Tutorial notebook for the new-shape feature by @johnkerl in #3294
- [r] Data refresh for new shapes by @johnkerl in #3303
- [python/r] Move beyond the new-shape feature flag by @johnkerl in #3301
- [python] Fix dense example data for core 2.27 by @johnkerl in #3296
- [python/docs] Replace experiment directories with
.tgz
files in source control by @johnkerl in #3295 - [python] Doc updates for new-shape feature by @johnkerl in #3285
- [python] Run upgrade-shapes on notebook example experiments by @johnkerl in #3289
- [python] Include
tiledbsoma_upgrade_shape
forDenseNDArray
by @johnkerl in #3288 - [python] More auto-detect of
function_name_for_messages
by @johnkerl in #3286 - [r] More fixes for unit-test cases with dense + core 2.27 by @johnkerl in #3280
- [python] Fix last 2.27+Python+dense failing test case by @johnkerl in #3269
- [r] Fixes for dense+2.27 by @johnkerl in #3270
- [python] Fix 3D/4D cases with core 2.27 by @johnkerl in #3268
- [c++] Apply subarrays for dense reads and writes by @johnkerl in #3263
- [python] Fix some dense+2.27 failing test cases by @johnkerl in #3265
- [python] Centralize sparse/dense
pybind11
shape methods by @johnkerl in #3261 - [python] Re-run, and update, example notebooks with new shape feature by @johnkerl in #3290
Upcoming deprecation notices
- The
.used_shape
accessor forSparseNDArray
andDenseNDArray
is scheduled for removal in 1.16: as of 1.15 the.shape
accessor replaces it.
Bug fixes
- [python]
ExperimentAxisQuery
:to_anndata
obsp/varp
as sparse matrices #3387 - [python] Fix conditional fall-through in
SOMAObject.open
#3446 - [c++] Fix bug with sliced Arrow-table writes, with string columns #3433
- [python, c++] Fix misleading
DoesNotExistErrors
inopen
factory #3402 - [c++]
ManagedQuery::set_condition
should not reset entire instance state #3418 - [r] Update changelog and develop version for #3395 #3401
- [r] Adjust blockwise + re-indexer to return condensed matrix, not full domain #3395
- [python] Re-introduce
tiledb_ctx
forSOMATileDBContext
#3335
Minor changes
Documentation infastructure
- [docs] Fix Sphinx issue with linkless summaries by @johnkerl in #3284
- [docs] Add new things to
.rst
files by @johnkerl in #3283 - [python] Misc. formatting fix-ups by @johnkerl in #3287
- [python]
_multiscale_image
: add missing docstrings, typo fixes by @ryan-williams in #3312
Packaging and CI
- [python] Pin dask version 2024.11.2 to unblock CI #3403
- [python] Pre-emptively avoid SciPy 1.15, pending a bugfix #3445
- [c++] Use core 2.27.0 #3421
- [c++] Use core 2.27.0.rc5 #3410
- [c++/python/r] Use core 2.27.0-rc3 by @johnkerl in #3366
- [packaging] More failure info in
update-tiledb-versions.py
by @johnkerl in #3363 - [python] Run
pre-commit autoupdate
by @johnkerl in #3326 - [r/python] Note on dev installs and
spdlog
failures by @johnkerl in #3324 - [r/ci] Remove tiledb-r specific install by @mojaveazure in #3319
- [r/ci] Try to unbreak
r-valgrind
CI by @johnkerl in #3318 - [r/ci] Avoid log truncation with "Last 13 lines of output" by @johnkerl in #3313
- [r] Run tests in closer to internal-dependency order by @johnkerl in #3311
- [python] Unbreak CI with
anndata==0.11
by @johnkerl in #3305 - [python] Fix some warnings at
anndata==0.11
by @johnkerl in #3306
Remove TileDB-Py as a required dependency
Other internals
- [python] Remove use of deprecated schema-display function #3380
- [r] Use standard name
zzz.R
for init code by @johnkerl in #3332 - [r] Address two more compiler warnings by @johnkerl in #3320
- [c++] Fix a compiler warning by @johnkerl in #3310
- [python] Consolidate all
_set_coords
methods into single_util
function by @nguyenv in #3292 - [python] Rename
set_reader_coords
toset_coords
by @johnkerl in #3253 - [python] Use
somacore
1.0.26 #3460 - [python] Use
somacore
1.0.25 #3455 - [c++] Add ASAN run of CI to weekly CI job #3434