From 8b2d7f0b5e7ea4470145cb04e7aeaac853742dd1 Mon Sep 17 00:00:00 2001 From: Samuel Stanton Date: Mon, 7 Aug 2023 12:22:41 -0700 Subject: [PATCH] update dependencies and package --- README.md | 9 +++--- pex/__init__.py | 0 {algorithm => pex/algorithm}/__init__.py | 2 +- {algorithm => pex/algorithm}/pex.py | 2 +- {landscape => pex/landscape}/__init__.py | 2 +- .../landscape}/esm1b_landscape.py | 0 .../landscape}/tape_landscape.py | 0 {model => pex/model}/__init__.py | 2 +- {model => pex/model}/cnn.py | 0 {model => pex/model}/ensemble.py | 0 {model => pex/model}/mufacnet.py | 2 +- {model => pex/model}/rnn.py | 0 {model => pex/model}/torch_model.py | 2 +- {utils => pex/utils}/eval_utils.py | 0 {utils => pex/utils}/os_utils.py | 0 {utils => pex/utils}/seq_utils.py | 0 pyproject.toml | 28 +++++++++++++++++++ requirements.in | 3 ++ requirements.txt | 20 +++++++++++++ run.py | 12 ++++---- 20 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 pex/__init__.py rename {algorithm => pex/algorithm}/__init__.py (88%) rename {algorithm => pex/algorithm}/pex.py (98%) rename {landscape => pex/landscape}/__init__.py (92%) rename {landscape => pex/landscape}/esm1b_landscape.py (100%) rename {landscape => pex/landscape}/tape_landscape.py (100%) rename {model => pex/model}/__init__.py (89%) rename {model => pex/model}/cnn.py (100%) rename {model => pex/model}/ensemble.py (100%) rename {model => pex/model}/mufacnet.py (98%) rename {model => pex/model}/rnn.py (100%) rename {model => pex/model}/torch_model.py (98%) rename {utils => pex/utils}/eval_utils.py (100%) rename {utils => pex/utils}/os_utils.py (100%) rename {utils => pex/utils}/seq_utils.py (100%) create mode 100644 pyproject.toml create mode 100644 requirements.in create mode 100644 requirements.txt diff --git a/README.md b/README.md index d29021a..044bc49 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,15 @@ Based this local-search mechanism, a model architecture called Mutation Factoriz The dependencies can be set up using the following commands: ```bash -conda create -n pex python=3.8 -y +conda create -n pex python=3.10 -y conda activate pex -conda install pytorch=1.10.2 cudatoolkit=11.3 -c pytorch -y -conda install numpy=1.19 pandas=1.3 -y +conda install pytorch pytorch-cuda -c pytorch -c nvidia -y conda install -c conda-forge tape_proteins=0.5 -y -pip install sequence-models==1.2.0 +pip install -e . ``` +If you run into dependency version issues, try `pip install -r requirements.txt` before running `pip install -e .`. + Clone this repository and download the oracle landscape models by the following commands: ```bash diff --git a/pex/__init__.py b/pex/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/algorithm/__init__.py b/pex/algorithm/__init__.py similarity index 88% rename from algorithm/__init__.py rename to pex/algorithm/__init__.py index 6dd4de4..d962a37 100644 --- a/algorithm/__init__.py +++ b/pex/algorithm/__init__.py @@ -14,4 +14,4 @@ def get_algorithm(args, model, alphabet, starting_sequence): for file_name in os.listdir(os.path.dirname(__file__)): if file_name.endswith('.py') and not file_name.startswith('_'): - importlib.import_module('algorithm.' + file_name[:-3]) + importlib.import_module('pex.algorithm.' + file_name[:-3]) diff --git a/algorithm/pex.py b/pex/algorithm/pex.py similarity index 98% rename from algorithm/pex.py rename to pex/algorithm/pex.py index 287054a..89f2585 100644 --- a/algorithm/pex.py +++ b/pex/algorithm/pex.py @@ -1,7 +1,7 @@ import random import numpy as np from . import register_algorithm -from utils.seq_utils import hamming_distance, random_mutation +from pex.utils.seq_utils import hamming_distance, random_mutation @register_algorithm("pex") class ProximalExploration: diff --git a/landscape/__init__.py b/pex/landscape/__init__.py similarity index 92% rename from landscape/__init__.py rename to pex/landscape/__init__.py index 8dc0b45..b739984 100644 --- a/landscape/__init__.py +++ b/pex/landscape/__init__.py @@ -28,4 +28,4 @@ def get_landscape(args): for file_name in os.listdir(os.path.dirname(__file__)): if file_name.endswith('.py') and not file_name.startswith('_'): - importlib.import_module('landscape.' + file_name[:-3]) + importlib.import_module('pex.landscape.' + file_name[:-3]) diff --git a/landscape/esm1b_landscape.py b/pex/landscape/esm1b_landscape.py similarity index 100% rename from landscape/esm1b_landscape.py rename to pex/landscape/esm1b_landscape.py diff --git a/landscape/tape_landscape.py b/pex/landscape/tape_landscape.py similarity index 100% rename from landscape/tape_landscape.py rename to pex/landscape/tape_landscape.py diff --git a/model/__init__.py b/pex/model/__init__.py similarity index 89% rename from model/__init__.py rename to pex/model/__init__.py index feb9b6a..b3e3830 100644 --- a/model/__init__.py +++ b/pex/model/__init__.py @@ -18,4 +18,4 @@ def get_model(args, **kwargs): for file_name in os.listdir(os.path.dirname(__file__)): if file_name.endswith('.py') and not file_name.startswith('_'): - importlib.import_module('model.' + file_name[:-3]) + importlib.import_module('pex.model.' + file_name[:-3]) diff --git a/model/cnn.py b/pex/model/cnn.py similarity index 100% rename from model/cnn.py rename to pex/model/cnn.py diff --git a/model/ensemble.py b/pex/model/ensemble.py similarity index 100% rename from model/ensemble.py rename to pex/model/ensemble.py diff --git a/model/mufacnet.py b/pex/model/mufacnet.py similarity index 98% rename from model/mufacnet.py rename to pex/model/mufacnet.py index 958928b..588bd1a 100644 --- a/model/mufacnet.py +++ b/pex/model/mufacnet.py @@ -2,7 +2,7 @@ import torch.nn as nn import numpy as np from . import torch_model, register_model -from utils.seq_utils import sequences_to_mutation_sets +from pex.utils.seq_utils import sequences_to_mutation_sets class MuFacNet(nn.Module): """ diff --git a/model/rnn.py b/pex/model/rnn.py similarity index 100% rename from model/rnn.py rename to pex/model/rnn.py diff --git a/model/torch_model.py b/pex/model/torch_model.py similarity index 98% rename from model/torch_model.py rename to pex/model/torch_model.py index 199adf1..493e9a8 100644 --- a/model/torch_model.py +++ b/pex/model/torch_model.py @@ -1,6 +1,6 @@ import torch import numpy as np -from utils.seq_utils import sequences_to_tensor +from pex.utils.seq_utils import sequences_to_tensor class TorchModel: def __init__(self, args, alphabet, net, **kwargs): diff --git a/utils/eval_utils.py b/pex/utils/eval_utils.py similarity index 100% rename from utils/eval_utils.py rename to pex/utils/eval_utils.py diff --git a/utils/os_utils.py b/pex/utils/os_utils.py similarity index 100% rename from utils/os_utils.py rename to pex/utils/os_utils.py diff --git a/utils/seq_utils.py b/pex/utils/seq_utils.py similarity index 100% rename from utils/seq_utils.py rename to pex/utils/seq_utils.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..1a41547 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,28 @@ +[project] +name = "pex" +dynamic = ["version", "readme", "dependencies", "optional-dependencies"] +description = "Proximal Exploration for Model-guided Protein Sequence Design" +authors = [{name = "Zhizhou Ren", email = "zhizhour@helixon.com"}] +classifiers=[ + "Development Status :: 3", + "Intended Audience :: Science/Research", + "Programming Language :: Python :: 3", +] + +[build-system] +requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"] +build-backend = "setuptools.build_meta" + +[tool.setuptools.dynamic] +dependencies = {file = ["requirements.in"]} +optional-dependencies = {dev = {file = ["requirements-dev.in"]}} +readme = {file = "README.md"} + +[tool.setuptools.packages.find] +include = ["pex*"] + +[tool.setuptools_scm] +search_parent_directories = true +version_scheme = "no-guess-dev" +local_scheme = "node-and-date" +fallback_version = "0.0.0" diff --git a/requirements.in b/requirements.in new file mode 100644 index 0000000..d29b10f --- /dev/null +++ b/requirements.in @@ -0,0 +1,3 @@ +numpy +pandas<=1.5 +sequence-models \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4dbafd2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile requirements.in +# +numpy==1.25.2 + # via + # -r requirements.in + # pandas +pandas==1.5.0 + # via -r requirements.in +python-dateutil==2.8.2 + # via pandas +pytz==2023.3 + # via pandas +sequence-models==1.6.0 + # via -r requirements.in +six==1.16.0 + # via python-dateutil diff --git a/run.py b/run.py index 7844d90..447eec7 100644 --- a/run.py +++ b/run.py @@ -1,10 +1,10 @@ import numpy as np -from landscape import get_landscape, task_collection, landscape_collection -from algorithm import get_algorithm, algorithm_collection -from model import get_model, model_collection -from model.ensemble import ensemble_rules -from utils.os_utils import get_arg_parser -from utils.eval_utils import Runner +from pex.landscape import get_landscape, task_collection, landscape_collection +from pex.algorithm import get_algorithm, algorithm_collection +from pex.model import get_model, model_collection +from pex.model.ensemble import ensemble_rules +from pex.utils.os_utils import get_arg_parser +from pex.utils.eval_utils import Runner def get_args(): parser = get_arg_parser()