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.
Files changed (106) hide show
  1. bindsight/README.md +44 -0
  2. bindsight/__init__.py +15 -0
  3. bindsight/benchmark/__init__.py +71 -0
  4. bindsight/benchmark/core.py +497 -0
  5. bindsight/benchmark/defaults.py +28 -0
  6. bindsight/benchmark/designer_bench.py +899 -0
  7. bindsight/benchmark/outcomes.py +508 -0
  8. bindsight/benchmark/panel.py +621 -0
  9. bindsight/benchmark/rediscovery.py +1153 -0
  10. bindsight/benchmark/statistics.py +622 -0
  11. bindsight/benchmark/study.py +1153 -0
  12. bindsight/benchmark/study_figures.py +164 -0
  13. bindsight/benchmark/study_report.py +607 -0
  14. bindsight/cli.py +2429 -0
  15. bindsight/config.py +451 -0
  16. bindsight/cost.py +258 -0
  17. bindsight/deg/__init__.py +7 -0
  18. bindsight/deg/pydeseq2_runner.py +285 -0
  19. bindsight/design/__init__.py +23 -0
  20. bindsight/design/_common.py +501 -0
  21. bindsight/design/bindcraft.py +78 -0
  22. bindsight/design/boltzgen.py +79 -0
  23. bindsight/design/developability.py +140 -0
  24. bindsight/design/embeddings.py +165 -0
  25. bindsight/design/prescreen.py +169 -0
  26. bindsight/design/protocol.py +111 -0
  27. bindsight/design/rfdiff_mpnn.py +93 -0
  28. bindsight/epitopes/__init__.py +7 -0
  29. bindsight/epitopes/surface_bind.py +134 -0
  30. bindsight/export/__init__.py +7 -0
  31. bindsight/export/ro_crate.py +595 -0
  32. bindsight/io/__init__.py +19 -0
  33. bindsight/io/cbioportal.py +118 -0
  34. bindsight/io/gdc.py +343 -0
  35. bindsight/io/paths.py +124 -0
  36. bindsight/pipelines/__init__.py +9 -0
  37. bindsight/pipelines/caveats.py +60 -0
  38. bindsight/pipelines/discover.py +1443 -0
  39. bindsight/pipelines/full_run.py +410 -0
  40. bindsight/plugins.py +335 -0
  41. bindsight/provenance/__init__.py +34 -0
  42. bindsight/provenance/append.py +199 -0
  43. bindsight/provenance/fragments.py +216 -0
  44. bindsight/provenance/manifest.py +506 -0
  45. bindsight/rank/__init__.py +7 -0
  46. bindsight/rank/scoring.py +355 -0
  47. bindsight/report/__init__.py +39 -0
  48. bindsight/report/format.py +100 -0
  49. bindsight/report/html.py +645 -0
  50. bindsight/report/showcase.py +653 -0
  51. bindsight/report/templates/report.css +67 -0
  52. bindsight/report/templates/report.html.j2 +420 -0
  53. bindsight/report/theme.py +231 -0
  54. bindsight/report/web/__init__.py +35 -0
  55. bindsight/report/web/app.py +624 -0
  56. bindsight/report/web/static/binder_viewer.js +245 -0
  57. bindsight/report/web/static/bindsight.css +455 -0
  58. bindsight/report/web/static/charts.js +425 -0
  59. bindsight/report/web/static/vendor/3Dmol-min.js +2 -0
  60. bindsight/report/web/static/vendor/3Dmol.LICENSE +90 -0
  61. bindsight/report/web/static/your_data_check.js +370 -0
  62. bindsight/report/web/templates/base.html.j2 +48 -0
  63. bindsight/report/web/templates/evidence.html.j2 +341 -0
  64. bindsight/report/web/templates/overview.html.j2 +140 -0
  65. bindsight/report/web/templates/runs.html.j2 +125 -0
  66. bindsight/report/web/templates/try.html.j2 +155 -0
  67. bindsight/report/web/templates/your_data.html.j2 +46 -0
  68. bindsight/runners/__init__.py +7 -0
  69. bindsight/runners/colab.py +158 -0
  70. bindsight/runners/job_exec.py +1110 -0
  71. bindsight/runners/kaggle.py +425 -0
  72. bindsight/runners/kaggle_kernel.py +489 -0
  73. bindsight/runners/local_docker.py +154 -0
  74. bindsight/runners/mock.py +167 -0
  75. bindsight/runners/modal_runner.py +199 -0
  76. bindsight/runners/notebook.py +116 -0
  77. bindsight/runners/notebook_content.py +217 -0
  78. bindsight/runners/protocol.py +81 -0
  79. bindsight/runners/source_wheel.py +104 -0
  80. bindsight/runners/tools.py +997 -0
  81. bindsight/structures/__init__.py +7 -0
  82. bindsight/structures/alphafolddb.py +93 -0
  83. bindsight/structures/plddt.py +92 -0
  84. bindsight/structures/topology.py +227 -0
  85. bindsight/surfaceome/__init__.py +42 -0
  86. bindsight/surfaceome/data/surfaceome_extended.tsv +4814 -0
  87. bindsight/surfaceome/data/surfy_offline.txt +17 -0
  88. bindsight/surfaceome/data/surfy_v1.ensembl.tsv +3380 -0
  89. bindsight/surfaceome/data/surfy_v1.uniprot.txt +2901 -0
  90. bindsight/surfaceome/surfy.py +441 -0
  91. bindsight/targets/__init__.py +7 -0
  92. bindsight/targets/ensembl_uniprot.py +56 -0
  93. bindsight/targets/gtex.py +250 -0
  94. bindsight/targets/open_targets.py +239 -0
  95. bindsight/validate/__init__.py +7 -0
  96. bindsight/validate/af2_ig.py +49 -0
  97. bindsight/validate/boltz2.py +256 -0
  98. bindsight/validate/chai1r.py +42 -0
  99. bindsight/validate/protocol.py +188 -0
  100. bindsight-0.3.5.data/data/bindsight_demo/config.yaml +54 -0
  101. bindsight-0.3.5.dist-info/METADATA +495 -0
  102. bindsight-0.3.5.dist-info/RECORD +106 -0
  103. bindsight-0.3.5.dist-info/WHEEL +4 -0
  104. bindsight-0.3.5.dist-info/entry_points.txt +20 -0
  105. bindsight-0.3.5.dist-info/licenses/COPYRIGHT +24 -0
  106. 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
+ [![CI](https://github.com/mikhaeelatefrizk/bindsight/actions/workflows/ci.yml/badge.svg)](https://github.com/mikhaeelatefrizk/bindsight/actions/workflows/ci.yml)
97
+ [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](LICENSE)
98
+ [![Python: 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
99
+ [![Workflow: Snakemake](https://img.shields.io/badge/workflow-Snakemake-brightgreen.svg)](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,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.3
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -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.