scverse / pertpy

Perturbation Analysis in the scverse ecosystem.
https://pertpy.readthedocs.io/en/latest/
MIT License
92 stars 19 forks source link

Can't import pertpy owing to NameError!!! #595

Closed kakkboy closed 1 month ago

kakkboy commented 1 month ago

Report

Hello! I have installed pertpy on my Mac (M2) successfully. But I can not import pertpy due to a NameError(see below).

截屏2024-05-16 00 43 45

Any help would be appreciated. Thank you! Alvin

截屏2024-05-16 00 59 31

Version information

No response

Zethson commented 1 month ago

That's the same error as https://github.com/theislab/pertpy/issues/593

I'll have a look at it ASAP!

kakkboy commented 1 month ago

IMPORT successfully after restarting my Mac. Thank you.

Zethson commented 1 month ago

Could you please paste the whole traceback if you encounter it again?

kakkboy commented 1 month ago

OK. It seems to encounter this error again. I will paste the whole traceback immediately.

kakkboy commented 1 month ago
截屏2024-05-16 22 15 18 截屏2024-05-16 22 18 07

src=NameError Traceback (most recent call last) Cell In[4], line 3 1 import scanpy as sc 2 import scvelo as scv ----> 3 import pertpy as pt

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pertpy/init.py:20 18 from . import plot as pl 19 from . import preprocessing as pp ---> 20 from . import tools as tl

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pertpy/tools/init.py:5 3 from pertpy.tools._coda._sccoda import Sccoda 4 from pertpy.tools._coda._tasccoda import Tasccoda ----> 5 from pertpy.tools._dialogue import Dialogue 6 from pertpy.tools._differential_gene_expression import DifferentialGeneExpression 7 from pertpy.tools._distances._distance_tests import DistanceTest

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pertpy/tools/_dialogue.py:25 23 from seaborn import PairGrid 24 from sklearn.linear_model import LinearRegression ---> 25 from sparsecca import lp_pmd, multicca_permute, multicca_pmd 26 from statsmodels.sandbox.stats.multicomp import multipletests 28 if TYPE_CHECKING:

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/sparsecca/init.py:5 3 from ._cca_pmd import cca as cca_pmd 4 from ._multicca_pmd import multicca as multicca_pmd ----> 5 from ._multicca_lp import lp_pmd 6 from ._multicca_pmd_permute import multicca_permute 7 from ._pmd import pmd

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/sparsecca/_multicca_lp.py:4 2 from scipy.linalg import svd 3 from collections import defaultdict ----> 4 import pyomo.environ as pyo 6 from ._utils_pmd import scale, preprocess_datasets 7 from ._utils_pmd import soft

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/environ/init.py:86 82 pkg = _sys.modules[pname] 83 pkg.load() ---> 86 _import_packages() 88 # 89 # Expose the symbols from pyomo.core 90 # 91 from pyomo.dataportal import DataPortal

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/environ/init.py:66, in _import_packages() 64 pname = _package + '.plugins' 65 try: ---> 66 _do_import(pname) 67 except ImportError: 68 exctype, err, tb = _sys.exc_info() # BUG?

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/environ/init.py:18, in _do_import(pkg_name) 17 def _do_import(pkg_name): ---> 18 importlib.import_module(pkg_name)

File /opt/miniconda3/envs/omicverse/lib/python3.10/importlib/init.py:126, in import_module(name, package) 124 break 125 level += 1 --> 126 return _bootstrap._gcd_import(name[level:], package, level)

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/core/init.py:27 12 from pyomo.core.expr.numvalue import ( 13 value, 14 is_constant, (...) 22 polynomial_degree, 23 ) 25 from pyomo.core.expr.boolean_value import BooleanValue ---> 27 from pyomo.core.expr import ( 28 linear_expression, 29 nonlinear_expression, 30 land, 31 lor, 32 equivalent, 33 exactly, 34 atleast, 35 atmost, 36 all_different, 37 count_if, 38 implies, 39 lnot, 40 xor, 41 inequality, 42 log, 43 log10, 44 sin, 45 cos, 46 tan, 47 cosh, 48 sinh, 49 tanh, 50 asin, 51 acos, 52 atan, 53 exp, 54 sqrt, 55 asinh, 56 acosh, 57 atanh, 58 ceil, 59 floor, 60 Expr_if, 61 ) 63 from pyomo.core.expr.calculus.derivatives import differentiate 64 from pyomo.core.expr.taylor_series import taylor_series_expansion

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/core/expr/init.py:203 157 from .template_expr import ( 158 GetItemExpression, 159 Numeric_GetItemExpression, (...) 183 templatize_constraint, 184 ) 185 from .visitor import ( 186 StreamBasedExpressionVisitor, 187 SimpleExpressionVisitor, (...) 200 sizeof_expression, 201 ) --> 203 from .calculus.derivatives import differentiate 204 from .taylor_series import taylor_series_expansion

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/core/expr/calculus/derivatives.py:13 1 # 2 # 3 # Pyomo: Python Optimization Modeling Objects (...) 9 # This software is distributed under the 3-clause BSD License. 10 # 12 import enum ---> 13 from .diff_with_sympy import differentiate as sympy_diff 14 from .diff_with_pyomo import reverse_sd, reverse_ad 17 class Modes(str, enum.Enum):

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/core/expr/calculus/diff_with_sympy.py:12 1 # _ 2 # 3 # Pyomo: Python Optimization Modeling Objects (...) 9 # This software is distributed under the 3-clause BSD License. 10 # _ ---> 12 from pyomo.core.expr.sympy_tools import ( 13 sympy_available, 14 sympyify_expression, 15 sympy2pyomo_expression, 16 ) 18 # A "public" attribute indicating that differentiate() can be called 19 # ... this provides a bit of future-proofing for alternative approaches 20 # to symbolic differentiation. 21 differentiate_available = sympy_available

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/core/expr/sympy_tools.py:113 73 _pyomo_operator_map.update( 74 { 75 EXPR.SumExpression: sympy.Add, (...) 86 } 87 ) 89 _functionMap.update( 90 { 91 'exp': sympy.exp, (...) 109 } 110 ) --> 113 sympy, sympy_available = attempt_import('sympy', callback=_configure_sympy) 116 if sys.version_info[:2] < (3, 8): 118 def _prod(args):

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/common/dependencies.py:738, in attempt_import(name, error_message, only_catch_importerror, minimum_version, alt_names, callback, importer, defer_check, defer_import, deferred_submodules, catch_exceptions) 735 if deferred_submodules: 736 raise ValueError("deferred_submodules is only valid if defer_import==True") --> 738 return _perform_import( 739 name=name, 740 error_message=error_message, 741 minimum_version=minimum_version, 742 callback=callback, 743 importer=importer, 744 catch_exceptions=catch_exceptions, 745 package=inspect.currentframe().f_back.f_globals.get('name', ''), 746 )

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/common/dependencies.py:768, in _perform_import(name, error_message, minimum_version, callback, importer, catch_exceptions, package) 766 if minimum_version is None or check_min_version(module, minimum_version): 767 if callback is not None: --> 768 callback(module, True) 769 return module, True 770 else:

File /opt/miniconda3/envs/omicverse/lib/python3.10/site-packages/pyomo/core/expr/sympy_tools.py:38, in _configure_sympy(sympy, available) 32 if not available: 33 return 35 _operatorMap.update( 36 { 37 sympy.Add: sum, ---> 38 sympy.Mul: _prod, 39 sympy.Pow: lambda x: operator.pow(x), 40 sympy.exp: lambda x: EXPR.exp(x), 41 sympy.log: lambda x: EXPR.log(x), 42 sympy.sin: lambda x: EXPR.sin(x), 43 sympy.asin: lambda x: EXPR.asin(x), 44 sympy.sinh: lambda x: EXPR.sinh(x), 45 sympy.asinh: lambda x: EXPR.asinh(x), 46 sympy.cos: lambda x: EXPR.cos(x), 47 sympy.acos: lambda x: EXPR.acos(x), 48 sympy.cosh: lambda x: EXPR.cosh(x), 49 sympy.acosh: lambda x: EXPR.acosh(x), 50 sympy.tan: lambda x: EXPR.tan(x), 51 sympy.atan: lambda x: EXPR.atan(x), 52 sympy.tanh: lambda x: EXPR.tanh(x), 53 sympy.atanh: lambda x: EXPR.atanh(x), 54 sympy.ceiling: lambda x: EXPR.ceil(x), 55 sympy.floor: lambda x: EXPR.floor(x), 56 sympy.sqrt: lambda x: EXPR.sqrt(x), 57 sympy.Abs: lambda x: abs(x), 58 sympy.Derivative: _nondifferentiable, 59 sympy.Tuple: lambda x: x, 60 sympy.Or: lambda x: EXPR.lor(x), 61 sympy.And: lambda x: EXPR.land(x), 62 sympy.Implies: lambda x: EXPR.implies(x), 63 sympy.Equivalent: lambda x: EXPR.equivalents(x), 64 sympy.Not: lambda x: EXPR.lnot(x), 65 sympy.LessThan: lambda x: operator.le(x), 66 sympy.StrictLessThan: lambda x: operator.lt(x), 67 sympy.GreaterThan: lambda x: operator.ge(x), 68 sympy.StrictGreaterThan: lambda x: operator.gt(x), 69 sympy.Equality: lambda x: operator.eq(*x), 70 } 71 ) 73 _pyomo_operator_map.update( 74 { 75 EXPR.SumExpression: sympy.Add, (...) 86 } 87 ) 89 _functionMap.update( 90 { 91 'exp': sympy.exp, (...) 109 } 110 )

