bindsight 0.3.5__py3-none-any.whl
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.
- bindsight/README.md +44 -0
- bindsight/__init__.py +15 -0
- bindsight/benchmark/__init__.py +71 -0
- bindsight/benchmark/core.py +497 -0
- bindsight/benchmark/defaults.py +28 -0
- bindsight/benchmark/designer_bench.py +899 -0
- bindsight/benchmark/outcomes.py +508 -0
- bindsight/benchmark/panel.py +621 -0
- bindsight/benchmark/rediscovery.py +1153 -0
- bindsight/benchmark/statistics.py +622 -0
- bindsight/benchmark/study.py +1153 -0
- bindsight/benchmark/study_figures.py +164 -0
- bindsight/benchmark/study_report.py +607 -0
- bindsight/cli.py +2429 -0
- bindsight/config.py +451 -0
- bindsight/cost.py +258 -0
- bindsight/deg/__init__.py +7 -0
- bindsight/deg/pydeseq2_runner.py +285 -0
- bindsight/design/__init__.py +23 -0
- bindsight/design/_common.py +501 -0
- bindsight/design/bindcraft.py +78 -0
- bindsight/design/boltzgen.py +79 -0
- bindsight/design/developability.py +140 -0
- bindsight/design/embeddings.py +165 -0
- bindsight/design/prescreen.py +169 -0
- bindsight/design/protocol.py +111 -0
- bindsight/design/rfdiff_mpnn.py +93 -0
- bindsight/epitopes/__init__.py +7 -0
- bindsight/epitopes/surface_bind.py +134 -0
- bindsight/export/__init__.py +7 -0
- bindsight/export/ro_crate.py +595 -0
- bindsight/io/__init__.py +19 -0
- bindsight/io/cbioportal.py +118 -0
- bindsight/io/gdc.py +343 -0
- bindsight/io/paths.py +124 -0
- bindsight/pipelines/__init__.py +9 -0
- bindsight/pipelines/caveats.py +60 -0
- bindsight/pipelines/discover.py +1443 -0
- bindsight/pipelines/full_run.py +410 -0
- bindsight/plugins.py +335 -0
- bindsight/provenance/__init__.py +34 -0
- bindsight/provenance/append.py +199 -0
- bindsight/provenance/fragments.py +216 -0
- bindsight/provenance/manifest.py +506 -0
- bindsight/rank/__init__.py +7 -0
- bindsight/rank/scoring.py +355 -0
- bindsight/report/__init__.py +39 -0
- bindsight/report/format.py +100 -0
- bindsight/report/html.py +645 -0
- bindsight/report/showcase.py +653 -0
- bindsight/report/templates/report.css +67 -0
- bindsight/report/templates/report.html.j2 +420 -0
- bindsight/report/theme.py +231 -0
- bindsight/report/web/__init__.py +35 -0
- bindsight/report/web/app.py +624 -0
- bindsight/report/web/static/binder_viewer.js +245 -0
- bindsight/report/web/static/bindsight.css +455 -0
- bindsight/report/web/static/charts.js +425 -0
- bindsight/report/web/static/vendor/3Dmol-min.js +2 -0
- bindsight/report/web/static/vendor/3Dmol.LICENSE +90 -0
- bindsight/report/web/static/your_data_check.js +370 -0
- bindsight/report/web/templates/base.html.j2 +48 -0
- bindsight/report/web/templates/evidence.html.j2 +341 -0
- bindsight/report/web/templates/overview.html.j2 +140 -0
- bindsight/report/web/templates/runs.html.j2 +125 -0
- bindsight/report/web/templates/try.html.j2 +155 -0
- bindsight/report/web/templates/your_data.html.j2 +46 -0
- bindsight/runners/__init__.py +7 -0
- bindsight/runners/colab.py +158 -0
- bindsight/runners/job_exec.py +1110 -0
- bindsight/runners/kaggle.py +425 -0
- bindsight/runners/kaggle_kernel.py +489 -0
- bindsight/runners/local_docker.py +154 -0
- bindsight/runners/mock.py +167 -0
- bindsight/runners/modal_runner.py +199 -0
- bindsight/runners/notebook.py +116 -0
- bindsight/runners/notebook_content.py +217 -0
- bindsight/runners/protocol.py +81 -0
- bindsight/runners/source_wheel.py +104 -0
- bindsight/runners/tools.py +997 -0
- bindsight/structures/__init__.py +7 -0
- bindsight/structures/alphafolddb.py +93 -0
- bindsight/structures/plddt.py +92 -0
- bindsight/structures/topology.py +227 -0
- bindsight/surfaceome/__init__.py +42 -0
- bindsight/surfaceome/data/surfaceome_extended.tsv +4814 -0
- bindsight/surfaceome/data/surfy_offline.txt +17 -0
- bindsight/surfaceome/data/surfy_v1.ensembl.tsv +3380 -0
- bindsight/surfaceome/data/surfy_v1.uniprot.txt +2901 -0
- bindsight/surfaceome/surfy.py +441 -0
- bindsight/targets/__init__.py +7 -0
- bindsight/targets/ensembl_uniprot.py +56 -0
- bindsight/targets/gtex.py +250 -0
- bindsight/targets/open_targets.py +239 -0
- bindsight/validate/__init__.py +7 -0
- bindsight/validate/af2_ig.py +49 -0
- bindsight/validate/boltz2.py +256 -0
- bindsight/validate/chai1r.py +42 -0
- bindsight/validate/protocol.py +188 -0
- bindsight-0.3.5.data/data/bindsight_demo/config.yaml +54 -0
- bindsight-0.3.5.dist-info/METADATA +495 -0
- bindsight-0.3.5.dist-info/RECORD +106 -0
- bindsight-0.3.5.dist-info/WHEEL +4 -0
- bindsight-0.3.5.dist-info/entry_points.txt +20 -0
- bindsight-0.3.5.dist-info/licenses/COPYRIGHT +24 -0
- bindsight-0.3.5.dist-info/licenses/LICENSE +681 -0
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: bindsight
|
|
3
|
+
Version: 0.3.5
|
|
4
|
+
Summary: A reproducible bridge from RNA-seq to de novo protein binder design, with end-to-end provenance.
|
|
5
|
+
Project-URL: Homepage, https://mikhaeelatefrizk.github.io/bindsight/
|
|
6
|
+
Project-URL: Documentation, https://mikhaeelatefrizk.github.io/bindsight/
|
|
7
|
+
Project-URL: Repository, https://github.com/mikhaeelatefrizk/bindsight
|
|
8
|
+
Project-URL: Issues, https://github.com/mikhaeelatefrizk/bindsight/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/mikhaeelatefrizk/bindsight/blob/main/CHANGELOG.md
|
|
10
|
+
Author-email: Mikhaeel Atef Rizk Wahba <mikhaeelatefrizk@proton.me>
|
|
11
|
+
License-Expression: AGPL-3.0-or-later
|
|
12
|
+
License-File: COPYRIGHT
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Keywords: AlphaFold,BindCraft,Boltz,PROV-O,ProteinMPNN,RFdiffusion,RNA-seq,RO-Crate,bioinformatics,de-novo-binder-design,protein-design,reproducibility,target-discovery
|
|
15
|
+
Classifier: Development Status :: 4 - Beta
|
|
16
|
+
Classifier: Environment :: Console
|
|
17
|
+
Classifier: Intended Audience :: Science/Research
|
|
18
|
+
Classifier: Operating System :: MacOS
|
|
19
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
20
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
21
|
+
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
27
|
+
Requires-Python: >=3.11
|
|
28
|
+
Requires-Dist: click>=8.1
|
|
29
|
+
Requires-Dist: jinja2>=3.1
|
|
30
|
+
Requires-Dist: markupsafe>=2.1
|
|
31
|
+
Requires-Dist: platformdirs>=4.2
|
|
32
|
+
Requires-Dist: pydantic>=2.6
|
|
33
|
+
Requires-Dist: pyyaml>=6.0
|
|
34
|
+
Requires-Dist: requests>=2.32
|
|
35
|
+
Requires-Dist: rich>=13.7
|
|
36
|
+
Requires-Dist: tenacity>=8.4
|
|
37
|
+
Provides-Extra: all
|
|
38
|
+
Requires-Dist: biopython<2,>=1.83; extra == 'all'
|
|
39
|
+
Requires-Dist: fastapi<1,>=0.110; extra == 'all'
|
|
40
|
+
Requires-Dist: kaggle>=1.6; extra == 'all'
|
|
41
|
+
Requires-Dist: matplotlib<4,>=3.8; extra == 'all'
|
|
42
|
+
Requires-Dist: modal>=0.64; extra == 'all'
|
|
43
|
+
Requires-Dist: numpy<3,>=1.26; extra == 'all'
|
|
44
|
+
Requires-Dist: openpyxl>=3.1; extra == 'all'
|
|
45
|
+
Requires-Dist: pandas<3,>=2.2; extra == 'all'
|
|
46
|
+
Requires-Dist: pyarrow<25,>=16; extra == 'all'
|
|
47
|
+
Requires-Dist: pydeseq2<0.6,>=0.5; extra == 'all'
|
|
48
|
+
Requires-Dist: scipy<2,>=1.11; extra == 'all'
|
|
49
|
+
Requires-Dist: snakemake>=8.0; extra == 'all'
|
|
50
|
+
Requires-Dist: uvicorn<1,>=0.27; extra == 'all'
|
|
51
|
+
Provides-Extra: dev
|
|
52
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
53
|
+
Requires-Dist: httpx2<3,>=2.0; extra == 'dev'
|
|
54
|
+
Requires-Dist: mypy<3,>=2.1; extra == 'dev'
|
|
55
|
+
Requires-Dist: packaging>=22; extra == 'dev'
|
|
56
|
+
Requires-Dist: pre-commit>=3.7; extra == 'dev'
|
|
57
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
58
|
+
Requires-Dist: pytest-mock>=3.12; extra == 'dev'
|
|
59
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
60
|
+
Requires-Dist: ruff<0.17,>=0.16; extra == 'dev'
|
|
61
|
+
Requires-Dist: twine>=5.1; extra == 'dev'
|
|
62
|
+
Requires-Dist: types-pyyaml; extra == 'dev'
|
|
63
|
+
Requires-Dist: types-requests; extra == 'dev'
|
|
64
|
+
Provides-Extra: discover
|
|
65
|
+
Requires-Dist: biopython<2,>=1.83; extra == 'discover'
|
|
66
|
+
Requires-Dist: numpy<3,>=1.26; extra == 'discover'
|
|
67
|
+
Requires-Dist: openpyxl>=3.1; extra == 'discover'
|
|
68
|
+
Requires-Dist: pandas<3,>=2.2; extra == 'discover'
|
|
69
|
+
Requires-Dist: pyarrow<25,>=16; extra == 'discover'
|
|
70
|
+
Requires-Dist: pydeseq2<0.6,>=0.5; extra == 'discover'
|
|
71
|
+
Requires-Dist: scipy<2,>=1.11; extra == 'discover'
|
|
72
|
+
Provides-Extra: docs
|
|
73
|
+
Requires-Dist: mkdocs-material<10,>=9.5; extra == 'docs'
|
|
74
|
+
Requires-Dist: pillow>=10; extra == 'docs'
|
|
75
|
+
Provides-Extra: embed
|
|
76
|
+
Requires-Dist: torch<3,>=2.0; extra == 'embed'
|
|
77
|
+
Requires-Dist: transformers<6,>=4.40; extra == 'embed'
|
|
78
|
+
Provides-Extra: report
|
|
79
|
+
Requires-Dist: fastapi<1,>=0.110; extra == 'report'
|
|
80
|
+
Requires-Dist: matplotlib<4,>=3.8; extra == 'report'
|
|
81
|
+
Requires-Dist: uvicorn<1,>=0.27; extra == 'report'
|
|
82
|
+
Provides-Extra: runners
|
|
83
|
+
Requires-Dist: kaggle>=1.6; extra == 'runners'
|
|
84
|
+
Requires-Dist: modal>=0.64; extra == 'runners'
|
|
85
|
+
Provides-Extra: workflow
|
|
86
|
+
Requires-Dist: snakemake>=8.0; extra == 'workflow'
|
|
87
|
+
Description-Content-Type: text/markdown
|
|
88
|
+
|
|
89
|
+
# bindsight
|
|
90
|
+
|
|
91
|
+
> **Expression → Binder.** An open-source pipeline that joins cohort RNA-seq target
|
|
92
|
+
> discovery to de novo protein binder design in one reproducible workflow, with
|
|
93
|
+
> machine-readable provenance from every ranked binder back to the patient samples
|
|
94
|
+
> it came from.
|
|
95
|
+
|
|
96
|
+
[](https://github.com/mikhaeelatefrizk/bindsight/actions/workflows/ci.yml)
|
|
97
|
+
[](LICENSE)
|
|
98
|
+
[](https://www.python.org/downloads/)
|
|
99
|
+
[](https://snakemake.github.io/)
|
|
100
|
+
|
|
101
|
+
Genomics tooling stops at *"here are the interesting genes."* Protein-design
|
|
102
|
+
tooling starts at *"given a target…"*. The bridge between them is built ad-hoc,
|
|
103
|
+
per project, and rarely reproducibly. bindsight ships that bridge as one tool,
|
|
104
|
+
and carries a PROV-O / RO-Crate audit trail across the join.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Start here
|
|
109
|
+
|
|
110
|
+
Everything below is in this repository. Nothing on this page requires a website,
|
|
111
|
+
an account, or a GPU to read.
|
|
112
|
+
|
|
113
|
+
| If you want to… | Go to |
|
|
114
|
+
|---|---|
|
|
115
|
+
| **Run it in five minutes** | [Install](#install), then `bindsight demo` |
|
|
116
|
+
| **See what it has and has not shown** | [What the evidence says](#what-the-evidence-says) |
|
|
117
|
+
| **Reproduce a published number** | [Reproducing the results](#reproducing-the-results) |
|
|
118
|
+
| **Understand how it works** | [ARCHITECTURE.md](ARCHITECTURE.md) |
|
|
119
|
+
| **Read the study** | [`benchmarks/study/`](benchmarks/study/) · [write-up](paper/validation/manuscript.md) |
|
|
120
|
+
| **Read the control that withdrew a headline** | [`benchmarks/calibration/`](benchmarks/calibration/) |
|
|
121
|
+
| **See the provenance chain, run end to end** | [`benchmarks/provenance_join/`](benchmarks/provenance_join/) |
|
|
122
|
+
| **Find your way around the code** | [Repository map](#repository-map) |
|
|
123
|
+
| **Use your own data** | [Scope — what it accepts](#scope--what-it-accepts) |
|
|
124
|
+
| **Design binders on a free GPU** | [`RUN_FREE_GPU.md`](benchmarks/designer_benchmark/RUN_FREE_GPU.md) |
|
|
125
|
+
| **Look up a term** (PROV-O, RO-Crate, ipTM, PAE-int…) | [Glossary](docs/glossary.md) |
|
|
126
|
+
| **Contribute** | [CONTRIBUTING.md](CONTRIBUTING.md) |
|
|
127
|
+
| **Cite it** | [Citation](#citation) |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Install
|
|
132
|
+
|
|
133
|
+
One command, one way. Python 3.11+, Windows / macOS / Linux, CPU only.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
git clone https://github.com/mikhaeelatefrizk/bindsight.git
|
|
137
|
+
cd bindsight
|
|
138
|
+
pip install -e ".[discover,report]"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Add `dev` if you intend to run the tests (`pip install -e ".[dev,discover,report]"`),
|
|
142
|
+
and `runners` if you intend to send work to a GPU backend. Conda users can build the
|
|
143
|
+
same dependency set first with `mamba env create -f envs/discover.yaml`.
|
|
144
|
+
|
|
145
|
+
Check the install, then run the demo:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
bindsight --version
|
|
149
|
+
bindsight doctor
|
|
150
|
+
bindsight demo
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
`bindsight demo` runs the full discovery half on a **real TCGA-BRCA
|
|
154
|
+
tumour-versus-adjacent-normal cohort**, auto-downloaded from NIH/GDC, and writes an
|
|
155
|
+
HTML report you can open in a browser. It needs internet on first run (the cohort
|
|
156
|
+
and the enrichment lookups are cached afterwards) and takes a few minutes of real
|
|
157
|
+
DESeq2. No GPU.
|
|
158
|
+
|
|
159
|
+
For a local interface over the same thing — the evidence behind every claim
|
|
160
|
+
below, the demo, your own cohort, and the predicted binder–target complexes
|
|
161
|
+
rendered in 3-D. Served from your machine; nothing is fetched from a network
|
|
162
|
+
once installed.
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
bindsight ui # opens http://localhost:8501
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## What the evidence says
|
|
171
|
+
|
|
172
|
+
Stated plainly, including the parts that did not work. Each claim links to the
|
|
173
|
+
artifacts it comes from.
|
|
174
|
+
|
|
175
|
+
### The discovery half
|
|
176
|
+
|
|
177
|
+
Run on **fifteen whole, unstratified TCGA projects** as patient-paired contrasts,
|
|
178
|
+
scored against a panel of 22 antigen-cohort pairs fixed in git before any cohort was
|
|
179
|
+
run. Nothing in a cohort's definition refers to the antigen being sought.
|
|
180
|
+
|
|
181
|
+
Two null models, and they point in different directions — both are reported, because
|
|
182
|
+
reporting only one would make the other the finding:
|
|
183
|
+
|
|
184
|
+
- **Against abundance- and dispersion-matched decoys — negative.** 3 of 22 pairs are
|
|
185
|
+
nominally significant; **none survives Benjamini-Hochberg** across the panel. The
|
|
186
|
+
smallest adjusted value this panel could have produced is 0.022, so a pair could
|
|
187
|
+
genuinely have survived — the negative is a measurement, but not a sensitive one.
|
|
188
|
+
- **Against a permuted assignment of indications — positive.** Mean standing
|
|
189
|
+
**0.858** against every reassignment of cohorts to antigens, **exact permutation
|
|
190
|
+
p = 3.97e-04 over all 5,040 orderings**. 5,040 is 7!, because the test is
|
|
191
|
+
restricted to the **7 antigens with a single indication** in the panel — an
|
|
192
|
+
antigen used in two cancers has no one cohort to permute. That p is the floor
|
|
193
|
+
this design can express, so it says the result is as extreme as an exhaustive
|
|
194
|
+
enumeration of this panel can show, not that it is vanishingly unlikely.
|
|
195
|
+
|
|
196
|
+
*Calibration, on its own denominator.* KICH and THCA carry no panel antigen and
|
|
197
|
+
were run to show what no signal looks like on this scale. Antigens sit at mean
|
|
198
|
+
standing **0.765** in the cancer they are actually used in against **0.417**
|
|
199
|
+
there: a **within-antigen difference of 0.348 (95% CI 0.188–0.513),
|
|
200
|
+
cluster-bootstrapped over 13 antigens**, each antigen its own control, interval
|
|
201
|
+
excluding zero. It carries an interval and no p-value — the permutation p above
|
|
202
|
+
belongs to the 7-antigen test and is not the significance of this difference,
|
|
203
|
+
which no test reports.
|
|
204
|
+
|
|
205
|
+
The indication-specificity null is the strongest claim this project supports, and
|
|
206
|
+
it is a claim about the **ordering**, not about any individual hit. Absolute recall is low and
|
|
207
|
+
stated as such: at rank 20 it is 1 of 17 on approved-agent antigens (95% CI
|
|
208
|
+
0.01–0.27). Most clinically validated antigens are simply not significantly
|
|
209
|
+
over-expressed in an unstratified bulk contrast.
|
|
210
|
+
|
|
211
|
+
→ [`benchmarks/study/RESULTS.md`](benchmarks/study/RESULTS.md) · [write-up](paper/validation/manuscript.md)
|
|
212
|
+
|
|
213
|
+
### The design half
|
|
214
|
+
|
|
215
|
+
The pipeline runs RFdiffusion → ProteinMPNN → Boltz-2 end to end on a free Kaggle
|
|
216
|
+
T4 and produces real predicted complexes. What it does **not** establish is that
|
|
217
|
+
those designs bind.
|
|
218
|
+
|
|
219
|
+
A paired control folds every design beside a shuffle of its own sequence — same
|
|
220
|
+
length, same composition, order destroyed. Under a seeded validator averaging five
|
|
221
|
+
diffusion draws, **the shuffles cleared the customary ipTM 0.65 bar more often than
|
|
222
|
+
the designs did** (50% against 30%; paired difference −0.043, 95% CI −0.142 to
|
|
223
|
+
+0.054; 9 of 20 designs beat their own shuffle, where 10 is chance).
|
|
224
|
+
|
|
225
|
+
`success@0.65` is therefore **withdrawn as a measure of design quality**, and this
|
|
226
|
+
page does not quote it as one. The ipTM values are real Boltz-2 outputs; what does
|
|
227
|
+
not follow is that the rate measures the designs. The control's predictions were
|
|
228
|
+
written down before its data arrived.
|
|
229
|
+
|
|
230
|
+
→ [`benchmarks/calibration/`](benchmarks/calibration/) · [`benchmarks/designer_benchmark/`](benchmarks/designer_benchmark/)
|
|
231
|
+
|
|
232
|
+
### The join
|
|
233
|
+
|
|
234
|
+
The claim the project rests on — a reviewer can start at a ranked binder and reach
|
|
235
|
+
the patient samples it came from — was exhibited once, end to end, on a target the
|
|
236
|
+
discovery half chose for itself: CA9 at rank 1 and CD70 at rank 2 out of TCGA-KIRC,
|
|
237
|
+
carried through to 40 designs and a walkable PROV-O graph. The committed manifest
|
|
238
|
+
lets you verify the first three steps of that walk from this clone; the rest needs
|
|
239
|
+
the crate rebuilt, and that directory says so precisely.
|
|
240
|
+
|
|
241
|
+
→ [`benchmarks/provenance_join/`](benchmarks/provenance_join/)
|
|
242
|
+
|
|
243
|
+
### What has not been done
|
|
244
|
+
|
|
245
|
+
- The three-way designer comparison (RFdiffusion+ProteinMPNN vs BindCraft vs
|
|
246
|
+
BoltzGen) is **not run**. Both alternatives need 24–32 GB against anything larger
|
|
247
|
+
than a small domain, so those arms require paid backends; on free hardware no
|
|
248
|
+
shipped backend can run them.
|
|
249
|
+
- The calibration's own power analysis puts **142 paired designs** at 80% power to
|
|
250
|
+
detect a 0.05 ipTM difference. The committed control has 20.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Scope — what it accepts
|
|
255
|
+
|
|
256
|
+
The pipeline takes a **counts matrix** and a **sample design table** naming a
|
|
257
|
+
two-level factor, and contrasts those two levels. Nothing on that path knows about
|
|
258
|
+
cancer. `tumor` and `normal` are values you supply, not values the code expects:
|
|
259
|
+
[`tests/test_non_cancer_cohort.py`](tests/test_non_cancer_cohort.py) drives the whole
|
|
260
|
+
documented path on a drug-versus-vehicle experiment paired within donor, with no
|
|
261
|
+
oncology vocabulary anywhere, and asserts that none leaks into the provenance
|
|
262
|
+
manifest.
|
|
263
|
+
|
|
264
|
+
Three parts *are* domain-specific, and they are separable:
|
|
265
|
+
|
|
266
|
+
- **The optional `inputs.download` block** fetches a cohort from NIH/GDC, so it knows
|
|
267
|
+
TCGA's sample type names. Point `inputs.counts` and `inputs.design` at your own
|
|
268
|
+
files and it never runs.
|
|
269
|
+
- **The rediscovery benchmark** scores recovery of known tumour antigens. It is an
|
|
270
|
+
evaluation harness for the ranker, not part of a run.
|
|
271
|
+
- **The safety gate** compares candidates against GTEx normal-tissue baselines. That
|
|
272
|
+
is a human resource, and so are the SURFY surfaceome, the UniProt membrane
|
|
273
|
+
extension and SURFACE-Bind's site inventory.
|
|
274
|
+
|
|
275
|
+
So the honest scope is **any human bulk RNA-seq contrast between two conditions** —
|
|
276
|
+
disease versus healthy, treated versus untreated, responder versus non-responder,
|
|
277
|
+
one tissue versus another. Non-human cohorts would need substitutes for four
|
|
278
|
+
reference resources, none of which is wired in.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## What it does
|
|
283
|
+
|
|
284
|
+
```
|
|
285
|
+
bulk RNA-seq counts Designed protein binders
|
|
286
|
+
│ ▲
|
|
287
|
+
│ │
|
|
288
|
+
▼ │
|
|
289
|
+
Differential expression ──► Surface-exposed ──► De novo backbone
|
|
290
|
+
(pydeseq2) (SURFY) (RFdiffusion / BindCraft / BoltzGen)
|
|
291
|
+
│ │
|
|
292
|
+
▼ ▼
|
|
293
|
+
Targetable sites Sequence design
|
|
294
|
+
(SURFACE-Bind) (ProteinMPNN)
|
|
295
|
+
│ │
|
|
296
|
+
▼ ▼
|
|
297
|
+
AlphaFoldDB structure Affinity + structure
|
|
298
|
+
validation
|
|
299
|
+
(Boltz-2 / Chai-1r)
|
|
300
|
+
│
|
|
301
|
+
▼
|
|
302
|
+
Multi-objective ranking
|
|
303
|
+
│
|
|
304
|
+
▼
|
|
305
|
+
HTML report + RO-Crate (FAIR)
|
|
306
|
+
with full PROV-O provenance
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Commands
|
|
310
|
+
|
|
311
|
+
| Capability | Status | How to try |
|
|
312
|
+
|---|---|---|
|
|
313
|
+
| **`bindsight demo`** — full discovery on a real cohort + report | ✅ ready | `bindsight demo` |
|
|
314
|
+
| **`bindsight discover`** — your own RNA-seq cohort → ranked targets | ✅ ready | `bindsight discover my.yaml --out runs/x` |
|
|
315
|
+
| **`bindsight ui`** — local interface: the evidence, a demo, your own data, past runs, and the 20 predicted complexes in 3-D | ✅ ready | `bindsight ui` |
|
|
316
|
+
| **`bindsight report`** — paper-style HTML, embedded volcano + provenance | ✅ ready | `bindsight report runs/x` |
|
|
317
|
+
| **`bindsight run`** — full orchestrator (discover → design → validate → rank → report → export) | ✅ ready | `bindsight run my.yaml --out runs/x` |
|
|
318
|
+
| **`bindsight design`** — RFdiffusion + ProteinMPNN + Boltz-2 on a free Kaggle T4 | ✅ runs end to end | `bindsight design runs/x --backend kaggle` |
|
|
319
|
+
| **`bindsight design <run_dir> --dry-run`** — GPU cost estimate before spending | ✅ ready | `bindsight design runs/x --backend modal --dry-run` |
|
|
320
|
+
| **`bindsight validate`** — materialise the design job's metrics | ✅ ready | `bindsight validate runs/x` |
|
|
321
|
+
| **`bindsight rank`** — multi-objective composite scoring | ✅ ready | `bindsight rank runs/x` |
|
|
322
|
+
| **`bindsight export`** — RO-Crate zip for deposit | ✅ ready | `bindsight export runs/x --out runs/x.crate.zip` |
|
|
323
|
+
| **`bindsight benchmark`** — score rediscovery of held-out known antigens | ✅ ready | `bindsight benchmark runs/x --known-antigens benchmarks/known.tsv` |
|
|
324
|
+
| **`bindsight doctor`** — diagnose deps, caches, vendored data | ✅ ready | `bindsight doctor` |
|
|
325
|
+
| **`bindsight verify-licenses`** — per-component license inventory | ✅ ready | `bindsight verify-licenses` |
|
|
326
|
+
| **Snakemake front-end** — the same stage functions as a DAG | ✅ ready, stops before the crate | `snakemake --configfile my.yaml --cores 4` (needs `.[workflow]`) |
|
|
327
|
+
| **BindCraft / BoltzGen / Chai-1r / AF2-IG** | ⚠️ wired, but no shipped backend can run them | The executor dispatches to all four, and no backend builds an environment in which that dispatch succeeds. The CLI refuses the combination locally rather than spending GPU quota discovering it — see below |
|
|
328
|
+
|
|
329
|
+
### Runner and plugin status
|
|
330
|
+
|
|
331
|
+
Not every backend carries the same weight of evidence, and presenting them as peers
|
|
332
|
+
would be misleading.
|
|
333
|
+
|
|
334
|
+
| | Status | Why |
|
|
335
|
+
|---|---|---|
|
|
336
|
+
| **Kaggle** | The verified free path | Headless via the Kaggle API, so a reader can re-run the exact job on their own free quota. Pinned to a T4: Kaggle's own docs warn its default P100 cannot run current PyTorch. |
|
|
337
|
+
| **local_docker** | For your own GPU | Native and containerised modes; the native mode is what CPU tests exercise. |
|
|
338
|
+
| **Modal** | Prepared, not executed | The paid escape hatch for what free hardware cannot reach. Its image carries the whole design stack, but running it costs money and it has not been run end to end. |
|
|
339
|
+
| **Colab** | Interactive on-ramp only | Google's API does not permit launching a free-tier notebook from a CLI, so this path needs a human with a browser tab open. That is a demo, not a reproducibility path. |
|
|
340
|
+
| **RFdiffusion, ProteinMPNN, Boltz-2** | Verified on free hardware | The committed benchmark ran the whole stack on a free Kaggle T4, from a wheel built out of this tree. All 20 designs carry a target chain byte-identical to the native domain IV, so "the target was held fixed" is a check rather than a claim. |
|
|
341
|
+
| **AF2 initial-guess** | Buildable free | PyRosetta is credential-free for non-commercial use since 2024, and is the restriction on this path; the AlphaFold2 parameters are CC BY 4.0. |
|
|
342
|
+
| **BindCraft, BoltzGen** | Reduced-target only on free hardware | Both fit a 16 GB card against a small domain, not a full receptor. BoltzGen's integration was rewritten after its command was found not to exist upstream. |
|
|
343
|
+
| **Chai-1r** | Needs Ampere or newer | It requires bfloat16, which no free-tier GPU has. Verifying it means renting roughly an hour of a modern card. |
|
|
344
|
+
|
|
345
|
+
> **Note on GPU stages.** The design and validation models require CUDA, so they run
|
|
346
|
+
> on the backend you choose, not on the CPU host.
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Reproducing the results
|
|
351
|
+
|
|
352
|
+
Three tiers, because they cost very different things.
|
|
353
|
+
|
|
354
|
+
**1. Regenerate the published pages from committed artifacts — offline, seconds.**
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
python scripts/build_docs_results.py # rewrites docs/results.md; it should not change
|
|
358
|
+
python -m pytest -q # 2000+ tests, no network
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**2. Re-run the rediscovery study — needs network, a few CPU-hours.**
|
|
362
|
+
|
|
363
|
+
Cohorts are downloaded from NIH/GDC on first use and cached under `data/gdc_cache/`,
|
|
364
|
+
which is not committed; the download is the slow part.
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
python benchmarks/run_study.py --all --cpus 2 # fetches + runs DESeq2
|
|
368
|
+
python benchmarks/run_study.py --score-only # re-scores what is already on disk
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**3. Re-run the binder design — needs a GPU.**
|
|
372
|
+
|
|
373
|
+
`score_run.py` is a scorer, not a runner: it consumes the archive a GPU run
|
|
374
|
+
produces. The full chain is in
|
|
375
|
+
[`RUN_FREE_GPU.md`](benchmarks/designer_benchmark/RUN_FREE_GPU.md), which runs on a
|
|
376
|
+
free Kaggle T4.
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
python benchmarks/designer_benchmark/prepare_erbb2_target.py
|
|
380
|
+
python benchmarks/run_designer_benchmark.py --backend kaggle \
|
|
381
|
+
--designers rfdiff_mpnn --trajectories 10 \
|
|
382
|
+
--structures-dir data/target_structures \
|
|
383
|
+
--out benchmarks/designer_benchmark/run
|
|
384
|
+
python benchmarks/designer_benchmark/score_run.py <out_dir>/<id>.tar.gz \
|
|
385
|
+
--n-trajectories 10 --out benchmarks/designer_benchmark
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
## Repository map
|
|
391
|
+
|
|
392
|
+
Each top-level area carries its own `README.md` explaining what is in it and
|
|
393
|
+
why — [`bindsight/`](bindsight/), [`tests/`](tests/), [`scripts/`](scripts/),
|
|
394
|
+
[`benchmarks/`](benchmarks/) and each benchmark under it, [`docs/`](docs/),
|
|
395
|
+
[`examples/`](examples/), [`envs/`](envs/) and [`paper/`](paper/). Package
|
|
396
|
+
subdirectories are documented in the table below rather than individually.
|
|
397
|
+
|
|
398
|
+
| Path | What it holds |
|
|
399
|
+
|---|---|
|
|
400
|
+
| [`bindsight/`](bindsight/) | The Python package — [`io`](bindsight/io/), [`deg`](bindsight/deg/), [`targets`](bindsight/targets/), [`surfaceome`](bindsight/surfaceome/), [`structures`](bindsight/structures/), [`epitopes`](bindsight/epitopes/), [`design`](bindsight/design/), [`runners`](bindsight/runners/), [`validate`](bindsight/validate/), [`rank`](bindsight/rank/), [`benchmark`](bindsight/benchmark/), [`pipelines`](bindsight/pipelines/), [`provenance`](bindsight/provenance/), [`export`](bindsight/export/), [`report`](bindsight/report/) |
|
|
401
|
+
| [`benchmarks/`](benchmarks/) | All the evidence — the [study](benchmarks/study/), the [calibration control](benchmarks/calibration/), the [designer benchmark](benchmarks/designer_benchmark/), the [provenance join](benchmarks/provenance_join/), and the held-out antigen set |
|
|
402
|
+
| [`tests/`](tests/) | 2,000+ tests. Many are guards on published claims, not on code |
|
|
403
|
+
| [`paper/`](paper/) | JOSS and bioRxiv manuscripts, and the validation write-up |
|
|
404
|
+
| [`docs/`](docs/) | Long-form documentation (mkdocs-material source) |
|
|
405
|
+
| [`examples/`](examples/) | Runnable pipeline configs |
|
|
406
|
+
| [`envs/`](envs/) | Conda environment for the discovery half, with pinned constraints |
|
|
407
|
+
| [`scripts/`](scripts/) | Generators for vendored data and published pages |
|
|
408
|
+
| [`.github/workflows/`](.github/workflows/) | CI, docs, docker, release artifacts, and the two paper PDFs |
|
|
409
|
+
|
|
410
|
+
| File | What it is |
|
|
411
|
+
|---|---|
|
|
412
|
+
| [ARCHITECTURE.md](ARCHITECTURE.md) | The architectural source of truth |
|
|
413
|
+
| [CHANGELOG.md](CHANGELOG.md) | Per-version changes |
|
|
414
|
+
| [CONTRIBUTING.md](CONTRIBUTING.md) | Dev setup, testing, commit conventions |
|
|
415
|
+
| [LICENSING.md](LICENSING.md) | Per-dependency licence inventory and commercial-use guidance |
|
|
416
|
+
| [SECURITY.md](SECURITY.md) | How to report a vulnerability |
|
|
417
|
+
| [CITATION.cff](CITATION.cff) | Citation metadata |
|
|
418
|
+
| [Snakefile](Snakefile) | The Snakemake DAG front-end |
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## Who it's for
|
|
423
|
+
|
|
424
|
+
- **Translational researchers** who want a free, reproducible "data → designed
|
|
425
|
+
binder" pipeline.
|
|
426
|
+
- **Clinical biologists** who need an audit trail back from a binder to the cohort.
|
|
427
|
+
- **Method developers** who want a held-out evaluation harness to benchmark new
|
|
428
|
+
designers and validators.
|
|
429
|
+
- **Anyone with a two-condition human RNA-seq experiment** — the cancer framing
|
|
430
|
+
throughout this document reflects where it has been validated, not what it accepts.
|
|
431
|
+
|
|
432
|
+
## What's distinctive
|
|
433
|
+
|
|
434
|
+
| | Existing protein-design tools | bindsight |
|
|
435
|
+
|---|---|---|
|
|
436
|
+
| Input | Target structure | RNA-seq counts |
|
|
437
|
+
| Provenance | PDB + maybe a log | PROV-O JSON-LD + RO-Crate, audit trail to the cohort |
|
|
438
|
+
| Hardware | HPC assumed | CPU laptop + offload to a free Kaggle T4 |
|
|
439
|
+
| Cost-awareness | None | `--dry-run` estimates GPU spend before running |
|
|
440
|
+
| Negative results | Discarded | Catalogued (`failure_taxonomy.parquet`), and published |
|
|
441
|
+
| Citability | Code dump | Tagged releases with SHA-256 checksums, JSON-Schema-validated outputs |
|
|
442
|
+
|
|
443
|
+
For the full landscape comparison, see
|
|
444
|
+
[ARCHITECTURE.md § 8](ARCHITECTURE.md#8-comparison-vs-existing-tools).
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Acknowledgments
|
|
449
|
+
|
|
450
|
+
bindsight is an opinionated wrapper. Real intellectual credit belongs to the upstream
|
|
451
|
+
tool authors. See [LICENSING.md](LICENSING.md) for the full inventory; the work this
|
|
452
|
+
builds on most directly:
|
|
453
|
+
|
|
454
|
+
- [SURFACE-Bind](https://github.com/hamedkhakzad/SURFACE-Bind) (Balbi et al., PNAS 2026) — the targetable-sites catalog that makes the bridge tractable
|
|
455
|
+
- [pydeseq2](https://github.com/scverse/PyDESeq2) (Muzellec et al., Bioinformatics 2023) — Python DESeq2 implementation
|
|
456
|
+
- [RFdiffusion](https://github.com/RosettaCommons/RFdiffusion) (Watson et al., Nature 2023) — backbone generation
|
|
457
|
+
- [ProteinMPNN](https://github.com/dauparas/ProteinMPNN) (Dauparas et al., Science 2022) — sequence design
|
|
458
|
+
- [Boltz-2](https://github.com/jwohlwend/boltz) (Wohlwend et al., 2025) — structure + affinity prediction
|
|
459
|
+
- [BindCraft](https://github.com/martinpacesa/BindCraft) (Pacesa et al., Nature 2025) — one-shot binder design
|
|
460
|
+
- [Snakemake](https://github.com/snakemake/snakemake) (Mölder et al., F1000Research 2021) — workflow orchestration
|
|
461
|
+
|
|
462
|
+
## Citation
|
|
463
|
+
|
|
464
|
+
This release is not archived under a DOI. Cite the repository, the tag you ran
|
|
465
|
+
and the checksums attached to the release, plus the author:
|
|
466
|
+
|
|
467
|
+
> Wahba, M. A. R. (2026). *bindsight: a reproducible bridge from RNA-seq to de
|
|
468
|
+
> novo protein binder design* (version X.Y.Z).
|
|
469
|
+
> <https://github.com/mikhaeelatefrizk/bindsight>
|
|
470
|
+
|
|
471
|
+
Citation metadata also lives in [CITATION.cff](CITATION.cff); GitHub's "Cite this
|
|
472
|
+
repository" button generates BibTeX and APA from it. Every release attaches a
|
|
473
|
+
wheel, an sdist and a `SHA256SUMS` file, and every image is digest-pinned, so
|
|
474
|
+
the artifacts behind a version are checkable even though the version has no
|
|
475
|
+
DOI. From 0.3.5 a release also carries the bioRxiv manuscript and the JOSS
|
|
476
|
+
paper as PDFs, typeset by CI. Please also cite the upstream tools you used — each run emits a
|
|
477
|
+
`software.bib` to make that straightforward.
|
|
478
|
+
|
|
479
|
+
## About the author
|
|
480
|
+
|
|
481
|
+
bindsight is built and maintained by **Mikhaeel Atef Rizk Wahba**, an
|
|
482
|
+
independent researcher in Cairo, Egypt.
|
|
483
|
+
|
|
484
|
+
- ORCID: [0009-0006-1069-9558](https://orcid.org/0009-0006-1069-9558)
|
|
485
|
+
- GitHub: [@mikhaeelatefrizk](https://github.com/mikhaeelatefrizk)
|
|
486
|
+
- Email: `mikhaeelatefrizk@proton.me`
|
|
487
|
+
|
|
488
|
+
## License
|
|
489
|
+
|
|
490
|
+
- **Code:** [GNU AGPL-3.0-or-later](LICENSE) — copyright notice in [COPYRIGHT](COPYRIGHT). You may use, study, modify, and
|
|
491
|
+
redistribute bindsight freely; if you distribute a modified version **or run it as
|
|
492
|
+
a network service**, you must make your source available under the same licence,
|
|
493
|
+
with attribution preserved. See [LICENSING.md](LICENSING.md) for component-level
|
|
494
|
+
details — bindsight orchestrates external tools that keep their own licences, and
|
|
495
|
+
some carry non-commercial terms.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
bindsight/README.md,sha256=IHj9CqEe6OaXTrYM7t5kv8t7yriQ2X_UZwek_0pCGpQ,2752
|
|
2
|
+
bindsight/__init__.py,sha256=CxfVze-SJzWgIa-0tsTshfkLRsZq2HGUtHNWI2AvG9A,458
|
|
3
|
+
bindsight/cli.py,sha256=eoJVLUR_nCMu3Ob53ZkcXY19ernXuU-hqoboSDQ3x2g,97928
|
|
4
|
+
bindsight/config.py,sha256=NvJ5yVEq58lNshq5GWO3CVSHT5qb8cA6nnKdvncf_rM,20271
|
|
5
|
+
bindsight/cost.py,sha256=FtJKTYLIaoF8RSiofqONhA9fIDSObwOFmKKNp0ijAFM,8672
|
|
6
|
+
bindsight/plugins.py,sha256=ppD8SfKc_2HlntdeXE5OFo5Mnpwh31Tx8m1yzX5UlyM,13775
|
|
7
|
+
bindsight/benchmark/__init__.py,sha256=9ZGQY990f7Mc6yPfegbku2fqIS0Pigc_Vv7QA4nuOH4,2853
|
|
8
|
+
bindsight/benchmark/core.py,sha256=EXbabufH4mqdwbXQ0gTi680aRe5wNwr3VyZ_MCjWxlQ,20602
|
|
9
|
+
bindsight/benchmark/defaults.py,sha256=8FOmNa9tjc5nafSmwLH9386FuCWh95m6uEkEaJ8bAdI,1247
|
|
10
|
+
bindsight/benchmark/designer_bench.py,sha256=Tr87LlokYrNH0-ecaDd_mnVSL5GBkSiyW035SnSYJvU,39876
|
|
11
|
+
bindsight/benchmark/outcomes.py,sha256=idxPR4JBqbfU3dVblMSxlUwmnl0lfpdJt19SEhu74CQ,21629
|
|
12
|
+
bindsight/benchmark/panel.py,sha256=xqMIbM2YddW1CU1aQi1AQswIXQsE2Jiigxlkf3rpYhQ,26474
|
|
13
|
+
bindsight/benchmark/rediscovery.py,sha256=Pn7GkyEckBkfgk7EpZr92n3H22gE2AbRgqrVKc8tlH4,48741
|
|
14
|
+
bindsight/benchmark/statistics.py,sha256=MF9HRn57tFaWMom4S5GLVEuOJE2nBU72M7UCtml2d9o,24480
|
|
15
|
+
bindsight/benchmark/study.py,sha256=j1h6XoRD-ocQwmD8nGHh_N-1UhleQNIoKXUAJmYIyt0,50797
|
|
16
|
+
bindsight/benchmark/study_figures.py,sha256=TWY8FFG7fwJMsOBcVGQ8gSt1Acri4J8CqhxoX0mNs08,6479
|
|
17
|
+
bindsight/benchmark/study_report.py,sha256=au2DrDKlEe-6csct5B1TvkPgFZRoKT2wOtGW5qRE6vQ,26378
|
|
18
|
+
bindsight/deg/__init__.py,sha256=MbTbI05Mwb7w8jxIIamnZgf753_yHiVoEyKAomAcFks,240
|
|
19
|
+
bindsight/deg/pydeseq2_runner.py,sha256=YAVttucqnot9y4kX49GT5qi520Rp-r9dpvVQi7LW_TI,11852
|
|
20
|
+
bindsight/design/__init__.py,sha256=-alFskc8Hn749axvFkr_qOqYpeFq9OYHOQBbOhFobEg,988
|
|
21
|
+
bindsight/design/_common.py,sha256=Tu144LbcfV5udAvRZ5z6R48DtiJBuF_fgCRWrLOiPv0,22815
|
|
22
|
+
bindsight/design/bindcraft.py,sha256=oIaSNkqcg9EJMlC2nRnLq-Tx3M70-CvcwCsqAFtzpig,2936
|
|
23
|
+
bindsight/design/boltzgen.py,sha256=g02eea8zoUQey71LT2hMKBuItSY1ULKB8Kejt7itZuM,2929
|
|
24
|
+
bindsight/design/developability.py,sha256=o859No05U95ks5UzbJHvGuJl_NAwWPBtJiZW36OG23Q,5878
|
|
25
|
+
bindsight/design/embeddings.py,sha256=TUHlht1eRiAFvIfGOqTqSw-HPdlMfsPFMvPxyI2TBN4,6536
|
|
26
|
+
bindsight/design/prescreen.py,sha256=nwUSkfmgFDmPjVMfofPoe6vu1en_dZyXer29Bqzr7fM,6471
|
|
27
|
+
bindsight/design/protocol.py,sha256=NR0dvcBrJ41p4Obc2kwvs628xszTVfbjzqMBW2gjUrs,4379
|
|
28
|
+
bindsight/design/rfdiff_mpnn.py,sha256=T2VHf_3fHs7Bkx8SqOf9gAU72c_KTNdsMIsMADOi3sI,3625
|
|
29
|
+
bindsight/epitopes/__init__.py,sha256=3RN6-PDH9qor4HqSwEFIoNTOaS0BSjxVEvF8AbUprEA,323
|
|
30
|
+
bindsight/epitopes/surface_bind.py,sha256=rMyN8GHk6Vprk1AwG5nHb0Pf0a2dgh5uVnmIsvsYImc,5954
|
|
31
|
+
bindsight/export/__init__.py,sha256=9W9aiIprA6NcWoiA0nN57t55xKt-zVjiXktkotO-lCY,253
|
|
32
|
+
bindsight/export/ro_crate.py,sha256=ws7VqF5L2Yp6h0xuNd3fpY5nHjBMpGsLm4edtfKwKUY,23919
|
|
33
|
+
bindsight/io/__init__.py,sha256=vaccHAFXPg4WFRW4fifgBGBQEcilLOczE-aS5LGsAIc,400
|
|
34
|
+
bindsight/io/cbioportal.py,sha256=jiSGQ3QXp11BSWahu1Rz-BoRTrO-6QLuEMkST7rNJW8,4596
|
|
35
|
+
bindsight/io/gdc.py,sha256=Zggcb1PwUztwvgumgFpEHUo6i5umjwQ8EdQdBqIpNSY,14000
|
|
36
|
+
bindsight/io/paths.py,sha256=6Fa2UQQkzO0EvWZpaVuZvz8hcJnU2RnEsJrUAZ-Gu6k,4229
|
|
37
|
+
bindsight/pipelines/__init__.py,sha256=giDVlYyMU4fNNVJ39O3I61BiE-jXhMEZhI7HhkaT_AA,415
|
|
38
|
+
bindsight/pipelines/caveats.py,sha256=gzvRJVLy-3MDs8YZbKZrYyu22QrAzilCR75_k2hcoQE,3219
|
|
39
|
+
bindsight/pipelines/discover.py,sha256=Vcmf21G-ASP_j0EBnG6ejyIUtn9LG_OucGQZjznT0tE,63610
|
|
40
|
+
bindsight/pipelines/full_run.py,sha256=BuScLDTgNR3GR91gl8Ye8Gwsd3Eor_vuExYU9-FzAHs,16081
|
|
41
|
+
bindsight/provenance/__init__.py,sha256=-vPdU3mFhPTe-3v2hAuYWJT-T8pmlUZCQMXkV_yxBbM,899
|
|
42
|
+
bindsight/provenance/append.py,sha256=5drH_e9Z-fnXy6v5ZUosQ93V_MBN4xov20xdwd5v7ug,7238
|
|
43
|
+
bindsight/provenance/fragments.py,sha256=svQNuYvX5MAu9t-D_8gXI30fpvheqlx7GCk5q-VeqzM,7445
|
|
44
|
+
bindsight/provenance/manifest.py,sha256=t4r6SxoGh0plvW3KFJ3fr5Y6EJgDo-GXYvvrtmAv4rM,20351
|
|
45
|
+
bindsight/rank/__init__.py,sha256=oHzRIupAKAIvPK5ltuV-JJC1BMuy42_XkHhem69pnMc,256
|
|
46
|
+
bindsight/rank/scoring.py,sha256=-vFynGZD4fo4ljP1sosJtWpTS00F3x74t3cZf9udFDQ,16078
|
|
47
|
+
bindsight/report/__init__.py,sha256=qe9onfweRn37SW4E7ykXZakShonNrkJ7F4rZ81lDFT4,1568
|
|
48
|
+
bindsight/report/format.py,sha256=J59pfTi4_jsolwe_hSmCnMI0SkUG9-xfyAc08nZj07c,3614
|
|
49
|
+
bindsight/report/html.py,sha256=svlx-qTb9FiEB37gI-qoC7eVBGJyroE_Ttjbhxzcem4,26285
|
|
50
|
+
bindsight/report/showcase.py,sha256=B9sWzAtPMKXGEuHx27uF5IbmSvFCTUh7Wf9_eGHYHgI,25863
|
|
51
|
+
bindsight/report/theme.py,sha256=MDncvPCQpzIeYVk62o3hze19IcarxKgmB0mkdUtdKeI,10296
|
|
52
|
+
bindsight/report/web/__init__.py,sha256=CDP6ewvAT4Vs2cTCtHTXNqfSTuCH8DcA0hw3DhqyIPE,1521
|
|
53
|
+
bindsight/report/web/app.py,sha256=v3LONLEU-mzaxrZLZtHlDuWOPylDFqN1JP1O1jNHzq4,23653
|
|
54
|
+
bindsight/report/web/static/binder_viewer.js,sha256=7pm21kydNJa4ZGGxV4a7UwudcdDJx8AJqXvGrIHmLqc,10753
|
|
55
|
+
bindsight/report/web/static/bindsight.css,sha256=Uy8-bbMAI_c7ch5OELQ-IAKYE-MF3KK176IMH18_vs4,16735
|
|
56
|
+
bindsight/report/web/static/charts.js,sha256=xLKGcyaCnVrWdDGELOX7aoVSKjIc2nP-8E2uRlpSSvU,16344
|
|
57
|
+
bindsight/report/web/static/your_data_check.js,sha256=DioBgZ05QRkwLf6BQ1U3qEfClqdEfLRJ-a20lmWc9tY,13892
|
|
58
|
+
bindsight/report/web/static/vendor/3Dmol-min.js,sha256=98x4khrnLnYj6JzdERQ09Ywu_d0v_aHNISZEtAb7gBY,537792
|
|
59
|
+
bindsight/report/web/static/vendor/3Dmol.LICENSE,sha256=TG6q7YVvPyijsamOdPSopxYY3n1R6kFVwp9veTvO-GE,4283
|
|
60
|
+
bindsight/report/web/templates/base.html.j2,sha256=NG8Cb8-FfCeTIm_Qyy65zt75xkWSaAc3hXiPk_ODOYQ,1620
|
|
61
|
+
bindsight/report/web/templates/evidence.html.j2,sha256=yWtO59iY64GAj-rIhgfk9Fpf59wvSt0Au7070PdLKnk,14870
|
|
62
|
+
bindsight/report/web/templates/overview.html.j2,sha256=UjcgM7LW0XpugrId_PKxBoYX3hiSA-EIN8WWTTf4sdo,5617
|
|
63
|
+
bindsight/report/web/templates/runs.html.j2,sha256=Y6m7arCv6J6ygkhUWPPGH6LwZzuFPJjb1OAL5Jr8HPY,5025
|
|
64
|
+
bindsight/report/web/templates/try.html.j2,sha256=-UA7-5X36eJXs6itz5wQyJqLpq7U1FIpdULQPUR8o9k,5710
|
|
65
|
+
bindsight/report/web/templates/your_data.html.j2,sha256=qKZlV4C271W9L4qFWMBml-N27niPxLulmHtrRtlel8g,1823
|
|
66
|
+
bindsight/runners/__init__.py,sha256=BTNeNMySM2ebrVDsWbL1nAFVxw7PQKpOXpPNNuflnNs,331
|
|
67
|
+
bindsight/runners/colab.py,sha256=9vaJFHLpr18NqSdig6ic_hx7yfr0HusPTh6UOOJBYi4,5983
|
|
68
|
+
bindsight/runners/job_exec.py,sha256=qviBYVomjEgvxUdSEm4jSIG0IBht38_lQH39z1yvj6g,47633
|
|
69
|
+
bindsight/runners/kaggle.py,sha256=TEvqmEQEA33awuIyvO7D2XOGQ6OPN3qogeHHSQjUM8E,17988
|
|
70
|
+
bindsight/runners/kaggle_kernel.py,sha256=NSCd-aHn0hdcfeCil1OT9PVuRnCEOslbNqQdNje49W8,23884
|
|
71
|
+
bindsight/runners/local_docker.py,sha256=1m0C5lfY_xPFN-i8WHalDp0-Zc_FFhTqA9_kqu4nZwY,5602
|
|
72
|
+
bindsight/runners/mock.py,sha256=L6a5Xz8mKmFQG-ofpbzapv9CZKGRGP6cUVBhq2UY44A,6784
|
|
73
|
+
bindsight/runners/modal_runner.py,sha256=XMKNHFu1VT7yj7UT5SJH0GPsPxnynUyv1u1eKALjGZI,7875
|
|
74
|
+
bindsight/runners/notebook.py,sha256=vWwJ7XQ_dcRWRQ3NCvz8SSpyRFK2-DIcgTZHU5-5bHk,3624
|
|
75
|
+
bindsight/runners/notebook_content.py,sha256=2svTCfauBqYoSjm4FocDi8cgllVuO2O1hKVmTizyw0Q,8671
|
|
76
|
+
bindsight/runners/protocol.py,sha256=vfbPd31ANhREZDQHhbSXDW5y7bBExjer-vLKk7Ox8cM,2438
|
|
77
|
+
bindsight/runners/source_wheel.py,sha256=SAl5Bi36yq1ra7sGp1yEh3dUyWDzbKO2kjJM5zn6Nh0,3945
|
|
78
|
+
bindsight/runners/tools.py,sha256=TYE3XTjG_GQRHZ11rbD5dBwn-cc3OFJyalYIUgxIEjA,41235
|
|
79
|
+
bindsight/structures/__init__.py,sha256=MlEy-xJttJV76aiw2EHf0zWZzQmv0IDCc8UORg2pkGs,281
|
|
80
|
+
bindsight/structures/alphafolddb.py,sha256=J25b1SWUXsTpwhBdkvuFt9hsQ2PKfPDIiNQcxUxMaqQ,2979
|
|
81
|
+
bindsight/structures/plddt.py,sha256=kavRKPGryg_fBESwM0xvYDkEpIX8wY1YGF8G9D0NRGU,3199
|
|
82
|
+
bindsight/structures/topology.py,sha256=lXg1kZIZPQ1R8PcJAhgCbdheCbMbuaZZyvDXYmA-Zjs,9448
|
|
83
|
+
bindsight/surfaceome/__init__.py,sha256=6YBffo_Xid0MnaVe_jBKfKtuufxmi2t45PQACnZWmYE,1384
|
|
84
|
+
bindsight/surfaceome/surfy.py,sha256=4KwtAkwidtApopjc-gtoIImHXn7l6Dr-f9KMwrUpHFc,16958
|
|
85
|
+
bindsight/targets/__init__.py,sha256=C9hqs6FuosDW9hQuaRxQNc-117WuH5A433JGGHBeSnw,314
|
|
86
|
+
bindsight/targets/ensembl_uniprot.py,sha256=EjZm4Ul3103kwIVggOzZpQUOmz5du5AJ8c4J81IIskU,2286
|
|
87
|
+
bindsight/targets/gtex.py,sha256=I8ykBZ9qq2ofQCbh6HL8KXJU33mQpSW3jNB5hsk7mdE,10094
|
|
88
|
+
bindsight/targets/open_targets.py,sha256=xKZXMHAKlLjSE0ZRmB3fMJhpodqkACtAc3_60yiKmYM,8487
|
|
89
|
+
bindsight/validate/__init__.py,sha256=7YB73cV8xeCdRUSlOupm6basTekQ0ASK7YE5oUQ76aI,276
|
|
90
|
+
bindsight/validate/af2_ig.py,sha256=ZNdepi0FZK32tzMC1-qhyQqaE-xkesDbzPDUJ797LpA,1952
|
|
91
|
+
bindsight/validate/boltz2.py,sha256=9Vs52qDcF3tYa32HaG2OrbY8NV8GYJ6vsGBipRnolJA,9837
|
|
92
|
+
bindsight/validate/chai1r.py,sha256=8WYkytpEgTIgOeobEen8P2jAmX2pdW-MLpRtk9PFm5Q,1490
|
|
93
|
+
bindsight/validate/protocol.py,sha256=2vw3o-Vxpk4UCeLXl4SWRG7X5TjR9dHeleVghBxeuHA,6818
|
|
94
|
+
bindsight/report/templates/report.css,sha256=sVVU18a0PDx30ed4MkR2uOgZwbRd-1suDB9xLwlU6DY,2355
|
|
95
|
+
bindsight/report/templates/report.html.j2,sha256=9d_mun3rYTTT6mztgInB1HYjnlKpQTh0LUcKhiU5JZ8,17540
|
|
96
|
+
bindsight/surfaceome/data/surfaceome_extended.tsv,sha256=2bC_zliu-4IJ8vKwHXuOnVPoa1bEmD0CVHhZpgtXau4,191247
|
|
97
|
+
bindsight/surfaceome/data/surfy_offline.txt,sha256=JvbfIMAU8UKEgd1jYvnPrAr4EDNIa9dVesNzzlQCS9g,490
|
|
98
|
+
bindsight/surfaceome/data/surfy_v1.ensembl.tsv,sha256=QZk_omgb1ExX0yEj6TiBIr8f6kPGsBdBTuitJb33VzI,77920
|
|
99
|
+
bindsight/surfaceome/data/surfy_v1.uniprot.txt,sha256=TiokuYr7KKif52yd6ctAqIjfN2PkJ6n_Bpx4REF5ZxU,21033
|
|
100
|
+
bindsight-0.3.5.data/data/bindsight_demo/config.yaml,sha256=bqbGZlS1xL8PEDOF5b2aysRPI4U5tTnjXv6Vp6Y0YQ8,2276
|
|
101
|
+
bindsight-0.3.5.dist-info/METADATA,sha256=Ze4kRvwqvwBGPut35NZ6gfGj3Z4u6QVqgXpCM3K5UdE,26898
|
|
102
|
+
bindsight-0.3.5.dist-info/WHEEL,sha256=THafob7ofN-NsuMN7Mg4qZyHaQI7KkD-QlcQatYhXPo,87
|
|
103
|
+
bindsight-0.3.5.dist-info/entry_points.txt,sha256=zAgJtW_ZofdLTRiP60-lwH6QqnFagl70lVV_IFHyr7o,740
|
|
104
|
+
bindsight-0.3.5.dist-info/licenses/COPYRIGHT,sha256=vOgzY1O_lBhftGC1Xyh3Ke-bh2LY66sxTR0k8hodU5g,1296
|
|
105
|
+
bindsight-0.3.5.dist-info/licenses/LICENSE,sha256=tsz9sSYFXXPRYM2B0YodlBIj_wpPTD983fe-QxxuYx0,35564
|
|
106
|
+
bindsight-0.3.5.dist-info/RECORD,,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[console_scripts]
|
|
2
|
+
bindsight = bindsight.cli:main
|
|
3
|
+
bindsight-design = bindsight.runners.job_exec:main
|
|
4
|
+
|
|
5
|
+
[bindsight.designers]
|
|
6
|
+
bindcraft = bindsight.design.bindcraft:BindCraftDesigner
|
|
7
|
+
boltzgen = bindsight.design.boltzgen:BoltzGenDesigner
|
|
8
|
+
rfdiff_mpnn = bindsight.design.rfdiff_mpnn:RFdiffMPNNDesigner
|
|
9
|
+
|
|
10
|
+
[bindsight.runners]
|
|
11
|
+
colab = bindsight.runners.colab:ColabRunner
|
|
12
|
+
kaggle = bindsight.runners.kaggle:KaggleRunner
|
|
13
|
+
local_docker = bindsight.runners.local_docker:LocalDockerRunner
|
|
14
|
+
mock = bindsight.runners.mock:MockRunner
|
|
15
|
+
modal = bindsight.runners.modal_runner:ModalRunner
|
|
16
|
+
|
|
17
|
+
[bindsight.validators]
|
|
18
|
+
af2_ig = bindsight.validate.af2_ig:AF2IGValidator
|
|
19
|
+
boltz2 = bindsight.validate.boltz2:Boltz2Validator
|
|
20
|
+
chai1r = bindsight.validate.chai1r:Chai1rValidator
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
bindsight — a reproducible bridge from RNA-seq to de novo protein binder design
|
|
2
|
+
|
|
3
|
+
Copyright (C) 2026 Mikhaeel Atef Rizk Wahba <mikhaeelatefrizk@proton.me>
|
|
4
|
+
ORCID: https://orcid.org/0009-0006-1069-9558
|
|
5
|
+
|
|
6
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
7
|
+
the terms of the GNU Affero General Public License as published by the Free
|
|
8
|
+
Software Foundation, either version 3 of the License, or (at your option) any
|
|
9
|
+
later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
12
|
+
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
13
|
+
PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Affero General Public License along
|
|
16
|
+
with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
|
|
18
|
+
The full licence text is in LICENSE, which holds the verbatim AGPL-3.0 and
|
|
19
|
+
nothing else so that automated licence detection resolves it correctly.
|
|
20
|
+
|
|
21
|
+
Per-file copyright and licence are also declared as SPDX headers throughout the
|
|
22
|
+
source tree. Component-level terms — bindsight orchestrates external tools that
|
|
23
|
+
keep their own licences, some with non-commercial restrictions — are inventoried
|
|
24
|
+
in LICENSING.md, which is the source of truth for commercial use.
|