From daa13e2f46f8832f5e52c8f7bc734896e03abb75 Mon Sep 17 00:00:00 2001 From: Igor Tatarnikov <61896994+IgorTatarnikov@users.noreply.github.com> Date: Fri, 12 Apr 2024 16:34:55 +0100 Subject: [PATCH 1/4] Cellfinder test fix (#400) --- cellfinder/core/download/download.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cellfinder/core/download/download.py b/cellfinder/core/download/download.py index 00d6dee3..cd96616f 100644 --- a/cellfinder/core/download/download.py +++ b/cellfinder/core/download/download.py @@ -2,6 +2,7 @@ import shutil import tarfile import urllib.request +from pathlib import Path from brainglobe_utils.general.config import get_config_obj from brainglobe_utils.general.system import disk_free_gb @@ -124,5 +125,8 @@ def write_model_to_config(new_model_path, orig_config, custom_config): data[i] = line.replace( f"model_path = '{orig_path}", f"model_path = '{new_model_path}" ) + + custom_config_path = Path(custom_config) + custom_config_path.parent.mkdir(parents=True, exist_ok=True) with open(custom_config, "w") as out_conf: out_conf.writelines(data) From 152ece572a10dda7c96b270f2a1c213e87ae944c Mon Sep 17 00:00:00 2001 From: Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:00:06 +0100 Subject: [PATCH 2/4] Import header from brainglobe-utils (#399) * import header from brainglobe-utils * bump brainglobe-utils version and ensure new header is created every time --- cellfinder/napari/detect/detect.py | 8 ++---- cellfinder/napari/images/brainglobe.png | Bin 21216 -> 0 bytes cellfinder/napari/train/train.py | 11 ++------ cellfinder/napari/utils.py | 35 +++++++++--------------- pyproject.toml | 2 +- 5 files changed, 18 insertions(+), 38 deletions(-) delete mode 100644 cellfinder/napari/images/brainglobe.png diff --git a/cellfinder/napari/detect/detect.py b/cellfinder/napari/detect/detect.py index 396f90b6..f0efe488 100644 --- a/cellfinder/napari/detect/detect.py +++ b/cellfinder/napari/detect/detect.py @@ -11,9 +11,8 @@ from cellfinder.core.classify.cube_generator import get_cube_depth_min_max from cellfinder.napari.utils import ( add_layers, - header_label_widget, + cellfinder_header, html_label_widget, - widget_header, ) from .detect_containers import ( @@ -40,7 +39,6 @@ def detect_widget() -> FunctionGui: progress_bar = ProgressBar() @magicgui( - header=header_label_widget, detection_label=html_label_widget("Cell detection", tag="h3"), **DataInputs.widget_representation(), **DetectionInputs.widget_representation(), @@ -52,7 +50,6 @@ def detect_widget() -> FunctionGui: scrollable=True, ) def widget( - header, detection_label, data_options, viewer: napari.Viewer, @@ -205,8 +202,7 @@ def update_progress_bar(label: str, max: int, value: int): worker.update_progress_bar.connect(update_progress_bar) worker.start() - widget.header.value = widget_header - widget.header.native.setOpenExternalLinks(True) + widget.native.layout().insertWidget(0, cellfinder_header()) @widget.reset_button.changed.connect def restore_defaults(): diff --git a/cellfinder/napari/images/brainglobe.png b/cellfinder/napari/images/brainglobe.png deleted file mode 100644 index 427bdaba9b89f967c183f4a998e7e642df50600d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21216 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 diff --git a/cellfinder/napari/train/train.py b/cellfinder/napari/train/train.py index 4d5e005b..d604bf4b 100644 --- a/cellfinder/napari/train/train.py +++ b/cellfinder/napari/train/train.py @@ -8,11 +8,7 @@ from qtpy.QtWidgets import QScrollArea from cellfinder.core.train.train_yml import run as train_yml -from cellfinder.napari.utils import ( - header_label_widget, - html_label_widget, - widget_header, -) +from cellfinder.napari.utils import cellfinder_header, html_label_widget from .train_containers import ( MiscTrainingInputs, @@ -41,7 +37,6 @@ def run_training( def training_widget() -> FunctionGui: @magicgui( - header=header_label_widget, training_label=html_label_widget("Network training", tag="h3"), **TrainingDataInputs.widget_representation(), **OptionalNetworkInputs.widget_representation(), @@ -52,7 +47,6 @@ def training_widget() -> FunctionGui: scrollable=True, ) def widget( - header: dict, training_label: dict, data_options: dict, yaml_files: Path, @@ -161,8 +155,7 @@ def widget( ) worker.start() - widget.header.value = widget_header - widget.header.native.setOpenExternalLinks(True) + widget.native.layout().insertWidget(0, cellfinder_header()) @widget.reset_button.changed.connect def restore_defaults(): diff --git a/cellfinder/napari/utils.py b/cellfinder/napari/utils.py index 689b2842..d48b81fb 100644 --- a/cellfinder/napari/utils.py +++ b/cellfinder/napari/utils.py @@ -4,21 +4,7 @@ import numpy as np import pandas as pd from brainglobe_utils.cells.cells import Cell -from pkg_resources import resource_filename - -brainglobe_logo = resource_filename( - "cellfinder", "napari/images/brainglobe.png" -) - - -widget_header = """ -

Efficient cell detection in large images.

-

Website

-

Documentation

-

Source

-

Citation

-

For help, hover the cursor over each parameter. -""" # noqa: E501 +from brainglobe_utils.qtpy.logo import header_widget def html_label_widget(label: str, *, tag: str = "b") -> dict: @@ -31,13 +17,18 @@ def html_label_widget(label: str, *, tag: str = "b") -> dict: ) -header_label_widget = html_label_widget( - f""" - -

cellfinder

-""", - tag="h1", -) +def cellfinder_header(): + """ + Create the header containing the brainglobe logo and documentation links + for all cellfinder widgets. + """ + return header_widget( + "cellfinder", + "Efficient cell detection in large images.", + documentation_path="cellfinder/user-guide/napari-plugin/index.html", + citation_doi="https://doi.org/10.1371/journal.pcbi.1009074", + help_text="For help, hover the cursor over each parameter.", + ) def add_layers(points: List[Cell], viewer: napari.Viewer) -> None: diff --git a/pyproject.toml b/pyproject.toml index efdb36f0..6e5ac59d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,7 +20,7 @@ classifiers = [ ] requires-python = ">=3.9" dependencies = [ - "brainglobe-utils>=0.4.2", + "brainglobe-utils>=0.4.3", "brainglobe-napari-io>=0.3.4", "dask[array]", "fancylog>=0.0.7", From 389e455c9aa5728853be5a3841c5a89610f16a3a Mon Sep 17 00:00:00 2001 From: Matt Einhorn Date: Tue, 16 Apr 2024 09:29:41 -0400 Subject: [PATCH 3/4] Separate napari image parameter to prevent magicgui slowdown (#401) * Separate image parameter to prevent magicgui slowdown. * Fix parameters not initialized. * Apply suggestions from code review Co-authored-by: Igor Tatarnikov <61896994+IgorTatarnikov@users.noreply.github.com> --------- Co-authored-by: Igor Tatarnikov <61896994+IgorTatarnikov@users.noreply.github.com> --- cellfinder/napari/detect/detect.py | 89 +++++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 7 deletions(-) diff --git a/cellfinder/napari/detect/detect.py b/cellfinder/napari/detect/detect.py index f0efe488..eaaab20f 100644 --- a/cellfinder/napari/detect/detect.py +++ b/cellfinder/napari/detect/detect.py @@ -38,6 +38,59 @@ def detect_widget() -> FunctionGui: """ progress_bar = ProgressBar() + # options that is filled in from the gui + options = {"signal_image": None, "background_image": None, "viewer": None} + + # signal and background images are separated out from the main magicgui + # parameter selections and are inserted as widget children in their own + # sub-containers of the root. Because if these image parameters are + # included in the root widget, every time *any* parameter updates, the gui + # freezes for a bit likely because magicgui is processing something for + # all the parameters when any parameter changes. And this processing takes + # particularly long for image parameters. Placing them as sub-containers + # alleviates this + @magicgui( + call_button=False, + persist=False, + scrollable=False, + labels=False, + auto_call=True, + ) + def signal_image_opt( + viewer: napari.Viewer, + signal_image: napari.layers.Image, + ): + """ + magicgui widget for setting the signal_image parameter. + + Parameters + ---------- + signal_image : napari.layers.Image + Image layer containing the labelled cells + """ + options["signal_image"] = signal_image + options["viewer"] = viewer + + @magicgui( + call_button=False, + persist=False, + scrollable=False, + labels=False, + auto_call=True, + ) + def background_image_opt( + background_image: napari.layers.Image, + ): + """ + magicgui widget for setting the background image parameter. + + Parameters + ---------- + background_image : napari.layers.Image + Image layer without labelled cells + """ + options["background_image"] = background_image + @magicgui( detection_label=html_label_widget("Cell detection", tag="h3"), **DataInputs.widget_representation(), @@ -52,9 +105,6 @@ def detect_widget() -> FunctionGui: def widget( detection_label, data_options, - viewer: napari.Viewer, - signal_image: napari.layers.Image, - background_image: napari.layers.Image, voxel_size_z: float, voxel_size_y: float, voxel_size_x: float, @@ -83,10 +133,6 @@ def widget( Parameters ---------- - signal_image : napari.layers.Image - Image layer containing the labelled cells - background_image : napari.layers.Image - Image layer without labelled cells voxel_size_z : float Size of your voxels in the axial dimension voxel_size_y : float @@ -129,9 +175,24 @@ def widget( reset_button : Reset parameters to default """ + # we must manually call so that the parameters of these functions are + # initialized and updated. Because, if the images are open in napari + # before we open cellfinder, then these functions may never be called, + # even though the image filenames are shown properly in the parameters + # in the gui. Likely auto_call doesn't make magicgui call the functions + # in this circumstance, only if the parameters are updated once + # cellfinder plugin is fully open and initialized + signal_image_opt() + background_image_opt() + + signal_image = options["signal_image"] + background_image = options["background_image"] + viewer = options["viewer"] + if signal_image is None or background_image is None: show_info("Both signal and background images must be specified.") return + data_inputs = DataInputs( signal_image.data, background_image.data, @@ -222,6 +283,20 @@ def restore_defaults(): # Insert progress bar before the run and reset buttons widget.insert(-3, progress_bar) + # add the signal and background image parameters + # make it look as if it's directly in the root container + signal_image_opt.margins = 0, 0, 0, 0 + # the parameters are updated using `auto_call` only. If False, magicgui + # passes these as args to widget(), which doesn't list them as args + signal_image_opt.gui_only = True + widget.insert(3, signal_image_opt) + widget.signal_image_opt.label = "Signal image" + + background_image_opt.margins = 0, 0, 0, 0 + background_image_opt.gui_only = True + widget.insert(4, background_image_opt) + widget.background_image_opt.label = "Background image" + scroll = QScrollArea() scroll.setWidget(widget._widget._qwidget) widget._widget._qwidget = scroll From 560909ff6eb74072d970b4752665a29382be368a Mon Sep 17 00:00:00 2001 From: Kimberly Meechan <24316371+K-Meech@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:49:17 +0100 Subject: [PATCH 4/4] Add codecov token (#403) * add codecov token * generate xml coverage report * add timeout to testing jobs --- .github/workflows/test_and_deploy.yml | 4 ++++ pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_and_deploy.yml b/.github/workflows/test_and_deploy.yml index 1ae8ae98..2bf9e976 100644 --- a/.github/workflows/test_and_deploy.yml +++ b/.github/workflows/test_and_deploy.yml @@ -65,11 +65,13 @@ jobs: - uses: neuroinformatics-unit/actions/test@v2 with: python-version: ${{ matrix.python-version }} + secret-codecov-token: ${{ secrets.CODECOV_TOKEN }} use-xvfb: true test_numba_disabled: needs: [linting, manifest] name: Run tests with numba disabled + timeout-minutes: 60 runs-on: ubuntu-latest env: NUMBA_DISABLE_JIT: "1" @@ -89,6 +91,7 @@ jobs: - uses: neuroinformatics-unit/actions/test@v2 with: python-version: "3.10" + secret-codecov-token: ${{ secrets.CODECOV_TOKEN }} codecov-flags: "numba" # Run brainglobe-workflows brainmapper-CLI tests to check for @@ -96,6 +99,7 @@ jobs: test_brainmapper_cli: needs: [linting, manifest] name: Run brainmapper tests to check for breakages + timeout-minutes: 60 runs-on: ubuntu-latest steps: - name: Cache tensorflow model diff --git a/pyproject.toml b/pyproject.toml index 6e5ac59d..2eeeb61e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -120,7 +120,7 @@ python = 3.10: py310 [testenv] -commands = python -m pytest -v --color=yes +commands = python -m pytest -v --color=yes --cov=cellfinder --cov-report=xml deps = pytest pytest-cov