Skip to content

Chore/repo cleanup - #94

Merged
skaliy merged 11 commits into
mainfrom
chore/repo-cleanup
Oct 27, 2026
Merged

skaliy merged 11 commits into
mainfrom
chore/repo-cleanup

Conversation

@skaliy

@skaliy skaliy commented Oct 27, 2026

Copy link
Copy Markdown
Member

No description provided.

skaliy added 11 commits October 27, 2026 09:25
…estore

Shape-based label restore decided foreground per label, so voxels where two
labels meet could fall back to background on the resampled axis. Foreground
now comes from the signed depth of all labels together and the per-label
depth only picks the label. Binary masks are bit-identical to before, so
the VS deployment output does not change.

Also in vision_core, vision_data, vision_plot and vision_inference:
- repr/print of MedImage and MedMask no longer raises
- MedImageDataLoaders.from_df passes batch_tfms on and applies path/folder
  as a file name prefix like fastai
- inference entry points cast the input to float32, as in training
- inference() can save predictions for a list of files or without fn
- show_med_img accepts numpy arrays
- the duplicated restore code of inference/inference_from_config is one
  helper; dead affine fallbacks and local imports removed
- vision_all re-exports all of vision_plot
- docstrings, page descriptions, hidden test cells
…g axis

GpuPatchAugmentation built the affine_grid theta in (x, y, z) = (W, H, D)
order from (D, H, W) vectors, so per-axis degrees and translation acted on
the reversed array axis, and scales were inverted (0.5 enlarged content).
Index i now acts on array axis i and scales follow TorchIO's meaning.
Noise std is drawn per sample from (0, std) like TorchIO, and a blur sigma
of 0 leaves the sample unchanged instead of producing NaN.

BREAKING CHANGE: GPU augmentation with per-axis degrees, translation or
scales behaves differently, so retraining with the same config (e.g. the VS
config degrees=(5, 5, 30)) sees the intended policy, not the old one.
Already trained models are unaffected.

Also: corrected list of GPU vs CPU differences, documented accepted config
forms and PadOrCrop mask_name, OneOf accepts fastMONAI wrappers, removed
the unused normalization registry alias and FocalLoss import, loss
docstrings, hidden test cells.
…masks

AccumulatedDice took an argmax over channels, so a one-channel sigmoid
model always scored 0. One channel now means sigmoid >= 0.5, and any other
channel count that does not match n_classes raises. calculate_all_metrics
raises on masks that are not binary instead of returning wrong numbers.

preprocess_dataset now validates its own cache when inputs are symlinks
whose names differ from their targets, and a metadata cache hit returns the
caller's path.

BREAKING CHANGE: removed the deprecated calculate_haus and
MedDataset.calculate_target_size, and the always-True `binary` parameter
of calculate_all_metrics and evaluate_segmentations.

Also: https IXI URLs, simpler nodule dataframe builder, docstrings, page
descriptions, dropped a citation that argues against grid-based metrics.
MedDataBlock on a dataframe with 'image'/'label' columns has no image-path
column for split logging, so ModelTrackingCallback raised in before_fit and
left the MLflow run active. The split identity now falls back to the column
get_x reads. Runs the callback starts are ended (as FAILED on errors), also
when auto_start=False finds no active run; a user's own run is never ended.

Also:
- log_metrics skips NaN and inf; MLflow stores inf as max float
- a binary patch contract must use the same threshold for patch inference
  and output decoding (checked when created, float32-tolerant)
- the MLflow UI runs with this Python's mlflow, keeps ownership of a server
  it started and shows the server's stderr when it fails to start
- docstrings, section headings, hidden test cells, dead code removed

BREAKING CHANGE: removed start_ui(auto_open=...) and
MLflowUIManager.check_mlflow_installed.
sampler_type='weighted' was accepted and documented but always raised
NotImplementedError. PatchConfig now rejects it up front.

MedPatchDataLoaders built directly from two loaders report apply_reorder,
target_spacing and patch_config from the train loader's config, so MLflow
logs the right values. Also removed dead code (an unreachable affine guard,
an unused attribute and loop variable), moved imports to the top and
updated docstrings and hidden test cells. Prediction file names, return
types and the private methods used by the VS PACS engine are unchanged.

BREAKING CHANGE: sampler_type='weighted' now raises ValueError.
- the README/index logo pointed at a URL that returns 404
- nbdev turns the whole title cell into front matter, so intro text in
  12a, 12b, 12c, 11f and 11d never rendered; it now has its own cell
- 11b passed splitter= to from_df, which ignored it and split randomly;
  it now uses valid_col
- stale prose in 11b, 11c, 11d and 12c, a dead link, typos, references to
  the removed research/vs_seg folder, and the GPU augmentation note in 12a
- CITATION.cff author name fields, CONTRIBUTING install command and
  commit convention
pandas needs xlrd>=2.0.1 for read_excel, which the IXI helpers use.
tabulate is not imported anywhere, and the PyPI quarto package is a thin
wrapper whose script shadows the real quarto CLI (it broke nbdev_readme
locally); nbdev installs the CLI itself. The allowed metadata settings were
parsed as a key literally named "True", so leaving them empty keeps
nbdev_clean behaviour the same. Also a real package description.
push and pull_request both fired for every commit on a PR branch. Pushes
now trigger CI only on main. pytest comes from the dev extras the nbdev-ci
step installs, so the separate install is gone.
The IXI test image exception was root-anchored and never matched
nbs/images/. MLflow database backups and the local todo.html were not
ignored, so `git add -A` could have committed them. Removed duplicate
rules, and tracked research/.gitignore, whose rule keeps scripts in
presentation build folders out of git.
… docs

- spine/inference_script.py used an undefined name for the save path
- spine notebook 00 used an inplace fillna that does nothing in pandas 3
- the VS deployment README test command skipped 24 of 75 tests
- the PACS guide named the old vs-seg image and listed outdated files
- broken links and Colab badges, a dead Hugging Face Space claim, stale
  version notes, a hard-coded home path, and the misspelled contributor
  surname in the VS label docs (the released v1 zip keeps the old spelling)
- removed unused aliases and re-exports in the VS workflow package

Nothing that ships in the VS PACS container changed.
Minor bump because this release removes public API and changes what GPU
patch augmentation does with per-axis degrees, translation and scales.
@skaliy
skaliy merged commit 67773f5 into main Oct 27, 2026
1 check passed
@skaliy
skaliy deleted the chore/repo-cleanup branch October 27, 2026 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant