saezlab / liana-py

LIANA+: an all-in-one framework for cell-cell communication
http://liana-py.readthedocs.io/
GNU General Public License v3.0
163 stars 21 forks source link

CellChat AttributeError: 'SparseCSRView' object has no attribute 'A' #135

Open AmyOlex opened 2 months ago

AmyOlex commented 2 months ago

Describe the bug I am trying to run CellChat and I am getting a AttributeError: 'SparseCSRView' object has no attribute 'A'.

To Reproduce Here is the code to call the method. The "adata" is a Seurat object with the Data slot (log normalized) converted to an h5ad file using R and imported as an anndata formatted object in Python using the read_h5ad method. I was able to get CellPhoneDB method to run fine.

cellchat(adata, use_raw=False, groupby='cell_type',

NOTE by default the resource uses HUMAN gene symbols

        resource_name='consensus',
        expr_prop=0.25,
        verbose=True, key_added='cellchat_res')

Screenshots No screen shot, but here is the traceback:

AttributeError Traceback (most recent call last) Cell In[23], line 2 1 # run cellchat ----> 2 cellchat(adata, 3 use_raw=False, 4 groupby='cell_type', 5 # NOTE by default the resource uses HUMAN gene symbols 6 resource_name='consensus', 7 expr_prop=0.25, 8 verbose=True, key_added='cellchat_res')

File ~/anaconda3/envs/env_liana_p311/lib/python3.11/site-packages/liana/method/sc/_Method.py:244, in Method.call(self, adata, groupby, resource_name, expr_prop, min_cells, groupby_pairs, base, supp_columns, return_all_lrs, key_added, use_raw, layer, de_method, n_perms, seed, n_jobs, resource, interactions, mdata_kwargs, inplace, verbose) 241 if supp_columns is None: 242 supp_columns = [] --> 244 liana_res = liana_pipe(adata=adata, 245 groupby=groupby, 246 resource_name=resource_name, 247 resource=resource, 248 interactions=interactions, 249 expr_prop=expr_prop, 250 min_cells=min_cells, 251 supp_columns=supp_columns, 252 return_all_lrs=return_all_lrs, 253 groupby_pairs=groupby_pairs, 254 base=base, 255 de_method=de_method, 256 verbose=verbose, 257 _score=self._method, 258 n_perms=n_perms, 259 seed=seed, 260 n_jobs=n_jobs, 261 use_raw=use_raw, 262 layer=layer, 263 mdata_kwargs=mdata_kwargs 264 ) 265 if inplace: 266 adata.uns[key_added] = liana_res

File ~/anaconda3/envs/env_liana_p311/lib/python3.11/site-packages/liana/method/sc/_liana_pipe.py:171, in liana_pipe(adata, groupby, resource_name, resource, interactions, groupby_pairs, expr_prop, min_cells, base, de_method, n_perms, seed, verbose, use_raw, n_jobs, layer, supp_columns, return_all_lrs, _score, _methods, _consensus_opts, _aggregate_method, mdata_kwargs) 167 print(f"Generating ligand-receptor stats for {adata.shape[0]} samples " 168 f"and {adata.shape[1]} features") 170 # Get lr results --> 171 lr_res = _get_lr(adata=adata, 172 resource=resource, 173 groupby_pairs=groupby_pairs, 174 mat_mean=mat_mean, 175 mat_max=mat_max, 176 relevant_cols=_key_cols + _add_cols + _complex_cols, 177 de_method=de_method, 178 base=base, 179 verbose=verbose 180 ) 182 # Ligand and receptor score based on unfiltered cluster mean and cluster std. Handles protein complexes 183 if (M.ligand_cdf in _add_cols) or (M.receptor_cdf in _add_cols):

File ~/anaconda3/envs/env_liana_p311/lib/python3.11/site-packages/liana/method/sc/_liana_pipe.py:308, in _get_lr(adata, resource, groupby_pairs, relevant_cols, mat_mean, mat_max, de_method, base, verbose) 306 dedict[label]['logfc'] = _calc_log2fc(adata, label) 307 if isinstance(mat_max, np.float32): # cellchat flag --> 308 dedict[label]['trimean'] = _trimean(temp.X / mat_max) 310 pairs = (pd.DataFrame(np.array(np.meshgrid(labels, labels)) 311 .reshape(2, np.size(labels) * np.size(labels)).T) 312 .rename(columns={0: P.source, 1: P.target})) 314 if groupby_pairs is not None:

File ~/anaconda3/envs/env_liana_p311/lib/python3.11/site-packages/liana/method/sc/_liana_pipe.py:463, in _trimean(a, axis) 462 def _trimean(a, axis=0): --> 463 quantiles = np.quantile(a.A, q=[0.25, 0.75], axis=axis) 464 median = np.median(a.A, axis=axis) 465 return (quantiles[0] + 2 * median + quantiles[1]) / 4

AttributeError: 'SparseCSRView' object has no attribute 'A'

Thank you for any assistance!

dbdimitrov commented 2 months ago

Hi @AmyOlex,

This appears to be related to a scipy version. I will address in the following update but in the meantime, downgrading scipy to e.g. 1.10.1 will resolve it.

Daniel

Zach-Sten commented 1 month ago

downgrading scipy to 1.13.1 also fixes this if for some reason others need a more recent version of scipy.

AmyOlex commented 4 weeks ago

Thank you for the suggestions. I tried downgrading to v1.13.1, but that caused dependency conflicts with Numba. Installing v1.10.1 resolved all the issues though and CellChat is working now. Thanks!

dbdimitrov commented 2 weeks ago

I should double check this and make sure that it works with more recent scipy version