Metadata-Version: 2.4
Name: omnipose
Version: 2.0.0
Summary: Omnipose: cell segmentation algorithm and GUI
Author-email: Kevin Cutler <kevinjohncutler@outlook.com>
License-Expression: MIT
Project-URL: Homepage, https://github.com/kevinjohncutler/omnipose
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: ocdkit>=0.0.8
Requires-Dist: numba>=0.61.0
Requires-Dist: numpy
Requires-Dist: scipy
Requires-Dist: edt
Requires-Dist: scikit-image>=0.26
Requires-Dist: ncolor>=1.4.3
Requires-Dist: torch>=1.10
Requires-Dist: torchvision
Requires-Dist: mgen
Requires-Dist: matplotlib
Requires-Dist: ipywidgets
Requires-Dist: torchvf
Requires-Dist: tqdm
Requires-Dist: natsort
Requires-Dist: bioio
Requires-Dist: bioio-czi
Requires-Dist: numexpr
Requires-Dist: torch_optimizer
Requires-Dist: tifffile
Requires-Dist: fastremap
Requires-Dist: cmap
Requires-Dist: dbscan
Requires-Dist: imagecodecs
Requires-Dist: opensimplex
Requires-Dist: dask
Provides-Extra: gui
Requires-Dist: imageio; extra == "gui"
Requires-Dist: pywebview; extra == "gui"
Requires-Dist: fastapi; extra == "gui"
Requires-Dist: uvicorn; extra == "gui"
Provides-Extra: all
Requires-Dist: omnipose[gui]; extra == "all"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: coverage; extra == "dev"
Requires-Dist: genbadge[coverage]; extra == "dev"
Requires-Dist: nbformat; extra == "dev"
Requires-Dist: nbclient; extra == "dev"
Requires-Dist: ipykernel; extra == "dev"
Dynamic: license-file

# Omnipose Refactor (WIP)

![coverage](badges/coverage.svg)

This folder hosts a clean, minimal re-implementation of Omnipose with two separable packages:

- `omnipose`: the core Omnipose package (ND-first, backwards-compatible API)
- `omnitools`: shared utilities (plotting, file management, transforms)

The goal is to preserve all current model behaviors and outputs while simplifying structure and removing unused Cellpose code paths.

## Goals
- Preserve model logic and argument semantics for backwards compatibility.
- Ensure identical outputs for existing models.
- Prioritize ND implementations; port 2D-only code only for outline plotting utilities.
- Separate generic plotting/file/transforms into `omnitools`.
- Keep tests and GUI functional.
- Avoid nested class overrides (e.g., `UnetModel`/`CellposeModel`/`Cellpose`).

## Progress
- [x] Define target package structure and module mapping.
- [x] Create parity test harness for side-by-side comparisons.
- [ ] Identify and extract shared utilities into `omnitools`.
- [ ] Port ND-centric core and model definitions.
- [ ] Migrate GUI bindings to new package entrypoints.
- [ ] Verify model output parity and update tests.

## Module Mapping (Draft)
Goal: keep ND-first logic intact and avoid behavior changes. This is a starting map.

| Current module | Target module | Notes |
| --- | --- | --- |
| `src/omnipose/core.py` | `refactor/src/omnipose/core.py` | ND-centric core + model logic; preserve function signatures |
| `src/omnipose/data.py` | `refactor/src/omnipose/data.py` | Data I/O and preprocessing; confirm ND handling |
| `src/omnipose/loss.py` | `refactor/src/omnipose/loss.py` | Model losses; keep outputs identical |
| `src/omnipose/gpu.py` | `refactor/src/omnipose/gpu.py` | Device selection/helpers |
| `src/omnipose/measure.py` | `refactor/src/omnipose/measure.py` | Metrics/measurements; ND-first |
| `src/omnipose/stacks.py` | `refactor/src/omnipose/stacks.py` | Volume stack helpers |
| `src/omnipose/cli.py` | `refactor/src/omnipose/cli.py` | CLI entry; keep flags/args |
| `src/omnipose/__main__.py` | `refactor/src/omnipose/__main__.py` | CLI entrypoint |
| `src/omnipose/dependencies.py` | `refactor/src/omnipose/dependencies.py` | Dependency checks (keep lazy imports) |
| `src/omnipose/logger.py` | `refactor/src/omnipose/logger.py` | Logging setup |
| `src/omnipose/profiling.py` | `refactor/src/omnipose/profiling.py` | Profiling utilities |
| `src/omnipose/color.py` | `refactor/src/omnitools/color.py` | Generic color utilities |
| `src/omnipose/plot.py` | `refactor/src/omnitools/plot.py` | Plotting utils; retain 2D outline plotting |
| `src/omnipose/utils.py` | `refactor/src/omnitools/utils.py` | Generic helpers (file mgmt, transforms) |
| `src/omnipose/transforms.py` | `refactor/src/omnitools/transforms.py` | Placeholder for shared transforms |
| `src/omnipose/misc.py` | `refactor/src/omnitools/misc.py` | Dev helpers (may move subset) |
| `src/omnipose/experimental_plot/*` | `refactor/src/omnitools/experimental_plot/*` | Keep optional/experimental |

## ND Priority Notes
- ND implementations are the default; avoid porting 2D-only logic except outline plotting utilities.
- Any 2D-only modules should be isolated under `omnitools` if still needed.
- Preserve all function signatures and argument semantics for model logic and preprocessing.

## Initial `omnitools` API Targets (Draft)
- `omnitools.color`: `sinebow`
- `omnitools.plot`: `setup`, 2D outline plotting helpers
- `omnitools.utils`: `get_module`, `safe_divide`, `rescale`, `find_files`, `getname`, `to_16_bit`
- `omnitools.transforms`: shared ND transforms (placeholder)
- `omnitools.misc`: ND grid/label helpers (subset from `misc.py`)

## Notes
- Temporary package name: `omnipose` to allow co-install with existing `omnipose`.
- Parity tests live in `refactor/tests_parity/`.

## Parity Runs
- `Sample000033.png` with `bact_phase_affinity`: masks identical (CPU).
