Spaces:
Sleeping
Sleeping
Use Python 3.10.5
Browse files- .python-version +1 -1
- README.md +1 -0
- hexviz/attention.py +2 -3
- hexviz/models.py +3 -4
- poetry.lock +2 -48
- pyproject.toml +1 -1
.python-version
CHANGED
@@ -1 +1 @@
|
|
1 |
-
3.
|
|
|
1 |
+
3.10.5
|
README.md
CHANGED
@@ -5,6 +5,7 @@ colorFrom: green
|
|
5 |
colorTo: purple
|
6 |
sdk: streamlit
|
7 |
sdk_version: 1.17.0
|
|
|
8 |
app_file: ./hexviz/🧬Attention_Visualization.py
|
9 |
pinned: true
|
10 |
tags: ["protein language models", "attention analysis", "protein structure", "biology"]
|
|
|
5 |
colorTo: purple
|
6 |
sdk: streamlit
|
7 |
sdk_version: 1.17.0
|
8 |
+
python_version: 3.10.5
|
9 |
app_file: ./hexviz/🧬Attention_Visualization.py
|
10 |
pinned: true
|
11 |
tags: ["protein language models", "attention analysis", "protein structure", "biology"]
|
hexviz/attention.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
from io import StringIO
|
2 |
-
from typing import List, Optional
|
3 |
from urllib import request
|
4 |
|
5 |
import requests
|
@@ -40,7 +39,7 @@ def get_pdb_from_seq(sequence: str) -> str:
|
|
40 |
pdb_str = res.text
|
41 |
return pdb_str
|
42 |
|
43 |
-
def get_chains(structure: Structure) ->
|
44 |
"""
|
45 |
Get list of chains in a structure
|
46 |
"""
|
@@ -127,7 +126,7 @@ def unidirectional_avg_filtered(attention, layer, head, threshold):
|
|
127 |
return unidirectional_avg_for_head
|
128 |
|
129 |
@st.cache
|
130 |
-
def get_attention_pairs(pdb_str: str, layer: int, head: int, chain_ids:
|
131 |
structure = PDBParser().get_structure("pdb", StringIO(pdb_str))
|
132 |
if chain_ids:
|
133 |
chains = [ch for ch in structure.get_chains() if ch.id in chain_ids]
|
|
|
1 |
from io import StringIO
|
|
|
2 |
from urllib import request
|
3 |
|
4 |
import requests
|
|
|
39 |
pdb_str = res.text
|
40 |
return pdb_str
|
41 |
|
42 |
+
def get_chains(structure: Structure) -> list[str]:
|
43 |
"""
|
44 |
Get list of chains in a structure
|
45 |
"""
|
|
|
126 |
return unidirectional_avg_for_head
|
127 |
|
128 |
@st.cache
|
129 |
+
def get_attention_pairs(pdb_str: str, layer: int, head: int, chain_ids: str | None ,threshold: int = 0.2, model_type: ModelType = ModelType.TAPE_BERT, top_n: int = 2):
|
130 |
structure = PDBParser().get_structure("pdb", StringIO(pdb_str))
|
131 |
if chain_ids:
|
132 |
chains = [ch for ch in structure.get_chains() if ch.id in chain_ids]
|
hexviz/models.py
CHANGED
@@ -1,5 +1,4 @@
|
|
1 |
from enum import Enum
|
2 |
-
from typing import Tuple
|
3 |
|
4 |
import streamlit as st
|
5 |
import torch
|
@@ -22,20 +21,20 @@ class Model:
|
|
22 |
|
23 |
|
24 |
@st.cache
|
25 |
-
def get_tape_bert() ->
|
26 |
tokenizer = TAPETokenizer()
|
27 |
model = ProteinBertModel.from_pretrained('bert-base', output_attentions=True)
|
28 |
return tokenizer, model
|
29 |
|
30 |
@st.cache
|
31 |
-
def get_zymctrl() ->
|
32 |
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
33 |
tokenizer = AutoTokenizer.from_pretrained('nferruz/ZymCTRL')
|
34 |
model = GPT2LMHeadModel.from_pretrained('nferruz/ZymCTRL').to(device)
|
35 |
return tokenizer, model
|
36 |
|
37 |
@st.cache
|
38 |
-
def get_prot_bert() ->
|
39 |
tokenizer = BertTokenizer.from_pretrained("Rostlab/prot_bert", do_lower_case=False )
|
40 |
model = BertForMaskedLM.from_pretrained("Rostlab/prot_bert")
|
41 |
return tokenizer, model
|
|
|
1 |
from enum import Enum
|
|
|
2 |
|
3 |
import streamlit as st
|
4 |
import torch
|
|
|
21 |
|
22 |
|
23 |
@st.cache
|
24 |
+
def get_tape_bert() -> tuple[TAPETokenizer, ProteinBertModel]:
|
25 |
tokenizer = TAPETokenizer()
|
26 |
model = ProteinBertModel.from_pretrained('bert-base', output_attentions=True)
|
27 |
return tokenizer, model
|
28 |
|
29 |
@st.cache
|
30 |
+
def get_zymctrl() -> tuple[AutoTokenizer, GPT2LMHeadModel]:
|
31 |
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
32 |
tokenizer = AutoTokenizer.from_pretrained('nferruz/ZymCTRL')
|
33 |
model = GPT2LMHeadModel.from_pretrained('nferruz/ZymCTRL').to(device)
|
34 |
return tokenizer, model
|
35 |
|
36 |
@st.cache
|
37 |
+
def get_prot_bert() -> tuple[BertTokenizer, BertForMaskedLM]:
|
38 |
tokenizer = BertTokenizer.from_pretrained("Rostlab/prot_bert", do_lower_case=False )
|
39 |
model = BertForMaskedLM.from_pretrained("Rostlab/prot_bert")
|
40 |
return tokenizer, model
|
poetry.lock
CHANGED
@@ -122,17 +122,6 @@ category = "main"
|
|
122 |
optional = false
|
123 |
python-versions = "*"
|
124 |
|
125 |
-
[[package]]
|
126 |
-
name = "backports.zoneinfo"
|
127 |
-
version = "0.2.1"
|
128 |
-
description = "Backport of the standard library zoneinfo module"
|
129 |
-
category = "main"
|
130 |
-
optional = false
|
131 |
-
python-versions = ">=3.6"
|
132 |
-
|
133 |
-
[package.extras]
|
134 |
-
tzdata = ["tzdata"]
|
135 |
-
|
136 |
[[package]]
|
137 |
name = "beautifulsoup4"
|
138 |
version = "4.11.2"
|
@@ -510,21 +499,6 @@ docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo"
|
|
510 |
perf = ["ipython"]
|
511 |
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8", "importlib-resources (>=1.3)"]
|
512 |
|
513 |
-
[[package]]
|
514 |
-
name = "importlib-resources"
|
515 |
-
version = "5.12.0"
|
516 |
-
description = "Read resources from Python packages"
|
517 |
-
category = "main"
|
518 |
-
optional = false
|
519 |
-
python-versions = ">=3.7"
|
520 |
-
|
521 |
-
[package.dependencies]
|
522 |
-
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
|
523 |
-
|
524 |
-
[package.extras]
|
525 |
-
docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"]
|
526 |
-
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8"]
|
527 |
-
|
528 |
[[package]]
|
529 |
name = "iniconfig"
|
530 |
version = "2.0.0"
|
@@ -706,10 +680,8 @@ python-versions = ">=3.7"
|
|
706 |
attrs = ">=17.4.0"
|
707 |
fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
708 |
idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
709 |
-
importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""}
|
710 |
isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
711 |
jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""}
|
712 |
-
pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""}
|
713 |
pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
|
714 |
rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
715 |
rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""}
|
@@ -729,7 +701,6 @@ optional = false
|
|
729 |
python-versions = ">=3.8"
|
730 |
|
731 |
[package.dependencies]
|
732 |
-
importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""}
|
733 |
jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
|
734 |
python-dateutil = ">=2.8.2"
|
735 |
pyzmq = ">=23.0"
|
@@ -923,7 +894,6 @@ python-versions = ">=3.8"
|
|
923 |
contourpy = ">=1.0.1"
|
924 |
cycler = ">=0.10"
|
925 |
fonttools = ">=4.22.0"
|
926 |
-
importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""}
|
927 |
kiwisolver = ">=1.0.1"
|
928 |
numpy = ">=1.20"
|
929 |
packaging = ">=20.0"
|
@@ -1036,7 +1006,6 @@ python-versions = ">=3.7"
|
|
1036 |
beautifulsoup4 = "*"
|
1037 |
bleach = "*"
|
1038 |
defusedxml = "*"
|
1039 |
-
importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""}
|
1040 |
jinja2 = ">=3.0"
|
1041 |
jupyter-core = ">=4.7"
|
1042 |
jupyterlab-pygments = "*"
|
@@ -1259,7 +1228,6 @@ python-versions = ">=3.8"
|
|
1259 |
|
1260 |
[package.dependencies]
|
1261 |
numpy = [
|
1262 |
-
{version = ">=1.20.3", markers = "python_version < \"3.10\""},
|
1263 |
{version = ">=1.21.0", markers = "python_version >= \"3.10\""},
|
1264 |
{version = ">=1.23.2", markers = "python_version >= \"3.11\""},
|
1265 |
]
|
@@ -1320,14 +1288,6 @@ python-versions = ">=3.7"
|
|
1320 |
docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"]
|
1321 |
tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
|
1322 |
|
1323 |
-
[[package]]
|
1324 |
-
name = "pkgutil-resolve-name"
|
1325 |
-
version = "1.3.10"
|
1326 |
-
description = "Resolve a name to an object."
|
1327 |
-
category = "main"
|
1328 |
-
optional = false
|
1329 |
-
python-versions = ">=3.6"
|
1330 |
-
|
1331 |
[[package]]
|
1332 |
name = "platformdirs"
|
1333 |
version = "3.1.1"
|
@@ -1552,7 +1512,6 @@ optional = false
|
|
1552 |
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
|
1553 |
|
1554 |
[package.dependencies]
|
1555 |
-
"backports.zoneinfo" = {version = "*", markers = "python_version >= \"3.6\" and python_version < \"3.9\""}
|
1556 |
tzdata = {version = "*", markers = "python_version >= \"3.6\""}
|
1557 |
|
1558 |
[[package]]
|
@@ -1646,7 +1605,6 @@ python-versions = ">=3.7.0"
|
|
1646 |
[package.dependencies]
|
1647 |
markdown-it-py = ">=2.2.0,<3.0.0"
|
1648 |
pygments = ">=2.13.0,<3.0.0"
|
1649 |
-
typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""}
|
1650 |
|
1651 |
[package.extras]
|
1652 |
jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
@@ -2119,7 +2077,6 @@ optional = false
|
|
2119 |
python-versions = ">=3.6"
|
2120 |
|
2121 |
[package.dependencies]
|
2122 |
-
"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""}
|
2123 |
pytz-deprecation-shim = "*"
|
2124 |
tzdata = {version = "*", markers = "platform_system == \"Windows\""}
|
2125 |
|
@@ -2238,8 +2195,8 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-co
|
|
2238 |
|
2239 |
[metadata]
|
2240 |
lock-version = "1.1"
|
2241 |
-
python-versions = "
|
2242 |
-
content-hash = "
|
2243 |
|
2244 |
[metadata.files]
|
2245 |
altair = []
|
@@ -2279,7 +2236,6 @@ backcall = [
|
|
2279 |
{file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"},
|
2280 |
{file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"},
|
2281 |
]
|
2282 |
-
"backports.zoneinfo" = []
|
2283 |
beautifulsoup4 = []
|
2284 |
biopython = []
|
2285 |
bleach = []
|
@@ -2321,7 +2277,6 @@ gitpython = []
|
|
2321 |
huggingface-hub = []
|
2322 |
idna = []
|
2323 |
importlib-metadata = []
|
2324 |
-
importlib-resources = []
|
2325 |
iniconfig = []
|
2326 |
ipykernel = []
|
2327 |
ipyspeck = []
|
@@ -2394,7 +2349,6 @@ pickleshare = [
|
|
2394 |
{file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
|
2395 |
]
|
2396 |
pillow = []
|
2397 |
-
pkgutil-resolve-name = []
|
2398 |
platformdirs = []
|
2399 |
pluggy = [
|
2400 |
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
|
|
|
122 |
optional = false
|
123 |
python-versions = "*"
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
[[package]]
|
126 |
name = "beautifulsoup4"
|
127 |
version = "4.11.2"
|
|
|
499 |
perf = ["ipython"]
|
500 |
testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "pytest-flake8", "importlib-resources (>=1.3)"]
|
501 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
502 |
[[package]]
|
503 |
name = "iniconfig"
|
504 |
version = "2.0.0"
|
|
|
680 |
attrs = ">=17.4.0"
|
681 |
fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
682 |
idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
|
|
683 |
isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
684 |
jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""}
|
|
|
685 |
pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
|
686 |
rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
|
687 |
rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""}
|
|
|
701 |
python-versions = ">=3.8"
|
702 |
|
703 |
[package.dependencies]
|
|
|
704 |
jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
|
705 |
python-dateutil = ">=2.8.2"
|
706 |
pyzmq = ">=23.0"
|
|
|
894 |
contourpy = ">=1.0.1"
|
895 |
cycler = ">=0.10"
|
896 |
fonttools = ">=4.22.0"
|
|
|
897 |
kiwisolver = ">=1.0.1"
|
898 |
numpy = ">=1.20"
|
899 |
packaging = ">=20.0"
|
|
|
1006 |
beautifulsoup4 = "*"
|
1007 |
bleach = "*"
|
1008 |
defusedxml = "*"
|
|
|
1009 |
jinja2 = ">=3.0"
|
1010 |
jupyter-core = ">=4.7"
|
1011 |
jupyterlab-pygments = "*"
|
|
|
1228 |
|
1229 |
[package.dependencies]
|
1230 |
numpy = [
|
|
|
1231 |
{version = ">=1.21.0", markers = "python_version >= \"3.10\""},
|
1232 |
{version = ">=1.23.2", markers = "python_version >= \"3.11\""},
|
1233 |
]
|
|
|
1288 |
docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"]
|
1289 |
tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
|
1290 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1291 |
[[package]]
|
1292 |
name = "platformdirs"
|
1293 |
version = "3.1.1"
|
|
|
1512 |
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
|
1513 |
|
1514 |
[package.dependencies]
|
|
|
1515 |
tzdata = {version = "*", markers = "python_version >= \"3.6\""}
|
1516 |
|
1517 |
[[package]]
|
|
|
1605 |
[package.dependencies]
|
1606 |
markdown-it-py = ">=2.2.0,<3.0.0"
|
1607 |
pygments = ">=2.13.0,<3.0.0"
|
|
|
1608 |
|
1609 |
[package.extras]
|
1610 |
jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
|
|
2077 |
python-versions = ">=3.6"
|
2078 |
|
2079 |
[package.dependencies]
|
|
|
2080 |
pytz-deprecation-shim = "*"
|
2081 |
tzdata = {version = "*", markers = "platform_system == \"Windows\""}
|
2082 |
|
|
|
2195 |
|
2196 |
[metadata]
|
2197 |
lock-version = "1.1"
|
2198 |
+
python-versions = "^3.10"
|
2199 |
+
content-hash = "79f191c2f3cc09035f7d0f543aa08c44c0a39de462336ca23eeea26ac29218de"
|
2200 |
|
2201 |
[metadata.files]
|
2202 |
altair = []
|
|
|
2236 |
{file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"},
|
2237 |
{file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"},
|
2238 |
]
|
|
|
2239 |
beautifulsoup4 = []
|
2240 |
biopython = []
|
2241 |
bleach = []
|
|
|
2277 |
huggingface-hub = []
|
2278 |
idna = []
|
2279 |
importlib-metadata = []
|
|
|
2280 |
iniconfig = []
|
2281 |
ipykernel = []
|
2282 |
ipyspeck = []
|
|
|
2349 |
{file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
|
2350 |
]
|
2351 |
pillow = []
|
|
|
2352 |
platformdirs = []
|
2353 |
pluggy = [
|
2354 |
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
|
pyproject.toml
CHANGED
@@ -5,7 +5,7 @@ description = "Visualize and analyze attention patterns for protein language mod
|
|
5 |
authors = ["Aksel Lenes <[email protected]>"]
|
6 |
|
7 |
[tool.poetry.dependencies]
|
8 |
-
python = "
|
9 |
streamlit = "1.17"
|
10 |
stmol = "^0.0.9"
|
11 |
biopython = "^1.81"
|
|
|
5 |
authors = ["Aksel Lenes <[email protected]>"]
|
6 |
|
7 |
[tool.poetry.dependencies]
|
8 |
+
python = "^3.10"
|
9 |
streamlit = "1.17"
|
10 |
stmol = "^0.0.9"
|
11 |
biopython = "^1.81"
|