Release notes


Release notes#

Starting from version 0.20.1, this format is based on Keep a Changelog, and this project adheres to Semantic Versioning. Full commit history is available in the commit logs.

Version 1.2 (unreleased)#

1.2.0 (unreleased)#




Version 1.1#

1.1.3 (unreleased)#


1.1.2 (2024-03-01)#


1.1.1 (2024-02-19)#


1.1.0 (2024-02-13)#





  • Remove deprecated use_gpu argument in favor of PyTorch Lightning arguments accelerator and devices #2114.

  • Remove deprecated scvi._compat.Literal class #2115.

  • Remove chex dependency #2482.

Version 1.0#

1.0.4 (2023-10-13)#


  • Add support for AnnData 0.10.0 #2271.

1.0.3 (2023-08-13)#


  • Disable the default selection of MPS when accelerator="auto" in Lightning #2167.

  • Change JAX models to use dict instead of flax.core.FrozenDict according to the Flax migration guide google/flax#3191 #2222.


1.0.2 (2023-07-05)#


  • Fix link to Scanpy preprocessing in introduction tutorial #2154.

  • Fix link to Ray Tune search API in autotune tutorial #2154.

1.0.1 (2023-07-04)#


  • Add support for Python 3.11 #1977.


  • Upper bound Chex dependency to 0.1.8 due to NumPy installation conflicts #2132.

1.0.0 (2023-06-02)#





  • Remove ability to set up ST data in from_rna_model, which was deprecated. ST data should be set up using setup_anndata #1949.

  • Remove custom reusable doc decorator which was used for de docs #1970.

  • Remove drop_last as an integer from AnnDataLoader, add typing and code cleanup #1975.

  • Remove seqfish and seqfish plus datasets #2017.

  • Remove support for Python 3.8 (NEP 29) #2021.

Version 0.20#

0.20.3 (2023-03-21)#


  • Fix totalVI differential expression when integer sequential protein names are automatically used #1951.

  • Fix peakVI scArches test case #1962.


0.20.2 (2023-03-10)#



0.20.1 (2023-02-21)#


New in 0.20.0 (2023-02-01)#

Major changes#

Minor changes#

  • Latent mode support changed so that user data is no longer edited in-place #1756.

  • Minimum supported PyTorch Lightning version is now 1.9 #1795,#1833,#1863.

  • Minimum supported Python version is now 3.8 #1819.

  • Poetry removed in favor of Hatch for builds and publishing #1823.

  • setup_anndata docstrings fixed, setup_mudata docstrings added #1834,#1837.

  • add_dna_sequence() adds DNA sequences to AnnData objects using genomepy #1839,#1842.

  • Update tutorial formatting with pre-commit #1850

  • Expose accelerators and devices arguments in Trainer #1864.

  • Development in GitHub Codespaces is now supported #1836.

Breaking changes#

Bug Fixes#

  • JaxTrainingPlan now correctly updates global_step through PyTorch Lightning by using a dummy optimizer. #1791.

  • CUDA compatibility issue fixed in sample() #1813.

  • Device-backed AnnTorchDataset fixed to work with sparse data #1824.

  • Fix bug compute_reconstruction_error() causing the first batch to be ignored, see more details in #1854 #1857.


Version 0.19#

New in 0.19.0 (2022-10-31)#

Major Changes#

Minor changes#

  • Remove confusing warning about kl warmup, log kl weight instead #1773

Breaking changes#

  • LossRecorder no longer allows access to dictionaries of values if provided during initialization #1749.

  • JaxModuleWrapper removed. #1751

Bug Fixes#


Version 0.18#

New in 0.18.0 (2022-10-12)#

Major Changes#

  • Add latent mode support in SCVI #1672. This allows for loading a model using latent representations only (i.e. without the full counts). Not only does this speed up inference by using the cached latent distribution parameters (thus skipping the encoding step), but this also helps in scenarios where the full counts are not available but cached latent parameters are. We provide utility functions and methods to dynamically convert a model to latent mode.

  • Added SCAR as an external model for ambient RNA removal #1683.

  • Add weight support to MULTIVI #1697.

Minor changes#

Breaking changes#


Bug Fixes#

  • Fix links for breast cancer and mouse datasets #1709.

  • fix quick start notebooks not showing #1733.


Version 0.17#

New in 0.17.4 (2021-09-20)#


  • Support for PyTorch Lightning 1.7 #1622.

  • Allow flax to use any mutable states used by a model generically with TrainStateWithState #1665, #1700.

  • Update publication links in README #1667.

  • Docs now include floating window cross references with hoverxref, external links with linkcode, and grid #1678.

Bug Fixes#

  • Fix get_likelihood_parameters() failure when gene_likelihood != "zinb" in RNASeqMixin #1618.

  • Fix exception logic when not using the observed library size in VAE initialization #1660.

  • Replace instances of super().__init__() with an argument in super(), causing autoreload extension to throw errors #1671.

  • Change cell2location tutorial causing docs build to fail #1674.

  • Replace instances of max_epochs as ints for new PyTorch Lightning #1686.

  • Catch case when torch.backends.mps is not implemented #1692.

  • Fix Poisson sampling in sample() #1702.


New in 0.17.3 (2022-08-26)#


  • Pin sphinx_gallery to fix tutorial cards on docs #1657

  • Use latest tutorials in release #1657


New in 0.17.2 (2022-08-26)#


  • Move training argument in JaxVAE constructor to a keyword argument into the call method. This simplifies the JaxModuleWrapper logic and avoids the reinstantiation of JaxVAE during evaluation #1580.

  • Add a static method on the BaseModelClass to return the AnnDataManger’s full registry #1617.

  • Clarify docstrings for continuous and categorical covariate keys #1637.

  • Remove poetry lock, use newer build system #1645.

Bug Fixes#

  • Fix CellAssign to accept extra categorical covariates #1629.

  • Fix an issue where max_epochs is never determined heuristically for totalvi, instead it would always default to 400 #1639.

Breaking Changes#

  • Fix an issue where max_epochs is never determined heuristically for totalvi, instead it would always default to 400 #1639.


New in 0.17.1 (2022-07-14)#

Make sure notebooks are up to date for real this time :).


New in 0.17.0 (2022-07-14)#

Major Changes#

  • Experimental MuData support for TOTALVI via the method setup_mudata(). For several of the existing AnnDataField classes, there is now a MuData counterpart with an additional mod_key argument used to indicate the modality where the data lives (e.g. LayerField to MuDataLayerField). These modified classes are simply wrapped versions of the original AnnDataField code via the new method #1474.

  • Modification of the generative() method’s outputs to return prior and likelihood properties as Distribution objects. Concerned modules are AmortizedLDAPyroModule, AutoZIVAE, MULTIVAE, PEAKVAE, TOTALVAE, SCANVAE, VAE, and VAEC. This allows facilitating the manipulation of these distributions for model training and inference #1356.

  • Major changes to Jax support for scvi-tools models to generalize beyond JaxSCVI. Support for Jax remains experimental and is subject to breaking changes:

    • Consistent module interface for Flax modules (Jax-backed) via JaxModuleWrapper, such that they are compatible with the existing BaseModelClass #1506.

    • JaxTrainingPlan now leverages Pytorch Lightning to factor out Jax-specific training loop implementation #1506.

    • Enable basic device management in Jax-backed modules #1585.

Minor changes#

  • Add on_load() callback which is called on load() prior to loading the module state dict #1542.

  • Refactor metrics code and use MetricCollection to update metrics in bulk #1529.

  • Add max_kl_weight and min_kl_weight to TrainingPlan #1595.

  • Add a warning to UnsupervisedTrainingMixin that is raised if max_kl_weight is not reached during training #1595.

Breaking changes#

  • Any methods relying on the output of inference and generative from existing scvi-tools models (e.g. SCVI, SCANVI) will need to be modified to accept torch.Distribution objects rather than tensors for each parameter (e.g. px_m, px_v) #1356.

  • The signature of compute_and_log_metrics() has changed to support the use of MetricCollection. The typical modification required will look like changing self.compute_and_log_metrics(scvi_loss, self.elbo_train) to self.compute_and_log_metrics(scvi_loss, self.train_metrics, "train"). The same is necessary for validation metrics except with self.val_metrics and the mode "validation" #1529.

Bug Fixes#


Version 0.16#

New in 0.16.4 (2022-06-14)#

Note: When applying any model using the AdversarialTrainingPlan (e.g. TOTALVI, MULTIVI), you should make sure to use v0.16.4 instead of v0.16.3 or v0.16.2. This release fixes a critical bug in the training plan.


Breaking changes#

Bug Fixes#

  • Fix critical issue in AdversarialTrainingPlan where kl_weight was overwritten to 0 at each step (#1566). Users should avoid using v0.16.2 and v0.16.3 which both include this bug.


New in 0.16.3 (2022-06-04)#


  • Removes sphinx max version and removes jinja dependency (#1555).

Breaking changes#

Bug Fixes#

  • Upper bounds protobuf due to pytorch lightning incompatibilities (#1556). Note that #1556 has unique changes as PyTorch Lightning >=1.6.4 adds the upper bound in their requirements.


New in 0.16.2 (2022-05-10)#


Breaking changes#

Bug Fixes#


New in 0.16.1 (2022-04-22)#


  • Update scArches Pancreas tutorial, DestVI tutorial (#1520).

Breaking changes#

Bug Fixes#

  • Bug fixed in SCANVI where self._labeled_indices was being improperly set (#1515).

  • Fix issue where load_query_data would not properly add an obs column with the unlabeled category when the labels_key was not present in the query data.

  • Disable extension of categories for labels in load_query_data (#1519).

  • Fix an issue with prepare_query_data() to ensure it does nothing when genes are completely matched (#1520).


New in 0.16.0 (2022-04-12)#

This release features a refactor of DestVI (#1457):

  1. Bug fix in cell type amortization, which leads to on par performance of cell type amortization V_encoder with free parameter for cell type proportions V.

  2. Bug fix in library size in CondSCVI, that lead to downstream dependency between sum over cell type proportions v_ind and library size library in DestVI.

  3. neg_log_likelihood_prior is not computed anymore on random subset of single cells but cell type specific subclustering using cluster variance var_vprior, cluster mean mean_vprior and cluster mixture proportion mp_vprior for computation. This leads to more stable results and faster computation time. Setting vamp_prior_p in from_rna_model() to the expected resolution is critical in this algorithm.

  4. The new default is to also use dropout dropout during the decoder of CondSCVI and subsequently dropout_decoder in DestVI, we found this to be beneficial after bug fixes listed above.

  5. We changed the weighting of the loss on the variances of beta and the prior of eta.


Due to bug fixes listed above this version of DestVI is not backwards compatible. Despite instability in training in the outdated version, we were able to reproduce results generated with this code. We therefore do not strictly encourage to rerun old experiments.

We published a new tutorial. This new tutorial incorporates a new utility package destvi_utils that generates exploratory plots of the results of DestVI. We refer to the manual of this package for further documentation.


  • Docs changes (installation #1498, DestVI user guide #1501 and #1508, dark mode code cells #1499).

  • Add backup_url to the load() method of each model class, enabling automatic downloading of model save file (#1505).

Breaking changes#

Bug Fixes#


Version 0.15#

New in 0.15.5 (2022-04-06)#


  • Add common types file #1467.

  • New default is to not pin memory during training when using a GPU. This is much better for shared GPU environments without any performance regression #1473.

Bug fixes#

  • Fix LDA user guide bugs #1479.

  • Fix unnecessary warnings, double logging #1475.


New in 0.15.4 (2022-03-28)#


  • Add peakVI publication reference #1463.

  • Update notebooks with new install functionality for Colab #1466.

  • Simplify changing the training plan for pyro #1470.

  • Optionally scale ELBO by a scalar in PyroTrainingPlan #1469.

Bug fixes#


New in 0.15.3 (2022-03-24)#


Bug fixes#

  • Raise NotImplementedError when categorical_covariate_keys are used with scvi.model.SCANVI.load_query_data(). (#1458).

  • Fix behavior when continuous_covariate_keys are used with scvi.model.SCANVI.classify(). (#1458).

  • Unlabeled category values are automatically populated when scvi.model.SCANVI.load_query_data() run on adata_target missing labels column. (#1458).

  • Fix dataframe rendering in dark mode docs (#1448)

  • Fix variance constraint in AmortizedLDA that set an artifical bound on latent topic variance (#1445).

  • Fix scvi.model.base.ArchesMixin.prepare_query_data() to work cross device (e.g., model trained on cuda but method used on cpu; see #1451).


New in 0.15.2 (2022-03-15)#


  • Remove setuptools pinned requirement due to new PyTorch 1.11 fix (#1436).

  • Switch to myst-parsed markdown for docs (#1435).

  • Add prepare_query_data(adata, reference_model) to ArchesMixin to enable query data cleaning prior to reference mapping (#1441).

  • Add Human Lung Cell Atlas tutorial (#1442).

Bug fixes#

  • Errors when arbitrary kwargs are passed into setup_anndata() (#1439).

  • Fix scvi.external.SOLO to use train_size=0.9 by default, which enables early stopping to work properly (#1438).

  • Fix scArches version warning (#1431).

  • Fix backwards compat for SCANVI loading (#1441).


New in 0.15.1 (2022-03-11)#


  • Remove labels_key from MULTIVI as it is not used in the model (#1393).

  • Use scvi-tools mean/inv_disp parameterization of negative binomial for JaxSCVI likelihood (#1386).

  • Use setup for Flax-based modules (#1403).

  • Reimplement JaxVAE using inference/generative paradigm with JaxBaseModuleClass (#1406).

  • Use multiple particles optionally in JaxSCVI (#1385).

  • SOLO no longer warns about count data (#1411).

  • Class docs are now one page on docs site (#1415).

  • Copied AnnData objects are assigned a new uuid and transfer is attempted (#1416).

Bug fixes#

  • Fix an issue with using gene lists and proteins lists as well as transform_batch for TOTALVI (#1413).

  • Error gracefully when NaNs present in CategoricalJointObsmField (#1417).


New in 0.15.0 (2022-02-28)#

In this release, we have completely refactored the logic behind our data handling strategy (i.e. setup_anndata) to allow for:

  1. Readable data handling for existing models.

  2. Modular code for easy addition of custom data fields to incorporate into models.

  3. Avoidance of unexpected edge cases when more than one model is instantiated in one session.

Important Note: This change will not break pipelines for model users (with the exception of a small change to SCANVI). However, there are several breaking changes for model developers. The data handling tutorial goes over these changes in detail.

This refactor is centered around the new AnnDataManager class which orchestrates any data processing necessary for scvi-tools and stores necessary information, rather than adding additional fields to the AnnData input.

Schematic of data handling strategy with AnnDataManager

Schematic of data handling strategy with AnnDataManager#

We also have an exciting new experimental Jax-based scVI implementation via JaxSCVI. While this implementation has limited functionality, we have found it to be substantially faster than the PyTorch-based implementation. For example, on a 10-core Intel CPU, Jax on only a CPU can be as fast as PyTorch with a GPU (RTX3090). We will be planning further Jax integrations in the next releases.


Breaking changes#

  • The keyword argument run_setup_anndata has been removed from built-in datasets since there is no longer a model-agnostic setup_anndata method (#1237).

  • The function scvi.model._metrics.clustering_scores has been removed due to incompatbility with new data handling (#1237).

  • SCANVI now takes unlabeled_category as an argument to setup_anndata() rather than on initialization (#1237).

  • setup_anndata is now a class method on model classes and requires specific function calls to ensure proper AnnDataManager setup and model save/load. Any model inheriting from BaseModelClass will need to re-implement this method (#1237).

    • To adapt existing custom models to v0.15.0, one can references the guidelines below. For some examples of how this was done for the existing models in the codebase, please reference the following PRs: (#1301, #1302).

    • scvi._CONSTANTS has been changed to scvi.REGISTRY_KEYS.

    • setup_anndata() functions are now class functions and follow a specific structure. Please refer to setup_anndata() for an example.

    • has been removed. This method can be replaced by

    • The setup dict stored directly on the AnnData object, adata["_scvi"], has been deprecated. Instead, this information now lives in

    • The data registry can be accessed at

    • Summary stats can be accessed at

    • Any field-specific information (e.g. adata.obs["categorical_mappings"]) now lives in field-specific state registries. These can be retrieved via the function get_state_registry().

    • register_tensor_from_anndata() has been removed. To register tensors with no relevant AnnDataField subclass, create a new a new subclass of BaseAnnDataField and add it to appropriate model’s setup_anndata() function.


Version 0.14#

New in 0.14.6 (2021-02-05)#

Bug fixes, minor improvements of docs, code formatting.


  • Update black formatting to stable release (#1324)

  • Refresh readme, move tasks image to docs (#1311).

  • Add 0.14.5 release note to index (#1296).

  • Add test to ensure extra SCANVI training of a pre-trained SCVI model does not change original model weights (#1284).

  • Fix issue in TOTALVI protein background prior initialization to not include protein measurements that are known to be missing (#1282).

  • Upper bound setuptools due to PyTorch import bug (#1309).


New in 0.14.5 (2021-11-22)#

Bug fixes, new tutorials.


  • Fix kl_weight floor for Pytorch-based models (#1269).

  • Add support for more Pyro guides (#1267).

  • Update scArches, harmonization tutorials, add basic R tutorial, tabula muris label transfer tutorial (#1274).


New in 0.14.4 (2021-11-16)#

Bug fixes, some tutorial improvements.


  • kl_weight handling for Pyro-based models (#1242).

  • Allow override of missing protein inference in TOTALVI (#1251). This allows to treat all 0s in a particular batch for one protein as biologically valid.

  • Fix load documentation (e.g., load(), load()) (#1253).

  • Fix model history on load with Pyro-based models (#1255).

  • Model construction tutorial uses new static setup anndata (#1257).

  • Add codebase overview figure to docs (#1231).


New in 0.14.3 (2021-10-19)#

Bug fix.


  • Bug fix to BaseModelClass() to retain tensors registered by register_tensor_from_anndata (#1235).

  • Expose an instance of our DocstringProcessor to aid in documenting derived implementations of setup_anndata method (#1235).


New in 0.14.2 (2021-10-18)#

Bug fix and new tutorial.


  • Bug fix in RNAStereoscope where loss was computed with mean for a minibatch instead of sum. This ensures reproducibility with the original implementation (#1228).

  • New Cell2location contributed tutorial (#1232).


New in 0.14.1 (2021-10-11)#

Minor hotfixes.


  • Filter out mitochrondrial genes as a preprocessing step in the Amortized LDA tutorial (#1213)

  • Remove verbose=True argument from early stopping callback (#1216)


New in 0.14.0 (2021-10-07)#

In this release, we have completely revamped the scvi-tools documentation website by creating a new set of user guides that provide:

  1. The math behind each method (in a succinct, online methods-like way)

  2. The relationship between the math and the functions associated with each model

  3. The relationship between math variables and code variables

Our previous User Guide guide has been renamed to Tutorials and contains all of our existing tutorials (including tutorials for developers).

Another noteworthy addition in this release is the implementation of the (amortized) Latent Dirichlet Allocation (aka LDA) model applied to single-cell gene expression data. We have also prepared a tutorial that demonstrates how to use this model, using a PBMC 10K dataset from 10x Genomics as an example application.

Lastly, in this release we have made a change to reduce user and developer confusion by making the previously global setup_anndata method a static class-specific method instead. This provides more clarity on which parameters are applicable for this call, for each model class. Below is a before/after for the DESTVI and TOTALVI model classes:

setup_anndata before and after

setup_anndata before and after#


  • Added fixes to support PyTorch Lightning 1.4 (#1103)

  • Simplified data handling in R tutorials with sceasy and addressed bugs in package installation (#1122).

  • Moved library size distribution computation to model init (#1123)

  • Updated Contribution docs to describe how we backport patches (#1129)

  • Implemented Latent Dirichlet Allocation as a PyroModule (#1132)

  • Made setup_anndata a static method on model classes rather than one global function (#1150)

  • Used Pytorch Lightning’s seed_everything method to set seed (#1151)

  • Fixed a bug in PyroSampleMixin for posterior sampling (#1158)

  • Added CITE-Seq datasets (#1182)

  • Added user guides to our documentation (#1127, #1157, #1180, #1193, #1183, #1204)

  • Early stopping now prints the reason for stopping when applicable (#1208)

Breaking changes#

  • setup_anndata is now an abstract method on model classes. Any model inheriting from BaseModelClass will need to implement this method (#1150)


Version 0.13#

New in 0.13.0 (2021-08-23)#


Breaking changes#



Version 0.12#

New in 0.12.2 (2021-08-11)#


  • Updated OrderedDict typing import to support all Python 3.7 versions (#1114).

Breaking changes#



New in 0.12.1 (2021-07-29)#


  • Update Pytorch Lightning version dependency to >=1.3,<1.4 (#1104).

Breaking changes#



New in 0.12.0 (2021-07-15)#

This release adds features for tighter integration with Pyro for model development, fixes for SOLO, and other enhancements. Users of SOLO are strongly encouraged to upgrade as previous bugs will affect performance.



  • Update minimum Python version to 3.7.2 (#1082).

  • Slight interface changes to PyroTrainingPlan. "elbo_train" and "elbo_test" are now the average over minibatches as ELBO should be on scale of full data and optim_kwargs can be set on initialization of training plan (#1059, #1101).

  • Use pandas read pickle function for pbmc dataset metadata loading (#1099).

  • Adds n_samples_overall parameter to functions for denoised expression/accesibility/etc. This is used in during differential expression (#1090).

  • Ignore configure optimizers warning when training Pyro-based models (#1064).

Bug fixes#

  • Fix scale of library size for simulated doublets and expression in SOLO when using observed library size to train original SCVI model (#1078, #1085). Currently, library sizes in this case are not appropriately put on the log scale.

  • Fix issue where anndata setup with a layer led to errors in SOLO (#1098).

  • Fix adata parameter of scvi.external.SOLO.from_scvi_model(), which previously did nothing (#1078).

  • Fix default max_epochs of SCANVI when initializing using pre-trained model of SCVI (#1079).

  • Fix bug in predict() function of SCANVI, which only occurred for soft predictions (#1100).

Breaking changes#



Version 0.11#

New in 0.11.0 (2021-05-23)#

From the user perspective, this release features the new differential expression functionality (to be described in a manuscript). For now, it is accessible from differential_expression(). From the developer perspective, we made changes with respect to scvi.dataloaders.DataSplitter and surrounding the Pyro backend. Finally, we also made changes to adapt our code to PyTorch Lightning version 1.3.


  • Pass n_labels to VAE from SCVI (#1055).

  • Require PyTorch lightning > 1.3, add relevant fixes (#1054).

  • Add DestVI reference (#1060).

  • Add PeakVI links to README (#1046).

  • Automatic delta and eps computation in differential expression (#1043).

  • Allow doublet ratio parameter to be changed for used in SOLO (#1066).

Bug fixes#

  • Fix an issue where transform_batch options in TOTALVI was accidentally altering the batch encoding in the encoder, which leads to poor results (#1072). This bug was introduced in version 0.9.0.

Breaking changes#

These breaking changes do not affect the user API; though will impact model developers.

  • Use PyTorch Lightning data modules for scvi.dataloaders.DataSplitter (#1061). This induces a breaking change in the way the data splitter is used. It is no longer callable and now has a setup method. See TrainRunner and its source code, which is straightforward.

  • No longer require training plans to be initialized with n_obs_training argument (#1061). n_obs_training is now a property that can be set before actual training to rescale the loss.

  • Log Pyro loss as train_elbo and sum over steps (#1071)


Version 0.10#

New in 0.10.1 (2021-05-04)#


  • Includes new optional variance parameterization for the Encoder module (#1037).

  • Provides new way to select subpopulations for DE using Pandas queries (#1041).

  • Update reference to peakVI (#1046).

  • Pin Pytorch Lightning version to <1.3


New in 0.10.0 (2021-04-20)#


  • PeakVI minor enhancements to differential accessibility and fix scArches support (#1019)

  • Add DestVI to the codebase (#1011)

  • Versioned tutorial links (#1005)

  • Remove old VAEC (#1006)

  • Use .numpy() to convert torch tensors to numpy ndarrays (#1016)

  • Support backed AnnData (#1017), just load anndata with, backed='r+')

  • Solo interface enhancements (#1009)

  • Updated README (#1028)

  • Use Python warnings instead of logger warnings (#1021)

  • Change totalVI protein background default to False is fewer than 10 proteins used (#1034)

Bug fixes#

  • Fix SaveBestState warning (#1024)

  • New default SCANVI max epochs if loaded with pretrained SCVI model (#1025), restores old <v0.9 behavior.

  • Fix marginal log likelihood computation, which was only being computed on final minibatch of a dataloader. This bug was introduced in the 0.9.X versions (#1033).

  • Fix bug where extra categoricals were not properly extended in transfer_anndata_setup (#1030).


Version 0.9#

New in 0.9.1 (2021-03-20)#


  • Update Pyro module backend to better enfore usage of model and guide, automate passing of number of training examples to Pyro modules (#990)

  • Minimum Pyro version bumped (#988)

  • Improve docs clarity (#989)

  • Add glossary to developer user guide (#999)

  • Add num threads config option to scvi.settings (#1001)

  • Add CellAssign tutorial (#1004)


New in 0.9.0 (2021-03-03)#

This release features our new software development kit for building new probabilistic models. Our hope is that others will be able to develop new models by importing scvi-tools into their own packages.

Important changes#

From the user perspective, there are two package-wide API breaking changes and one SCANVI specific breaking change enumerated below. From the method developer perspective, the entire model backend has been revamped using PyTorch Lightning, and no old code will be compatible with this and future versions. Also, we dropped support for Python 3.6.

Breaking change: The train method#
  • n_epochs is now max_epochs for consistency with PytorchLightning and to better relect the functionality of the parameter.

  • use_cuda is now use_gpu for consistency with PytorchLightning.

  • frequency is now check_val_every_n_epoch for consistency with PytorchLightning.

  • train_fun_kwargs and kwargs throughout the train() methods in the codebase have been removed and various arguments have been reorganized into plan_kwargs and trainer_kwargs. Generally speaking, plan_kwargs deal with model optimization like kl warmup, while trainer_kwargs deal with the actual training loop like early stopping.

Breaking change: GPU handling#
  • use_cuda was removed from the init of each model and was not replaced by use_gpu. By default every model is intialized on CPU but can be moved to a device via model.to_device(). If a model is trained with use_gpu=True the model will remain on the GPU after training.

  • When loading saved models, scvi-tools will always attempt to load the model on GPU unless otherwise specified.

  • We now support specifying which GPU device to use if there are multiple available GPUs.

Breaking change: SCANVI#
  • SCANVI no longer pretrains an SCVI model by default. This functionality however is preserved via the new from_scvi_model() method.

  • n_epochs_unsupervised and n_epochs_semisupervised have been removed from train. It has been replaced with max_epochs for semisupervised training.

  • n_samples_per_label is a new argument which will subsample the number of labelled training examples to train on per label each epoch.

New Model Implementations#


  • SCANVI bug fixes (#879)

  • GIMVI moved to external api (#885)

  • TOTALVI, SCVI, and SCANVI now support multiple covariates (#886)

  • Added callback for saving the best state of a model (#887)

  • Option to disable progress bar (#905)

  • load() documentation improvements (#913)

  • updated tutorials, guides, documentation (#924, #925, #929, #934, #947, #971)

  • track is now public (#938)

  • SCANVI now logs classficiation loss (#966)

  • get_likelihood_parameter() bug (#967)

  • model.history are now pandas DataFrames (#949)


Version 0.8#

New in 0.8.1 (2020-12-23)#


  • freeze_classifier option in load_query_data() for the case when

  • weight_decay passed to train() also passes to ClassifierTrainer

New in 0.8.0 (2020-12-17)#


Online updates of SCVI, SCANVI, and TOTALVI with the scArches method #

It is now possible to iteratively update these models with new samples, without altering the model for the “reference” population. Here we use the scArches method. For usage, please see the tutorial in the user guide.

To enable scArches in our models, we added a few new options. The first is encode_covariates, which is an SCVI option to encode the one-hotted batch covariate. We also allow users to exchange batch norm in the encoder and decoder with layer norm, which can be though of as batch norm but per cell. As the layer norm we use has no parameters, it’s a bit faster than models with batch norm. We don’t find many differences between using batch norm or layer norm in our models, though we have kept defaults the same in this case. To run scArches effectively, batch norm should be exhanged with layer norm.

Empirical initialization of protein background parameters with totalVI#

The learned prior parameters for the protein background were randomly initialized. Now, they can be set with the empirical_protein_background_prior option in TOTALVI. This option fits a two-component Gaussian mixture model per cell, separating those proteins that are background for the cell and those that are foreground, and aggregates the learned mean and variance of the smaller component across cells. This computation is done per batch, if the batch_key was registered. We emphasize this is just for the initialization of a learned parameter in the model.

Use observed library size option#

Many of our models like SCVI, SCANVI, and TOTALVI learn a latent library size variable. The option use_observed_lib_size may now be passed on model initialization. We have set this as True by default, as we see no regression in performance, and training is a bit faster.

Important changes#

  • To facilitate these enhancements, saved TOTALVI models from previous versions will not load properly. This is due to an architecture change of the totalVI encoder, related to latent library size handling.

  • The default latent distribtuion for TOTALVI is now "normal".

  • Autotune was removed from this release. We could not maintain the code given the new API changes and we will soon have alternative ways to tune hyperparameters.

  • Protein names during setup_anndata are now stored in adata.uns["_scvi"]["protein_names"], instead of adata.uns["scvi_protein_names"].

Bug fixes#

  • Fixed an issue where the unlabeled category affected the SCANVI architecture prior distribution. Unfortunately, by fixing this bug, loading previously trained (<v0.8.0) SCANVI models will fail.

Version 0.7#

New in 0.7.1 (2020-10-20)#

This small update provides access to our new Discourse forum from the documentation.

New in 0.7.0 (2020-10-14)#

scvi is now scvi-tools. Version 0.7 introduces many breaking changes. The best way to learn how to use scvi-tools is with our documentation and tutorials.

  • New high-level API and data loading, please see tutorials and examples for usage.

  • GeneExpressionDataset and associated classes have been removed.

  • Built-in datasets now return AnnData objects.

  • scvi-tools now relies entirely on the [AnnData] format.

  • scvi.models has been moved to scvi.core.module.

  • Posterior classes have been reduced to wrappers on DataLoaders

  • scvi.inference has been split to scvi.core.data_loaders for AnnDataLoader classes and scvi.core.trainers for trainer classes.

  • Usage of classes like Trainer and AnnDataLoader now require the AnnData data object as input.

Pre-Version 0.7#

scvi History#

The scvi-tools package used to be scvi. This page commemorates all the hard work on the scvi package by our numerous contributors.


0.6.7 (2020-8-05)#

  • downgrade anndata>=0.7 and scanpy>=1.4.6 @galen

  • make loompy optional, raise sckmisc import error @adam

  • fix PBMCDataset download bug @galen

  • fix AnnDatasetFromAnnData _X in adata.obs bug @galen

0.6.6 (2020-7-08)#

  • add tqdm to within cluster DE genes @adam

  • restore tqdm to use simple bar instead of ipywidget @adam

  • move to numpydoc for doctstrings @adam

  • update issues templates @adam

  • Poisson variable gene selection @valentine-svensson

  • BrainSmallDataset set defualt save_path_10X @gokcen-eraslan

  • train_size must be float between 0.0 and 1.0 @galen

  • bump dependency versions @galen

  • remove reproducibility notebook @galen

  • fix scanVI dataloading @pierre

0.6.5 (2020-5-10)#

  • updates to totalVI posterior functions and notebooks @adam

  • update seurat v3 HVG selection now using skmisc loess @adam

0.6.4 (2020-4-14)#

  • add back Python 3.6 support @adam

  • get_sample_scale() allows gene selection @valentine-svensson

  • bug fix to the dataset to anndata method with how cell measurements are stored @adam

  • fix requirements @adam

0.6.3 (2020-4-01)#

  • bug in version for Louvian in @adam

0.6.2 (2020-4-01)#

  • update highly variable gene selection to handle sparse matrices @adam

  • update DE docstrings @pierre

  • improve posterior save load to also handle subclasses @pierre

  • Create NB and ZINB distributions with torch and refactor code accordingly @pierre

  • typos in autozivae @achille

  • bug in csc sparse matrices in anndata data loader @adam

0.6.1 (2020-3-13)#

  • handles gene and cell attributes with the same name @han-yuan

  • fixes anndata overwriting when loading @adam, @pierre

  • formatting in basic tutorial @adam

0.6.0 (2020-2-28)#

  • updates on TotalVI and LDVAE @adam

  • fix documentation, compatibility and diverse bugs @adam, @pierre @romain

  • fix for external module on scanpy @galen

0.5.0 (2019-10-17)#

0.4.1 (2019-08-03)#

0.4.0 (2019-07-25)#

  • gimVI @achille

  • synthetic correlated datasets, fixed bug in marginal log likelihood @oscar

  • autotune, dataset enhancements @gabriel

  • documentation @jeff

  • more consistent posterior API, docstring, validation set @adam

  • fix anndataset @michael-raevsky

  • linearly decoded VAE @valentine-svensson

  • support for scanpy, fixed bugs, dataset enhancements @achille

  • fix filtering bug, synthetic correlated datasets, docstring, differential expression @pierre

  • better docstring @jamie-morton

  • classifier based on library size for doublet detection @david-kelley

0.3.0 (2019-05-03)#

0.2.4 (2018-12-20)#

0.2.2 (2018-11-08)#

  • added baselines and datasets for sMFISH imputation @jules

  • added harmonization content @chenling

  • fixing bugs on DE @romain

0.2.0 (2018-09-04)#

0.1.6 (2018-08-08)#

  • MMD and adversarial inference wrapper @eddie

  • Documentation @jeff

  • smFISH data imputation @max

0.1.5 (2018-07-24)#

0.1.3 (2018-06-22)#

0.1.2 (2018-06-13)#

0.1.0 (2017-09-05)#

  • First scVI TensorFlow version @romain