Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d88b6d6
trame-based display
d33bs Jan 20, 2026
d9480fc
add 3d image example data for testing
d33bs Feb 4, 2026
88b1aa8
3d framing
d33bs Feb 6, 2026
be39b25
visual adjustments
d33bs Feb 6, 2026
4a1e016
docs, tests, notebook example
d33bs Feb 6, 2026
eb8c0e0
linting
d33bs Feb 6, 2026
868289a
Merge remote-tracking branch 'upstream/main' into 3d-views
d33bs Feb 6, 2026
aad54e5
Update poetry.lock
d33bs Feb 6, 2026
8c12d3c
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 6, 2026
70c082a
updates for test coverage
d33bs Feb 7, 2026
9d0b7f6
Merge branch '3d-views' of https://github.com/d33bs/CytoDataFrame int…
d33bs Feb 7, 2026
16fc2cc
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 7, 2026
2731076
remove unused zarr test data
d33bs Feb 7, 2026
cd5d0a1
address coderabbit review suggestions
d33bs Feb 8, 2026
538a0a7
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 8, 2026
42403c4
address coderabbit review suggestions
d33bs Feb 8, 2026
1412b75
Merge branch '3d-views' of https://github.com/d33bs/CytoDataFrame int…
d33bs Feb 8, 2026
cf69724
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 8, 2026
480a394
address copilot review suggestions
d33bs Feb 11, 2026
284bdd7
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 11, 2026
4671240
updates from copilot review
d33bs Feb 11, 2026
56d8145
Merge branch '3d-views' of https://github.com/d33bs/CytoDataFrame int…
d33bs Feb 11, 2026
e6a11d0
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 11, 2026
be125a6
readd pytest-cov
d33bs Feb 11, 2026
e0dc274
Merge branch '3d-views' of https://github.com/d33bs/CytoDataFrame int…
d33bs Feb 11, 2026
b6b4ce6
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 11, 2026
2840efd
address coderabbit review suggestions
d33bs Feb 11, 2026
a6c1ece
address issues with pyproject file
d33bs Feb 11, 2026
6b63728
Merge branch '3d-views' of https://github.com/d33bs/CytoDataFrame int…
d33bs Feb 11, 2026
ce75b7f
Update pyproject.toml
d33bs Feb 11, 2026
9891815
update lockfile
d33bs Feb 11, 2026
01286fd
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 11, 2026
8c68c7c
fix installs and code cov
d33bs Feb 12, 2026
b73c60d
Merge branch '3d-views' of https://github.com/d33bs/CytoDataFrame int…
d33bs Feb 12, 2026
79600ad
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 12, 2026
72cfce8
override opts
d33bs Feb 12, 2026
00d8c5a
Merge branch '3d-views' of https://github.com/d33bs/CytoDataFrame int…
d33bs Feb 12, 2026
17d34d4
fix yaml issue
d33bs Feb 12, 2026
580efc8
Update cytodataframe_at_a_glance.ipynb
d33bs Feb 12, 2026
e1b8518
Update cytodataframe_at_a_glance.py
d33bs Feb 12, 2026
c245afa
remove col specificity for 3d example
d33bs Feb 12, 2026
f35f8e8
docstring for build_3d_image_html_stub
d33bs Feb 12, 2026
7a466f4
updates from review
d33bs Feb 12, 2026
3631851
[pre-commit.ci lite] apply automatic fixes
pre-commit-ci-lite[bot] Feb 12, 2026
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
12 changes: 7 additions & 5 deletions .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# used for running tests
name: tests

