omnigenome 0.0.1b0__tar.gz → 0.3.3a0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of omnigenome might be problematic. Click here for more details.
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/PKG-INFO +2 -3
- omnigenome-0.3.3a0/omnigenome/__init__.py +252 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/omnigenome.egg-info/PKG-INFO +2 -3
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/omnigenome.egg-info/SOURCES.txt +1 -0
- omnigenome-0.3.3a0/omnigenome.egg-info/entry_points.txt +3 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/omnigenome.egg-info/requires.txt +1 -2
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/setup_omnigenome.py +7 -3
- omnigenome-0.0.1b0/omnigenome/__init__.py +0 -26
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/LICENSE +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/omnigenome.egg-info/dependency_links.txt +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/omnigenome.egg-info/top_level.txt +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/setup.cfg +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/setup.py +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/tests/test_dataset_patterns.py +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/tests/test_examples_syntax.py +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/tests/test_model_loading.py +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/tests/test_rna_functions.py +0 -0
- {omnigenome-0.0.1b0 → omnigenome-0.3.3a0}/tests/test_training_patterns.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omnigenome
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.3a0
|
|
4
4
|
Summary: OmniGenome: A comprehensive toolkit for genome analysis.
|
|
5
5
|
Home-page: https://github.com/yangheng95/OmniGenBench
|
|
6
6
|
Author: Yang, Heng
|
|
@@ -20,6 +20,7 @@ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
|
20
20
|
Requires-Python: >=3.10
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE
|
|
23
|
+
Requires-Dist: omnigenbench>=0.3.0
|
|
23
24
|
Requires-Dist: findfile>=2.0.0
|
|
24
25
|
Requires-Dist: autocuda>=0.16
|
|
25
26
|
Requires-Dist: metric-visualizer>=0.9.6
|
|
@@ -34,8 +35,6 @@ Requires-Dist: transformers>=4.46.0
|
|
|
34
35
|
Requires-Dist: packaging
|
|
35
36
|
Requires-Dist: peft
|
|
36
37
|
Requires-Dist: dill
|
|
37
|
-
Requires-Dist: accelerate
|
|
38
|
-
Requires-Dist: omnigenbench>=0.3.2alpha
|
|
39
38
|
Provides-Extra: dev
|
|
40
39
|
Requires-Dist: dill; extra == "dev"
|
|
41
40
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# file: __init__.py
|
|
3
|
+
# time: 14:53 06/04/2024
|
|
4
|
+
# author: YANG, HENG <hy345@exeter.ac.uk> (杨恒)
|
|
5
|
+
# github: https://github.com/yangheng95
|
|
6
|
+
# huggingface: https://huggingface.co/yangheng
|
|
7
|
+
# google scholar: https://scholar.google.com/citations?user=NPq5a_0AAAAJ&hl=en
|
|
8
|
+
# Copyright (C) 2019-2024. All Rights Reserved.
|
|
9
|
+
|
|
10
|
+
"""
|
|
11
|
+
OmniGenome - Alias package for omnigenbench
|
|
12
|
+
===========================================
|
|
13
|
+
|
|
14
|
+
This package provides the same functionality as omnigenbench but with the omnigenome name.
|
|
15
|
+
All imports are redirected to the omnigenbench package.
|
|
16
|
+
|
|
17
|
+
For backward compatibility, this package maintains the same API as omnigenbench.
|
|
18
|
+
"""
|
|
19
|
+
from omnigenbench import __version__
|
|
20
|
+
|
|
21
|
+
# Package metadata (define locally to avoid circular imports)
|
|
22
|
+
__name__ = "omnigenome"
|
|
23
|
+
__version__ = __version__
|
|
24
|
+
__author__ = "Yang, Heng"
|
|
25
|
+
__email__ = "yangheng2021@gmail.com"
|
|
26
|
+
__license__ = "Apache-2.0"
|
|
27
|
+
|
|
28
|
+
import warnings
|
|
29
|
+
|
|
30
|
+
warnings.warn(
|
|
31
|
+
"The 'omnigenome' package is deprecated, please use omnigenbench package instead. "
|
|
32
|
+
"e.g., from omnigenome import * -> from omnigenbench import *\n"
|
|
33
|
+
"All imports from omnigenome will be redirected to omnigenbench. ",
|
|
34
|
+
DeprecationWarning,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Import strategy: Try to import from omnigenbench with proper error handling
|
|
38
|
+
try:
|
|
39
|
+
# Import core auto components
|
|
40
|
+
from omnigenbench.auto.auto_bench.auto_bench import AutoBench
|
|
41
|
+
from omnigenbench.auto.config.auto_config import AutoConfig
|
|
42
|
+
from omnigenbench.auto.bench_hub.bench_hub import BenchHub
|
|
43
|
+
from omnigenbench.auto.auto_train.auto_train import AutoTrain
|
|
44
|
+
from omnigenbench.auto.auto_bench.auto_bench_cli import run_bench, bench_command
|
|
45
|
+
from omnigenbench.auto.auto_train.auto_train_cli import run_train, train_command
|
|
46
|
+
|
|
47
|
+
# Import source modules
|
|
48
|
+
from omnigenbench.src import dataset, metric, model, tokenizer
|
|
49
|
+
|
|
50
|
+
# Import abstract base classes
|
|
51
|
+
from omnigenbench.src.abc.abstract_dataset import OmniDataset
|
|
52
|
+
from omnigenbench.src.abc.abstract_metric import OmniMetric
|
|
53
|
+
from omnigenbench.src.abc.abstract_model import OmniModel
|
|
54
|
+
from omnigenbench.src.abc.abstract_tokenizer import OmniTokenizer
|
|
55
|
+
|
|
56
|
+
# Import dataset classes
|
|
57
|
+
from omnigenbench.src.dataset.omni_dataset import (
|
|
58
|
+
OmniDatasetForSequenceClassification,
|
|
59
|
+
OmniDatasetForSequenceRegression,
|
|
60
|
+
OmniDatasetForTokenClassification,
|
|
61
|
+
OmniDatasetForTokenRegression,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
# Import metric classes
|
|
65
|
+
from omnigenbench.src.metric import (
|
|
66
|
+
ClassificationMetric,
|
|
67
|
+
RegressionMetric,
|
|
68
|
+
RankingMetric,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Import utility functions
|
|
72
|
+
from omnigenbench.src.misc.utils import (
|
|
73
|
+
clean_temp_dir_pt_files,
|
|
74
|
+
fprint,
|
|
75
|
+
seed_everything,
|
|
76
|
+
save_args,
|
|
77
|
+
naive_secondary_structure_repair,
|
|
78
|
+
check_bench_version,
|
|
79
|
+
clean_temp_checkpoint,
|
|
80
|
+
print_args,
|
|
81
|
+
env_meta_info,
|
|
82
|
+
RNA2StructureCache,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Import model classes
|
|
86
|
+
from omnigenbench.src.model import (
|
|
87
|
+
OmniModelForSequenceClassification,
|
|
88
|
+
OmniModelForMultiLabelSequenceClassification,
|
|
89
|
+
OmniModelForTokenClassification,
|
|
90
|
+
OmniModelForSequenceRegression,
|
|
91
|
+
OmniModelForTokenRegression,
|
|
92
|
+
OmniModelForStructuralImputation,
|
|
93
|
+
OmniModelForMatrixRegression,
|
|
94
|
+
OmniModelForMatrixClassification,
|
|
95
|
+
OmniModelForMLM,
|
|
96
|
+
OmniModelForSeq2Seq,
|
|
97
|
+
OmniModelForRNADesign,
|
|
98
|
+
OmniModelForEmbedding,
|
|
99
|
+
OmniModelForAugmentation,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
# Import LoRA model
|
|
103
|
+
from omnigenbench.src.lora.lora_model import OmniLoraModel
|
|
104
|
+
|
|
105
|
+
# Import tokenizer classes
|
|
106
|
+
from omnigenbench.src.tokenizer import (
|
|
107
|
+
OmniBPETokenizer,
|
|
108
|
+
OmniKmersTokenizer,
|
|
109
|
+
OmniSingleNucleotideTokenizer,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
# Import trainer classes
|
|
113
|
+
from omnigenbench.src.trainer.hf_trainer import HFTrainer
|
|
114
|
+
from omnigenbench.src.trainer.trainer import Trainer
|
|
115
|
+
from omnigenbench.src.trainer.accelerate_trainer import AccelerateTrainer
|
|
116
|
+
|
|
117
|
+
# Import hub utilities
|
|
118
|
+
from omnigenbench.utility.hub_utils import (
|
|
119
|
+
download_benchmark,
|
|
120
|
+
download_model,
|
|
121
|
+
download_pipeline,
|
|
122
|
+
query_models_info,
|
|
123
|
+
)
|
|
124
|
+
from omnigenbench.utility import hub_utils
|
|
125
|
+
|
|
126
|
+
# Import hub classes
|
|
127
|
+
from omnigenbench.utility.model_hub.model_hub import ModelHub
|
|
128
|
+
from omnigenbench.utility.dataset_hub.dataset_hub import load_benchmark_datasets
|
|
129
|
+
from omnigenbench.utility.pipeline_hub.pipeline import Pipeline
|
|
130
|
+
from omnigenbench.utility.pipeline_hub.pipeline_hub import PipelineHub
|
|
131
|
+
|
|
132
|
+
# Import module utilities
|
|
133
|
+
from omnigenbench.src.model.module_utils import OmniPooling
|
|
134
|
+
from omnigenbench.utility.ensemble import VoteEnsemblePredictor
|
|
135
|
+
|
|
136
|
+
# For backward compatibility version 0.2.7alpha and earlier
|
|
137
|
+
from omnigenbench.auto.config.auto_config import AutoBenchConfig
|
|
138
|
+
|
|
139
|
+
# Create backward compatibility aliases
|
|
140
|
+
OmniGenomeTokenizer = OmniTokenizer
|
|
141
|
+
OmniGenomeKmersTokenizer = OmniKmersTokenizer
|
|
142
|
+
OmniGenomeSingleNucleotideTokenizer = OmniSingleNucleotideTokenizer
|
|
143
|
+
OmniGenomeBPETokenizer = OmniBPETokenizer
|
|
144
|
+
OmniGenomeDataset = OmniDataset
|
|
145
|
+
OmniGenomeMetric = OmniMetric
|
|
146
|
+
OmniGenomeModel = OmniModel
|
|
147
|
+
OmniGenomeDatasetForSequenceClassification = OmniDatasetForSequenceClassification
|
|
148
|
+
OmniGenomeDatasetForSequenceRegression = OmniDatasetForSequenceRegression
|
|
149
|
+
OmniGenomeDatasetForTokenClassification = OmniDatasetForTokenClassification
|
|
150
|
+
OmniGenomeDatasetForTokenRegression = OmniDatasetForTokenRegression
|
|
151
|
+
OmniGenomeLoraModel = OmniLoraModel
|
|
152
|
+
OmniGenomeModelForSequenceClassification = OmniModelForSequenceClassification
|
|
153
|
+
OmniGenomeModelForMultiLabelSequenceClassification = (
|
|
154
|
+
OmniModelForMultiLabelSequenceClassification
|
|
155
|
+
)
|
|
156
|
+
OmniGenomeModelForTokenClassification = OmniModelForTokenClassification
|
|
157
|
+
OmniGenomeModelForSequenceRegression = OmniModelForSequenceRegression
|
|
158
|
+
OmniGenomeModelForTokenRegression = OmniModelForTokenRegression
|
|
159
|
+
OmniGenomeModelForStructuralImputation = OmniModelForStructuralImputation
|
|
160
|
+
OmniGenomeModelForMatrixRegression = OmniModelForMatrixRegression
|
|
161
|
+
OmniGenomeModelForMatrixClassification = OmniModelForMatrixClassification
|
|
162
|
+
OmniGenomeModelForMLM = OmniModelForMLM
|
|
163
|
+
OmniGenomeModelForSeq2Seq = OmniModelForSeq2Seq
|
|
164
|
+
OmniGenomeModelForRNADesign = OmniModelForRNADesign
|
|
165
|
+
OmniGenomeModelForEmbedding = OmniModelForEmbedding
|
|
166
|
+
OmniGenomeModelForAugmentation = OmniModelForAugmentation
|
|
167
|
+
|
|
168
|
+
# Define __all__ for explicit exports
|
|
169
|
+
__all__ = [
|
|
170
|
+
"load_benchmark_datasets",
|
|
171
|
+
"OmniDataset",
|
|
172
|
+
"OmniModel",
|
|
173
|
+
"OmniMetric",
|
|
174
|
+
"OmniTokenizer",
|
|
175
|
+
"OmniKmersTokenizer",
|
|
176
|
+
"OmniSingleNucleotideTokenizer",
|
|
177
|
+
"OmniBPETokenizer",
|
|
178
|
+
"ModelHub",
|
|
179
|
+
"Pipeline",
|
|
180
|
+
"PipelineHub",
|
|
181
|
+
"BenchHub",
|
|
182
|
+
"AutoBench",
|
|
183
|
+
"AutoTrain",
|
|
184
|
+
"AutoConfig",
|
|
185
|
+
"ClassificationMetric",
|
|
186
|
+
"RegressionMetric",
|
|
187
|
+
"RankingMetric",
|
|
188
|
+
"Trainer",
|
|
189
|
+
"HFTrainer",
|
|
190
|
+
"AccelerateTrainer",
|
|
191
|
+
"AutoBenchConfig",
|
|
192
|
+
"download_benchmark",
|
|
193
|
+
"download_model",
|
|
194
|
+
"download_pipeline",
|
|
195
|
+
"VoteEnsemblePredictor",
|
|
196
|
+
"clean_temp_dir_pt_files",
|
|
197
|
+
"fprint",
|
|
198
|
+
"seed_everything",
|
|
199
|
+
"save_args",
|
|
200
|
+
"naive_secondary_structure_repair",
|
|
201
|
+
"check_bench_version",
|
|
202
|
+
"clean_temp_checkpoint",
|
|
203
|
+
"print_args",
|
|
204
|
+
"env_meta_info",
|
|
205
|
+
"RNA2StructureCache",
|
|
206
|
+
# OmniGenome* aliases for backward compatibility
|
|
207
|
+
"OmniGenomeTokenizer",
|
|
208
|
+
"OmniGenomeKmersTokenizer",
|
|
209
|
+
"OmniGenomeSingleNucleotideTokenizer",
|
|
210
|
+
"OmniGenomeBPETokenizer",
|
|
211
|
+
"OmniGenomeDataset",
|
|
212
|
+
"OmniGenomeMetric",
|
|
213
|
+
"OmniGenomeModel",
|
|
214
|
+
"OmniGenomeDatasetForSequenceClassification",
|
|
215
|
+
"OmniGenomeDatasetForSequenceRegression",
|
|
216
|
+
"OmniGenomeDatasetForTokenClassification",
|
|
217
|
+
"OmniGenomeDatasetForTokenRegression",
|
|
218
|
+
"OmniGenomeLoraModel",
|
|
219
|
+
"OmniGenomeModelForSequenceClassification",
|
|
220
|
+
"OmniGenomeModelForMultiLabelSequenceClassification",
|
|
221
|
+
"OmniGenomeModelForTokenClassification",
|
|
222
|
+
"OmniGenomeModelForSequenceRegression",
|
|
223
|
+
"OmniGenomeModelForTokenRegression",
|
|
224
|
+
"OmniGenomeModelForStructuralImputation",
|
|
225
|
+
"OmniGenomeModelForMatrixRegression",
|
|
226
|
+
"OmniGenomeModelForMatrixClassification",
|
|
227
|
+
"OmniGenomeModelForMLM",
|
|
228
|
+
"OmniGenomeModelForSeq2Seq",
|
|
229
|
+
"OmniGenomeModelForRNADesign",
|
|
230
|
+
"OmniGenomeModelForEmbedding",
|
|
231
|
+
"OmniGenomeModelForAugmentation",
|
|
232
|
+
# Command line functions
|
|
233
|
+
"run_bench",
|
|
234
|
+
"bench_command",
|
|
235
|
+
"run_train",
|
|
236
|
+
"train_command",
|
|
237
|
+
]
|
|
238
|
+
|
|
239
|
+
except ImportError as e:
|
|
240
|
+
import warnings
|
|
241
|
+
|
|
242
|
+
warnings.warn(
|
|
243
|
+
f"Failed to import omnigenbench modules: {e}. "
|
|
244
|
+
"Please ensure omnigenbench is properly installed.\n"
|
|
245
|
+
"You can install it with: pip install omnigenbench\n"
|
|
246
|
+
"and replace all 'omnigenome' with 'omnigenbench' in your code.\n"
|
|
247
|
+
"e.g., from omnigenome import * -> from omnigenbench import *",
|
|
248
|
+
ImportWarning,
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
# Minimal fallback to prevent complete failure
|
|
252
|
+
__all__ = []
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: omnigenome
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.3a0
|
|
4
4
|
Summary: OmniGenome: A comprehensive toolkit for genome analysis.
|
|
5
5
|
Home-page: https://github.com/yangheng95/OmniGenBench
|
|
6
6
|
Author: Yang, Heng
|
|
@@ -20,6 +20,7 @@ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
|
20
20
|
Requires-Python: >=3.10
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
License-File: LICENSE
|
|
23
|
+
Requires-Dist: omnigenbench>=0.3.0
|
|
23
24
|
Requires-Dist: findfile>=2.0.0
|
|
24
25
|
Requires-Dist: autocuda>=0.16
|
|
25
26
|
Requires-Dist: metric-visualizer>=0.9.6
|
|
@@ -34,8 +35,6 @@ Requires-Dist: transformers>=4.46.0
|
|
|
34
35
|
Requires-Dist: packaging
|
|
35
36
|
Requires-Dist: peft
|
|
36
37
|
Requires-Dist: dill
|
|
37
|
-
Requires-Dist: accelerate
|
|
38
|
-
Requires-Dist: omnigenbench>=0.3.2alpha
|
|
39
38
|
Provides-Extra: dev
|
|
40
39
|
Requires-Dist: dill; extra == "dev"
|
|
41
40
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -5,6 +5,7 @@ omnigenome/__init__.py
|
|
|
5
5
|
omnigenome.egg-info/PKG-INFO
|
|
6
6
|
omnigenome.egg-info/SOURCES.txt
|
|
7
7
|
omnigenome.egg-info/dependency_links.txt
|
|
8
|
+
omnigenome.egg-info/entry_points.txt
|
|
8
9
|
omnigenome.egg-info/requires.txt
|
|
9
10
|
omnigenome.egg-info/top_level.txt
|
|
10
11
|
tests/test_dataset_patterns.py
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from setuptools import setup, find_packages
|
|
12
|
+
|
|
13
|
+
# Define version directly to avoid circular import
|
|
12
14
|
from omnigenome import __version__
|
|
13
15
|
|
|
14
16
|
cwd = Path(__file__).parent
|
|
@@ -37,9 +39,13 @@ setup(
|
|
|
37
39
|
license="Apache-2.0",
|
|
38
40
|
packages=find_packages(include=["omnigenome", "omnigenome.*"]),
|
|
39
41
|
entry_points={
|
|
40
|
-
|
|
42
|
+
"console_scripts": [
|
|
43
|
+
"autobench=omnigenome:run_bench",
|
|
44
|
+
"autotrain=omnigenome:run_train",
|
|
45
|
+
],
|
|
41
46
|
},
|
|
42
47
|
install_requires=[
|
|
48
|
+
"omnigenbench>=0.3.0", # Add dependency on omnigenbench
|
|
43
49
|
"findfile>=2.0.0",
|
|
44
50
|
"autocuda>=0.16",
|
|
45
51
|
"metric-visualizer>=0.9.6",
|
|
@@ -54,8 +60,6 @@ setup(
|
|
|
54
60
|
"packaging",
|
|
55
61
|
"peft",
|
|
56
62
|
"dill",
|
|
57
|
-
"accelerate",
|
|
58
|
-
"omnigenbench>=0.3.2alpha", # Depend on the alias package
|
|
59
63
|
],
|
|
60
64
|
extras_require=extras,
|
|
61
65
|
classifiers=[
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# file: __init__.py
|
|
3
|
-
# time: 14:53 06/04/2024
|
|
4
|
-
# author: YANG, HENG <hy345@exeter.ac.uk> (杨恒)
|
|
5
|
-
# github: https://github.com/yangheng95
|
|
6
|
-
# huggingface: https://huggingface.co/yangheng
|
|
7
|
-
# google scholar: https://scholar.google.com/citations?user=NPq5a_0AAAAJ&hl=en
|
|
8
|
-
# Copyright (C) 2019-2024. All Rights Reserved.
|
|
9
|
-
|
|
10
|
-
"""
|
|
11
|
-
OmniGenBench - Alias package for omnigenome
|
|
12
|
-
============================================
|
|
13
|
-
|
|
14
|
-
This package provides the same functionality as omnigenome but with the omnigenbench name.
|
|
15
|
-
All imports are redirected to the omnigenome package.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
# Import everything from omnigenome to maintain compatibility
|
|
19
|
-
from omnigenbench import *
|
|
20
|
-
|
|
21
|
-
# Override package metadata to reflect omnigenbench
|
|
22
|
-
__name__ = "omnigenome"
|
|
23
|
-
__version__ = "0.0.1beta"
|
|
24
|
-
__author__ = "Yang, Heng"
|
|
25
|
-
__email__ = "yangheng2021@gmail.com"
|
|
26
|
-
__license__ = "Apache-2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|