From a2eaa996f5ccd1d8a0f42d9d40a0ec034e656c92 Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Tue, 17 Sep 2024 15:58:18 -0400 Subject: [PATCH 01/13] Add new datatypes Add the following new datatypes to the abstract specification * `SOMAScene` * `SOMAPointCloud` * `SOMAGeometryDataFrame` * `SOMAMultiscaleImage` --- abstract_specification.md | 90 +++++++++++++++++++++++++++++++-------- 1 file changed, 73 insertions(+), 17 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index 62d3194a..6aabf343 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -2,7 +2,7 @@ -**Specification version**: `0.2.0-dev` +**Specification version**: `0.3.0-dev` ℹ️ **Note**: Feedback on this spec is encouraged. Please [file an issue](https://github.com/single-cell-data/SOMA/issues) with any and all feedback, comments, or concerns. @@ -15,7 +15,9 @@ The goal of SOMA (“stack of matrices, annotated”) is a flexible, extensible, - enable distributed computation over datasets. - provide a building block for higher-level API that may embody domain-specific conventions or schema around annotated 2D matrices (e.g., a cell "atlas"). -The SOMA data model is centered on annotated 2-D matrices, conceptually similar to commonly used single-cell 'omics data structures including Seurat Assay, Bioconductor SingleCellExperiment, and Scanpy AnnData. Where possible, the SOMA API attempts to be general-purpose and agnostic to the specifics of any given environment, or to the specific conventions of the Single Cell scientific ecosystem. +The core SOMA data model is centered on annotated 2-D matrices, conceptually similar to commonly used single-cell 'omics data structures including Seurat Assay, Bioconductor SingleCellExperiment, and Scanpy AnnData. The core data model is supplemented with spatial indexed data for single-cell spatial 'omics support. + +Where possible, the SOMA API attempts to be general-purpose and agnostic to the specifics of any given environment, or to the specific conventions of the Single Cell scientific ecosystem. SOMA is an abstract _API specification_, with the goal of enabling multiple concrete API implementations within different computing environments and data-storage systems. SOMA does not specify an at-rest serialization format or underlying storage system. @@ -65,12 +67,16 @@ The foundational types are: - `SOMACollection`: a string-keyed container (key-value map) of other SOMA data types, e.g., `SOMADataFrame`, `SOMASparseNDArray`, and `SOMACollection`. - `SOMADataFrame`: a multi-column table -- essentially a dataframe with indexing on user-specified columns. +- `SOMAGeometryDataFrame` and `SOMAPointCloud`: multi-column tables for storing spatial indexed dataframes, available for point or full geometry instantiations. - `SOMADenseNDArray` and `SOMASparseNDArray`: an offset-addressed (zero-based), single-type N-D array, available in either sparse or dense instantiations. +- `SOMAMultiscaleImage`: a multiscale image pyramid that stores multiple levels of `SOMADenseNDArray`s. The composed types are: - `SOMAExperiment`: a specialization and extension of `SOMACollection`, codifying a set of naming and indexing conventions to represent an annotated, 2-D matrix of observations across _multiple_ sets of variables. - `SOMAMeasurement`: a specialization and extension of `SOMACollection`, that contains a set of annotated observables that are common to one or more sets of measurements and/or derived calculations. +- `SOMAScene`: a specialization and extension of `SOMACollection` that stores spatially resolved data that can be registered to a single coordinate space. + In this document, the term `dataframe` implies something akin to an Arrow `Table` (or `RecordBatch`), R `data.frame` or Python `pandas.DataFrame`, where: @@ -205,6 +211,28 @@ The default "fill" value for `SOMADataFrame` is the zero or null value of the re Most language-specific bindings will provide convertors between `SOMADataFrame` and other convenient data structures, such as Python `pandas.DataFrame`, R `data.frame`. +### SOMAPointCloud + +`SOMAPointCloud` is a multi-column table with a user-defined schema, defining the number of columns and their respective column name and value type. The schema is expressed as an Arrow `Schema`. + +Like the `SOMADataFrame`, every `SOMAPointCloud` must contain a column called `soma_joinid` of type `int64` and domain `[0, 2^63-1]`. The `soma_joinid` is intended to act as a joint key for other objects, such as `SOMASparseNDArray`. There may be multiple items with the same `soma_joinid` stored in the `SOMAPointCloud`. + +In addition to the `soma_joinid`, the user must define spatial columns, referred to as "spatial axes", that define the "points" in the array. Each spatial axis must be either an integer or floating type, and they must all have the same type. The user may specify a restriced domain for spatial axes or allow the axes to support the entire valid type range. The spatial axes must be index columns for the `SOMAPointCloud`, but the user may also specify other columns as index columns. + +The default "fill" value for `SOMAPointCloud` is the zero or null value of the respective column data type (e.g., `Arrow.float32` defaults to 0.0, `Arrow.string` to `""`, etc). + +### SOMAGeometryDataFrame + +`SOMAGeometryDataFrame` is a multi-column table with a user-defined schema, defining the number of columns and their respective column name and value type. The schema is expressed as an Arrow `Schema`. + +Like the `SOMADataFrame`, every `SOMAGeometryDataFrame` must contain a column called `soma_joinid` of type `int64` and domain `[0, 2^63-1]`. TThe `soma_joinid` is intended to act as a joint key for other objects, such as `SOMASparseNDArray`. There may be multiple items with the same `soma_joinid` stored in the `SOMAGeometryDataFrame`. + +In addition to the `soma_joinid`, every `SOMAGeometryDataFrame` must contain a column called `soma_geometry` with type `binary` that stores a well-known binary blob. The user must provide names for the axes of the geometry stored in the well-known binary that is distinct from the +names of other columns in the table. The `soma_geometry` must be an index column, but the user may also specify other additional columns as +index columns. Multiple items with the same geometry may be stored in the `SOMAGeometryDataFrame`. + +SOMADataFrame` is the zero or null value of the respective column data type (e.g., `Arrow.float32` defaults to 0.0, `Arrow.string` to `""`, etc). + ### SOMADenseNDArray `SOMADenseNDArray` is a dense, N-dimensional array of `primitive` type, with offset (zero-based) integer indexing on each dimension. The `SOMADenseNDArray` has a user-defined schema, which includes: @@ -231,26 +259,38 @@ The default "fill" value for `SOMASparseNDArray` is the zero or null value of th > ℹ️ **Note**: on TileDB this is an sparse array with `N` `int64` dimensions of domain `[0, maxInt64)`, and a single attribute. +### SOMAMultiscaleImage + +`SOMAMultiscaleImage` is `string`-keyed map of "images" that are stored as `SOMADenseNDArray`s. The `SOMAMultiscaleImage` is additionally indexed by the maximum shape (largest to smallest). The maximum shape of each `SOMADenseNDArray` must be the size of the entire image, but it may contain regions without data (in which case the `fill` value of the `SOMADenseNDArray` will be used). Keys in the map are unique and singular (no duplicates, i.e., the `SOMAMultiscaleImage` is _not_ a multi-map). + +The `SOMAMultiscaleImage` must have a fixed image axis order (e.g. channel-height-width) and a fixed number of channels (if there is a channel column). Each image within the `SOMAMultiscaleImage` must match these conventions. The user may provide names for the columns that correspond to spatial information (e.g. "x" for width and "y" for height). + +#### SOMAMultiscaleImage entry URIs + +A `SOMAMultiscaleImage` refers to its elements by URI. Like the `SOMACollection`, its reference to an element by **absolute** URI or **relative** URI. See above for a more complete description of **absolute** and **relative** URI behavior. + ## Composed Types Composed types are defined as a composition of foundational types, adding name, type and indexing constraints. These types are intended to facilitate data interoperability, ease of use, and _potentially_ enable implementation optimizations by virtue of their typing and structural guarantees. The initial composed types are motivated by single-cell biology, but additional types may be added in the future for more diverse use cases. -### SOMAExperiment and SOMAMeasurement +### SOMAExperiment, SOMAMeasurement, and SOMAScene -`SOMAExperiment` is a specialized `SOMACollection`, representing an annotated 2-D matrix of measurements. In the single-cell-biology use case, a `SOMAExperiment` can represent multiple modes of measurement across a single collection of cells (also known as a "multimodal dataset"). Within a `SOMAExperiment`, a set of measurements on a single set of variables (features) is represented as a `SOMAMeasurement`. +`SOMAExperiment` is a specialized `SOMACollection`, representing an annotated 2-D matrix of measurements. In the single-cell-biology use case, a `SOMAExperiment` can represent multiple modes of measurement across a single collection of cells (also known as a "multimodal dataset"). Within a `SOMAExperiment`, a set of measurements on a single set of variables (features) is represented as a `SOMAMeasurement`. A `SOMAExperiment` may also contain spatially resolved data that is stored in a `SOMAScene`. -The `SOMAExperiment` and `SOMAMeasurement` types comprise [foundational types](#foundational-types): +The `SOMAExperiment`, `SOMAMeasurement`, and `SOMAScene` types comprise [foundational types](#foundational-types): -- `SOMAExperiment`: a well-defined set of annotated observations defined by a `SOMADataFrame`, and one or more "measurement" on those observations. +- `SOMAExperiment`: a well-defined set of annotated observations defined by a `SOMADataFrame`, one or more "measurement" on those observations, and one of more "scenes" of the observables and measurements. - `SOMAMeasurement`: for all observables, a common set of annotated variables (defined by a `SOMADataFrame`) for which values (e.g., measurements, calculations) are stored in `SOMADenseNDArray` and `SOMASparseNDArray`. +- `SOMAScene`: images and spatially indexed data stored on a fixed coordinate system that relate back to the observables and measurements. -In other words, every `SOMAMeasurement` has a distinct set of variables (features), and inherits common observables from its parent `SOMAExperiment`. The `obs` and `var` dataframes define the axis annotations, and their respective `soma_joinid` values are the indices for all matrixes stored in the `SOMAMeasurement`. +In other words, every `SOMAMeasurement` has a distinct set of variables (features), and inherits common observables from its parent `SOMAExperiment`. The `obs` and `var` dataframes define the axis annotations, and their respective `soma_joinid` values are the indices for all matrixes stored in the `SOMAMeasurement`. Each `SOMAScene` stores images and spatial dataframes that join on the `obs` and var` dataframes. +[comment]: <> (TODO: Replace this image with an updated one.)
SOMAExperiment
-These types have pre-defined fields, each of which have well-defined naming, typing, dimensionality and indexing constraints. Other user-defined data may be added to a `SOMAExperiment` and `SOMAMeasurement`, as both are a specialization of the `SOMACollection`. Implementations _should_ enforce the constraints on these pre-defined fields. Pre-defined fields are distinguished from other user-defined collection elements, where no schema or indexing semantics are presumed or enforced. +These types have pre-defined fields, each of which have well-defined naming, typing, dimensionality and indexing constraints. Other user-defined data may be added to a `SOMAExperiment`, `SOMAMeasurement`, or `SOMAScene`, as each is a specialization of the `SOMACollection`. Implementations _should_ enforce the constraints on these pre-defined fields. Pre-defined fields are distinguished from other user-defined collection elements, where no schema or indexing semantics are presumed or enforced. The shape of each axis (`obs` and `var`) are defined by their respective dataframes, and the indexing of matrices is defined by the `soma_joinid` of the respective axis dataframe. @@ -261,29 +301,44 @@ The pre-defined fields of a `SOMAExperiment` object are: | Field name | Field type | Field description | | ---------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `obs` | `SOMADataFrame` | Primary annotations on the _observation_ axis. The contents of the `soma_joinid` pseudo-column define the _observation_ index domain, also known as `obsid`. All observations for the `SOMAExperiment` _must_ be defined in this dataframe. | -| `ms` | `SOMACollection[string, SOMAMeasurement]` | A collection of named measurements. | +| `obs` | `SOMADataFrame` | Primary annotations on the _observation_ axis. The contents of the `soma_joinid` pseudo-column define the _observation_ index domain, also known as `obsid`. All observations for the `SOMAExperiment` _must_ be defined in this dataframe. | +| `ms` | `SOMACollection[string, SOMAMeasurement]` | A collection of named measurements. | +| `spatial` | `SOMACollection[string, SOMAScene]` | A collection of named scenes. | +| `obs_spatial_presence` | `SOMADataFrame` | Join table that stores if a particular _observation_ is stored in a given `SOMAScene`. This dataframe is optional and may be omitted even in a `SOMAExperiment` with multiple `SOMAScene` items. | The `SOMAMeasurement` is a sub-element of a `SOMAExperiment`, and is otherwise a specialized `SOMACollection` with pre-defined fields: | Field name | Field type | Field description | | ---------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `var` | `SOMADataFrame` | Primary annotations on the _variable_ axis, for variables in this measurement (i.e., annotates columns of `X`). The contents of the `soma_joinid` pseudo-column define the _variable_ index domain, also known as `varid`. All variables for this measurement _must_ be defined in this dataframe. | -| `X` | `SOMACollection[string, SOMASparseNDArray\|SOMADenseNDArray]` | A collection of matrices, each containing measured feature values. Each matrix is indexed by `[obsid, varid]`. Both sparse and dense 2D arrays are supported in `X`. | -| `obsm` | `SOMACollection[string, SOMASparse\|SOMADenseNDArray]` | A collection of dense matrices containing annotations of each _obs_ row. Has the same shape as `obs`, and is indexed with `obsid`. | -| `obsp` | `SOMACollection[string, SOMASparseNDArray]` | A collection of sparse matrices containing pairwise annotations of each _obs_ row. Indexed with `[obsid_1, obsid_2].` | -| `varm` | `SOMACollection[string, SOMASparseNDArray\|SOMADenseNDArray]` | A collection of dense matrices containing annotations of each _var_ row. Has the same shape as `var`, and is indexed with `varid`. | -| `varp` | `SOMACollection[string, SOMASparseNDArray]` | A collection of sparse matrices containing pairwise annotations of each _var_ row. Indexed with `[varid_1, varid_2]` | +| `var` | `SOMADataFrame` | Primary annotations on the _variable_ axis, for variables in this measurement (i.e., annotates columns of `X`). The contents of the `soma_joinid` pseudo-column define the _variable_ index domain, also known as `varid`. All variables for this measurement _must_ be defined in this dataframe. | +| `X` | `SOMACollection[string, SOMASparseNDArray\|SOMADenseNDArray]` | A collection of matrices, each containing measured feature values. Each matrix is indexed by `[obsid, varid]`. Both sparse and dense 2D arrays are supported in `X`. | +| `obsm` | `SOMACollection[string, SOMASparse\|SOMADenseNDArray]` | A collection of dense matrices containing annotations of each _obs_ row. Has the same shape as `obs`, and is indexed with `obsid`. | +| `obsp` | `SOMACollection[string, SOMASparseNDArray]` | A collection of sparse matrices containing pairwise annotations of each _obs_ row. Indexed with `[obsid_1, obsid_2].` | +| `varm` | `SOMACollection[string, SOMASparseNDArray\|SOMADenseNDArray]` | A collection of dense matrices containing annotations of each _var_ row. Has the same shape as `var`, and is indexed with `varid`. | +| `varp` | `SOMACollection[string, SOMASparseNDArray]` | A collection of sparse matrices containing pairwise annotations of each _var_ row. Indexed with `[varid_1, varid_2]` | +| `var_spatial_presence` | `SOMADataFrame` | Join table that stores if a particular _variable_ is stored in a given `SOMAScene`. This dataframe is optional and may be omitted even if the `SOMAExperiment` the `SOMAMeasurement` is in contains multiple `SOMAScene` items. | + +The `SOMAScene` is a sub-element of a `SOMAExperiment`, and is otherwise a specialized `SOMACollection` with pre-defined fields: + +| Field name | Field type | Field description | +| ---------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `obsl` | `SOMACollection[string, SOMAPointCloud\|SOMAGeometryDataFrame]` | Location-based annotations on the _observable_ domain. The `soma_joinid` in any item in this collection should be interpreted as the `obsid` | +| `varl` | `SOMACollection[string, SOMACollection[str, SOMAPointCloud\|SOMAGeometryDataFrame]]` | Location-based annotations on the _variable_ domain. The outer collection is keyed on the measurement names. The `soma_joinid` for items in the inner collection should be interpreted as the `varid` for the respective measurement. | +| `img` | `SOMACollection[string, MultiscaleImage]` | A collection of multiscale images related to the experiment. | + + For the entire `SOMAExperiment`, the index domain for the elements within `obsp`, `obsm` and `X` (first dimension) are the values defined by the `obs` dataframe `soma_joinid` column. For each `SOMAMeasurement`, the index domain for `varp`, `varm` and `X` (second dimension) are the values defined by the `var` dataframe `soma_joinid` column in the same measurement. In other words, all predefined fields in the `SOMAMeasurement` share a common `obsid` and `varid` domain, which is defined by the contents of the respective columns in `obs` and `var` dataframes. -As with other `SOMACollections`, the `SOMAExperiment` and `SOMAMeasurement` also have a `metadata` field, and may contain other user-defined elements. Keys in a `SOMAExperiment` and `SOMAMeasurement` beginning with the characters `_`, `.`, or `$` are reserved for ad-hoc use, and will not be utilized by this specification. All other keys are reserved for future specifications. +As with other `SOMACollections`, the `SOMAExperiment`, `SOMAMeasurement`, and `SOMAScene` also have a `metadata` field, and may contain other user-defined elements. Keys in a `SOMAExperiment`, `SOMAMeasurement`, and `SOMAScene` beginning with the characters `_`, `.`, or `$` are reserved for ad-hoc use, and will not be utilized by this specification. All other keys are reserved for future specifications. The following naming and indexing constraints are defined for the `SOMAExperiment` and `SOMAMeasurement`: | Field name | Field constraints | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `obs`, `var` | Field type is a `SOMADataFrame`. | +| `ms` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMAMeasurement`. | +| `spatial` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMAScene`. | | `X` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMADenseNDArray` or `SOMASparseNDArray`. | | `obsp`, `varp` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMASparseNDArray`. | | `obsm`, `varm` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMADenseNDArray`. | @@ -293,6 +348,7 @@ The following naming and indexing constraints are defined for the `SOMAExperimen | `obsp` collection values | All matrixes must have the shape `(O, O)`. The domain of both dimensions is the values of `obs.soma_joinid`. | | `varm` collection values | All matrixes must have the shape `(V, M)`, where `M` is user-defined. The domain of the first dimension is the values of `var.soma_joinid`. | | `varp` collection values | All matrixes must have the shape `(V, V)`. The domain of both dimensions is the values of `var.soma_joinid`. | +| `obs_spatial_presence`, `var_spatial_presence` | Field type is a `SOMADataFrame`. Index columns are `soma_joinid` and a string column named `scene_id` with exactly one other boolean column named `data`. | # Functional Operations From d549531aab4b4a1ddac310dc6af100ded8fe6669 Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Tue, 17 Sep 2024 16:20:22 -0400 Subject: [PATCH 02/13] Update changelong --- abstract_specification.md | 1 + 1 file changed, 1 insertion(+) diff --git a/abstract_specification.md b/abstract_specification.md index 6aabf343..84513e00 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -1253,3 +1253,4 @@ However, client code should treat the `context` object on any instantiated SOMA 52. Removed ⚠️-marked commentary. 53. Added `SOMAMeasurement` to "Data Model" section, under "composed types". 54. Allowed all N-d arrays to be sparse. +55. Added new datatypes `SOMAScene`, `SOMAPointCloud`, `SOMAGeometryDataframe`, and `SOMAMultiscaleImage`, and bumped the API version to `0.3.0-dev`. From c871a15cd789612c99b1433a3ce187995cd343f1 Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Wed, 18 Sep 2024 10:02:34 -0400 Subject: [PATCH 03/13] (WIP) Add point cloud and geometry operations to abstract spec --- abstract_specification.md | 187 ++++++++++++++++++++++++++++++++------ 1 file changed, 159 insertions(+), 28 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index 84513e00..172bc5c3 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -77,7 +77,6 @@ The composed types are: - `SOMAMeasurement`: a specialization and extension of `SOMACollection`, that contains a set of annotated observables that are common to one or more sets of measurements and/or derived calculations. - `SOMAScene`: a specialization and extension of `SOMACollection` that stores spatially resolved data that can be registered to a single coordinate space. - In this document, the term `dataframe` implies something akin to an Arrow `Table` (or `RecordBatch`), R `data.frame` or Python `pandas.DataFrame`, where: - multiple columns may exist, each with a string column name. @@ -231,7 +230,7 @@ In addition to the `soma_joinid`, every `SOMAGeometryDataFrame` must contain a c names of other columns in the table. The `soma_geometry` must be an index column, but the user may also specify other additional columns as index columns. Multiple items with the same geometry may be stored in the `SOMAGeometryDataFrame`. -SOMADataFrame` is the zero or null value of the respective column data type (e.g., `Arrow.float32` defaults to 0.0, `Arrow.string` to `""`, etc). +SOMADataFrame`is the zero or null value of the respective column data type (e.g.,`Arrow.float32`defaults to 0.0,`Arrow.string`to`""`, etc). ### SOMADenseNDArray @@ -286,6 +285,7 @@ The `SOMAExperiment`, `SOMAMeasurement`, and `SOMAScene` types comprise [foundat In other words, every `SOMAMeasurement` has a distinct set of variables (features), and inherits common observables from its parent `SOMAExperiment`. The `obs` and `var` dataframes define the axis annotations, and their respective `soma_joinid` values are the indices for all matrixes stored in the `SOMAMeasurement`. Each `SOMAScene` stores images and spatial dataframes that join on the `obs` and var` dataframes. [comment]: <> (TODO: Replace this image with an updated one.) +
SOMAExperiment
@@ -299,8 +299,8 @@ The shape of each axis (`obs` and `var`) are defined by their respective datafra The pre-defined fields of a `SOMAExperiment` object are: -| Field name | Field type | Field description | -| ---------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Field name | Field type | Field description | +| ---------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `obs` | `SOMADataFrame` | Primary annotations on the _observation_ axis. The contents of the `soma_joinid` pseudo-column define the _observation_ index domain, also known as `obsid`. All observations for the `SOMAExperiment` _must_ be defined in this dataframe. | | `ms` | `SOMACollection[string, SOMAMeasurement]` | A collection of named measurements. | | `spatial` | `SOMACollection[string, SOMAScene]` | A collection of named scenes. | @@ -308,8 +308,8 @@ The pre-defined fields of a `SOMAExperiment` object are: The `SOMAMeasurement` is a sub-element of a `SOMAExperiment`, and is otherwise a specialized `SOMACollection` with pre-defined fields: -| Field name | Field type | Field description | -| ---------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Field name | Field type | Field description | +| ---------------------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `var` | `SOMADataFrame` | Primary annotations on the _variable_ axis, for variables in this measurement (i.e., annotates columns of `X`). The contents of the `soma_joinid` pseudo-column define the _variable_ index domain, also known as `varid`. All variables for this measurement _must_ be defined in this dataframe. | | `X` | `SOMACollection[string, SOMASparseNDArray\|SOMADenseNDArray]` | A collection of matrices, each containing measured feature values. Each matrix is indexed by `[obsid, varid]`. Both sparse and dense 2D arrays are supported in `X`. | | `obsm` | `SOMACollection[string, SOMASparse\|SOMADenseNDArray]` | A collection of dense matrices containing annotations of each _obs_ row. Has the same shape as `obs`, and is indexed with `obsid`. | @@ -320,13 +320,11 @@ The `SOMAMeasurement` is a sub-element of a `SOMAExperiment`, and is otherwise a The `SOMAScene` is a sub-element of a `SOMAExperiment`, and is otherwise a specialized `SOMACollection` with pre-defined fields: -| Field name | Field type | Field description | -| ---------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `obsl` | `SOMACollection[string, SOMAPointCloud\|SOMAGeometryDataFrame]` | Location-based annotations on the _observable_ domain. The `soma_joinid` in any item in this collection should be interpreted as the `obsid` | -| `varl` | `SOMACollection[string, SOMACollection[str, SOMAPointCloud\|SOMAGeometryDataFrame]]` | Location-based annotations on the _variable_ domain. The outer collection is keyed on the measurement names. The `soma_joinid` for items in the inner collection should be interpreted as the `varid` for the respective measurement. | -| `img` | `SOMACollection[string, MultiscaleImage]` | A collection of multiscale images related to the experiment. | - - +| Field name | Field type | Field description | +| ---------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `obsl` | `SOMACollection[string, SOMAPointCloud\|SOMAGeometryDataFrame]` | Location-based annotations on the _observable_ domain. The `soma_joinid` in any item in this collection should be interpreted as the `obsid` | +| `varl` | `SOMACollection[string, SOMACollection[str, SOMAPointCloud\|SOMAGeometryDataFrame]]` | Location-based annotations on the _variable_ domain. The outer collection is keyed on the measurement names. The `soma_joinid` for items in the inner collection should be interpreted as the `varid` for the respective measurement. | +| `img` | `SOMACollection[string, MultiscaleImage]` | A collection of multiscale images related to the experiment. | For the entire `SOMAExperiment`, the index domain for the elements within `obsp`, `obsm` and `X` (first dimension) are the values defined by the `obs` dataframe `soma_joinid` column. For each `SOMAMeasurement`, the index domain for `varp`, `varm` and `X` (second dimension) are the values defined by the `var` dataframe `soma_joinid` column in the same measurement. In other words, all predefined fields in the `SOMAMeasurement` share a common `obsid` and `varid` domain, which is defined by the contents of the respective columns in `obs` and `var` dataframes. @@ -334,21 +332,21 @@ As with other `SOMACollections`, the `SOMAExperiment`, `SOMAMeasurement`, and `S The following naming and indexing constraints are defined for the `SOMAExperiment` and `SOMAMeasurement`: -| Field name | Field constraints | -| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `obs`, `var` | Field type is a `SOMADataFrame`. | -| `ms` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMAMeasurement`. | -| `spatial` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMAScene`. | -| `X` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMADenseNDArray` or `SOMASparseNDArray`. | -| `obsp`, `varp` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMASparseNDArray`. | -| `obsm`, `varm` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMADenseNDArray`. | -| `obsm`, `obsp`, `varm`, `varp` | Fields may be empty collections. | -| `X` collection values | All matrixes must have the shape `(O, V)`, where `O` is the domain of `obs.soma_joinid`, and `V` is the domain of `var.soma_joinid` in the containing `SOMAMeasurement`. | -| `obsm` collection values | All matrixes must have the shape `(O, M)`, where `M` is user-defined. The domain of the first dimension is the values of `obs.soma_joinid`. | -| `obsp` collection values | All matrixes must have the shape `(O, O)`. The domain of both dimensions is the values of `obs.soma_joinid`. | -| `varm` collection values | All matrixes must have the shape `(V, M)`, where `M` is user-defined. The domain of the first dimension is the values of `var.soma_joinid`. | -| `varp` collection values | All matrixes must have the shape `(V, V)`. The domain of both dimensions is the values of `var.soma_joinid`. | -| `obs_spatial_presence`, `var_spatial_presence` | Field type is a `SOMADataFrame`. Index columns are `soma_joinid` and a string column named `scene_id` with exactly one other boolean column named `data`. | +| Field name | Field constraints | +| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `obs`, `var` | Field type is a `SOMADataFrame`. | +| `ms` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMAMeasurement`. | +| `spatial` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMAScene`. | +| `X` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMADenseNDArray` or `SOMASparseNDArray`. | +| `obsp`, `varp` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMASparseNDArray`. | +| `obsm`, `varm` | Field type is a `SOMACollection`, and each element in the collection has a value of type `SOMADenseNDArray`. | +| `obsm`, `obsp`, `varm`, `varp` | Fields may be empty collections. | +| `X` collection values | All matrixes must have the shape `(O, V)`, where `O` is the domain of `obs.soma_joinid`, and `V` is the domain of `var.soma_joinid` in the containing `SOMAMeasurement`. | +| `obsm` collection values | All matrixes must have the shape `(O, M)`, where `M` is user-defined. The domain of the first dimension is the values of `obs.soma_joinid`. | +| `obsp` collection values | All matrixes must have the shape `(O, O)`. The domain of both dimensions is the values of `obs.soma_joinid`. | +| `varm` collection values | All matrixes must have the shape `(V, M)`, where `M` is user-defined. The domain of the first dimension is the values of `var.soma_joinid`. | +| `varp` collection values | All matrixes must have the shape `(V, V)`. The domain of both dimensions is the values of `var.soma_joinid`. | +| `obs_spatial_presence`, `var_spatial_presence` | Field type is a `SOMADataFrame`. Index columns are `soma_joinid` and a string column named `scene_id` with exactly one other boolean column named `data`. | # Functional Operations @@ -660,6 +658,42 @@ A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "di `SOMADataFrame` rows require unique coordinates. In other words, the read and write operations will assume that any given coordinate tuple for indexed columns uniquely identifies a single dataframe row. +## SOMAPointCloud + +Summary of operations: + +| Operation | Description | +| ----------------------------------------- | ----------------------------------------------------- | +| static create(uri, ...) -> SOMAPointCloud | Create a `SOMAPointCloud`. | +| get soma_type | Returns the constant "SOMADataFrame". | +| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | +| get index_column_names -> [string, ...] | Return index (dimension) column names. | +| get count -> int | Return the number of rows in the `SOMAPointCloud`. | +| read | Read a subset of data from the `SOMAPointCloud`. | +| write | Write a subset of data to the `SOMAPointCloud`. | + +A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an index column. + +`SOMADataFrame` rows require unique coordinates. In other words, the read and write operations will assume that any given coordinate tuple for indexed columns uniquely identifies a single dataframe row. + +## SOMAGeometryDataFrame + +Summary of operations: + +| Operation | Description | +| ---------------------------------------- | ----------------------------------------------------- | +| static create(uri, ...) -> SOMADataFrame | Create a `SOMADataFrame`. | +| get soma_type | Returns the constant "SOMADataFrame". | +| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | +| get index_column_names -> [string, ...] | Return index (dimension) column names. | +| get count -> int | Return the number of rows in the `SOMADataFrame`. | +| read | Read a subset of data from the `SOMADataFrame`. | +| write | Write a subset of data to the `SOMADataFrame`. | + +A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an index column. + +`SOMADataFrame` rows require unique coordinates. In other words, the read and write operations will assume that any given coordinate tuple for indexed columns uniquely identifies a single dataframe row. + ### Operation: create() Create a new `SOMADataFrame` with user-specified URI and schema. @@ -734,6 +768,103 @@ Parameters: All columns, including index columns and `soma_joinid` must be specified in the `values` parameter. +## SOMAPointCloud + +Summary of operations: + +| Operation | Description | +| ----------------------------------------- | ------------------------------------------------------------------------------ | +| static create(uri, ...) -> SOMAPointCloud | Create a `SOMAPointCloud`. | +| get soma_type | Returns the constant "SOMAPointCloud". | +| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | +| get coordinate_space | Returns the coordinate space the `SOMAPointCloud` is defined on. | +| get index_column_names -> [string, ...] | Return index (dimension) column names. | +| get count -> int | Return the number of rows in the `SOMAPointCloud`. | +| read | Read a subset of data from the `SOMAPointCloud` by directly slicing the table. | +| read_region | Read a subset of data from the `SOMAPointCloud` inside a geometry region. | +| write | Write a subset of data to the `SOMAPointCloud`. | + +A `SOMAPointCloud` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation and must include the axes in the coordinate space. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an additonal index column. + +`SOMAPointCloud` rows do not require unique coordinates. In other words, a read operation may return multiple rows with the same values on the index columns. + +### Operation: create() + + + +### get schema + + + +### get coordinate space + + + +### get index column names + + + +### Operation: read() + + + +### Operation: read_region() + + + +### Operation: write() + + + +## SOMAGeometryDataFrame + +Summary of operations: + +| Operation | Description | +| ------------------------------------------------ | ------------------------------------------------------------------------------------------------- | +| static create(uri, ...) -> SOMAGeometryDataFrame | Create a `SOMAGeometryDataFrame`. | +| get soma_type | Returns the constant "SOMAGeometryDataFrame". | +| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | +| get index_column_names -> [string, ...] | Return index (dimension) column names. | +| get coordinate_space | Returns the coordinate space the `SOMAGeometryDataFrame` is defined on. | +| get axis_names | Returns the names of the axes for the coordinate space the `SOMAGeometryDataFrame` is defined on. | +| get count -> int | Return the number of rows in the `SOMAGeometryDataFrame`. | +| read | Read a subset of data from the `SOMAGeometryDataFrame` by directly slicing the table. | +| read_region | Read a subset of data from the `SOMAGeometryDataFrame` inside a geometry region. | +| write | Write a subset of data to the `SOMAGeometryDataFrame`. | + +A `SOMAGeometryDataFrame` is indexed by one or more dataframe columns (also known as "dimensions") and a geometry column with name `soma_geometry`. The name and order of dimensions is specified at the time of creation and must include the axes for the geometries (defined by the coordinate space). [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an additonal index column. + +`SOMAGeometryDataframe` rows do not require unique coordinates. In other words, a read operation may return multiple rows with the same values on the index columns. + +### Operation: create() + + + +### get schema + + + +### get coordinate space + + + +### get index column names + + + +### Operation: read() + + + +### Operation: read_region() + + + +### Operation: write() + + + ## SOMADenseNDArray Summary of operations: From 03d032285da53ca6e77805ff2fbfd389af582abc Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Fri, 20 Sep 2024 10:16:20 -0400 Subject: [PATCH 04/13] Add headers to abstract_spec Opertions section Add `SOMAScene` and `SOMAMultiscaleImage` subsections with "TODO" comments. --- abstract_specification.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/abstract_specification.md b/abstract_specification.md index 172bc5c3..445aa971 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -640,6 +640,11 @@ add_new_collection(string key, CollectionType kind, string uri = "", PlatformCon - `kind`: The kind of collection to add. For instance, if `SOMAExperiment` is provided, the newly-added collection, and the returned instance, will be a `SOMAExperiment`. + +## SOMAScene + + + ## SOMADataFrame Summary of operations: @@ -1034,6 +1039,10 @@ Parameters: - `values`: values to be written. The type of elements in `values` must match the type of the `SOMASparseNDArray`. - [`platform_config`](#platform-specific-configuration): optional storage-engine-specific configuration. +## SOMAMultiscaleImage + + + ## Enumeration types Some functions accept enumerated values as parameters. Language-specific implementations may use language-provided `enum` types to implement these, or use bare constants or another mechanism, depending upon the context. From cd85e2588c772a74319ecda4f07b2138af5a2c67 Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Mon, 23 Sep 2024 15:58:37 -0400 Subject: [PATCH 05/13] (WIP) Work on filling in operations --- abstract_specification.md | 44 +++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index 445aa971..907ca12c 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -520,7 +520,7 @@ soma_impl.Collection.exists("backend://host/nonexistent/path") ## SOMACollection -Summary of operations on a `SOMACollection`, where `ValueType` is any SOMA-defined foundational or composed type, including `SOMACollection`, `SOMADataFrame`, `SOMADenseNDArray`, `SOMASparseNDArray` or `SOMAExperiment`: +Summary of operations on a `SOMACollection`, where `ValueType` is any SOMA-defined foundational or composed type, including `SOMACollection`, `SOMADataFrame`, `SOMAPointCloud`, `SOMAGeometryDataFrame`, `SOMADenseNDArray`, `SOMASparseNDArray`, `SOMAMultiscaleImage`, `SOMAExperiment`, `SOMAMeasurement`, or `SOMAScene`: | Operation | Description | | ------------- | -------------------------------------------------------------------------- | @@ -539,8 +539,11 @@ In addition, `SOMACollection` supports operations to manage the contents of the | del(string key) | Removes the key/value from the collection. Does not delete the underlying object (value). | | add_new_collection(string key, ...) | Creates a new sub-Collection and adds it to this `SOMACollection`. | | add_new_dataframe(string key, ...) | Creates a new `DataFrame` and adds it to this `SOMACollection`. | +| add_new_point_cloud(string key, ...) | Creates a new `PointCloud` and adds it to this `SOMACollection`. | +| add_new_geometry_dataframe(string key, ...) | Creates a new `GeometryDataFrame` and adds it to this `SOMACollection`. | | add_new_dense_ndarray(string key, ...) | Creates a new `DenseNDArray` and adds it to this `SOMACollection`. | | add_new_sparse_ndarray(string key, ...) | Creates a new `SparseNDArray` and adds it to this `SOMACollection`. | +| add_new_multiscale_image(string key, ...) | Creates a new `MultiscaleImage` and adds it to this `SOMACollection`. | A `SOMACollection` also manages the lifecycle of objects directly instantiated by it. Objects accessed via getting a collection element, or objects created with one of the add_new\_object_type methods are considered "owned" by the collection. @@ -643,7 +646,36 @@ add_new_collection(string key, CollectionType kind, string uri = "", PlatformCon ## SOMAScene - +The `SOMAScene` contains the same base operations as a `SOMACollection` with a few additional calls for accessing and managing coordinate spaces. + +Summary of opertions: + +| Operation | Description | +| --------- | ----------- | +| get coordinate_space | | +| register_point_cloud | | +| register_geometry_dataframe | | +| register_multiscale_image | | + +### Operations + +### get coordinate space + + + +### Operation: register_point_cloud() + + + +### Operation: register_geometry_dataframe() + + + +### Operation: register_multiscale_image() + + + + ## SOMADataFrame @@ -687,12 +719,12 @@ Summary of operations: | Operation | Description | | ---------------------------------------- | ----------------------------------------------------- | -| static create(uri, ...) -> SOMADataFrame | Create a `SOMADataFrame`. | -| get soma_type | Returns the constant "SOMADataFrame". | +| static create(uri, ...) -> SOMAGemetoryDataFrame | Create a `SOMAGeometryDataFrame`. | +| get soma_type | Returns the constant "SOMAGeometryDataFrame". | | get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | | get index_column_names -> [string, ...] | Return index (dimension) column names. | -| get count -> int | Return the number of rows in the `SOMADataFrame`. | -| read | Read a subset of data from the `SOMADataFrame`. | +| get count -> int | Return the number of rows in the `SOMAGeometryDataFrame`. | +| read | Read a subset of data from the `SOMAGeometryDataFrame`. | | write | Write a subset of data to the `SOMADataFrame`. | A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an index column. From 26b4585ae5bfbb239a618e8694bf4c8626433bcb Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Tue, 24 Sep 2024 15:55:23 -0400 Subject: [PATCH 06/13] Update Collection and Scene operations in abstract spec --- abstract_specification.md | 55 ++++++++++++++------------------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index 907ca12c..deb4b31a 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -539,11 +539,11 @@ In addition, `SOMACollection` supports operations to manage the contents of the | del(string key) | Removes the key/value from the collection. Does not delete the underlying object (value). | | add_new_collection(string key, ...) | Creates a new sub-Collection and adds it to this `SOMACollection`. | | add_new_dataframe(string key, ...) | Creates a new `DataFrame` and adds it to this `SOMACollection`. | -| add_new_point_cloud(string key, ...) | Creates a new `PointCloud` and adds it to this `SOMACollection`. | -| add_new_geometry_dataframe(string key, ...) | Creates a new `GeometryDataFrame` and adds it to this `SOMACollection`. | +| add_new_point_cloud(string key, ...) | Creates a new `PointCloud` and adds it to this `SOMACollection`. | +| add_new_geometry_dataframe(string key, ...) | Creates a new `GeometryDataFrame` and adds it to this `SOMACollection`. | | add_new_dense_ndarray(string key, ...) | Creates a new `DenseNDArray` and adds it to this `SOMACollection`. | | add_new_sparse_ndarray(string key, ...) | Creates a new `SparseNDArray` and adds it to this `SOMACollection`. | -| add_new_multiscale_image(string key, ...) | Creates a new `MultiscaleImage` and adds it to this `SOMACollection`. | +| add_new_multiscale_image(string key, ...) | Creates a new `MultiscaleImage` and adds it to this `SOMACollection`. | A `SOMACollection` also manages the lifecycle of objects directly instantiated by it. Objects accessed via getting a collection element, or objects created with one of the add_new\_object_type methods are considered "owned" by the collection. @@ -643,39 +643,24 @@ add_new_collection(string key, CollectionType kind, string uri = "", PlatformCon - `kind`: The kind of collection to add. For instance, if `SOMAExperiment` is provided, the newly-added collection, and the returned instance, will be a `SOMAExperiment`. - ## SOMAScene The `SOMAScene` contains the same base operations as a `SOMACollection` with a few additional calls for accessing and managing coordinate spaces. Summary of opertions: -| Operation | Description | -| --------- | ----------- | -| get coordinate_space | | -| register_point_cloud | | -| register_geometry_dataframe | | -| register_multiscale_image | | +| Operation | Description | +| --------------------------- | ------------------------------------------------------------------------------------ | +| get coordinate_space | Returns the `CoordinateSpace` this `SOMAScene` is defined on. | +| register_point_cloud | Adds a `CoordinateTransform` to an existing `PointCloud` in this `SOMAScene`. | +| register_geometry_dataframe | Adds a `CoordinateTransform` to an existing `GeometryDataFrame` in this `SOMAScene`. | +| register_multiscale_image | Adds a `CoordinateTransform` to an existing `MultiscaleImage` in this `SOMAScene`. | ### Operations -### get coordinate space - - - -### Operation: register_point_cloud() - - - -### Operation: register_geometry_dataframe() - - - -### Operation: register_multiscale_image() - - - +### Operation: register\_object_type +Each add_new\_object_type method takes an existing SOMA object in the scene, adds a transformation from the scene to the object, and returns the object. The returned object has the same `context` value as the existing scene and is [owned by the current scene](#operation-close-collection-types). ## SOMADataFrame @@ -717,15 +702,15 @@ A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "di Summary of operations: -| Operation | Description | -| ---------------------------------------- | ----------------------------------------------------- | -| static create(uri, ...) -> SOMAGemetoryDataFrame | Create a `SOMAGeometryDataFrame`. | -| get soma_type | Returns the constant "SOMAGeometryDataFrame". | -| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | -| get index_column_names -> [string, ...] | Return index (dimension) column names. | -| get count -> int | Return the number of rows in the `SOMAGeometryDataFrame`. | -| read | Read a subset of data from the `SOMAGeometryDataFrame`. | -| write | Write a subset of data to the `SOMADataFrame`. | +| Operation | Description | +| ------------------------------------------------ | --------------------------------------------------------- | +| static create(uri, ...) -> SOMAGemetoryDataFrame | Create a `SOMAGeometryDataFrame`. | +| get soma_type | Returns the constant "SOMAGeometryDataFrame". | +| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | +| get index_column_names -> [string, ...] | Return index (dimension) column names. | +| get count -> int | Return the number of rows in the `SOMAGeometryDataFrame`. | +| read | Read a subset of data from the `SOMAGeometryDataFrame`. | +| write | Write a subset of data to the `SOMADataFrame`. | A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an index column. From df4e62313bd88fb669124422b599d65c46a6ffbf Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Tue, 24 Sep 2024 16:08:14 -0400 Subject: [PATCH 07/13] Remove duplicate sections --- abstract_specification.md | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index deb4b31a..b7e8db93 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -656,8 +656,6 @@ Summary of opertions: | register_geometry_dataframe | Adds a `CoordinateTransform` to an existing `GeometryDataFrame` in this `SOMAScene`. | | register_multiscale_image | Adds a `CoordinateTransform` to an existing `MultiscaleImage` in this `SOMAScene`. | -### Operations - ### Operation: register\_object_type Each add_new\_object_type method takes an existing SOMA object in the scene, adds a transformation from the scene to the object, and returns the object. The returned object has the same `context` value as the existing scene and is [owned by the current scene](#operation-close-collection-types). @@ -680,42 +678,6 @@ A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "di `SOMADataFrame` rows require unique coordinates. In other words, the read and write operations will assume that any given coordinate tuple for indexed columns uniquely identifies a single dataframe row. -## SOMAPointCloud - -Summary of operations: - -| Operation | Description | -| ----------------------------------------- | ----------------------------------------------------- | -| static create(uri, ...) -> SOMAPointCloud | Create a `SOMAPointCloud`. | -| get soma_type | Returns the constant "SOMADataFrame". | -| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | -| get index_column_names -> [string, ...] | Return index (dimension) column names. | -| get count -> int | Return the number of rows in the `SOMAPointCloud`. | -| read | Read a subset of data from the `SOMAPointCloud`. | -| write | Write a subset of data to the `SOMAPointCloud`. | - -A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an index column. - -`SOMADataFrame` rows require unique coordinates. In other words, the read and write operations will assume that any given coordinate tuple for indexed columns uniquely identifies a single dataframe row. - -## SOMAGeometryDataFrame - -Summary of operations: - -| Operation | Description | -| ------------------------------------------------ | --------------------------------------------------------- | -| static create(uri, ...) -> SOMAGemetoryDataFrame | Create a `SOMAGeometryDataFrame`. | -| get soma_type | Returns the constant "SOMAGeometryDataFrame". | -| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | -| get index_column_names -> [string, ...] | Return index (dimension) column names. | -| get count -> int | Return the number of rows in the `SOMAGeometryDataFrame`. | -| read | Read a subset of data from the `SOMAGeometryDataFrame`. | -| write | Write a subset of data to the `SOMADataFrame`. | - -A `SOMADataFrame` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an index column. - -`SOMADataFrame` rows require unique coordinates. In other words, the read and write operations will assume that any given coordinate tuple for indexed columns uniquely identifies a single dataframe row. - ### Operation: create() Create a new `SOMADataFrame` with user-specified URI and schema. From 37f1c659d779f8f41f3653f1c3b579d1fac88e3b Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Tue, 24 Sep 2024 16:11:25 -0400 Subject: [PATCH 08/13] Fix typo --- abstract_specification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abstract_specification.md b/abstract_specification.md index b7e8db93..954caada 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -658,7 +658,7 @@ Summary of opertions: ### Operation: register\_object_type -Each add_new\_object_type method takes an existing SOMA object in the scene, adds a transformation from the scene to the object, and returns the object. The returned object has the same `context` value as the existing scene and is [owned by the current scene](#operation-close-collection-types). +Each register\_object_type method takes an existing SOMA object in the scene, adds a transformation from the scene to the object, and returns the object. The returned object has the same `context` value as the existing scene and is [owned by the current scene](#operation-close-collection-types). ## SOMADataFrame From cf3d28c34f1d61747eeb865f523da9924ab79399 Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Wed, 25 Sep 2024 10:22:16 -0400 Subject: [PATCH 09/13] Add multiscale image operations table --- abstract_specification.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/abstract_specification.md b/abstract_specification.md index 954caada..41741ed7 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -1020,7 +1020,23 @@ Parameters: ## SOMAMultiscaleImage - +The `SOMAMultiscaleImage` contains multiple `SOMADenseNDArray` objects, but does not directly replicate the full `SOMACollection` API. + +| Operation | Description | +| ---------------------------------------------- | -------------------------------------------------- | +| static create(uri, ...) -> SOMAMultiscaleImage | Create a `SOMAMultiscaleImage` named with the URI. | +| get soma_type | Returns the constant "SOMAMultisclaeImage". | +| get coordinate_space | | +| get image_type | | +| get level_count | | +| get level_properties | | +| add_new_level | | +| read_region | | +| axis_names | | +| get_transformation_from_level | | +| get_transformation_to_level | | + + ## Enumeration types From 3688e48321d502115ea8fb9b1b5774be100d5a2b Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Wed, 16 Oct 2024 14:16:12 -0400 Subject: [PATCH 10/13] Remove operations Save those additions for a second PR. --- abstract_specification.md | 126 ++------------------------------------ 1 file changed, 4 insertions(+), 122 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index 41741ed7..6d682fb7 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -645,20 +645,7 @@ add_new_collection(string key, CollectionType kind, string uri = "", PlatformCon ## SOMAScene -The `SOMAScene` contains the same base operations as a `SOMACollection` with a few additional calls for accessing and managing coordinate spaces. - -Summary of opertions: - -| Operation | Description | -| --------------------------- | ------------------------------------------------------------------------------------ | -| get coordinate_space | Returns the `CoordinateSpace` this `SOMAScene` is defined on. | -| register_point_cloud | Adds a `CoordinateTransform` to an existing `PointCloud` in this `SOMAScene`. | -| register_geometry_dataframe | Adds a `CoordinateTransform` to an existing `GeometryDataFrame` in this `SOMAScene`. | -| register_multiscale_image | Adds a `CoordinateTransform` to an existing `MultiscaleImage` in this `SOMAScene`. | - -### Operation: register\_object_type - -Each register\_object_type method takes an existing SOMA object in the scene, adds a transformation from the scene to the object, and returns the object. The returned object has the same `context` value as the existing scene and is [owned by the current scene](#operation-close-collection-types). + ## SOMADataFrame @@ -754,100 +741,11 @@ All columns, including index columns and `soma_joinid` must be specified in the ## SOMAPointCloud -Summary of operations: - -| Operation | Description | -| ----------------------------------------- | ------------------------------------------------------------------------------ | -| static create(uri, ...) -> SOMAPointCloud | Create a `SOMAPointCloud`. | -| get soma_type | Returns the constant "SOMAPointCloud". | -| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | -| get coordinate_space | Returns the coordinate space the `SOMAPointCloud` is defined on. | -| get index_column_names -> [string, ...] | Return index (dimension) column names. | -| get count -> int | Return the number of rows in the `SOMAPointCloud`. | -| read | Read a subset of data from the `SOMAPointCloud` by directly slicing the table. | -| read_region | Read a subset of data from the `SOMAPointCloud` inside a geometry region. | -| write | Write a subset of data to the `SOMAPointCloud`. | - -A `SOMAPointCloud` is indexed by one or more dataframe columns (also known as "dimensions"). The name and order of dimensions is specified at the time of creation and must include the axes in the coordinate space. [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an additonal index column. - -`SOMAPointCloud` rows do not require unique coordinates. In other words, a read operation may return multiple rows with the same values on the index columns. - -### Operation: create() - - - -### get schema - - - -### get coordinate space - - - -### get index column names - - - -### Operation: read() - - - -### Operation: read_region() - - - -### Operation: write() - - + ## SOMAGeometryDataFrame -Summary of operations: - -| Operation | Description | -| ------------------------------------------------ | ------------------------------------------------------------------------------------------------- | -| static create(uri, ...) -> SOMAGeometryDataFrame | Create a `SOMAGeometryDataFrame`. | -| get soma_type | Returns the constant "SOMAGeometryDataFrame". | -| get schema -> Arrow.Schema | Return data schema, in the form of an Arrow `Schema`. | -| get index_column_names -> [string, ...] | Return index (dimension) column names. | -| get coordinate_space | Returns the coordinate space the `SOMAGeometryDataFrame` is defined on. | -| get axis_names | Returns the names of the axes for the coordinate space the `SOMAGeometryDataFrame` is defined on. | -| get count -> int | Return the number of rows in the `SOMAGeometryDataFrame`. | -| read | Read a subset of data from the `SOMAGeometryDataFrame` by directly slicing the table. | -| read_region | Read a subset of data from the `SOMAGeometryDataFrame` inside a geometry region. | -| write | Write a subset of data to the `SOMAGeometryDataFrame`. | - -A `SOMAGeometryDataFrame` is indexed by one or more dataframe columns (also known as "dimensions") and a geometry column with name `soma_geometry`. The name and order of dimensions is specified at the time of creation and must include the axes for the geometries (defined by the coordinate space). [Slices](#indexing-and-slicing) are addressable by the user-specified dimensions. The `soma_joinid` column may be specified as an additonal index column. - -`SOMAGeometryDataframe` rows do not require unique coordinates. In other words, a read operation may return multiple rows with the same values on the index columns. - -### Operation: create() - - - -### get schema - - - -### get coordinate space - - - -### get index column names - - - -### Operation: read() - - - -### Operation: read_region() - - - -### Operation: write() - - + ## SOMADenseNDArray @@ -1020,23 +918,7 @@ Parameters: ## SOMAMultiscaleImage -The `SOMAMultiscaleImage` contains multiple `SOMADenseNDArray` objects, but does not directly replicate the full `SOMACollection` API. - -| Operation | Description | -| ---------------------------------------------- | -------------------------------------------------- | -| static create(uri, ...) -> SOMAMultiscaleImage | Create a `SOMAMultiscaleImage` named with the URI. | -| get soma_type | Returns the constant "SOMAMultisclaeImage". | -| get coordinate_space | | -| get image_type | | -| get level_count | | -| get level_properties | | -| add_new_level | | -| read_region | | -| axis_names | | -| get_transformation_from_level | | -| get_transformation_to_level | | - - + ## Enumeration types From 45717e79861fd099a741759b1c25d4cfb54c4a24 Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Fri, 18 Oct 2024 16:10:25 -0400 Subject: [PATCH 11/13] Add new images for the experiment, measurement, and scene --- images/SOMAExperiment.png | Bin 112779 -> 59577 bytes images/SOMAMeasurement.png | Bin 0 -> 49561 bytes images/SOMAScene.png | Bin 0 -> 31787 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 images/SOMAMeasurement.png create mode 100755 images/SOMAScene.png diff --git a/images/SOMAExperiment.png b/images/SOMAExperiment.png index 8cc334e003a2cd9df0834eb6649f648948e56166..d0d72f02b040ce1527416b7a778cfaf463898440 100644 GIT binary patch literal 59577 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 literal 112779 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

2jW+**wU}QGr&`gphhhyM+?g{J~Weh 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 R`ipO6f851}dd%n7{{UGjb+`Zk literal 0 HcmV?d00001 From 5b31f4c5e315b6971f29cf9a3c4cd4210731681e Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Fri, 18 Oct 2024 16:14:40 -0400 Subject: [PATCH 12/13] Rename `PointCloud` -> `PointCloudDataFrame` in abstract spec --- abstract_specification.md | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index 6d682fb7..31d19ac1 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -67,7 +67,7 @@ The foundational types are: - `SOMACollection`: a string-keyed container (key-value map) of other SOMA data types, e.g., `SOMADataFrame`, `SOMASparseNDArray`, and `SOMACollection`. - `SOMADataFrame`: a multi-column table -- essentially a dataframe with indexing on user-specified columns. -- `SOMAGeometryDataFrame` and `SOMAPointCloud`: multi-column tables for storing spatial indexed dataframes, available for point or full geometry instantiations. +- `SOMAGeometryDataFrame` and `SOMAPointCloudDataFrame`: multi-column tables for storing spatial indexed dataframes, available for point or full geometry instantiations. - `SOMADenseNDArray` and `SOMASparseNDArray`: an offset-addressed (zero-based), single-type N-D array, available in either sparse or dense instantiations. - `SOMAMultiscaleImage`: a multiscale image pyramid that stores multiple levels of `SOMADenseNDArray`s. @@ -210,15 +210,15 @@ The default "fill" value for `SOMADataFrame` is the zero or null value of the re Most language-specific bindings will provide convertors between `SOMADataFrame` and other convenient data structures, such as Python `pandas.DataFrame`, R `data.frame`. -### SOMAPointCloud +### SOMAPointCloudDataFrame -`SOMAPointCloud` is a multi-column table with a user-defined schema, defining the number of columns and their respective column name and value type. The schema is expressed as an Arrow `Schema`. +`SOMAPointCloudDataFrame` is a multi-column table with a user-defined schema, defining the number of columns and their respective column name and value type. The schema is expressed as an Arrow `Schema`. -Like the `SOMADataFrame`, every `SOMAPointCloud` must contain a column called `soma_joinid` of type `int64` and domain `[0, 2^63-1]`. The `soma_joinid` is intended to act as a joint key for other objects, such as `SOMASparseNDArray`. There may be multiple items with the same `soma_joinid` stored in the `SOMAPointCloud`. +Like the `SOMADataFrame`, every `SOMAPointCloudDataFrame` must contain a column called `soma_joinid` of type `int64` and domain `[0, 2^63-1]`. The `soma_joinid` is intended to act as a joint key for other objects, such as `SOMASparseNDArray`. There may be multiple items with the same `soma_joinid` stored in the `SOMAPointCloudDataFrame`. -In addition to the `soma_joinid`, the user must define spatial columns, referred to as "spatial axes", that define the "points" in the array. Each spatial axis must be either an integer or floating type, and they must all have the same type. The user may specify a restriced domain for spatial axes or allow the axes to support the entire valid type range. The spatial axes must be index columns for the `SOMAPointCloud`, but the user may also specify other columns as index columns. +In addition to the `soma_joinid`, the user must define spatial columns, referred to as "spatial axes", that define the "points" in the array. Each spatial axis must be either an integer or floating type, and they must all have the same type. The user may specify a restriced domain for spatial axes or allow the axes to support the entire valid type range. The spatial axes must be index columns for the `SOMAPointCloudDataFrame`, but the user may also specify other columns as index columns. -The default "fill" value for `SOMAPointCloud` is the zero or null value of the respective column data type (e.g., `Arrow.float32` defaults to 0.0, `Arrow.string` to `""`, etc). +The default "fill" value for `SOMAPointCloudDataFrame` is the zero or null value of the respective column data type (e.g., `Arrow.float32` defaults to 0.0, `Arrow.string` to `""`, etc). ### SOMAGeometryDataFrame @@ -320,11 +320,11 @@ The `SOMAMeasurement` is a sub-element of a `SOMAExperiment`, and is otherwise a The `SOMAScene` is a sub-element of a `SOMAExperiment`, and is otherwise a specialized `SOMACollection` with pre-defined fields: -| Field name | Field type | Field description | -| ---------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `obsl` | `SOMACollection[string, SOMAPointCloud\|SOMAGeometryDataFrame]` | Location-based annotations on the _observable_ domain. The `soma_joinid` in any item in this collection should be interpreted as the `obsid` | -| `varl` | `SOMACollection[string, SOMACollection[str, SOMAPointCloud\|SOMAGeometryDataFrame]]` | Location-based annotations on the _variable_ domain. The outer collection is keyed on the measurement names. The `soma_joinid` for items in the inner collection should be interpreted as the `varid` for the respective measurement. | -| `img` | `SOMACollection[string, MultiscaleImage]` | A collection of multiscale images related to the experiment. | +| Field name | Field type | Field description | +| ---------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `obsl` | `SOMACollection[string, SOMAPointCloudDataFrame\|SOMAGeometryDataFrame]` | Location-based annotations on the _observable_ domain. The `soma_joinid` in any item in this collection should be interpreted as the `obsid` | +| `varl` | `SOMACollection[string, SOMACollection[str, SOMAPointCloudDataFrame\|SOMAGeometryDataFrame]]` | Location-based annotations on the _variable_ domain. The outer collection is keyed on the measurement names. The `soma_joinid` for items in the inner collection should be interpreted as the `varid` for the respective measurement. | +| `img` | `SOMACollection[string, MultiscaleImage]` | A collection of multiscale images related to the experiment. | For the entire `SOMAExperiment`, the index domain for the elements within `obsp`, `obsm` and `X` (first dimension) are the values defined by the `obs` dataframe `soma_joinid` column. For each `SOMAMeasurement`, the index domain for `varp`, `varm` and `X` (second dimension) are the values defined by the `var` dataframe `soma_joinid` column in the same measurement. In other words, all predefined fields in the `SOMAMeasurement` share a common `obsid` and `varid` domain, which is defined by the contents of the respective columns in `obs` and `var` dataframes. @@ -520,7 +520,7 @@ soma_impl.Collection.exists("backend://host/nonexistent/path") ## SOMACollection -Summary of operations on a `SOMACollection`, where `ValueType` is any SOMA-defined foundational or composed type, including `SOMACollection`, `SOMADataFrame`, `SOMAPointCloud`, `SOMAGeometryDataFrame`, `SOMADenseNDArray`, `SOMASparseNDArray`, `SOMAMultiscaleImage`, `SOMAExperiment`, `SOMAMeasurement`, or `SOMAScene`: +Summary of operations on a `SOMACollection`, where `ValueType` is any SOMA-defined foundational or composed type, including `SOMACollection`, `SOMADataFrame`, `SOMAPointCloudDataFrame`, `SOMAGeometryDataFrame`, `SOMADenseNDArray`, `SOMASparseNDArray`, `SOMAMultiscaleImage`, `SOMAExperiment`, `SOMAMeasurement`, or `SOMAScene`: | Operation | Description | | ------------- | -------------------------------------------------------------------------- | @@ -539,11 +539,8 @@ In addition, `SOMACollection` supports operations to manage the contents of the | del(string key) | Removes the key/value from the collection. Does not delete the underlying object (value). | | add_new_collection(string key, ...) | Creates a new sub-Collection and adds it to this `SOMACollection`. | | add_new_dataframe(string key, ...) | Creates a new `DataFrame` and adds it to this `SOMACollection`. | -| add_new_point_cloud(string key, ...) | Creates a new `PointCloud` and adds it to this `SOMACollection`. | -| add_new_geometry_dataframe(string key, ...) | Creates a new `GeometryDataFrame` and adds it to this `SOMACollection`. | | add_new_dense_ndarray(string key, ...) | Creates a new `DenseNDArray` and adds it to this `SOMACollection`. | | add_new_sparse_ndarray(string key, ...) | Creates a new `SparseNDArray` and adds it to this `SOMACollection`. | -| add_new_multiscale_image(string key, ...) | Creates a new `MultiscaleImage` and adds it to this `SOMACollection`. | A `SOMACollection` also manages the lifecycle of objects directly instantiated by it. Objects accessed via getting a collection element, or objects created with one of the add_new\_object_type methods are considered "owned" by the collection. @@ -739,7 +736,7 @@ Parameters: All columns, including index columns and `soma_joinid` must be specified in the `values` parameter. -## SOMAPointCloud +## SOMAPointCloudDataFrame @@ -1270,4 +1267,4 @@ However, client code should treat the `context` object on any instantiated SOMA 52. Removed ⚠️-marked commentary. 53. Added `SOMAMeasurement` to "Data Model" section, under "composed types". 54. Allowed all N-d arrays to be sparse. -55. Added new datatypes `SOMAScene`, `SOMAPointCloud`, `SOMAGeometryDataframe`, and `SOMAMultiscaleImage`, and bumped the API version to `0.3.0-dev`. +55. Added new datatypes `SOMAScene`, `SOMAPointCloudDataFrame`, `SOMAGeometryDataframe`, and `SOMAMultiscaleImage`, and bumped the API version to `0.3.0-dev`. From faa233845c59e64ba29958560bfb04dab265d614 Mon Sep 17 00:00:00 2001 From: Julia Dark Date: Fri, 18 Oct 2024 16:17:41 -0400 Subject: [PATCH 13/13] Use new figures in the abstract spec --- abstract_specification.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/abstract_specification.md b/abstract_specification.md index 31d19ac1..30d5796c 100644 --- a/abstract_specification.md +++ b/abstract_specification.md @@ -284,12 +284,18 @@ The `SOMAExperiment`, `SOMAMeasurement`, and `SOMAScene` types comprise [foundat In other words, every `SOMAMeasurement` has a distinct set of variables (features), and inherits common observables from its parent `SOMAExperiment`. The `obs` and `var` dataframes define the axis annotations, and their respective `soma_joinid` values are the indices for all matrixes stored in the `SOMAMeasurement`. Each `SOMAScene` stores images and spatial dataframes that join on the `obs` and var` dataframes. -[comment]: <> (TODO: Replace this image with an updated one.) -

SOMAExperiment
+
+ SOMAMeasurment +
+ +
+ SOMAScene + + These types have pre-defined fields, each of which have well-defined naming, typing, dimensionality and indexing constraints. Other user-defined data may be added to a `SOMAExperiment`, `SOMAMeasurement`, or `SOMAScene`, as each is a specialization of the `SOMACollection`. Implementations _should_ enforce the constraints on these pre-defined fields. Pre-defined fields are distinguished from other user-defined collection elements, where no schema or indexing semantics are presumed or enforced. The shape of each axis (`obs` and `var`) are defined by their respective dataframes, and the indexing of matrices is defined by the `soma_joinid` of the respective axis dataframe.