diff --git a/api/python/cellxgene_census/src/cellxgene_census/_get_anndata.py b/api/python/cellxgene_census/src/cellxgene_census/_get_anndata.py index ef4a2eca9..54018796f 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/_get_anndata.py +++ b/api/python/cellxgene_census/src/cellxgene_census/_get_anndata.py @@ -41,7 +41,7 @@ def get_anndata( X_name: The ``X`` layer to query. Defaults to ``"raw"``. X_layers: - Additional layers to add to :attr:``anndata.AnnData.layers``. + Additional layers to add to :attr:`anndata.AnnData.layers`. obs_value_filter: Value filter for the ``obs`` metadata. Value is a filter query written in the SOMA ``value_filter`` syntax. diff --git a/api/python/cellxgene_census/src/cellxgene_census/_open.py b/api/python/cellxgene_census/src/cellxgene_census/_open.py index fe4d2e0c0..c9dc6b349 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/_open.py +++ b/api/python/cellxgene_census/src/cellxgene_census/_open.py @@ -80,9 +80,9 @@ def _open_soma( def get_default_soma_context(tiledb_config: Optional[Dict[str, Any]] = None) -> soma.options.SOMATileDBContext: - """Return a :class:``tiledbsoma.SOMATileDBContext` with sensible defaults that can be further customized by the - user. The customized context can then be passed to :func:``cellxgene_census.open_soma`` with the ``context`` - argument or to :meth:`somacore.SOMAObject.open`` with the ``context`` argument, such as + """Return a :class:`tiledbsoma.SOMATileDBContext` with sensible defaults that can be further customized by the + user. The customized context can then be passed to :func:`cellxgene_census.open_soma` with the ``context`` + argument or to :meth:`somacore.SOMAObject.open` with the ``context`` argument, such as :meth:`tiledbsoma.Experiment.open`. Use the :meth:`tiledbsoma.SOMATileDBContext.replace` method on the returned object to customize its settings further. @@ -92,7 +92,7 @@ def get_default_soma_context(tiledb_config: Optional[Dict[str, Any]] = None) -> defaults. If not specified, the default configuration will be returned. Returns: - A :class:``tiledbsoma.SOMATileDBContext` object with sensible defaults. + A :class:`tiledbsoma.SOMATileDBContext` object with sensible defaults. Examples: To reduce the amount of memory used by TileDB-SOMA I/O operations: @@ -144,7 +144,7 @@ def open_soma( tiledb_config: A dictionary of TileDB configuration parameters that will be used to open the SOMA object. Optional, defaults to ``None``. If specified, the parameters will override the default settings specified by - ``get_default_soma_context().tiledb_config``. Only one of the ``tiledb_config and ``context`` params + ``get_default_soma_context().tiledb_config``. Only one of the ``tiledb_config`` and ``context`` params can be specified. context: A custom :class:`tiledbsoma.SOMATileDBContext` that will be used to open the SOMA object. diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py index 08bb612c9..fc6b21495 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py @@ -24,7 +24,7 @@ def get_embedding_metadata(embedding_uri: str, context: soma.options.SOMATileDBC Args: embedding_uri: - The embedding URI + The embedding URI. context: A custom :class:`tiledbsoma.SOMATileDBContext` which will be used to open the SOMA object. Optional, defaults to ``None``. @@ -82,7 +82,7 @@ def get_embedding( Examples: >>> obs_somaids_to_fetch = np.array([10,11], dtype=np.int64) - >>> emb = cellxgene_census.experimental.get_embedding('2023-10-23', embedding_uri, obs_somaids_to_fetch) + >>> emb = cellxgene_census.experimental.get_embedding('2023-12-15', embedding_uri, obs_somaids_to_fetch) >>> emb.shape (2, 200) >>> emb[:, 0:4] diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/ml/pytorch.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/ml/pytorch.py index 8634214f0..748bef804 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/ml/pytorch.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/ml/pytorch.py @@ -327,7 +327,7 @@ def _read_partial_torch_batch(self, batch_size: int) -> ObsAndXDatum: class ExperimentDataPipe(pipes.IterDataPipe[Dataset[ObsAndXDatum]]): # type: ignore - """An :class:`torchdata.datapipes.iter.IterDataPipe` that reads ``obs`` and ``X`` data from a + r"""An :class:`torchdata.datapipes.iter.IterDataPipe` that reads ``obs`` and ``X`` data from a :class:`tiledbsoma.Experiment`, based upon the specified queries along the ``obs`` and ``var`` axes. Provides an iterator over these data when the object is passed to Python's built-in ``iter`` function. @@ -351,10 +351,10 @@ class ExperimentDataPipe(pipes.IterDataPipe[Dataset[ObsAndXDatum]]): # type: ig [2417, 0, 3]], dtype=torch.int64)) The ``return_sparse_X`` parameter controls whether the ``X`` data is returned as a dense or sparse - :class:`torch.Tensor`. If the model supports use of sparse :class:`torch.Tensor`s, this will reduce memory usage. + :class:`torch.Tensor`. If the model supports use of sparse :class:`torch.Tensor`\ s, this will reduce memory usage. The ``obs_column_names`` parameter determines the data columns that are returned in the ``obs`` Tensor. The first - element is always the ``soma_joinid`` of the ``obs`` :class:`pandas.DataFrame` (or, equiavalently, the + element is always the ``soma_joinid`` of the ``obs`` :class:`pandas.DataFrame` (or, equivalently, the ``soma_dim_0`` of the ``X`` matrix). The remaining elements are the ``obs`` columns specified by ``obs_column_names``, and string-typed columns are encoded as integer values. If needed, these values can be decoded by obtaining the encoder for a given ``obs`` column name and calling its ``inverse_transform`` method: @@ -394,7 +394,7 @@ def __init__( soma_chunk_size: Optional[int] = None, use_eager_fetch: bool = True, ) -> None: - """Construct a new ``ExperimentDataPipe``. + r"""Construct a new ``ExperimentDataPipe``. Args: experiment: @@ -415,7 +415,7 @@ def __init__( batch_size: The number of rows of ``obs`` and ``X`` data to return in each iteration. Defaults to ``1``. A value of ``1`` will result in :class:`torch.Tensor` of rank 1 being returns (a single row); larger values will - result in :class:`torch.Tensor`s of rank 2 (multiple rows). + result in :class:`torch.Tensor`\ s of rank 2 (multiple rows). shuffle: Whether to shuffle the ``obs`` and ``X`` data being returned. Defaults to ``False`` (no shuffling). For performance reasons, shuffling is performed in two steps: 1) a global shuffling, where contiguous @@ -436,7 +436,7 @@ def __init__( return_sparse_X: Controls whether the ``X`` data is returned as a dense or sparse :class:`torch.Tensor`. As ``X`` data is very sparse, setting this to ``True`` will reduce memory usage, if the model supports use of sparse - :class:`torch.Tensor`s. Defaults to ``False``, since sparse :class:`torch.Tensor`s are still + :class:`torch.Tensor`\ s. Defaults to ``False``, since sparse :class:`torch.Tensor`\ s are still experimental in PyTorch. soma_chunk_size: The number of ``obs``/``X`` rows to retrieve when reading data from SOMA. This impacts two aspects of @@ -624,11 +624,11 @@ def _build_obs_encoders(self, query: soma.ExperimentAxisQuery) -> Encoders: # TODO: This does not work in multiprocessing mode, as child process's stats are not collected def stats(self) -> Stats: - """Get data loading stats for this :class:`cellxgene_census.ml.pytorch.ExperimentDataPipe`. + """Get data loading stats for this :class:`cellxgene_census.experimental.ml.pytorch.ExperimentDataPipe`. Returns: - The :class:`cellxgene_census.ml.pytorch.Stats` object for this - :class:`cellxgene_census.ml.pytorch.ExperimentDataPipe`. + The :class:`cellxgene_census.experimental.ml.pytorch.Stats` object for this + :class:`cellxgene_census.experimental.ml.pytorch.ExperimentDataPipe`. Lifecycle: experimental @@ -637,7 +637,7 @@ def stats(self) -> Stats: @property def shape(self) -> Tuple[int, int]: - """Get the shape of the data that will be returned by this :class:`cellxgene_census.ml.pytorch.ExperimentDataPipe`. + """Get the shape of the data that will be returned by this :class:`cellxgene_census.experimental.ml.pytorch.ExperimentDataPipe`. This is the number of obs (cell) and var (feature) counts in the returned data. If used in multiprocessing mode (i.e. :class:`torch.utils.data.DataLoader` instantiated with num_workers > 0), the obs (cell) count will reflect the size of the partition of the data assigned to the active process. @@ -684,7 +684,7 @@ def experiment_dataloader( **dataloader_kwargs: Any, ) -> DataLoader: """Factory method for :class:`torch.utils.data.DataLoader`. This method can be used to safely instantiate a - :class:`torch.utils.data.DataLoader` that works with :class:`cellxgene_census.ml.pytorch.ExperimentDataPipe`, + :class:`torch.utils.data.DataLoader` that works with :class:`cellxgene_census.experimental.ml.pytorch.ExperimentDataPipe`, since some of the :class:`torch.utils.data.DataLoader` constructor parameters are not applicable when using a :class:`torchdata.datapipes.iter.IterDataPipe` (``shuffle``, ``batch_size``, ``sampler``, ``batch_sampler``, ``collate_fn``). @@ -692,15 +692,15 @@ def experiment_dataloader( Args: datapipe: An :class:`torchdata.datapipes.iter.IterDataPipe`, which can be an - :class:`cellxgene_census.ml.pytorch.ExperimentDataPipe` or any other + :class:`cellxgene_census.experimental.ml.pytorch.ExperimentDataPipe` or any other :class:`torchdata.datapipes.iter.IterDataPipe` that has been chained to the - :class:`cellxgene_census.ml.pytorch.ExperimentDataPipe`. + :class:`cellxgene_census.experimental.ml.pytorch.ExperimentDataPipe`. num_workers: Number of worker processes to use for data loading. If ``0``, data will be loaded in the main process. **dataloader_kwargs: Additional keyword arguments to pass to the :class:`torch.utils.data.DataLoader` constructor, except for ``shuffle``, ``batch_size``, ``sampler``, ``batch_sampler``, and ``collate_fn``, which are not - supported when using :class:`cellxgene_census.ml.pytorch.ExperimentDataPipe`. + supported when using :class:`cellxgene_census.experimental.ml.pytorch.ExperimentDataPipe`. Returns: A :class:`torch.utils.data.DataLoader`. diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_highly_variable_genes.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_highly_variable_genes.py index aa0b8f34b..ebddd9b76 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_highly_variable_genes.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_highly_variable_genes.py @@ -370,7 +370,7 @@ def get_highly_variable_genes( batch_key_func: Optional function to create a user-defined batch key. Function will be called once per row in the obs dataframe. Function will receive a single argument: a :class:`pandas.Series` containing values specified in - the``batch_key`` argument. + the ``batch_key`` argument. Returns: :class:`pandas.DataFrame` containing annotations for all ``var`` values specified by the query. @@ -383,7 +383,7 @@ def get_highly_variable_genes( Examples: Fetch a :class:`pandas.DataFrame` containing var annotations for a subset of the cells matching the - ``obs_value_filter`: + ``obs_value_filter``: >>> hvg = get_highly_variable_genes( census, @@ -397,7 +397,6 @@ def get_highly_variable_genes( >>> with cellxgene_census.open_soma(census_version="stable") as census: organism = "mus_musculus" obs_value_filter = "is_primary_data == True and tissue_general == 'lung'" - # Get the highly variable genes hvg = cellxgene_census.experimental.pp.get_highly_variable_genes( census, @@ -405,7 +404,6 @@ def get_highly_variable_genes( obs_value_filter=obs_value_filter, n_top_genes = 500 ) - # Fetch AnnData - all cells matching obs_value_filter, just the HVGs hvg_soma_ids = hvg[hvg.highly_variable].index.values adata = cellxgene_census.get_anndata( diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_stats.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_stats.py index 54e498af5..a5930525a 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_stats.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/pp/_stats.py @@ -29,7 +29,7 @@ def mean_variance( Args: query: - An :class:`tiledbsoma.ExperimentAxisQuery`, specifying the ``obs``/``var`` selection over which mean and + A :class:`tiledbsoma.ExperimentAxisQuery`, specifying the ``obs``/``var`` selection over which mean and variance are calculated. layer: X layer used, e.g., ``"raw"``. diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index 31105162f..3fd8d6286 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -1,404 +1,176 @@ body { - font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Helvetica Neue, Helvetica, Arial, sans-serif; + font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Helvetica, Arial, sans-serif; } -h1, -h2, -h3, -h4, -h5, -h6 { - font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Helvetica Neue, Helvetica, Arial, sans-serif; +h1, h2, h3, h4, h5, h6 { + font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Helvetica, Arial, sans-serif; } .navbar-cxg { - width: 100%; - height: 56px; - background-color: #10161a; - position: fixed; - z-index: 1; -} - -.navbar-cxg-nav-wrapper { - display: flex; - gap: 16px; + width: 100%; + height: 48px; + background-color: #10161A; + position: fixed; + z-index: 1; } .navbar-cxg-link { - display: inline-flex; - align-items: center; - background: none; - border-radius: 0; - color: #a7b6c2; - font-size: 13px; - font-weight: 500; - height: 22px; - letter-spacing: -0.1px; - line-height: 22px; - min-height: 22px; - padding: 0; - .active-link { - box-shadow: inset 0 -2px 0 #fff !important; /* Overrides specificity of BP button active box shadow rule. */ - } + display: inline-flex; + align-items: center; + background: none; + border-radius: 0; + color: #A7B6C2; + font-size: 13px; + font-weight: 500; + height: 22px; + letter-spacing: -0.1px; + line-height: 22px; + min-height: 22px; + padding: 0; } .navbar-divider { - background-color: #767676; - height: auto; - border: none; - width: 1px; - margin: 0; -} - -.navbar-cxg-section { - display: flex; - flex-direction: column; - align-items: baseline; -} - -.navbar-cxg-nav-section-title { - font-size: 11px; - line-height: 16px; - letter-spacing: 0.33px; - font-weight: 600; - text-transform: uppercase; - color: #767676; - font-weight: 700; -} - -.navbar-cxg-nav-item-container { - display: flex; - gap: 16px; + background-color: #767676; + height: auto; + border: none; + width: 1px; + margin: 0; } .navbar-cxg-anchor { - color: #a7b6c2; + color: #A7B6C2; } .navbar-cxg-anchor:visited { - color: #a7b6c2; + color: #A7B6C2; } .navbar-cxg-anchor:hover { - color: white; + color: white; } .wy-side-nav-search { - background-color: #6f67ff; + background-color: #6f67ff; } .wy-nav-side { - background: #0e1214; + background: #0e1214; } .wy-menu-vertical a { - color: #96a7b5; + color: #96a7b5; } .wy-menu-vertical a:hover { - color: white; + color: white; } .wy-nav-content-wrap { - background: white; + background: white; } .wy-nav-content { - max-width: 1200px; - background: white; + max-width: 1200px; + background: white; } /* Custom colors */ -.rst-content .admonition, -.rst-content .admonition-todo, -.rst-content .attention, -.rst-content .caution, -.rst-content .danger, -.rst-content .error, -.rst-content .hint, -.rst-content .important, -.rst-content .note, -.rst-content .seealso, -.rst-content .tip, -.rst-content .warning, -.wy-alert { - padding: 12px; - line-height: 24px; - margin-bottom: 24px; - background: #e0f0ff; -} - -.rst-content .note, -.rst-content .seealso, -.rst-content .wy-alert-info.admonition, -.rst-content .wy-alert-info.admonition-todo, -.rst-content .wy-alert-info.attention, -.rst-content .wy-alert-info.caution, -.rst-content .wy-alert-info.danger, -.rst-content .wy-alert-info.error, -.rst-content .wy-alert-info.hint, -.rst-content .wy-alert-info.important, -.rst-content .wy-alert-info.tip, -.rst-content .wy-alert-info.warning, -.wy-alert.wy-alert-info { - background: #e0f0ff; -} - -html.writer-html4 .rst-content dl:not(.docutils) > dt, -html.writer-html5 - .rst-content - dl[class]:not(.option-list):not(.field-list):not(.footnote):not( - .citation - ):not(.glossary):not(.simple) - > dt { - display: table; - margin: 6px 0; - font-size: 90%; - line-height: normal; - background: #e0f0ff; - color: #0073ff; - border-top: 3px solid #8cc3ff; - padding: 6px; - position: relative; -} - -.rst-content .guilabel { - border: 1px solid #7fbbe3; - background: #e0f0ff; - font-size: 80%; - font-weight: 700; - border-radius: 4px; - padding: 2.4px 6px; - margin: auto 2px; -} - -.rst-content .wy-alert-neutral.admonition-todo a, -.rst-content .wy-alert-neutral.admonition a, -.rst-content .wy-alert-neutral.attention a, -.rst-content .wy-alert-neutral.caution a, -.rst-content .wy-alert-neutral.danger a, -.rst-content .wy-alert-neutral.error a, -.rst-content .wy-alert-neutral.hint a, -.rst-content .wy-alert-neutral.important a, -.rst-content .wy-alert-neutral.note a, -.rst-content .wy-alert-neutral.seealso a, -.rst-content .wy-alert-neutral.tip a, -.rst-content .wy-alert-neutral.warning a, -.wy-alert.wy-alert-neutral a { - color: #0073ff; -} -.wy-tray-container li.wy-tray-item-info { - background: #0073ff; -} -.btn-info { - background-color: #0073ff !important; -} -.btn-link { - background-color: transparent !important; - color: #0073ff; - box-shadow: none; - border-color: transparent !important; -} -.wy-dropdown-menu > dd > a:hover { - background: #0073ff; - color: #fff; -} -.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover { - background: #0073ff; - color: #fff; -} -.wy-inline-validate.wy-inline-validate-info .wy-input-context { - color: #0073ff; -} -a { - color: #0073ff; - text-decoration: none; - cursor: pointer; -} -.wy-text-info { - color: #0073ff !important; -} -.wy-menu-vertical a:active { - background-color: #0073ff; - cursor: pointer; - color: #fff; -} -.wy-side-nav-search { - display: block; - width: 300px; - padding: 0.809em; - margin-bottom: 0.809em; - z-index: 200; - background-color: #0073ff; - text-align: center; - color: #fcfcfc; -} -.wy-side-nav-search img { - display: block; - margin: auto auto 0.809em; - height: 45px; - width: 45px; - background-color: #0073ff; - padding: 5px; - border-radius: 100%; -} -.wy-nav .wy-menu-vertical header { - color: #0073ff; -} -.wy-nav .wy-menu-vertical a:hover { - background-color: #0073ff; - color: #fff; -} -.wy-nav-top { - display: none; - background: #0073ff; - color: #fff; - padding: 0.4045em 0.809em; - position: relative; - line-height: 50px; - text-align: center; - font-size: 100%; - *zoom: 1; -} -.wy-nav-top img { - margin-right: 12px; - height: 45px; - width: 45px; - background-color: #0073ff; - padding: 5px; - border-radius: 100%; -} -.rst-versions a { - color: #0073ff; - text-decoration: none; -} -.rst-content a code, -.rst-content a tt { - color: #0073ff; -} -html.writer-html4 .rst-content dl:not(.docutils) > dt, -html.writer-html5 - .rst-content - dl[class]:not(.option-list):not(.field-list):not(.footnote):not( - .citation - ):not(.glossary):not(.simple) - > dt { - display: table; - margin: 6px 0; - font-size: 90%; - line-height: normal; - background: #e7f2fa; - color: #0073ff; - border-top: 3px solid #8cc3ff; - padding: 6px; - position: relative; -} - -.rst-content .admonition-title, -.wy-alert-title { - font-weight: 700; - display: block; - color: #fff; - background: #8cc3ff; - padding: 6px 12px; - margin: -12px -12px 12px; -} -.rst-content .note .admonition-title, -.rst-content .note .wy-alert-title, -.rst-content .seealso .admonition-title, -.rst-content .seealso .wy-alert-title, -.rst-content .wy-alert-info.admonition-todo .admonition-title, -.rst-content .wy-alert-info.admonition-todo .wy-alert-title, -.rst-content .wy-alert-info.admonition .admonition-title, -.rst-content .wy-alert-info.admonition .wy-alert-title, -.rst-content .wy-alert-info.attention .admonition-title, -.rst-content .wy-alert-info.attention .wy-alert-title, -.rst-content .wy-alert-info.caution .admonition-title, -.rst-content .wy-alert-info.caution .wy-alert-title, -.rst-content .wy-alert-info.danger .admonition-title, -.rst-content .wy-alert-info.danger .wy-alert-title, -.rst-content .wy-alert-info.error .admonition-title, -.rst-content .wy-alert-info.error .wy-alert-title, -.rst-content .wy-alert-info.hint .admonition-title, -.rst-content .wy-alert-info.hint .wy-alert-title, -.rst-content .wy-alert-info.important .admonition-title, -.rst-content .wy-alert-info.important .wy-alert-title, -.rst-content .wy-alert-info.tip .admonition-title, -.rst-content .wy-alert-info.tip .wy-alert-title, -.rst-content .wy-alert-info.warning .admonition-title, -.rst-content .wy-alert-info.warning .wy-alert-title, -.rst-content .wy-alert.wy-alert-info .admonition-title, -.wy-alert.wy-alert-info .rst-content .admonition-title, -.wy-alert.wy-alert-info .wy-alert-title { - background: #8cc3ff; -} -html.writer-html4 .rst-content dl:not(.docutils) > dt, -html.writer-html5 - .rst-content - dl[class]:not(.option-list):not(.field-list):not(.footnote):not( - .citation - ):not(.glossary):not(.simple) - > dt { - display: table; - margin: 6px 0; - font-size: 90%; - line-height: normal; - background: #e7f2fa; - color: #0073ff; - border-top: 3px solid #8cc3ff; - padding: 6px; - position: relative; -} -html.writer-html4 .rst-content dl:not(.docutils) > dt:before, -html.writer-html5 - .rst-content - dl[class]:not(.option-list):not(.field-list):not(.footnote):not( - .citation - ):not(.glossary):not(.simple) - > dt:before { - color: #8cc3ff; -} +.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{ + padding:12px; + line-height:24px; + margin-bottom:24px; + background:#e0f0ff +} + +.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{ + background:#e0f0ff +} + +html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{ + display:table; + margin:6px 0; + font-size:90%; + line-height:normal; + background:#e0f0ff; + color:#0073ff; + border-top:3px solid #8cc3ff; + padding:6px; + position:relative +} + +.rst-content .guilabel{ + border:1px solid #7fbbe3; + background:#e0f0ff; + font-size:80%; + font-weight:700; + border-radius:4px; + padding:2.4px 6px; + margin:auto 2px +} + +.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{ color:#0073ff} +.wy-tray-container li.wy-tray-item-info{ background:#0073ff} +.btn-info{ background-color:#0073ff!important} +.btn-link{ background-color:transparent!important; color:#0073ff; box-shadow:none; border-color:transparent!important} +.wy-dropdown-menu>dd>a:hover{ background:#0073ff; color:#fff} +.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{ background:#0073ff; color:#fff} +.wy-inline-validate.wy-inline-validate-info .wy-input-context{ color:#0073ff} +a{ color:#0073ff; text-decoration:none; cursor:pointer} +.wy-text-info{ color:#0073ff!important} +.wy-menu-vertical a:active{ background-color:#0073ff; cursor:pointer; color:#fff} +.wy-side-nav-search{ display:block; width:300px; padding:.809em; margin-bottom:.809em; z-index:200; background-color:#0073ff; text-align:center; color:#fcfcfc} +.wy-side-nav-search img{ display:block; margin:auto auto .809em; height:45px; width:45px; background-color:#0073ff; padding:5px; border-radius:100%} +.wy-nav .wy-menu-vertical header{ color:#0073ff} +.wy-nav .wy-menu-vertical a:hover{ background-color:#0073ff; color:#fff} +.wy-nav-top{ display:none; background:#0073ff; color:#fff; padding:.4045em .809em; position:relative; line-height:50px; text-align:center; font-size:100%; *zoom:1} +.wy-nav-top img{ margin-right:12px; height:45px; width:45px; background-color:#0073ff; padding:5px; border-radius:100%} +.rst-versions a{ color:#0073ff; text-decoration:none} +.rst-content a code,.rst-content a tt{ color:#0073ff} +html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{ display:table; margin:6px 0; font-size:90%; line-height:normal; background:#e7f2fa; color:#0073ff; border-top:3px solid #8cc3ff; padding:6px; position:relative} + +.rst-content .admonition-title,.wy-alert-title{ font-weight:700; display:block; color:#fff; background:#8cc3ff; padding:6px 12px; margin:-12px -12px 12px} +.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{ background:#8cc3ff} +html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{ display:table; margin:6px 0; font-size:90%; line-height:normal; background:#e7f2fa; color:#0073ff; border-top:3px solid #8cc3ff; padding:6px; position:relative} +html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{ color:#8cc3ff} #newsletter-banner { - background-color: #f4f0f9; - width: 100%; - height: 44px; - position: fixed; - bottom: 0; - z-index: 991; - display: none; - align-items: center; - justify-content: center; + background-color: #F4F0F9; + width: 100%; + height: 44px; + position: fixed; + bottom: 0; + z-index: 991; + display: none; + align-items: center; + justify-content: center; } #newsletter-banner-close-button { - position: absolute; - right: 16px; + position: absolute; + right: 16px; } #newsletter-subscribe-button { - text-decoration-line: underline; - color: #8f5aff; - font-weight: 500; - cursor: pointer; + text-decoration-line: underline; + color: #8f5aff; + font-weight: 500; + cursor: pointer; } #newsletter-modal * { - font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - "Helvetica Neue", Helvetica, Arial, sans-serif; + font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; } #newsletter-modal { - box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.302065); - border-radius: 4px; - border: none; - min-width: 400px !important; - min-height: 266px !important; - max-width: 400px !important; - max-height: 266px !important; - padding: 24px; + box-shadow: 0px 2px 4px rgba(0,0,0,0.302065); + border-radius: 4px; + border: none; + min-width: 400px!important; + min-height: 266px!important; + max-width: 400px!important; + max-height: 266px!important; + padding: 24px; + } /* @@ -406,133 +178,130 @@ html.writer-html5 * as a flexbox even when it's closed. */ #newsletter-modal[open] { - display: flex; - flex-direction: column; - justify-content: space-between; + display: flex; + flex-direction: column; + justify-content: space-between; } #newsletter-modal::backdrop { - background-color: rgba(17, 20, 24, 0.7); + background-color: rgba(17,20,24,.7); } #newsletter-header { - display: flex; - align-items: center; - justify-content: space-between; + display: flex; + align-items: center; + justify-content: space-between; } #newsletter-logo { - width: 160px; + width: 160px; } -#newsletter-close-button, -#newsletter-banner-close-button { - cursor: pointer; - color: rgba(0, 0, 0, 0.54); - transform: scale(1.4, 1); +#newsletter-close-button, #newsletter-banner-close-button { + cursor: pointer; + color: rgba(0, 0, 0, 0.54); + transform: scale(1.4, 1); } #newsletter-callout { - line-height: 32px; - font-weight: 600; - letter-spacing: -0.019em; - margin: 0px; - padding-top: 16px; - padding-bottom: 8px; - font-size: 24px !important; - height: auto !important; + line-height: 32px; + font-weight: 600; + letter-spacing: -0.019em; + margin: 0px; + padding-top: 16px; + padding-bottom: 8px; + font-size: 24px !important; + height: auto !important; } #newsletter-description { - font-size: 14px; - line-height: 20px; - font-weight: 400; - letter-spacing: -0.006em; - padding-bottom: 16px; + font-size: 14px; + line-height: 20px; + font-weight: 400; + letter-spacing: -0.006em; + padding-bottom: 16px; } #newsletter-form-container form { - display: flex; - align-items: center; + display: flex; + align-items: center; } #newsletter-form-container .input { - margin-right: 4px; + margin-right: 4px; } #newsletter-form-container .hs-email { - width: 100%; + width: 100%; } #email-eb65b811-0451-414d-8304-7b9b6f468ce5 { - width: 100%; - box-shadow: none; - padding: 6px 16px; - height: 34px; - box-sizing: border-box; - border-radius: 4px; + width: 100%; + box-shadow: none; + padding: 6px 16px; + height: 34px; + box-sizing: border-box; + border-radius: 4px; } #newsletter-footnote { - font-size: 11px; - line-height: 16px; - font-weight: 400; - letter-spacing: -0.005em; - color: rgb(118, 118, 118); + font-size: 11px; + line-height: 16px; + font-weight: 400; + letter-spacing: -0.005em; + color: rgb(118, 118, 118); } .hs-button { - background-color: rgb(143, 90, 255); - padding: 6px 12px; - width: fit-content; - height: 34px; - color: white; - border: none; - border-radius: 4px; - font-size: 14px; + background-color: rgb(143, 90, 255); + padding: 6px 12px; + width: fit-content; + height: 34px; + color: white; + border: none; + border-radius: 4px; + font-size: 14px; } .hs-button:hover { - background-color: rgb(88, 38, 193); + background-color: rgb(88, 38, 193); } .hs_error_rollup { - display: none; + display: none; } .hs-error-msgs { - font-size: 11px; - line-height: 16px; - font-weight: 400; - letter-spacing: -0.005em; - align-self: flex-start; - height: 16px; - margin-top: 4px; - margin-bottom: 4px; - position: absolute; - bottom: 34px; + font-size: 11px; + line-height: 16px; + font-weight: 400; + letter-spacing: -0.005em; + align-self: flex-start; + height: 16px; + margin-top: 4px; + margin-bottom: 4px; + position: absolute; + bottom: 34px; } .hs-error-msg { - color: rgb(220, 19, 44); + color: rgb(220, 19, 44); } .beta { - background: #7a41ce; - color: white; - border-radius: 4px; - padding: 4px 6px; - margin-left: 4px; - font-size: 10px; - line-height: 8px; - letter-spacing: 1px; - height: 16px !important; -} - -table.custom-table, -table.custom-table td, -table.custom-table th { - vertical-align: middle; - border: 1px solid #ddd; - padding: 5px; -} + background: #7a41ce; + color: white; + border-radius: 4px; + padding: 4px 6px; + margin-left: 4px; + font-size: 10px; + line-height: 8px; + letter-spacing: 1px; + height: 16px!important; +} + +table.custom-table, table.custom-table td, table.custom-table th { + vertical-align: middle; + border: 1px solid #ddd; + padding: 5px; +} \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index b8de639b3..7ecd75a4f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -7,8 +7,8 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = 'cellxgene-census' -copyright = '2022-2023 Chan Zuckerberg Initiative Foundation' -author = 'Chan Zuckerberg Initiative Foundation' +copyright = '2022, Chan Zuckerberg Initiative' +author = 'Chan Zuckerberg Initiative' import git repo = git.Repo(search_parent_directories=True) @@ -38,7 +38,7 @@ intersphinx_mapping = { "tiledbsoma-py": ( - "https://tiledb-inc-tiledb-soma.readthedocs-hosted.com/en/%s/" + "https://tiledbsoma.readthedocs.io/en/%s/" % tiledb_version, None, ), @@ -46,6 +46,10 @@ 'numpy': ('http://docs.scipy.org/doc/numpy', None), 'scipy': ('http://docs.scipy.org/doc/scipy/reference', None), 'anndata': ('https://anndata.readthedocs.io/en/latest/', None), + 'pandas': ('https://pandas.pydata.org/docs/', None), + 'scanpy': ('https://scanpy.readthedocs.io/en/stable/', None), + 'torch': ('https://pytorch.org/docs/stable/', None), + 'torchdata': ('https://pytorch.org/data/beta/', None), } templates_path = ['_templates']