Metadata-Version: 2.4
Name: mcmcscreen
Version: 0.1.0
Summary: Uncertainty-aware drug candidate screening via Bayesian MCMC with permanent Arweave archiving
Home-page: https://github.com/kdh4win4/mcmcscreen
Author: Dohoon Kim
Author-email: dkim@promptgenix.org
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pymc>=5.0
Requires-Dist: arviz>=0.16
Requires-Dist: numpy>=1.24
Requires-Dist: scipy>=1.10
Requires-Dist: requests>=2.28
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# MCMCScreen

**Uncertainty-aware drug candidate screening via Bayesian MCMC with permanent Arweave archiving.**

MCMCScreen applies Bayesian Markov Chain Monte Carlo (MCMC) inference to dose-response data, quantifies prediction uncertainty for each drug candidate, and permanently archives screening results on the Arweave decentralized network.

## Why MCMCScreen?

AI-driven drug discovery pipelines generate thousands of candidate molecules — but most tools report point estimates without uncertainty. MCMCScreen addresses this gap by:

- Fitting a Bayesian Hill equation model to dose-response data via MCMC
- Ranking candidates by posterior IC50 estimates
- Flagging unreliable predictions (high uncertainty CV)
- Archiving all results permanently on Arweave (immutable, verifiable)

## Installation

```bash
pip install mcmcscreen
```

## Quick Start

```python
from mcmcscreen import MCMCScreener, ArweaveUploader

# Define candidates
candidates = [
    {
        "id": "compound_A",
        "concentrations": [0.1, 0.3, 1.0, 3.0, 10.0, 30.0],
        "responses": [2, 8, 25, 55, 80, 92],
    },
    {
        "id": "compound_B",
        "concentrations": [0.1, 0.3, 1.0, 3.0, 10.0, 30.0],
        "responses": [1, 3, 10, 30, 60, 85],
    },
]

# Screen and rank
screener = MCMCScreener(n_samples=1000, n_chains=2, random_seed=42)
ranked = screener.screen(candidates)

for r in ranked:
    print(f"{r['compound_id']}: IC50={r['ic50_mean']:.2f} uM, reliable={r['reliable']}")

# Archive to Arweave
screener.fit(
    candidates[0]["concentrations"],
    candidates[0]["responses"],
    compound_id="compound_A"
)
manifest = screener.to_manifest()
uploader = ArweaveUploader()  # mock mode without wallet
result = uploader.upload(manifest)
print(result)
```

## Features

- Bayesian Hill equation dose-response modeling (PyMC 5)
- Posterior IC50 estimation with HDI (highest density interval)
- Uncertainty coefficient of variation (CV) flagging
- Multi-candidate ranking
- Arweave permanent archiving (mock mode available)
- Fully reproducible (fixed random seed)

## Citation

If you use MCMCScreen, please cite:

> Kim, D. (2026). MCMCScreen: Uncertainty-aware drug candidate screening via Bayesian MCMC with permanent Arweave archiving. Promptgenix LLC.

## License

MIT License. Copyright (c) 2026 Dohoon Kim, Promptgenix LLC.
