I tried the scArches for scVI and it worked fine. However, I got errors when I used scArches for scANVI, it did not work. could you please see where might be wrong?
code:
# scANVI arches
# start from scvi model as trained for scArches above.
scvi_model=scvi.model.SCVI.load("scvi-model_nb_scArches", adata_ref)
SCANVI_LABELS_KEY = "C_scANVI"
adata_ref.obs[SCANVI_LABELS_KEY] = adata_ref.obs["celltype_manual"].values
scanvi_model=scvi.model.SCANVI.from_scvi_model(scvi_model,unlabeled_category="Unknown",labels_key=SCANVI_LABELS_KEY)
scvi.settings.seed = 0
torch.set_float32_matmul_precision("high")
scanvi_model.train(max_epochs=20, n_samples_per_label=100)
scvi.model.SCANVI.prepare_query_anndata(adata_query, scanvi_model)
#INFO Found 100.0% reference vars in query data.
scanvi_query = scvi.model.SCANVI.load_query_data(adata_query, scanvi_model)
ValueError Traceback (most recent call last)
Cell In[44], line 1
----> 1 scanvi_query = scvi.model.SCANVI.load_query_data(adata_query, scanvi_model)
File /usrs/conda/envs/scvi-env/lib/python3.12/site-packages/scvi/model/base/_archesmixin.py:123, in ArchesMixin.load_query_data(cls, adata, reference_model, inplace_subset_query_vars, accelerator, device, unfrozen, freeze_dropout, freeze_expression, freeze_decoder_first_layer, freeze_batchnorm_encoder, freeze_batchnorm_decoder, freeze_classifier)
117 raise ValueError(
118 "Saved model does not contain original setup inputs. "
119 “Cannot load the original setup.”
120 )
122 setup_method = getattr(cls, registry[_SETUP_METHOD_NAME])
→ 123 setup_method(
124 adata,
125 source_registry=registry,
126 extend_categories=True,
127 allow_missing_labels=True,
128 **registry[_SETUP_ARGS_KEY],
129 )
131 model = _initialize_model(cls, adata, attr_dict)
132 adata_manager = model.get_anndata_manager(adata, required=True)
File /usrs/conda/envs/scvi-env/lib/python3.12/site-packages/scvi/model/_scanvi.py:486, in SCANVI.setup_anndata(cls, adata, labels_key, unlabeled_category, layer, batch_key, size_factor_key, categorical_covariate_keys, continuous_covariate_keys, **kwargs)
484 anndata_fields += cls._get_fields_for_adata_minification(adata_minify_type)
485 adata_manager = AnnDataManager(fields=anndata_fields, setup_method_args=setup_method_args)
→ 486 adata_manager.register_fields(adata, **kwargs)
487 cls.register_manager(adata_manager)
File /usrs/conda/envs/scvi-env/lib/python3.12/site-packages/scvi/data/_manager.py:186, in AnnDataManager.register_fields(self, adata, source_registry, **transfer_kwargs)
183 self._validate_anndata_object(adata)
185 for field in self.fields:
→ 186 self._add_field(
187 field=field,
188 adata=adata,
189 source_registry=source_registry,
190 **transfer_kwargs,
191 )
193 # Save arguments for register_fields.
194 self._source_registry = deepcopy(source_registry)
File /usrs/conda/envs/scvi-env/lib/python3.12/site-packages/scvi/data/_manager.py:221, in AnnDataManager._add_field(self, field, adata, source_registry, **transfer_kwargs)
218 if not field.is_empty:
219 # Transfer case: Source registry is used for validation and/or setup.
220 if source_registry is not None:
→ 221 field_registry[_constants._STATE_REGISTRY_KEY] = field.transfer_field(
222 source_registry[_constants._FIELD_REGISTRIES_KEY][field.registry_key][
223 _constants._STATE_REGISTRY_KEY
224 ],
225 adata,
226 **transfer_kwargs,
227 )
228 else:
229 field_registry[_constants._STATE_REGISTRY_KEY] = field.register_field(adata)
File /usrs/conda/envs/scvi-env/lib/python3.12/site-packages/scvi/data/fields/_scanvi.py:105, in LabelsWithUnlabeledObsField.transfer_field(self, state_registry, adata_target, allow_missing_labels, **kwargs)
103 if ec in kwargs:
104 kwargs.pop(ec)
→ 105 transfer_state_registry = super().transfer_field(
106 state_registry, adata_target, extend_categories=False, **kwargs
107 )
108 mapping = transfer_state_registry[self.CATEGORICAL_MAPPING_KEY]
109 return self._remap_unlabeled_to_final_category(adata_target, mapping)
File /usrs/conda/envs/scvi-env/lib/python3.12/site-packages/scvi/data/fields/_dataframe_field.py:219, in CategoricalDataFrameField.transfer_field(self, state_registry, adata_target, extend_categories, **kwargs)
217 mapping = np.concatenate([mapping, [c]])
218 else:
→ 219 raise ValueError(
220 f"Category {c} not found in source registry. "
221 f"Cannot transfer setup without extend_categories = True
."
222 )
223 cat_dtype = CategoricalDtype(categories=mapping, ordered=True)
224 new_mapping = _make_column_categorical(
225 getattr(adata_target, self.attr_name),
226 self._original_attr_key,
227 self.attr_key,
228 categorical_dtype=cat_dtype,
229 )
ValueError: Category nan not found in source registry. Cannot transfer setup without extend_categories = True
.