Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: CI

on:
push:
pull_request:

permissions:
contents: read

jobs:
test:
name: Test (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
- name: Install package and test dependencies
run: python -m pip install --upgrade pip && python -m pip install -e ".[test]"
- name: Run unit tests
run: python -m pytest

package:
name: Validate distributions
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
- name: Install build tools
run: python -m pip install --upgrade pip build twine
- name: Build source and wheel distributions
run: python -m build
- name: Inspect wheel contents
shell: python
run: |
import glob
import zipfile

wheel, = glob.glob("dist/*.whl")
with zipfile.ZipFile(wheel) as archive:
names = set(archive.namelist())
required = {
"clear/__init__.py",
"clear/hub.py",
"clear/concepts.py",
"clear/bpe_simple_vocab_16e6.txt.gz",
}
missing = required.difference(names)
if missing:
raise SystemExit(f"wheel is missing required files: {sorted(missing)}")
- name: Validate distribution metadata
run: python -m twine check dist/*
73 changes: 73 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
cff-version: 1.2.0
message: "If you use CLEAR, please cite the Nature Biomedical Engineering article."
title: "CLEAR: Concept-Level Embeddings for Auditable Radiology"
type: software
authors:
- family-names: Han
given-names: Tianyu
orcid: "https://orcid.org/0000-0002-8636-6462"
- family-names: Wu
given-names: Riga
- family-names: Tian
given-names: Yu
- family-names: Khader
given-names: Firas
- family-names: Adams
given-names: Lisa C.
orcid: "https://orcid.org/0000-0001-5836-4542"
- family-names: Bressem
given-names: Keno K.
orcid: "https://orcid.org/0000-0001-9249-8624"
- family-names: Davatzikos
given-names: Christos
orcid: "https://orcid.org/0000-0002-1025-8561"
- family-names: Kather
given-names: Jakob Nikolas
- family-names: Shen
given-names: Li
orcid: "https://orcid.org/0000-0002-5443-0503"
- family-names: Mankoff
given-names: David A.
- family-names: Barbosa
given-names: Eduardo Mortani
name-suffix: Jr.
- family-names: Truhn
given-names: Daniel
orcid: "https://orcid.org/0000-0002-9605-0728"
repository-code: "https://github.com/peterhan91/CLEAR"
url: "https://github.com/peterhan91/CLEAR"
license: Apache-2.0
version: 0.1.0
preferred-citation:
type: article
authors:
- family-names: Han
given-names: Tianyu
- family-names: Wu
given-names: Riga
- family-names: Tian
given-names: Yu
- family-names: Khader
given-names: Firas
- family-names: Adams
given-names: Lisa C.
- family-names: Bressem
given-names: Keno K.
- family-names: Davatzikos
given-names: Christos
- family-names: Kather
given-names: Jakob Nikolas
- family-names: Shen
given-names: Li
- family-names: Mankoff
given-names: David A.
- family-names: Barbosa
given-names: Eduardo Mortani
name-suffix: Jr.
- family-names: Truhn
given-names: Daniel
title: "CLEAR: an auditable foundation model for radiology grounded in clinical concepts"
journal: Nature Biomedical Engineering
year: 2026
doi: "10.1038/s41551-026-01741-4"
url: "https://doi.org/10.1038/s41551-026-01741-4"
Loading
Loading