NameError: name '_prod' is not defined"https://github.com/theislab/pertpy/assets/47292254/e6dbc6b7-a02c-4b88-9aa3-59569e526382">

aaronwtr commented 1 month ago

Hi, running into the same issue, will paste my error log here:

Loading python/3.10.7
  Loading requirement: openssl/1.1.1s

Loading cudnn/8.4.1-cuda11.6
  Loading requirement: cuda/11.6.2
[^[[36m2024-05-16 18:00:24,264^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Enforcing tags! <cfg.extras.enforce_tags=True>^[[0m
[^[[36m2024-05-16 18:00:24,270^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Printing config tree with Rich! <cfg.extras.print_config=True>^[[0m
[^[[36m2024-05-16 18:00:24,271^[[0m][^[[34msrc.utils.rich_utils^[[0m][^[[33mWARNING^[[0m] - [rank: 0] Field 'logger' not found in config. Skipping 'logger' config printing...^[[0m
CONFIG
├── data
│   └── _target_: src.data.perturb_datamodule.PertDataModule
│       data_dir: /data/home/bty174/scBench/data/splits/perturb
│       data_name: repogle_rpe1
"output.log" 212L, 15671C                                                                                                                                                                                        1,1           Top
Loading python/3.10.7
  Loading requirement: openssl/1.1.1s

Loading cudnn/8.4.1-cuda11.6
  Loading requirement: cuda/11.6.2
[^[[36m2024-05-16 18:00:24,264^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Enforcing tags! <cfg.extras.enforce_tags=True>^[[0m
[^[[36m2024-05-16 18:00:24,270^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Printing config tree with Rich! <cfg.extras.print_config=True>^[[0m
[^[[36m2024-05-16 18:00:24,271^[[0m][^[[34msrc.utils.rich_utils^[[0m][^[[33mWARNING^[[0m] - [rank: 0] Field 'logger' not found in config. Skipping 'logger' config printing...^[[0m
CONFIG
├── data
│   └── _target_: src.data.perturb_datamodule.PertDataModule
│       data_dir: /data/home/bty174/scBench/data/splits/perturb
│       data_name: repogle_rpe1
"output.log" 212L, 15671C                                                                                                                                                                                        1,1           Top
Loading python/3.10.7
  Loading requirement: openssl/1.1.1s

Loading cudnn/8.4.1-cuda11.6
  Loading requirement: cuda/11.6.2
[^[[36m2024-05-16 18:00:24,264^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Enforcing tags! <cfg.extras.enforce_tags=True>^[[0m
[^[[36m2024-05-16 18:00:24,270^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Printing config tree with Rich! <cfg.extras.print_config=True>^[[0m
[^[[36m2024-05-16 18:00:24,271^[[0m][^[[34msrc.utils.rich_utils^[[0m][^[[33mWARNING^[[0m] - [rank: 0] Field 'logger' not found in config. Skipping 'logger' config printing...^[[0m
CONFIG
├── data
│   └── _target_: src.data.perturb_datamodule.PertDataModule
│       data_dir: /data/home/bty174/scBench/data/splits/perturb
│       data_name: repogle_rpe1
│       batch_size: 32
│       spectra_parameters:
│         number_repeats: 3
                                                                                                                                                                                                                 1,1           Top
Loading python/3.10.7
  Loading requirement: openssl/1.1.1s

Loading cudnn/8.4.1-cuda11.6
  Loading requirement: cuda/11.6.2
[^[[36m2024-05-16 18:00:24,264^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Enforcing tags! <cfg.extras.enforce_tags=True>^[[0m
[^[[36m2024-05-16 18:00:24,270^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Printing config tree with Rich! <cfg.extras.print_config=True>^[[0m
[^[[36m2024-05-16 18:00:24,271^[[0m][^[[34msrc.utils.rich_utils^[[0m][^[[33mWARNING^[[0m] - [rank: 0] Field 'logger' not found in config. Skipping 'logger' config printing...^[[0m
CONFIG
├── data
│   └── _target_: src.data.perturb_datamodule.PertDataModule
│       data_dir: /data/home/bty174/scBench/data/splits/perturb
│       data_name: repogle_rpe1
│       batch_size: 32
│       spectra_parameters:
│         number_repeats: 3
│         random_seed:
│         - 42
│         - 44
│         - 46
│         sparsification_step: 0.1
│         force_reconstruct: true
│       split: '0.00_0'
│       num_workers: 0
│       pin_memory: false
│
├── model
│   └── _target_: src.models.gears_module.GEARSLitModule
│       net:
│         _target_: src.models.reproduction.gears.gears.GEARSNetwork
│         hidden_size: 64
│         num_go_gnn_layers: 1
│         num_gene_gnn_layers: 1
│         decoder_hidden_size: 16
│         num_similar_genes_go_graph: 20
│         num_similar_genes_co_express_graph: 20
│         coexpress_threshold: 0.4
│         uncertainty: false
│         uncertainty_reg: 1
│         direction_lambda: 0.1
│         G_go: null
│         G_go_weight: null
│         G_coexpress: null
│         G_coexpress_weight: null
│         no_perturb: false
│         pert_emb_lambda: 0.2
│         num_genes: 5045
│         num_perts: 9853
│       pertmodule:
│         _target_: src.data.perturb_datamodule.PertDataModule
│       optimizer:
│         _target_: torch.optim.Adam
│         _partial_: true
│         lr: 0.001
│         weight_decay: 0.0005
│       scheduler:
│         _target_: torch.optim.lr_scheduler.StepLR
│         _partial_: true
│         step_size: 1
│         gamma: 0.5
│       model_name: gears
│       compile: false
│
├── callbacks
│   └── model_checkpoint:
│         _target_: lightning.pytorch.callbacks.ModelCheckpoint
│         dirpath: /data/home/bty174/scBench/logs/train/runs/2024-05-16_18-00-23
│         filename: best_model_at_epoch_{epoch:03d}
│         monitor: null
│         verbose: false
│         save_last: true
│         save_top_k: 1
│         mode: max
│         auto_insert_metric_name: false
│         save_weights_only: false
│         every_n_train_steps: null
│         train_time_interval: null
│         every_n_epochs: null
│         save_on_train_epoch_end: null
│       model_summary:
│         _target_: lightning.pytorch.callbacks.RichModelSummary
│         max_depth: -1
│
├── trainer
│   └── _target_: lightning.pytorch.trainer.Trainer
│       default_root_dir: /data/home/bty174/scBench/logs/train/runs/2024-05-16_1
│       min_epochs: 1
│       max_epochs: 20
│       accelerator: cpu
│       devices: 1
│       num_sanity_val_steps: 0
│       check_val_every_n_epoch: 1
│       deterministic: false
│
├── paths
│   └── root_dir: /data/home/bty174/scBench
│       data_dir: /data/home/bty174/scBench/data/splits/perturb
│       log_dir: /data/home/bty174/scBench/logs/
│       output_dir: /data/home/bty174/scBench/logs/train/runs/2024-05-16_18-00-2
│       work_dir: /data/home/bty174/scBench
│
├── extras
│   └── ignore_warnings: false
│       enforce_tags: true
│       print_config: true
│
├── task_name
│   └── train
├── tags
│   └── ['dev']
├── train
│   └── True
├── test
│   └── True
├── ckpt_path
│   └── None
└── seed
    └── None
[^[[36m2024-05-16 18:00:24,402^[[0m][^[[34m__main__^[[0m][^[[32mINFO^[[0m] - [rank: 0] Instantiating datamodule <src.data.perturb_datamodule.PertDataModule>^[[0m
[^[[36m2024-05-16 18:00:32,304^[[0m][^[[34mnumexpr.utils^[[0m][^[[32mINFO^[[0m] - Note: NumExpr detected 48 cores but "NUMEXPR_MAX_THREADS" not set, so enforcing safe limit of 8.^[[0m
[^[[36m2024-05-16 18:01:12,350^[[0m][^[[34msrc.utils.utils^[[0m][^[[31mERROR^[[0m] - [rank: 0] ^[[0m
Traceback (most recent call last):
  File "/data/home/bty174/.local/lib/python3.10/site-packages/hydra/_internal/utils.py", line 644, in _locate
    obj = getattr(obj, part)
AttributeError: module 'src.data' has no attribute 'perturb_datamodule'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/data/home/bty174/.local/lib/python3.10/site-packages/hydra/_internal/utils.py", line 650, in _locate
    obj = import_module(mod)
  File "/share/apps/centos7/python/gcc/12.1.0/3.10.7/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/data/home/bty174/scBench/src/data/perturb_datamodule.py", line 4, in <module>
    from pertpy import data as scpert_data
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pertpy/__init__.py", line 18, in <module>
    from . import plot as pl
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pertpy/plot/__init__.py", line 2, in <module>
    from pertpy.plot._coda import CodaPlot as coda
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pertpy/plot/_coda.py", line 13, in <module>
    from pertpy.tools._coda._base_coda import CompositionalModel2
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pertpy/tools/__init__.py", line 5, in <module>
    from pertpy.tools._dialogue import Dialogue
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pertpy/tools/_dialogue.py", line 25, in <module>
    from sparsecca import lp_pmd, multicca_permute, multicca_pmd
  File "/data/home/bty174/.local/lib/python3.10/site-packages/sparsecca/__init__.py", line 5, in <module>
    from ._multicca_lp import lp_pmd
  File "/data/home/bty174/.local/lib/python3.10/site-packages/sparsecca/_multicca_lp.py", line 4, in <module>
    import pyomo.environ as pyo
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/environ/__init__.py", line 86, in <module>
    _import_packages()
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/environ/__init__.py", line 66, in _import_packages
    _do_import(pname)
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/environ/__init__.py", line 18, in _do_import
    importlib.import_module(pkg_name)
  File "/share/apps/centos7/python/gcc/12.1.0/3.10.7/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/core/__init__.py", line 12, in <module>
    from pyomo.core.expr.numvalue import (
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/core/expr/__init__.py", line 203, in <module>
    from .calculus.derivatives import differentiate
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/core/expr/calculus/derivatives.py", line 13, in <module>
    from .diff_with_sympy import differentiate as sympy_diff
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/core/expr/calculus/diff_with_sympy.py", line 12, in <module>
    from pyomo.core.expr.sympy_tools import (
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/core/expr/sympy_tools.py", line 113, in <module>
    sympy, sympy_available = attempt_import('sympy', callback=_configure_sympy)
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/common/dependencies.py", line 738, in attempt_import
    return _perform_import(
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/common/dependencies.py", line 768, in _perform_import
    callback(module, True)
  File "/data/home/bty174/.local/lib/python3.10/site-packages/pyomo/core/expr/sympy_tools.py", line 38, in _configure_sympy
    sympy.Mul: _prod,
NameError: name '_prod' is not defined

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/data/home/bty174/.local/lib/python3.10/site-packages/hydra/_internal/instantiate/_instantiate2.py", line 134, in _resolve_target
    target = _locate(target)
  File "/data/home/bty174/.local/lib/python3.10/site-packages/hydra/_internal/utils.py", line 658, in _locate
    raise ImportError(
ImportError: Error loading 'src.data.perturb_datamodule.PertDataModule':
NameError("name '_prod' is not defined")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/data/home/bty174/scBench/src/utils/utils.py", line 77, in wrap
    metric_dict, object_dict = task_func(cfg=cfg)
  File "/data/home/bty174/scBench/src/train.py", line 61, in train
    datamodule: LightningDataModule = hydra.utils.instantiate(cfg.data)
  File "/data/home/bty174/.local/lib/python3.10/site-packages/hydra/_internal/instantiate/_instantiate2.py", line 226, in instantiate
    return instantiate_node(
  File "/data/home/bty174/.local/lib/python3.10/site-packages/hydra/_internal/instantiate/_instantiate2.py", line 333, in instantiate_node
    _target_ = _resolve_target(node.get(_Keys.TARGET), full_key)
  File "/data/home/bty174/.local/lib/python3.10/site-packages/hydra/_internal/instantiate/_instantiate2.py", line 139, in _resolve_target
    raise InstantiationException(msg) from e
hydra.errors.InstantiationException: Error locating target 'src.data.perturb_datamodule.PertDataModule', set env var HYDRA_FULL_ERROR=1 to see chained exception.
full_key: data
[^[[36m2024-05-16 18:01:12,695^[[0m][^[[34msrc.utils.utils^[[0m][^[[32mINFO^[[0m] - [rank: 0] Output dir: /data/home/bty174/scBench/logs/train/runs/2024-05-16_18-00-23^[[0m
Error executing job with overrides: []
Error locating target 'src.data.perturb_datamodule.PertDataModule', set env var HYDRA_FULL_ERROR=1 to see chained exception.
full_key: data

Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.
                                                                                                                                                                                                                 212,1         Bot