on:
"on":
push:
branches: [main]
pull_request:
Expand All @@ -28,7 +28,7 @@ jobs:
run: |
poetry version 99.0.0
- name: Install environment
run: poetry install --no-interaction --no-ansi
run: poetry install --with dev --no-interaction --no-ansi
# run pre-commit
- uses: pre-commit/action@v3.0.1
id: pre_commit
Expand Down Expand Up @@ -57,15 +57,17 @@ jobs:
run: |
poetry version 99.0.0
- name: Install environment
run: poetry install --no-interaction --no-ansi
run: poetry install --with dev --no-interaction --no-ansi
- name: Run pytest (non-3.13)
if: ${{ matrix.python_version != '3.13' }}
# run all tests
run: poetry run pytest
run: poetry run pytest -o addopts=
- name: Run pytest (py 3.13)
if: ${{ matrix.python_version == '3.13' }}
# run all tests except integration tests with cosmicqc
run: poetry run pytest --ignore=tests/test_project_integration.py
run: |
poetry run pytest -o addopts= \
--ignore=tests/test_project_integration.py
- name: Reset version to 0.0.0
run: |
poetry version 0.0.0
12 changes: 7 additions & 5 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ repos:
.*\.lock |
.*\.json |
.*\.ipynb |
.*\.cppipe
.*\.cppipe |
tests/data/CP_tutorial_3D_noise_nuclei_segmentation/output/MyExpt_Experiment\.csv
)$
- repo: https://github.com/executablebooks/mdformat
rev: 0.7.18
Expand All @@ -53,25 +54,26 @@ repos:
hooks:
- id: actionlint
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.14.14"
rev: "v0.15.0"
hooks:
- id: ruff-format
- id: ruff-check
Comment thread
coderabbitai[bot] marked this conversation as resolved.
- repo: https://github.com/software-gardening/almanack
rev: v0.1.13
rev: v0.1.15
hooks:
- id: almanack-check
- repo: https://gitlab.com/vojko.pribudic.foss/pre-commit-update
rev: v0.6.0
hooks:
- id: pre-commit-update
args: ["--keep", "mdformat", "--keep", "pre-commit-update", "--keep", "cffconvert"]
args: ["--keep", "mdformat", "--keep", "pre-commit-update", "--keep", "cffconvert",
"--keep", "pyproject-fmt"]
- repo: local
hooks:
- id: code-cov-gen
name: Generate code coverage
language: system
entry: poetry run coverage run -m pytest
entry: poetry run coverage run -m pytest -o addopts=
pass_filenames: false
always_run: true
- repo: https://github.com/Weird-Sheep-Labs/coverage-pre-commit
Expand Down
36 changes: 36 additions & 0 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,39 @@ references:
JUMP (cpg0000-jump-pilot) was used to help demonstrate CytoDataFrame performance
with large data. See here for more information:
https://github.com/broadinstitute/cellpainting-gallery
- type: article
authors:
- family-names: Blin
given-names: Guillaume
- family-names: Sadurska
given-names: Dominika
- family-names: Portero Migueles
given-names: Rafael
- family-names: Chen
given-names: Ni
- family-names: Watson
given-names: James A.
- family-names: Lowell
given-names: Sally
title: "Nessys: A new set of tools for the automated detection of nuclei within intact tissues and dense 3D cultures"
journal: PLoS Biology
volume: "17"
issue: "8"
pages: e3000388
year: 2019
doi: "10.1371/journal.pbio.3000388"
url: "https://doi.org/10.1371/journal.pbio.3000388"
notes: >
This work used the file "6001240_labels.zarr" from the DISCEPTS imaging
dataset, available through the Image Data Resource (IDR) under accession
number idr0062.
- type: data
title: "3D Noise Nuclei Segmentation Tutorial"
authors:
- name: "CellProfiler Tutorials Team"
url: "https://tutorials.cellprofiler.org/#3d-noise-nuclei-segmentation"
publisher:
name: "CellProfiler Organization"
notes: >
This work uses data that were slightly modified from the
CellProfiler 3D Noise Nuclei Segmentation tutorial.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ With CytoDataFrame you can:
- View image objects alongside their feature data using a Pandas DataFrame-like interface.
- Highlight image objects using mask or outline files to understand their segmentation.
- Adjust image displays on-the-fly using interactive slider widgets.
- Automatically detect 3D image volumes and render interactive [trame](https://github.com/Kitware/trame) views in notebooks when 3D dependencies are installed (with graceful fallback otherwise).

For 3D notebook display behavior:

- 3D-aware rendering is enabled by default (`display_options={"auto_trame_for_3d": True}`).
- Disable automatic trame switching with `display_options={"auto_trame_for_3d": False}`.
- Force trame layout regardless of auto-detection with `display_options={"view": "trame"}`.

📓 ___Want to see CytoDataFrame in action?___ Check out our [example notebook](docs/src/examples/cytodataframe_at_a_glance.ipynb) for a quick tour of its key features.

Expand Down
3 changes: 3 additions & 0 deletions docs/src/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ You can run pytest on your work using the following example:
% poetry run pytest
```

Pytest output includes a terminal coverage summary to help track current
coverage and uncovered lines.

## Making changes to this repository

We welcome anyone to use [GitHub issues](https://docs.github.com/en/issues/tracking-your-work-with-issues/about-issues) (requires a GitHub login) or create [pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) (to directly make changes within this repository) to modify content found within this repository.
Expand Down
1,581 changes: 126 additions & 1,455 deletions docs/src/examples/cytodataframe_at_a_glance.ipynb

Large diffs are not rendered by default.

20 changes: 18 additions & 2 deletions docs/src/examples/cytodataframe_at_a_glance.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
# extension: .py
# format_name: light
# format_version: '1.5'
# jupytext_version: 1.18.1
# jupytext_version: 1.17.3
# kernelspec:
# display_name: Python 3 (ipykernel)
# display_name: cytodataframe-shAZamSV-py3.12
Comment thread
d33bs marked this conversation as resolved.
# language: python
# name: python3
# ---
Expand Down Expand Up @@ -338,3 +338,19 @@

# read OME Parquet file into the CytoDataFrame
CytoDataFrame(data="example.ome.parquet")

# +
# %%time
# 3D example dataset, showing how
# CytoDataFrame can be used with 3D data for visualization.
cp_3d_path = "../../../tests/data/CP_tutorial_3D_noise_nuclei_segmentation"

# send the data to CytoDataFrame
# note: because we have 3d input images, CytoDataFrame will automatically process
# using the 3D display options for interactive visualization.
cdf = CytoDataFrame(
data=pathlib.Path(cp_3d_path) / "output/MyExpt_RealsizeNuclei.csv",
data_context_dir=str(pathlib.Path(cp_3d_path) / "input"),
)

cdf[["ImageNumber", "ObjectNumber", "FileName_Nuclei"]][:3]
2 changes: 1 addition & 1 deletion media/coverage-badge.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading