JCVenterInstitute / NSForest

A machine learning method for the discovery of the minimum marker gene combinations for cell type identification from single-cell RNA sequencing
MIT License
53 stars 20 forks source link

Nodes are not implemented error when running NSForest #9

Closed jhkliu42 closed 3 months ago

jhkliu42 commented 2 years ago

I successfully installed NSForest and am running it as outlined in the readme: adata_markers = NS_Forest(adata, clusterLabelcolumnHeader = 'Leiden_annotation')

I'm getting the following error (see below for copy of error) in Pandas when running, though. Is there a solution to this?

 ---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
/tmp/ipykernel_151703/3993040988.py in <module>
      1 # Run NS_Forest
----> 2 adata_markers = NS_Forest(adata, clusterLabelcolumnHeader = 'Leiden_annotation')
      3 
      4 # Get list of minimal markers
      5 Markers = list(itertools.chain.from_iterable(adata_markers['NSForest_Markers']))

/mnt/ibm_lg/spatial-seq/gene_panel_tools/NSForest/NSForest_v3.py in NS_Forest(adata, clusterLabelcolumnHeader, rfTrees, Median_Expression_Level, Genes_to_testing, betaValue)
    216         FullpermutationList = permutor(queryInequalities)
    217         print(len(FullpermutationList))
--> 218         f1_store = fbetaTest(FullpermutationList, column, adata, Binary_RankedList, testArray, betaValue)
    219         f1_store_1D.update(f1_store)
    220 

/mnt/ibm_lg/spatial-seq/gene_panel_tools/NSForest/NSForest_v3.py in fbetaTest(x, column, adata, Binary_RankedList, testArray, betaValue)
    125             testArray['y_pred'] = 0
    126             betaQuery = '&'.join(list)
--> 127             Ineq1 = Subset_dataframe.query(betaQuery)
    128             testList = Ineq1.index.tolist()
    129             testArray.loc[testList, 'y_pred'] = 1

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/frame.py in query(self, expr, inplace, **kwargs)
   4053         kwargs["level"] = kwargs.pop("level", 0) + 1
   4054         kwargs["target"] = None
-> 4055         res = self.eval(expr, **kwargs)
   4056 
   4057         try:

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/frame.py in eval(self, expr, inplace, **kwargs)
   4184         kwargs["resolvers"] = kwargs.get("resolvers", ()) + tuple(resolvers)
   4185 
-> 4186         return _eval(expr, inplace=inplace, **kwargs)
   4187 
   4188     def select_dtypes(self, include=None, exclude=None) -> DataFrame:

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/computation/eval.py in eval(expr, parser, engine, truediv, local_dict, global_dict, resolvers, level, target, inplace)
    346         )
    347 
--> 348         parsed_expr = Expr(expr, engine=engine, parser=parser, env=env)
    349 
    350         # construct the engine and evaluate the parsed expression

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/computation/expr.py in __init__(self, expr, engine, parser, env, level)
    804         self.parser = parser
    805         self._visitor = PARSERS[parser](self.env, self.engine, self.parser)
--> 806         self.terms = self.parse()
    807 
    808     @property

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/computation/expr.py in parse(self)
    823         Parse an expression.
    824         """
--> 825         return self._visitor.visit(self.expr)
    826 
    827     @property

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/computation/expr.py in visit(self, node, **kwargs)
    409         method = "visit_" + type(node).__name__
    410         visitor = getattr(self, method)
--> 411         return visitor(node, **kwargs)
    412 
    413     def visit_Module(self, node, **kwargs):

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/computation/expr.py in visit_Module(self, node, **kwargs)
    415             raise SyntaxError("only a single expression is allowed")
    416         expr = node.body[0]
--> 417         return self.visit(expr, **kwargs)
    418 
    419     def visit_Expr(self, node, **kwargs):

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/computation/expr.py in visit(self, node, **kwargs)
    409         method = "visit_" + type(node).__name__
    410         visitor = getattr(self, method)
--> 411         return visitor(node, **kwargs)
    412 
    413     def visit_Module(self, node, **kwargs):

~/miniconda3/envs/jupyter/lib/python3.9/site-packages/pandas/core/computation/expr.py in f(self, *args, **kwargs)
    261 
    262     def f(self, *args, **kwargs):
--> 263         raise NotImplementedError(f"'{node_name}' nodes are not implemented")
    264 
    265     return f

NotImplementedError: 'AnnAssign' nodes are not implemented 
yunzhang813 commented 3 months ago

Thanks of the ticket. Code refactored in v4.0.