From 4bb9b8c56fdea10d35d4c2bc408fd8fb60421e45 Mon Sep 17 00:00:00 2001 From: jaimergp Date: Tue, 16 Jan 2024 12:05:18 +0100 Subject: [PATCH 1/4] update packaging guide by removing outdated constructor fork details --- docs/developers/packaging.md | 149 ++++++++--------------------------- 1 file changed, 35 insertions(+), 114 deletions(-) diff --git a/docs/developers/packaging.md b/docs/developers/packaging.md index 50bdf73e..1f92d95e 100644 --- a/docs/developers/packaging.md +++ b/docs/developers/packaging.md @@ -20,20 +20,20 @@ This workflow will also create a GitHub release. See {doc}`release` for more det ### conda-forge packages -Once the Python package makes it to PyPI, it will be picked by the `conda-forge` bots. +Once the Python package makes it to PyPI, it will be picked up by the `conda-forge` bots. The bots will automatically submit a PR to the [`napari-feedstock`][1] repository within a few hours. This is all automated by the `conda-forge` infrastructure (see [previous examples][16]). We only need to check that the metadata in the recipe has been adjusted for the new release. Pay special attention to the runtime dependencies and version strings! > We keep a copy of the feedstock's recipe in the `napari/packaging` repo, which is updated manually whenever a change to `setup.cfg` is detected. -> Check the file `conda-recipe/meta.yaml` and make sure its `outputs` are synced to the `napari-feedstock` copy. +> Check the file `conda-recipe/meta.yaml` and make sure its `outputs` contents are synced to the `napari-feedstock` copy. Once the conda-forge CI is passing and the PR is approved and merged, the final packages will be built on the default branch and uploaded to the `conda-forge` channel. -Due to the staging steps and CDN synchronization delays, the conda packages can take up to 1 h to be available after the merge. +Due to the staging steps and CDN synchronization delays, the conda packages can take up to 1h to be available after the merge. ```{note} -Check {doc}`release` for more details about the conda-forge release process and maintenance tasks +Check {doc}`release` for more details about the conda-forge release process and maintenance tasks. ``` ### conda packages in the `napari` channel @@ -45,9 +45,9 @@ We mainly use it to provide: - Release candidates, uploaded to `napari/label/rc`. ```{note} -The `napari` channel also contains the final releases. +The `napari` channel happens to contain the final releases too. However, these are not meant to be used by end users, who should use `conda-forge`. -The releases uploaded to our channel are used to build our `constructor` installers (see below). +The releases uploaded to our channel are the same ones we use to build our `constructor` installers (see below). Otherwise, we would have to wait for the `conda-forge` PR, which is only triggered by the PyPI release. That means we would not be able to create the installers in the same tagging event. ``` @@ -62,7 +62,7 @@ Additionally, the tarballs are also passed as artifacts to the next stage in the Once the packages have been built and uploaded to their corresponding repositories, we can bundle them along with their dependencies in a single executable that end users can run to install napari on their systems, -with no prior knowledge of `pip`, `conda`, virtual environments or anything. +with no prior knowledge of `pip`, `conda`, virtual environments, command line prompts or anything. A software installer is usually expected to fulfill these requirements: @@ -100,7 +100,6 @@ company: Napari license: EULA.md channels: # - local # only in certain situations, like nightly installers where we build napari locally - - napari/label/bundle_tools_3 # temporary location of our forks of the constructor stack - conda-forge specs: # specs for the 'base' environment - python # pinned to the version of the running interpreter, configured in the CI @@ -147,9 +146,8 @@ The main OS-agnostic keys are: * `channels`: where the packages will be downloaded from. We mainly rely on `conda-forge` for this, where `napari` is published. - However, we also have `napari/label/bundle_tools_3`, where we store our `constructor` stack forks (more on this later). - In nightly installers, we locally build our own development packages for `conda`, without resorting to `conda-forge`. - To make use of those (which are eventually published to `napari/label/nightly`), + In CI, we locally build our own (development) packages for `conda`, without resorting to `conda-forge`. + To make use of those (which are eventually published to the [napari channel][17]), we unpack the GitHub Actions artifact in a specific location that `constructor` recognizes as a _local_ channel once indexed. * {{ '`extra_envs> napari-NAPARI_VER`'.replace('NAPARI_VER', napari_version) }}: the environment that will actually contain the napari installation. In this key, you will find `specs`, which lists the conda packages to be installed in that environment. @@ -196,116 +194,38 @@ On macOS, once Apple's _Installer Certificate_ has been installed to a keychain for its use, you can have `constructor` handle the signing via `productsign` automatically. However, this is not enough for a warning-free installation, since its contents need to be _notarized_ and _stapled_ too. For this reason, `constructor` has been modified to also -`codesign` the bundled `_conda.exe` (the binary provided by conda-standalone, see below) with -the _Application Certificate_. Otherwise, notarization fails. After that, two actions take care -of notarizing and stapling the resulting PKG. +`codesign` the bundled `_conda` executable (the binary provided by conda-standalone, see below) with the _Application Certificate_. Otherwise, notarization fails. After that, two actions take +care of notarizing and stapling the resulting PKG. -On Windows, any Microsoft-blessed certificate will do. Our `constructor` fork allows us to specify +On Windows, any Microsoft-blessed certificate will do. `constructor` allows us to specify a path to a PFX certificate and then have the Windows SDK `signtool` add the signature. Note that -`signtool` is not installed by default on Windows (but it is on GitHub Actions). - +`signtool` is not installed by default on Windows (but it is on GitHub Actions). Right now, we +simply reuse the Apple certificate just to sign the installer with _something_. Note that this +certificate is not recognized by Windows as a valid one, so users will still get the SmartScreen +warning. However, it will allow folks to check the signature metadata and see that it comes +from napari. --- More details about our packaging infrastructure can be found in the [NAP-2 document][nap-2]. -#### Details of our `constructor` stack fork - -> Note: All these changes have been sent upstream. See progress in [this issue][18]. - -Many of the features here listed were not available on `constructor` when we started working on it. -We have added them to the relevant parts of the stack as needed, but that has resulted in a lot of -moving pieces being juggled to make this work. Let's begin by enumerating the stack components: - -1. `constructor` is the command-line tool that _builds_ the installer. It depends on `conda` to - solve the `specs` request. It also requires a copy of `conda-standalone` (a PyInstaller-frozen - version of `conda`) to be present at build time so it can be bundled in the installer. This - is needed because that `conda-standalone` copy will handle the extraction, linking and - shortcut creation when the user runs the installer on their machine. -2. `conda-standalone` is a frozen version of `conda`. Among its dependencies, we can find - `menuinst`, which handles the creation of shortcuts and menu entries. -4. `menuinst` was only used on Windows before our work, so we basically rewrote it to handle - cross-platform shortcuts. -3. `conda` interfaces with `menuinst` to delegate the shortcut creation. Since this was only enabled - on Windows, we needed to unlock the other platforms and rewrite the parts that assumed Windows - only behavior. Surprise, this involved custom solver behavior too! - -Because `menuinst` is frozen together with `conda` for `conda-standalone`, every little change in any -of those requires a rebuild of `conda-standalone` so `constructor` can find the new version during -the installer creation. As a result, we needed to fork _and repackage_ all four components! - -Notice the repackaging needs. It's not enough to fork and patch the code. We also need to create -the conda packages and put them in a channel so the downstream dependencies can pick them when they -are rebuilt. This repackaging is done through a separate `conda-forge` clone that only handles our -forks. It is configured to use GitHub Actions (instead of Azure) and upload to the `napari` channel -(instead of `conda-forge`). - -For example, if a patch is introduced in `menuinst`, the following needs to happen before it makes -it to the final napari installer: - -1. Write and test the patch. Make sure it passes its own CI. -2. Make sure `conda` still works with the new changes. It needs to call `menuinst` after all. -3. Create the `menuinst` package and upload it to Anaconda.org. -4. Rebuild and upload `conda-standalone` so it picks the new `menuinst` version. -5. Trigger the napari CI to build the new installer. - -Very fun! So where do all these packages live? - -| Package | Source | Feedstock | -|--------------------|-------------------------------------------------|----------------------------------------------------| -| `constructor` | [jaimergp/constructor @ `menuinst-cep`][9] | [jaimergp-forge/constructor-feedstock][12] | -| `conda-standalone` | _Same as feedstock_. | [conda-forge/conda-standalone-feedstock PR#21][13] | -| `conda` | [jaimergp/conda @ `cep-menuinst`][10] | [jaimergp-forge/conda-feedstock][14] | -| `menuinst` | [conda/menuinst @ `cep-devel`][11] | [jaimergp-forge/menuinst-feedstock][15] | - - -Most of the forks live in `jaimergp`'s account, under a non-default branch. They are published -through the `jaimergp-forge` every time a commit to `main` (`master` in some repos) is made. -Versions are arbitrary here, but they are set to be greater than the latest official version, and -the `build` number is incremented for every rebuild. - -The only exception is `conda-standalone`. It doesn't have its own repository or fork because it's -basically a repackaged `conda` with some patches. Those patches live in the feedstock only. The -other difference is that the feedstock does not live in `jaimergp-forge`, but just as draft PR in -the `conda-forge` original feedstock. This is because, for some reason, if `conda-standalone` is -built on GitHub Actions machines, the Windows version will fail with `_ssl` errors which do not -appear in Azure. For this reason, the CI is run as normal on `conda-forge`, and then the artifacts -are retrieved from the Azure UI and manually uploaded to the `napari` channel. Fun again! - -_Eventually_ all these complexities will be gone because all of our changes will have been merged -upstream. For now, this not the case. Speaking of which, what are our changes? Below you can find -a high-level list of the main changes introduced in the stack. - -##### Changes in `menuinst` - -* Add cross-platform specification for shortcut configuration -* Enable support on Windows, Linux and macOS -* Re-engineer environment activation -* Maintain backwards compatibility with Windows -* Simplify API -* Remove CLI -* Provide binary launchers for better compatibility with the macOS permissions and events system - -##### Changes in `conda` - -* Enable code paths for non-Windows Platforms -* Fix shortcut removal logic -* Add `--shortcuts-only` flag to support `menu_packages` constructor key natively - -##### Changes in `conda-standalone` - -* Unvendor menuinst patches -* Do not vendor constructor NSIS scripts -* Adapt `conda constructor` entry point for the new menuinst API - -##### Changes in `constructor` - -* Use `--shortcuts-only` -* Add branding options for macOS PKG installers -* Always leave `_conda.exe` in the installation location -* Do not offer options for `conda init` or PATH manipulations (these should be Anaconda specific) -* Add signing for Windows -* Add notarization for macOS PKG +#### Details of the `constructor` stack + +Generating a `conda`-based installer requires several components in place: + +- `constructor` is the command-line tool that _builds_ the installer. + - It depends on `conda` to solve the `specs` request. + - It also requires a copy of `conda-standalone` (a PyInstaller-frozen version of `conda`) to be + present at build time so it can be bundled in the installer. This is needed because that + `conda-standalone` copy will handle the extraction, linking and shortcut creation when the user + runs the installer on their machine. +- `menuinst` handles the creation of shortcuts / desktop menu entries across all platforms. + - `conda` depends on this library to handle shortcuts when packages are installed. + - `constructor` delegates the shortcut creation to `conda-standalone`'s `menuinst` bundled copy + at _installation time_. + - For performance reasons, uninstalling the shortcut is done via a [bundled script][22] + that calls `menuinst` directly. + @@ -329,4 +249,5 @@ a high-level list of the main changes introduced in the stack. [19]: https://nsis.sourceforge.io/Main_Page [20]: https://pypi.org/project/napari [21]: https://anaconda.org/conda-forge/napari +[22]: https://github.com/conda/constructor/blob/764ba8a/constructor/nsis/_nsis.py [nap-2]: https://napari.org/dev/naps/2-conda-based-packaging.html From 0877fc8d5dec1e38fb34d94f065d2fa3fc5b577e Mon Sep 17 00:00:00 2001 From: jaimergp Date: Tue, 16 Jan 2024 12:07:36 +0100 Subject: [PATCH 2/4] trim --- docs/developers/packaging.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/developers/packaging.md b/docs/developers/packaging.md index 1f92d95e..dbb0da7f 100644 --- a/docs/developers/packaging.md +++ b/docs/developers/packaging.md @@ -144,10 +144,10 @@ signing_certificate: certificate.pfx # path to signing certificate The main OS-agnostic keys are: -* `channels`: where the packages will be downloaded from. - We mainly rely on `conda-forge` for this, where `napari` is published. - In CI, we locally build our own (development) packages for `conda`, without resorting to `conda-forge`. - To make use of those (which are eventually published to the [napari channel][17]), +* `channels`: where the packages will be downloaded from. + We mainly rely on `conda-forge` for this, where `napari` is published. + In CI, we locally build our own (development) packages for `conda`, without resorting to `conda-forge`. + To make use of those (which are eventually published to the [napari channel][17]), we unpack the GitHub Actions artifact in a specific location that `constructor` recognizes as a _local_ channel once indexed. * {{ '`extra_envs> napari-NAPARI_VER`'.replace('NAPARI_VER', napari_version) }}: the environment that will actually contain the napari installation. In this key, you will find `specs`, which lists the conda packages to be installed in that environment. @@ -213,8 +213,8 @@ More details about our packaging infrastructure can be found in the [NAP-2 docum Generating a `conda`-based installer requires several components in place: -- `constructor` is the command-line tool that _builds_ the installer. - - It depends on `conda` to solve the `specs` request. +- `constructor` is the command-line tool that _builds_ the installer. + - It depends on `conda` to solve the `specs` request. - It also requires a copy of `conda-standalone` (a PyInstaller-frozen version of `conda`) to be present at build time so it can be bundled in the installer. This is needed because that `conda-standalone` copy will handle the extraction, linking and shortcut creation when the user @@ -222,8 +222,8 @@ Generating a `conda`-based installer requires several components in place: - `menuinst` handles the creation of shortcuts / desktop menu entries across all platforms. - `conda` depends on this library to handle shortcuts when packages are installed. - `constructor` delegates the shortcut creation to `conda-standalone`'s `menuinst` bundled copy - at _installation time_. - - For performance reasons, uninstalling the shortcut is done via a [bundled script][22] + at _installation time_. + - For performance reasons, uninstalling the shortcut is done via a [bundled script][22] that calls `menuinst` directly. From fc04d6125ad09047ca6a7ad2e1d7d6f775e44da3 Mon Sep 17 00:00:00 2001 From: jaimergp Date: Thu, 1 Feb 2024 18:09:38 +0100 Subject: [PATCH 3/4] Merge branch 'main' of github.com:napari/docs into remove-fork-packaging --- .github/workflows/build_docs.yml | 1 - .github/workflows/deploy_docs.yml | 1 - docs/_static/announcement.html | 9 + docs/_static/version_switcher.json | 9 +- docs/_templates/layout.html | 2 +- docs/_templates/sbt-sidebar-nav.html | 3 - docs/_templates/sidebar-nav-bs.html | 4 + docs/_toc.yml | 38 +- docs/community/index.md | 4 +- docs/community/meeting_schedule.md | 77 ++- docs/community/team.md | 23 +- docs/community/working_groups.md | 7 +- docs/conf.py | 33 +- .../architecture/dir_organization.md | 2 +- docs/developers/architecture/napari_models.md | 2 +- docs/developers/contributing.md | 299 -------- docs/developers/contributing/dev_install.md | 104 +++ .../documentation/docs_deployment.md | 4 +- .../documentation/docs_template.md | 2 + .../documentation/images/circleci-link.png | Bin .../documentation/images/doc-ci-1.png | Bin .../documentation/images/doc-ci-2.png | Bin .../documentation/images/doc-ci-3.png | Bin .../{ => contributing}/documentation/index.md | 74 +- docs/developers/contributing/index.md | 119 ++++ .../performance}/benchmarks.md | 2 +- .../contributing/performance/index.md | 7 + .../performance}/profiling.md | 24 +- docs/developers/{ => contributing}/testing.md | 2 +- .../{ => contributing}/translations.md | 0 .../{ => coredev}/core_dev_guide.md | 25 +- docs/developers/{ => coredev}/maintenance.md | 22 +- docs/developers/{ => coredev}/packaging.md | 0 docs/developers/{ => coredev}/release.md | 2 + docs/developers/index.md | 47 +- docs/further-resources/napari-workshops.md | 5 +- docs/guides/index.md | 4 +- docs/guides/layers.md | 50 +- docs/howtos/docker.md | 2 + docs/howtos/headless.md | 2 + docs/howtos/index.md | 17 +- docs/howtos/layers/image.md | 238 ++++--- docs/howtos/layers/index.md | 5 +- docs/howtos/layers/labels.md | 572 ++++++++++------ docs/howtos/layers/points.md | 408 ++++++----- docs/howtos/layers/shapes.md | 638 +++++++++++------- docs/howtos/layers/surface.md | 94 ++- docs/howtos/layers/tracks.md | 109 ++- docs/howtos/layers/vectors.md | 133 ++-- docs/howtos/napari_imageJ.md | 2 + docs/howtos/perfmon.md | 12 +- docs/images/2D-button.png | Bin 0 -> 863 bytes docs/images/3D-button.png | Bin 0 -> 4756 bytes docs/images/3D_paths.png | Bin 804132 -> 259019 bytes docs/images/delete_label.webm | Bin 178672 -> 350417 bytes docs/images/draw_component.webm | Bin 210527 -> 433093 bytes docs/images/editing_points.webm | Bin 352900 -> 2150866 bytes docs/images/editing_shapes.webm | Bin 306653 -> 2150931 bytes docs/images/labels-layer-eraser.png | Bin 0 -> 1050 bytes docs/images/merge_labels.webm | Bin 159277 -> 272976 bytes docs/images/multichannel_cells.png | Bin 367432 -> 0 bytes docs/images/nD_shapes.webm | Bin 796495 -> 2948508 bytes docs/images/pan-zoom-tool.png | Bin 0 -> 1423 bytes docs/images/point-adding-tool.png | Bin 0 -> 1678 bytes docs/images/point-deleting-tool.png | Bin 0 -> 935 bytes docs/images/point-selecting-tool.png | Bin 0 -> 1383 bytes docs/images/shape-add-ellipses.png | Bin 0 -> 1507 bytes docs/images/shape-add-lasso.png | Bin 0 -> 1276 bytes docs/images/shape-add-lines.png | Bin 0 -> 1041 bytes docs/images/shape-add-path.png | Bin 0 -> 1465 bytes docs/images/shape-add-polygons.png | Bin 0 -> 1362 bytes docs/images/shape-add-rectangles.png | Bin 0 -> 1295 bytes docs/images/shape-delete-shape.png | Bin 0 -> 1044 bytes docs/images/shape-move-to-back.png | Bin 0 -> 1041 bytes docs/images/shape-move-to-front.png | Bin 0 -> 1066 bytes docs/images/shape-select-shape.png | Bin 0 -> 1316 bytes docs/images/shape-vertex-insert.png | Bin 0 -> 1282 bytes docs/images/shape-vertices-select.png | Bin 0 -> 1254 bytes docs/images/shape_resizing.webm | Bin 186365 -> 949687 bytes docs/images/shape_vertex_delete.png | Bin 0 -> 1127 bytes docs/images/shape_vertex_editing.webm | Bin 204378 -> 1002709 bytes docs/images/split_label.webm | Bin 313446 -> 642854 bytes docs/index.md | 2 +- docs/naps/9-multiple-canvases.md | 263 ++++++++ .../multicanvas-napari-architecture-today.png | Bin 0 -> 148256 bytes ...lticanvas-napari-architecture-tomorrow.png | Bin 0 -> 175805 bytes .../advanced_topics/npe2_migration_guide.md | 14 +- .../building_a_plugin/best_practices.md | 2 + .../building_a_plugin/debug_plugins.md | 4 +- .../plugins/building_a_plugin/first_plugin.md | 14 +- docs/plugins/building_a_plugin/guides.md | 2 +- docs/plugins/testing_and_publishing/test.md | 4 +- .../1-pythons-assert-keyword.md | 12 +- .../2-pytest-testing-frameworks.md | 16 +- .../3-readers-and-fixtures.md | 12 +- .../testing_workshop_docs/4-test-coverage.md | 10 +- docs/plugins/testing_workshop_docs/index.md | 10 +- .../testing-resources.md | 2 + docs/release/release_0_4_15.md | 2 +- docs/release/release_0_4_19.md | 445 ++++++++++++ docs/roadmaps/0_4.md | 2 +- docs/roadmaps/index.md | 2 + docs/tutorials/annotation/annotate_points.md | 76 ++- .../tutorials/fundamentals/getting_started.md | 16 +- docs/tutorials/fundamentals/installation.md | 18 +- docs/tutorials/fundamentals/quick_start.md | 14 +- docs/tutorials/fundamentals/viewer.md | 15 +- docs/tutorials/index.md | 6 +- docs/tutorials/processing/dask.md | 2 + docs/tutorials/segmentation/index.md | 2 +- docs/tutorials/start_index.md | 10 +- docs/tutorials/tracking/cell_tracking.md | 6 +- docs/usage.md | 2 + requirements.txt | 3 +- 114 files changed, 2869 insertions(+), 1358 deletions(-) create mode 100644 docs/_static/announcement.html delete mode 100644 docs/_templates/sbt-sidebar-nav.html create mode 100644 docs/_templates/sidebar-nav-bs.html delete mode 100644 docs/developers/contributing.md create mode 100644 docs/developers/contributing/dev_install.md rename docs/developers/{ => contributing}/documentation/docs_deployment.md (98%) rename docs/developers/{ => contributing}/documentation/docs_template.md (99%) rename docs/developers/{ => contributing}/documentation/images/circleci-link.png (100%) rename docs/developers/{ => contributing}/documentation/images/doc-ci-1.png (100%) rename docs/developers/{ => contributing}/documentation/images/doc-ci-2.png (100%) rename docs/developers/{ => contributing}/documentation/images/doc-ci-3.png (100%) rename docs/developers/{ => contributing}/documentation/index.md (91%) create mode 100644 docs/developers/contributing/index.md rename docs/developers/{ => contributing/performance}/benchmarks.md (99%) create mode 100644 docs/developers/contributing/performance/index.md rename docs/developers/{ => contributing/performance}/profiling.md (83%) rename docs/developers/{ => contributing}/testing.md (99%) rename docs/developers/{ => contributing}/translations.md (100%) rename docs/developers/{ => coredev}/core_dev_guide.md (96%) rename docs/developers/{ => coredev}/maintenance.md (78%) rename docs/developers/{ => coredev}/packaging.md (100%) rename docs/developers/{ => coredev}/release.md (99%) create mode 100644 docs/images/2D-button.png create mode 100644 docs/images/3D-button.png create mode 100644 docs/images/labels-layer-eraser.png delete mode 100644 docs/images/multichannel_cells.png create mode 100644 docs/images/pan-zoom-tool.png create mode 100644 docs/images/point-adding-tool.png create mode 100644 docs/images/point-deleting-tool.png create mode 100644 docs/images/point-selecting-tool.png create mode 100644 docs/images/shape-add-ellipses.png create mode 100644 docs/images/shape-add-lasso.png create mode 100644 docs/images/shape-add-lines.png create mode 100644 docs/images/shape-add-path.png create mode 100644 docs/images/shape-add-polygons.png create mode 100644 docs/images/shape-add-rectangles.png create mode 100644 docs/images/shape-delete-shape.png create mode 100644 docs/images/shape-move-to-back.png create mode 100644 docs/images/shape-move-to-front.png create mode 100644 docs/images/shape-select-shape.png create mode 100644 docs/images/shape-vertex-insert.png create mode 100644 docs/images/shape-vertices-select.png create mode 100644 docs/images/shape_vertex_delete.png create mode 100644 docs/naps/9-multiple-canvases.md create mode 100644 docs/naps/_static/multicanvas-napari-architecture-today.png create mode 100644 docs/naps/_static/multicanvas-napari-architecture-tomorrow.png create mode 100644 docs/release/release_0_4_19.md diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index 65d8ea0d..7bd6f6af 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -43,7 +43,6 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install "napari/[all]" - python -m pip install -r docs/requirements.txt env: PIP_CONSTRAINT: ${{ github.workspace }}/napari/resources/constraints/constraints_py3.10_docs.txt diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index 66eaf048..f094df19 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -47,7 +47,6 @@ jobs: run: | python -m pip install --upgrade pip python -m pip install "napari-repo/[all]" -c "napari-repo/resources/constraints/constraints_py3.10_docs.txt" - python -m pip install -r docs/requirements.txt -c "napari-repo/resources/constraints/constraints_py3.10_docs.txt" - name: Testing run: | python -c 'import napari; print(napari.__version__)' diff --git a/docs/_static/announcement.html b/docs/_static/announcement.html new file mode 100644 index 00000000..5219d8a6 --- /dev/null +++ b/docs/_static/announcement.html @@ -0,0 +1,9 @@ + + diff --git a/docs/_static/version_switcher.json b/docs/_static/version_switcher.json index 3ff79b7a..79b73748 100644 --- a/docs/_static/version_switcher.json +++ b/docs/_static/version_switcher.json @@ -5,10 +5,15 @@ "url": "https://napari.org/dev/" }, { - "name": "stable (0.4.18)", - "version": "0.4.18", + "name": "stable (0.4.19)", + "version": "0.4.19", "url": "https://napari.org/stable/" }, + { + "name": "0.4.18", + "version": "0.4.18", + "url": "https://napari.org/0.4.18/" + }, { "name": "0.4.17", "version": "0.4.17", diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html index 4003c48f..c9c61519 100644 --- a/docs/_templates/layout.html +++ b/docs/_templates/layout.html @@ -1,4 +1,4 @@ -{% extends "!layout.html" %} +{% extends "!napari-layout.html" %} {% block extrahead %} {{ super() }} diff --git a/docs/_templates/sbt-sidebar-nav.html b/docs/_templates/sbt-sidebar-nav.html deleted file mode 100644 index a9c0e18a..00000000 --- a/docs/_templates/sbt-sidebar-nav.html +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/docs/_templates/sidebar-nav-bs.html b/docs/_templates/sidebar-nav-bs.html new file mode 100644 index 00000000..ac8e5eab --- /dev/null +++ b/docs/_templates/sidebar-nav-bs.html @@ -0,0 +1,4 @@ + diff --git a/docs/_toc.yml b/docs/_toc.yml index b1092cc6..2c161087 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -136,7 +136,28 @@ subtrees: - file: developers/index subtrees: - entries: - - file: developers/contributing + - file: developers/contributing/index + subtrees: + - entries: + - file: developers/contributing/dev_install + - file: developers/contributing/testing + - file: developers/contributing/translations + - file: developers/contributing/performance/index + subtrees: + - entries: + - file: developers/contributing/performance/profiling + - file: developers/contributing/performance/benchmarks + - file: developers/contributing/documentation/index + subtrees: + - entries: + - file: developers/contributing/documentation/docs_template + - file: developers/contributing/documentation/docs_deployment + - file: developers/coredev/core_dev_guide + subtrees: + - entries: + - file: developers/coredev/maintenance + - file: developers/coredev/release + - file: developers/coredev/packaging - file: developers/architecture/index subtrees: - entries: @@ -156,22 +177,11 @@ subtrees: - file: naps/6-contributable-menus - file: naps/7-key-binding-dispatch - file: naps/8-telemetry - - file: developers/documentation/index - subtrees: - - entries: - - file: developers/documentation/docs_template - - file: developers/documentation/docs_deployment - - file: developers/translations - - file: developers/core_dev_guide - - file: developers/release - - file: developers/testing - - file: developers/profiling - - file: developers/benchmarks - - file: developers/packaging - - file: developers/maintenance + - file: naps/9-multiple-canvases - file: release/index subtrees: - entries: + - file: release/release_0_4_19 - file: release/release_0_4_18 - file: release/release_0_4_17 - file: release/release_0_4_16 diff --git a/docs/community/index.md b/docs/community/index.md index 52494791..83152d07 100644 --- a/docs/community/index.md +++ b/docs/community/index.md @@ -7,7 +7,7 @@ examples, you are welcome to help develop and improve napari. To ask questions and interact with the team, you can join our [zulip chat](https://napari.zulipchat.com/login/) or participate in our -[meetings](./meeting_schedule). +[meetings](meeting-schedule). If you are interested in contributing, check out our -[contributing guide](../developers/index). +[contributing guide](contributing). diff --git a/docs/community/meeting_schedule.md b/docs/community/meeting_schedule.md index 95239e34..b750f6b9 100644 --- a/docs/community/meeting_schedule.md +++ b/docs/community/meeting_schedule.md @@ -1,12 +1,75 @@ +(meeting-schedule)= + # Meeting schedule We hold regular meetings, the timings of which are available on our [public calendar](https://calendar.google.com/calendar/embed?src=c_35r93ec6vtp8smhm7dv5uot0v4%40group.calendar.google.com). -```{calendar} ---- -show-filters: true -calendar-id: c_35r93ec6vtp8smhm7dv5uot0v4@group.calendar.google.com ---- -``` - If you are using napari or interested in how napari could be used in your work, please join one of our regular community meetings. If you're interested in diving deep on particular topic you could join the closest working group meeting. We currently have four working groups 'Bundled Application', 'Plugins', 'Architecture', and 'Documentation' that meet on a semi-regular candence. You can learn more about our working groups and community meetings in the corresponding discussion streams on the [napari Zulip](https://napari.zulipchat.com/login/). + +
+ +
+ + + + + + diff --git a/docs/community/team.md b/docs/community/team.md index c4ac67ad..075bf254 100644 --- a/docs/community/team.md +++ b/docs/community/team.md @@ -4,7 +4,6 @@ napari is a consensus-based community project. Anyone with an interest in the pr ## Current Core Developers -- [Alister Burt](https://github.com/napari/napari/commits?author=alisterburt) - [@alisterburt](https://github.com/alisterburt) - [Andy Sweet](https://github.com/napari/napari/commits?author=andy-sweet) - [@andy-sweet](https://github.com/andy-sweet) - [Draga Doncila Pop](https://github.com/napari/napari/commits?author=DragaDoncila) - [@DragaDoncila](https://github.com/DragaDoncila)* - [Genevieve Buckley](https://github.com/napari/napari/commits?author=GenevieveBuckley) - [@GenevieveBuckley](https://github.com/GenevieveBuckley) @@ -12,24 +11,28 @@ napari is a consensus-based community project. Anyone with an interest in the pr - [Juan Nunez-Iglesias](https://github.com/napari/napari/commits?author=jni) - [@jni](https://github.com/jni)* - [Kevin Yamauchi](https://github.com/napari/napari/commits?author=kevinyamauchi) - [@kevinyamauchi](https://github.com/kevinyamauchi)* - [Kira Evans](https://github.com/napari/napari/commits?author=kne42) - [@kne42](https://github.com/kne42) -- [Kyle Harrington](https://github.com/napari/napari/commits?author=kephale) - [@kephale](https://github.com/kephale) -- [Loic Royer](https://github.com/napari/napari/commits?author=royerloic) - [@royerloic](https://github.com/royerloic)^ +- [Kyle Harrington](https://github.com/napari/napari/commits?author=kephale) - [@kephale](https://github.com/kephale)* - [Lorenzo Gaifas](https://github.com/napari/napari/commits?author=brisvag) - [@brisvag](https://github.com/brisvag) +- [Melissa Weber Mendonça](https://github.com/napari/napari/commits?author=melissawm) - [@melissawm](https://github.com/melissawm) - [Wouter-Michiel Vierdag](https://github.com/napari/napari/commits?author=melonora) - [@melonora](https://github.com/melonora) -- [Nicholas Sofroniew](https://github.com/napari/napari/commits?author=sofroniewn) - [@sofroniewn](https://github.com/sofroniewn)^ - [Peter Sobolewski](https://github.com/napari/napari/commits?author=psobolewskiPhD) - [@psobolewskiPhD](https://github.com/psobolewskiPhD) -- [Talley Lambert](https://github.com/napari/napari/commits?author=tlambert03) - [@tlambert03](https://github.com/tlambert03)^ - -* on the napari [steering council](https://napari.org/community/governance.html#steering-council). -^ emeritus [steering council](https://napari.org/community/governance.html#steering-council). ## Emeritus Core Developers -- [Shannon Axelrod](https://github.com/napari/napari/commits?author=shanaxel42) - [@shanaxel42](https://github.com/shanaxel42) +- [Ahmet Can Solak](https://github.com/napari/napari/commits?author=AhmetCanSolak) - [@AhmetCanSolak](https://github.com/AhmetCanSolak) +- [Alister Burt](https://github.com/napari/napari/commits?author=alisterburt) - [@alisterburt](https://github.com/alisterburt) - [Justine Larsen](https://github.com/napari/napari/commits?author=justinelarsen) - [@justinelarsen](https://github.com/justinelarsen) +- [Loic Royer](https://github.com/napari/napari/commits?author=royerloic) - [@royerloic](https://github.com/royerloic)^ +- [Nicholas Sofroniew](https://github.com/napari/napari/commits?author=sofroniewn) - [@sofroniewn](https://github.com/sofroniewn)^ +- [Shannon Axelrod](https://github.com/napari/napari/commits?author=shanaxel42) - [@shanaxel42](https://github.com/shanaxel42) +- [Talley Lambert](https://github.com/napari/napari/commits?author=tlambert03) - [@tlambert03](https://github.com/tlambert03)^ - [Ziyang Liu](https://github.com/napari/napari/commits?author=potating-potato) - [@potating-potato](https://github.com/potating-potato) -- [Ahmet Can Solak](https://github.com/napari/napari/commits?author=AhmetCanSolak) - [@AhmetCanSolak](https://github.com/AhmetCanSolak) + + +* on the napari [steering council](https://napari.org/community/governance.html#steering-council). + +^ emeritus [steering council](https://napari.org/community/governance.html#steering-council). ## Project history diff --git a/docs/community/working_groups.md b/docs/community/working_groups.md index 47892ad2..025bc4c8 100644 --- a/docs/community/working_groups.md +++ b/docs/community/working_groups.md @@ -18,10 +18,9 @@ We believe working groups are a helpful way to move forward work on particular t ## Existing working groups -- Bundled Application (Co-Leads: [Gonzalo Peña-Castellanos](https://github.com/goanpeca) and [Ziyang Liu](https://github.com/potating-potato)) -- Plugins (Co-Leads: [Talley Lambert](https://github.com/tlambert03) and [Nathan Clack](https://github.com/nclack)) -- Architecture (Co-Leads: [Juan Nunez-Iglesias](https://github.com/jni) and [Andy Sweet](https://github.com/andy-sweet)) -- Documentation (Co-Leads: [Genevieve Buckley](https://github.com/GenevieveBuckley) and [Justin Kiggins](https://github.com/neuromusic)) +- Bundled Application (Co-Leads: [Jaime Rodríguez-Guerra](https://github.com/jaimergp) and [Gonzalo Peña-Castellanos](https://github.com/goanpeca)) +- Documentation (Co-Leads: [Peter Sobolewski](https://github.com/psobolewskiPhD) and [Melissa Weber Mendonça](https://github.com/melissawm/)) +- Graphs layer (Co-Leads: [Draga Doncila Pop](https://github.com/DragaDoncila) and [Jordão Bragantini](https://github.com/JoOkuma)) ## How to join an existing working group diff --git a/docs/conf.py b/docs/conf.py index 12c21b03..c7660abb 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -15,6 +15,7 @@ # sys.path.insert(0, os.path.abspath('.')) import re +import os from importlib import import_module from pathlib import Path from urllib.parse import urlparse, urlunparse @@ -83,7 +84,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'napari' +html_theme = 'napari_sphinx_theme' # Define the json_url for our version switcher. json_url = "https://napari.org/dev/_static/version_switcher.json" @@ -98,12 +99,18 @@ {"name": "napari hub", "url": "https://napari-hub.org"} ], "github_url": "https://github.com/napari/napari", - "navbar_start": ["navbar-project"], + "navbar_start": ["navbar-logo", "navbar-project"], "navbar_end": ["version-switcher", "navbar-icon-links"], "switcher": { "json_url": json_url, "version_match": version_match, }, + "navbar_persistent": [], + "header_links_before_dropdown": 6, + "secondary_sidebar_items": ["page-toc"], + "pygment_light_style": "napari", + "pygment_dark_style": "napari", + "announcement": "https://napari.org/dev/_static/announcement.html", } # Add any paths that contain custom static files (such as style sheets) here, @@ -262,15 +269,31 @@ def napari_scraper(block, block_vars, gallery_conf): 'within_subsection_order': ExampleTitleSortKey, } +GOOGLE_CALENDAR_API_KEY = os.environ.get('GOOGLE_CALENDAR_API_KEY', '') + + +def add_google_calendar_secrets(app, docname, source): + """Add google calendar api key to meeting schedule page. + + The source argument is a list whose single element is the contents of the + source file. You can process the contents and replace this item to implement + source-level transformations. + """ + if docname == 'community/meeting_schedule': + source[0] = source[0].replace('{API_KEY}', GOOGLE_CALENDAR_API_KEY) + def setup(app): - """Ignore .ipynb files. + """Set up docs build. - Prevents sphinx from complaining about multiple files found for document - when generating the gallery. + * Ignores .ipynb files to prevent sphinx from complaining about multiple + files found for document when generating the gallery + * Rewrites github anchors to be comparable + * Adds google calendar api key to meetings schedule page """ app.registry.source_suffix.pop(".ipynb", None) + app.connect('source-read', add_google_calendar_secrets) app.connect('linkcheck-process-uri', rewrite_github_anchor) diff --git a/docs/developers/architecture/dir_organization.md b/docs/developers/architecture/dir_organization.md index 4bc48bd6..1433faf0 100644 --- a/docs/developers/architecture/dir_organization.md +++ b/docs/developers/architecture/dir_organization.md @@ -35,7 +35,7 @@ Notable folders in the root directory: * [`examples/`](https://github.com/napari/napari/tree/main/examples) folder contains the source [examples gallery](https://napari.org/gallery) files. The code in these files are executed and outputs captured when building the gallery. - See [](docs_contributing_guide) for details on napari` documentation. + See [](contributing-docs) for details on napari` documentation. * [`.github/`](https://github.com/napari/napari/tree/main/.github) contains our [GitHub Actions](https://docs.github.com/en/actions) [continuous integration (CI)](https://en.wikipedia.org/wiki/Continuous_integration) diff --git a/docs/developers/architecture/napari_models.md b/docs/developers/architecture/napari_models.md index 2511d45f..dad2157b 100644 --- a/docs/developers/architecture/napari_models.md +++ b/docs/developers/architecture/napari_models.md @@ -29,7 +29,7 @@ The separation of the Python models from viewer GUI code allows: used * tests to be easily run headlessly * the Python models to be run headlessly (see - [Running napari headlessly](../howtos/headless) for more) + [Running napari headlessly](headless) for more) ## Python models and events diff --git a/docs/developers/contributing.md b/docs/developers/contributing.md deleted file mode 100644 index 59078025..00000000 --- a/docs/developers/contributing.md +++ /dev/null @@ -1,299 +0,0 @@ -(napari-contributing)= -# Contributing guide - -We welcome your contributions! Please see the provided steps below and never hesitate to contact us. - -If you are a new user, we recommend checking out the detailed [Github Docs](https://docs.github.com/en). - -You can see the general direction for napari development and possible work plans in our current [Roadmap](../roadmaps/index.md). - -(dev-installation)= -## Setting up a development installation - -In order to make changes to `napari`, you will need to [fork](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#forking-a-repository) the -[repository](https://github.com/napari/napari). If you are not familiar with `git`, we recommend reading up on [this guide](https://docs.github.com/en/get-started/using-git/about-git#basic-git-commands). - -1. Clone the forked repository to your local machine and change directories: - - ```sh - git clone https://github.com/your-username/napari.git - cd napari - ``` - -2. Set the `upstream` remote to the base `napari` repository: - - ```sh - git remote add upstream https://github.com/napari/napari.git - ``` - -3. If you haven't already, create a development environment: - - ::::{tab-set} - - :::{tab-item} Using `conda` - After [installing `conda`](https://www.anaconda.com/products/distribution), create an environment called `napari-env` with Python {{ python_version }} and activate it. - - {{ conda_create_env }} - ::: - - :::{tab-item} Using `venv` - After installing Python on your machine, create a virtual environment on your terminal and activate it. On Linux and MacOS, you can run - ```sh - python -m venv - source /bin/activate - ``` - See the [venv](https://docs.python.org/3/library/venv.html) documentation for instructions on Windows. - ::: - - :::: - - ```{note} - It is highly recommended to create a fresh environment when working with - napari, to prevent issues with outdated or conflicting packages in your - development environment. - ``` - -4. Install the package in editable mode, along with all of the developer tools. - - If you only want to use napari, you can install it on most macOS, Linux and - Windows systems with Python {{ python_version_range }} - by following the directions on the - [instructions page](../tutorials/fundamentals/installation.md#install-as-python-package-recommended). - - napari supports different Qt backends, and you can choose which one to install and use. - - For example, for PyQt5, the default, you would use the following: - ```sh - pip install -e ".[pyqt,dev]" # (quotes only needed for zsh shell) - ``` - - If you want to use PySide2 instead, you would use: - ```sh - pip install -e ".[pyside,dev]" # (quotes only needed for zsh shell) - ``` - - Finally, if you already have a Qt backend installed or want to use an experimental one like Qt6 use: - ```sh - pip install -e ".[dev]" # (quotes only needed for zsh shell) - ``` - - Note that in this last case you will need to install your Qt backend separately. - -5. We use [`pre-commit`](https://pre-commit.com) to format code with - [`black`](https://github.com/psf/black) and lint with - [`ruff`](https://github.com/charliermarsh/ruff) automatically prior to each commit. - To minimize test errors when submitting pull requests, please install `pre-commit` - in your environment as follows: - - ```sh - pre-commit install - ``` - - Upon committing, your code will be formatted according to our [`black` - configuration](https://github.com/napari/napari/blob/main/pyproject.toml), which includes the settings - `skip-string-normalization = true` and `max-line-length = 79`. To learn more, - see [`black`'s documentation](https://black.readthedocs.io/en/stable/). - - Code will also be linted to enforce the stylistic and logistical rules specified - in our [`flake8` configuration](https://github.com/napari/napari/blob/main/setup.cfg), which currently ignores - [E203](https://lintlyci.github.io/Flake8Rules/rules/E203.html), - [E501](https://lintlyci.github.io/Flake8Rules/rules/E501.html), - [W503](https://lintlyci.github.io/Flake8Rules/rules/W503.html) and - [C901](https://lintlyci.github.io/Flake8Rules/rules/C901.html). For information - on any specific flake8 error code, see the [Flake8 - Rules](https://lintlyci.github.io/Flake8Rules/). You may also wish to refer to - the [PEP 8 style guide](https://peps.python.org/pep-0008/). - - If you wish to tell the linter to ignore a specific line use the `# noqa` - comment along with the specific error code (e.g. `import sys # noqa: E402`) but - please do not ignore errors lightly. - -Now you are all set to start developing with napari. - -## Contributing documentation - -If you wish to contribute documentation changes to napari, please read the [guide on contributing documentation](documentation/index.md). - -(add-examples)= -## Adding examples to the [Gallery](gallery) - -All of the examples in the [examples Gallery](gallery) are Python scripts that -live under [the `examples` folder of the napari repository](https://github.com/napari/napari/tree/main/examples). -Because of how this gallery is built, every such Python script needs a docstring -containing at least a title (following the `.rst` format of docstrings in -Python) and one or more _tags_. This ensures the example will be shown in the -correct place in the table of contents for the gallery (see, for example, the -[](tagoverview) page.) - -Here's an example of what that means. The example file -[add_image.py](https://github.com/napari/napari/blob/main/examples/add_image.py) -contains the following: - -```python -""" -Add image -========= - -Display one image using the :func:`view_image` API. - -.. tags:: visualization-basic -""" - -from skimage import data -import napari - -# create the viewer with an image -viewer = napari.view_image(data.astronaut(), rgb=True) - -if __name__ == '__main__': - napari.run() -``` - -The equals signs under "Add image" mark this as the example title. The text -below is a short description of the example, and the tags are assigned by the -use of the `.. tags::` directive. In this case, the only tag associated with -this example is `visualization-basic`. Multiple tags can be separated with a -comma. - -Note that the examples are `.py` source files, and any outputs and images will -be autogenerated when the documentation site is built. - -````{note} -If you are running any of these examples in an interactive environment (e.g. a Jupyter notebook or -IPython console), the block - -``` -if __name__ == '__main__': - napari.run() -``` - -is not necessary—you can copy-paste the code above it. However, it is required when running examples as scripts, using for example `python add_image.py`. -Because our example gallery is built from Python scripts, you need to ensure this -block is present in all contributed examples. -```` -## Adding icons - -If you want to add a new icon to the app, make the icon in whatever program you -like and add it to `napari/resources/icons/`. Icons must be in `.svg` format. - -Icons are automatically built into a Qt resource file that is imported when -napari is run. If you have changed the icons and would like to force a rebuild -of the resources, then you can either delete the autogenerated -`napari/resources/_qt_resources*.py` file, or you can set the -`NAPARI_REBUILD_RESOURCES` environmental variable to a truthy value, for -example: - -```sh -export NAPARI_REBUILD_RESOURCES=1 -``` - -Icons are typically used inside of one of our `stylesheet.qss` files, with the -`{{ id }}` variable used to expand the current theme name. - -```css -QtDeleteButton { - image: url("theme_{{ id }}:/delete.svg"); -} -``` - -## Translations - -Starting with version 0.4.7, napari codebase include internationalization -(i18n) and now offers the possibility of installing language packs, which -provide localization (l10n) enabling the user interface to be displayed in -different languages. - -To learn more about the current languages that are in the process of -translation, visit the [language packs repository](https://github.com/napari/napari-language-packs) - -To make your code translatable (localizable), please use the `trans` helper -provided by the napari utilities. - -```python -from napari.utils.translations import trans - -some_string = trans._("Localizable string") -``` - -To learn more, please see the {ref}`translations guide `. - -## Making changes - -Create a new feature branch: -```sh -git checkout main -b your-branch-name -``` - -`git` will automatically detect changes to a repository. -You can view them with: -```sh -git status -``` - -Add and commit your changed files: -```sh -git add my-file-or-directory -git commit -m "my message" -``` - -## Tests - -We use unit tests, integration tests, and functional tests to ensure that -napari works as intended. Writing tests for new code is a critical part of -keeping napari maintainable as it grows. - -We have dedicated documentation on [testing](napari-testing) that we recommend you -read as you're working on your first contribution. - -### Help us make sure it's you - -Each commit you make must have a [GitHub-registered email](https://github.com/settings/emails) -as the `author`. You can read more [here](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address). - -To set it, use `git config --global user.email your-address@example.com`. - -## Keeping your branches up-to-date - -Switch to the `main` branch: -```sh -git checkout main -``` - -Fetch changes and update `main`: -```sh -git pull upstream main --tags -``` - -This is shorthand for: -```sh -git fetch upstream main --tags -git merge upstream/main -``` - -Update your other branches: -```sh -git checkout your-branch-name -git merge main -``` - -## Sharing your changes - -Update your remote branch: -```sh -git push -u origin your-branch-name -``` - -You can then make a -[pull-request](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#making-a-pull-request) to `napari`'s `main` branch. - -## Code of Conduct - -`napari` has a [Code of Conduct](napari-coc) that should be honored by everyone who participates in the `napari` community. - -## Questions, comments, and feedback - -If you have questions, comments, suggestions for improvement, or any other inquiries -regarding the project, feel free to open an [issue](https://github.com/napari/napari/issues). - -Issues and pull-requests are written in [Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/about-writing-and-formatting-on-github). -You can find a comprehensive guide [here](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax). diff --git a/docs/developers/contributing/dev_install.md b/docs/developers/contributing/dev_install.md new file mode 100644 index 00000000..946f9737 --- /dev/null +++ b/docs/developers/contributing/dev_install.md @@ -0,0 +1,104 @@ +(dev-installation)= +## Setting up a development installation + +In order to make changes to `napari`, you will need to [fork](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#forking-a-repository) the +[repository](https://github.com/napari/napari). If you are not familiar with `git`, we recommend reading up on [this guide](https://docs.github.com/en/get-started/using-git/about-git#basic-git-commands). + +1. Clone the forked repository to your local machine and change directories: + + ```sh + git clone https://github.com/your-username/napari.git + cd napari + ``` + +2. Set the `upstream` remote to the base `napari` repository: + + ```sh + git remote add upstream https://github.com/napari/napari.git + ``` + +3. If you haven't already, create a development environment: + + ::::{tab-set} + + :::{tab-item} Using `conda` + After [installing `conda`](https://www.anaconda.com/products/distribution), create an environment called `napari-env` with Python {{ python_version }} and activate it. + + {{ conda_create_env }} + ::: + + :::{tab-item} Using `venv` + After installing Python on your machine, create a virtual environment on your terminal and activate it. On Linux and MacOS, you can run + ```sh + python -m venv + source /bin/activate + ``` + See the [venv](https://docs.python.org/3/library/venv.html) documentation for instructions on Windows. + ::: + + :::: + + ```{note} + It is highly recommended to create a fresh environment when working with + napari, to prevent issues with outdated or conflicting packages in your + development environment. + ``` + +4. Install the package in editable mode, along with all of the developer tools. + + ```{note} + If you only want to use napari, you can install it on most macOS, Linux and + Windows systems with Python {{ python_version_range }} + by following the directions on the + [instructions page](install-python-package). + ``` + + napari supports different Qt backends, and you can choose which one to install and use. + + For example, for PyQt5, the default, you would use the following: + ```sh + pip install -e ".[pyqt,dev]" # (quotes only needed for zsh shell) + ``` + + If you want to use PySide2 instead, you would use: + ```sh + pip install -e ".[pyside,dev]" # (quotes only needed for zsh shell) + ``` + + Finally, if you already have a Qt backend installed or want to use an experimental one like Qt6 use: + ```sh + pip install -e ".[dev]" # (quotes only needed for zsh shell) + ``` + + Note that in this last case you will need to install your Qt backend separately. + +5. We use [`pre-commit`](https://pre-commit.com) to format code with + [`black`](https://github.com/psf/black) and lint with + [`ruff`](https://github.com/charliermarsh/ruff) automatically prior to each commit. + To minimize test errors when submitting pull requests, please install `pre-commit` + in your environment as follows: + + ```sh + pre-commit install + ``` + + Upon committing, your code will be formatted according to our [`black` + configuration](https://github.com/napari/napari/blob/main/pyproject.toml), which includes the settings + `skip-string-normalization = true` and `max-line-length = 79`. To learn more, + see [`black`'s documentation](https://black.readthedocs.io/en/stable/). + + Code will also be linted to enforce the stylistic and logistical rules specified + in our [`flake8` configuration](https://github.com/napari/napari/blob/main/setup.cfg), which currently ignores + [E203](https://lintlyci.github.io/Flake8Rules/rules/E203.html), + [E501](https://lintlyci.github.io/Flake8Rules/rules/E501.html), + [W503](https://lintlyci.github.io/Flake8Rules/rules/W503.html) and + [C901](https://lintlyci.github.io/Flake8Rules/rules/C901.html). For information + on any specific flake8 error code, see the [Flake8 + Rules](https://lintlyci.github.io/Flake8Rules/). You may also wish to refer to + the [PEP 8 style guide](https://peps.python.org/pep-0008/). + + If you wish to tell the linter to ignore a specific line use the `# noqa` + comment along with the specific error code (e.g. `import sys # noqa: E402`) but + please do not ignore errors lightly. + +Now you are all set to start developing with napari. diff --git a/docs/developers/documentation/docs_deployment.md b/docs/developers/contributing/documentation/docs_deployment.md similarity index 98% rename from docs/developers/documentation/docs_deployment.md rename to docs/developers/contributing/documentation/docs_deployment.md index 0a172fed..d40d87f6 100644 --- a/docs/developers/documentation/docs_deployment.md +++ b/docs/developers/contributing/documentation/docs_deployment.md @@ -1,9 +1,11 @@ +(docs-deployment)= + # Documentation and website deployment ```{note} This guide is intended for napari core contributors and is not required reading for regular contributors. If you're looking for information on how to contribute -to the documentation, see [](docs_contributing_guide). +to the documentation, see [](contributing-docs). ``` The napari documentation and website sources are spread over three repositories, diff --git a/docs/developers/documentation/docs_template.md b/docs/developers/contributing/documentation/docs_template.md similarity index 99% rename from docs/developers/documentation/docs_template.md rename to docs/developers/contributing/documentation/docs_template.md index 2e152295..9705a527 100644 --- a/docs/developers/documentation/docs_template.md +++ b/docs/developers/contributing/documentation/docs_template.md @@ -14,6 +14,8 @@ theme: intro: Template for adding new napari documentation --- +(docs-template)= + # Docs template This template will guide you to write a well formatted document and prepare it for contribution to napari.org. diff --git a/docs/developers/documentation/images/circleci-link.png b/docs/developers/contributing/documentation/images/circleci-link.png similarity index 100% rename from docs/developers/documentation/images/circleci-link.png rename to docs/developers/contributing/documentation/images/circleci-link.png diff --git a/docs/developers/documentation/images/doc-ci-1.png b/docs/developers/contributing/documentation/images/doc-ci-1.png similarity index 100% rename from docs/developers/documentation/images/doc-ci-1.png rename to docs/developers/contributing/documentation/images/doc-ci-1.png diff --git a/docs/developers/documentation/images/doc-ci-2.png b/docs/developers/contributing/documentation/images/doc-ci-2.png similarity index 100% rename from docs/developers/documentation/images/doc-ci-2.png rename to docs/developers/contributing/documentation/images/doc-ci-2.png diff --git a/docs/developers/documentation/images/doc-ci-3.png b/docs/developers/contributing/documentation/images/doc-ci-3.png similarity index 100% rename from docs/developers/documentation/images/doc-ci-3.png rename to docs/developers/contributing/documentation/images/doc-ci-3.png diff --git a/docs/developers/documentation/index.md b/docs/developers/contributing/documentation/index.md similarity index 91% rename from docs/developers/documentation/index.md rename to docs/developers/contributing/documentation/index.md index 4f85550a..588871fd 100644 --- a/docs/developers/documentation/index.md +++ b/docs/developers/contributing/documentation/index.md @@ -1,4 +1,4 @@ -(docs_contributing_guide)= +(contributing-docs)= # Contributing Documentation This guide will teach you how to submit new documents to napari's usage @@ -106,13 +106,13 @@ that could be expanded to include the content you think is lacking. Go to your local `napari/docs` folder to find examples of documents you might want to contribute. The paths are listed in parentheses below. -- [**Explanations**](../../guides/index) (in [`napari/docs/guides`](https://github.com/napari/docs/tree/main/docs/guides)): +- [**Explanations**](explanations) (in [`napari/docs/guides`](https://github.com/napari/docs/tree/main/docs/guides)): in depth content about napari architecture, development choices and some complex features -- [**Tutorials**](../../tutorials/index) (in [`napari/docs/tutorials`](https://github.com/napari/docs/tree/main/docs/tutorials)): +- [**Tutorials**](tutorials) (in [`napari/docs/tutorials`](https://github.com/napari/docs/tree/main/docs/tutorials)): detailed, reproducible step by step guides, usually combining multiple napari features to complete a potentially complex task -- [**How-tos**](../../howtos/index) (in [`napari/docs/howtos`](https://github.com/napari/docs/tree/main/docs/howtos)): +- [**How-tos**](how-tos) (in [`napari/docs/howtos`](https://github.com/napari/docs/tree/main/docs/howtos)): simple step by step guides demonstrating the use of common features -- [**Getting started**](../../tutorials/start_index) (in [`napari/docs/tutorials/fundamentals`](https://github.com/napari/docs/tree/main/docs/tutorials/fundamentals)): +- [**Getting started**](getting-started) (in [`napari/docs/tutorials/fundamentals`](https://github.com/napari/docs/tree/main/docs/tutorials/fundamentals)): these documents are a mix of tutorials and how-tos covering the fundamentals of installing and working with napari for beginners The [**Examples gallery**](../../gallery) sources are in the [main `napari/napari` repository](https://github.com/napari/napari/tree/main/examples) @@ -122,9 +122,11 @@ and show code examples of how to use napari. :class: tip If you already have teaching materials e.g. recordings, slide decks or Jupyter notebooks -hosted somewhere, you can add links to these on our [napari workshops](../../further-resources/napari-workshops.md) page. +hosted somewhere, you can add links to these on our [napari workshops](workshops) page. ``` +(contributing-docs-step-one)= + ## 1. Write your documentation Our goal is that all tutorials and how-tos are easily downloadable and @@ -138,7 +140,7 @@ documents in our repository and on [napari.org](https://napari.org). If you are amending existing documentation, you can do so in your preferred text editor. If you wish to add a new tutorial or a how-to, we recommend you use our -[template](./docs_template). Inside the template you'll find handy tips for +[template](docs-template). Inside the template you'll find handy tips for taking screenshots of the viewer, hiding code cells, using style guides and what to include in the required prerequisites section. @@ -485,3 +487,61 @@ However, if you are getting errors running `glxgears` or can't see the interface 3. Run `glxgears` from the Ubuntu terminal. You should see a window with some gears spinning. ```` + +(add-examples)= +## Adding examples to the [Gallery](gallery) + +All of the examples in the [examples Gallery](gallery) are Python scripts that +live under [the `examples` folder of the napari repository](https://github.com/napari/napari/tree/main/examples). +Because of how this gallery is built, every such Python script needs a docstring +containing at least a title (following the `.rst` format of docstrings in +Python) and one or more _tags_. This ensures the example will be shown in the +correct place in the table of contents for the gallery (see, for example, the +[](tagoverview) page.) + +Here's an example of what that means. The example file +[add_image.py](https://github.com/napari/napari/blob/main/examples/add_image.py) +contains the following: + +```python +""" +Add image +========= + +Display one image using the :func:`view_image` API. + +.. tags:: visualization-basic +""" + +from skimage import data +import napari + +# create the viewer with an image +viewer = napari.view_image(data.astronaut(), rgb=True) + +if __name__ == '__main__': + napari.run() +``` + +The equals signs under "Add image" mark this as the example title. The text +below is a short description of the example, and the tags are assigned by the +use of the `.. tags::` directive. In this case, the only tag associated with +this example is `visualization-basic`. Multiple tags can be separated with a +comma. + +Note that the examples are `.py` source files, and any outputs and images will +be autogenerated when the documentation site is built. + +````{note} +If you are running any of these examples in an interactive environment (e.g. a Jupyter notebook or +IPython console), the block + +``` +if __name__ == '__main__': + napari.run() +``` + +is not necessary—you can copy-paste the code above it. However, it is required when running examples as scripts, using for example `python add_image.py`. +Because our example gallery is built from Python scripts, you need to ensure this +block is present in all contributed examples. +```` diff --git a/docs/developers/contributing/index.md b/docs/developers/contributing/index.md new file mode 100644 index 00000000..102c2571 --- /dev/null +++ b/docs/developers/contributing/index.md @@ -0,0 +1,119 @@ +(napari-contributing)= +# Contributing guide + +We welcome your contributions! Here you will find a guide to the contribution +workflow and tips for contributing to napari. Do not hesitate to [contact](contact) us +if you have any queries. + +## Contributing workflow + +napari development occurs primarily on GitHub. If you are new to GitHub we recommend checking out the detailed [Github Docs](https://docs.github.com/en). + +The first step to make changes to napari is to +set up a [napari development installation](dev-installation). + +You can then use git to save your changes and open a +[pull-request](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#making-a-pull-request) (PR) via the following steps: + +1. Make and save your changes: + +Create a new feature branch: +```sh +git checkout main -b your-branch-name +``` + +`git` will automatically detect changes to a repository. +You can view them with: +```sh +git status +``` + +Add and commit your changed files: +```sh +git add my-file-or-directory +git commit -m "my message" +``` + +Each commit you make must have a [GitHub-registered email](https://github.com/settings/emails) +as the `author`. You can read more [here](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address). + +To set it, use `git config --global user.email your-address@example.com`. + +2. Share your changes: + +To push the local changes in your new feature branch to your +[forked](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#forking-a-repository) repository: + +```sh +git push -u origin your-branch-name +``` + +Note we are pushing to the remote named 'origin' above. If you have followed the +[development installation instructions](dev-installation), 'origin' would be the name +of the remote of your forked repository. If you are unsure +of the name of your remotes, you can use the following command to check and +ensure you are pushing to the correct remote: + +```sh +git remote -vv +``` + +You can then make a +[PR](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#making-a-pull-request) to `napari`'s `main` branch. + +## napari contribution guides + +### Translations + +Starting with version 0.4.7 offers the possibility of installing language packs, +enabling the user interface to be displayed in different languages. This means that all +user interface strings need to use the {func}`~napari.utils.translations.trans` helper +function. +See the [translations](translations) guide for more. + +### Tests + +We use unit tests, integration tests, and functional tests to ensure that +napari works as intended. Writing tests for new code is a critical part of +keeping napari maintainable as it grows. + +We have dedicated documentation on [testing](napari-testing) that we recommend you +read as you're working on your first contribution. + +### Adding icons + +If you want to add a new icon to the app, make the icon in whatever program you +like and add it to `napari/resources/icons/`. Icons must be in `.svg` format. + +Icons are automatically built into a Qt resource file that is imported when +napari is run. If you have changed the icons and would like to force a rebuild +of the resources, then you can either delete the autogenerated +`napari/resources/_qt_resources*.py` file, or you can set the +`NAPARI_REBUILD_RESOURCES` environmental variable to a truthy value, for +example: + +```sh +export NAPARI_REBUILD_RESOURCES=1 +``` + +Icons are typically used inside of one of our `stylesheet.qss` files, with the +`{{ id }}` variable used to expand the current theme name. + +```css +QtDeleteButton { + image: url("theme_{{ id }}:/delete.svg"); +} +``` + +### Performance + +Performance related PRs should include a benchmark in order to clearly depict the +use-case that is being optimized for. Ideally PRs that add a new feature should +also include benchmarks to show the new feature is not too slow but this is less vital. +[](napari-benchmarks) provides more information on benchmarking. If you find +poor performance, [profiling](profiling) and [performance monitoring](perfmon) can help +identify the cause and where to optimize. + +### Contributing documentation + +See [](contributing-docs) for information on how to contribute documentation. diff --git a/docs/developers/benchmarks.md b/docs/developers/contributing/performance/benchmarks.md similarity index 99% rename from docs/developers/benchmarks.md rename to docs/developers/contributing/performance/benchmarks.md index e40f00b8..5e6f87c8 100644 --- a/docs/developers/benchmarks.md +++ b/docs/developers/contributing/performance/benchmarks.md @@ -1,4 +1,4 @@ -(napari-benchmarks)= +(benchmarks)= # Benchmarks While not mandatory for most pull requests, we ask that performance related diff --git a/docs/developers/contributing/performance/index.md b/docs/developers/contributing/performance/index.md new file mode 100644 index 00000000..29a5b23f --- /dev/null +++ b/docs/developers/contributing/performance/index.md @@ -0,0 +1,7 @@ +(performance)= +# Performance + +Information on profiling and benchmarking. + +```{tableofcontents} +``` diff --git a/docs/developers/profiling.md b/docs/developers/contributing/performance/profiling.md similarity index 83% rename from docs/developers/profiling.md rename to docs/developers/contributing/performance/profiling.md index ca727a2a..c1723e26 100644 --- a/docs/developers/profiling.md +++ b/docs/developers/contributing/performance/profiling.md @@ -1,11 +1,23 @@ -# Profiling +(profiling)= -In contrast to performance tracing, profiling does not provide information -about the timing of events, but instead provides combined information about the -total time of execution of each function. It also produces a call graph that -simplifies understanding the call relationship between functions. +# Profiling -![A section of an example call graph showing the functions called in napari's layerlist and some of their profile statistics such as call count and cumulative percentage time spent.](images/execution_graph.png) +Profiling provides information about the +total time of execution of each function when performing a specific task or workflow. +It produces a complete call graph that +simplifies understanding the call relationship between functions. It is useful for +identifying which functions are taking most of the runtime and causing bottlenecks. + +[Performance monitoring](perfmon), unlike profiling provides information about the +timing of events or specific functions each time it is called. It can be useful when +profiling identifies a common function to be slow, but +as this function gets called from many places so it's hard to know where to optimize. +Performance monitoring is able to tell you at which points during execution it is +called and how long it took each time. This is also helpful in differentiating +functions that are only slow in the first call versus functions that are consistently +slow. See [performance monitoring](perfmon) for more details. + +![A section of an example call graph showing the functions called in napari's layerlist and some of their profile statistics such as call count and cumulative percentage time spent.](../../images/execution_graph.png) The basic tool for profile in Python is the built-in module `cProfile`. To profile an entire script, use the call: diff --git a/docs/developers/testing.md b/docs/developers/contributing/testing.md similarity index 99% rename from docs/developers/testing.md rename to docs/developers/contributing/testing.md index 4aeb7e6f..a222e4e9 100644 --- a/docs/developers/testing.md +++ b/docs/developers/contributing/testing.md @@ -20,7 +20,7 @@ much as we can with unit tests, requiring fewer integration tests, and the least of functional tests as depicted in the test pyramid below from [softwaretestinghelp.com](https://www.softwaretestinghelp.com/the-difference-between-unit-integration-and-functional-testing/): -![Pyramid diagram depicting the relationship between time to write/execute three different types of tests and return on investment for those tests. The pyramid is split into three sections: the bottom, largest section is Unit testing, the middle section is Integration testing and the top is Functional testing. The size of the section is proportional to the quantity of tests of that type you should write. Moving up the pyramid, tests take longer to write and have a lower return on investment.](../images/tests.png) +![Pyramid diagram depicting the relationship between time to write/execute three different types of tests and return on investment for those tests. The pyramid is split into three sections: the bottom, largest section is Unit testing, the middle section is Integration testing and the top is Functional testing. The size of the section is proportional to the quantity of tests of that type you should write. Moving up the pyramid, tests take longer to write and have a lower return on investment.](../../images/tests.png) Unit tests are at the base of the pyramid because they are the easiest to write and the quickest to run. The time and effort to implement and maintain tests increases diff --git a/docs/developers/translations.md b/docs/developers/contributing/translations.md similarity index 100% rename from docs/developers/translations.md rename to docs/developers/contributing/translations.md diff --git a/docs/developers/core_dev_guide.md b/docs/developers/coredev/core_dev_guide.md similarity index 96% rename from docs/developers/core_dev_guide.md rename to docs/developers/coredev/core_dev_guide.md index f15f494d..20e44772 100644 --- a/docs/developers/core_dev_guide.md +++ b/docs/developers/coredev/core_dev_guide.md @@ -80,7 +80,7 @@ consult back with our [mission and values](mission-and-values). 2. **Performance and benchmarks:** As `napari` targets scientific applications that often involve large multidimensional datasets, high performance is a key value of `napari`. While every new feature won't scale equally to all sizes of data, keeping in mind performance -and our [benchmarks](napari-benchmarks) during a review may be important, and you may +and our [benchmarks](benchmarks) during a review may be important, and you may need to ask for benchmarks to be run and reported or new benchmarks to be added. 3. **APIs and stability:** Coding users and plugin developers will make @@ -147,18 +147,28 @@ that responsibility seriously. ## Documentation and website For details on how the documentation and website are built, see -[](documentation/docs_deployment). +[](docs-deployment). ## Further resources -As a core member, you should be familiar with community and developer -resources such as: +As a core member, you should be familiar with the following napari guides: + +### Community guides -- Our [contributor guide](napari-contributing). - Our [code of conduct](napari-coc). - Our [governance](napari-governance). - Our [mission and values](mission-and-values). -- Our [benchmarking guide](napari-benchmarks). + +### Technical guides + +- Our [contributor guide](napari-contributing). +- Our [benchmarking guide](benchmarks). +- Our [release guide](release). +- Our [maintenance guide](maintenance). +- Our [packaging guide](napari-packaging). + +### Style guides + - [PEP8](https://peps.python.org/pep-0008/) for Python style. - [PEP257](https://peps.python.org/pep-0257/) and the [NumPy documentation guide](https://numpy.org/devdocs/dev/howto-docs.html#documentation-style) @@ -166,6 +176,9 @@ resources such as: - [`pre-commit`](https://pre-commit.com) hooks for autoformatting. - [`black`](https://github.com/psf/black) autoformatting. - [`flake8`](https://github.com/PyCQA/flake8) linting. + +### Social resources + - [#napari on image.sc](https://forum.image.sc/tag/napari). - [#napari](https://twitter.com/search?q=%23napari&f=live) and [@napari_imaging](https://twitter.com/napari_imaging) on twitter. - [napari zulip](https://napari.zulipchat.com/) community chat channel. diff --git a/docs/developers/maintenance.md b/docs/developers/coredev/maintenance.md similarity index 78% rename from docs/developers/maintenance.md rename to docs/developers/coredev/maintenance.md index be34ff36..d3dc4daa 100644 --- a/docs/developers/maintenance.md +++ b/docs/developers/coredev/maintenance.md @@ -1,11 +1,13 @@ +(maintenance)= + # Maintenance This document describes maintenance tasks that need to be performed from time to time. Its purpose is to avoid relying on personal memory alone, and it should be updated regularly. -## Refreshing tokens for the auto upgrade of test constraints and vendored packages. +## Refreshing tokens for the auto upgrade of test constraints and vendored packages. Because of the security GitHub policy, the commits and pull requests created by an action that uses default `GITHUB_TOKEN` -will not trigger another action's runs. The possible workaround for this is to close and then reopen the pull request. +will not trigger another action's runs. The possible workaround for this is to close and then reopen the pull request. But this requires additional actions by core devs. @@ -20,40 +22,40 @@ The token should be named `GHA_TOKEN` and the required permissions are: * **read and write** to pull requests * **read and write** to code - ![screenshot of token permissions in GitHub UI](../images/update_token_permissions.png) + ![screenshot of token permissions in GitHub UI](../../images/update_token_permissions.png) At the moment of writing this document, there is a difference in names between the summary of the token and the list of permissions. The **code** permission is called **Contents** in the Edit view of the token. -![screenshot of token permissions](../images/edit_token_permissions.png) +![screenshot of token permissions](../../images/edit_token_permissions.png) ## Refreshing the token To create a new token, go to the personal settings page and select _Developer settings_ at the bottom of the left menu. On the visible screen, expand the _Personal access tokens_ section and click the _Fine-grained token_ link. -![View on list of fine-grained tokens](../images/fine_grained_token.png) +![View on list of fine-grained tokens](../../images/fine_grained_token.png) Then click the _Generate new token_ button in the upper right corner. Fill the form: 1. Set expiration to custom and then select the proper date -2. Select **napari** to be the resource owner +2. Select **napari** to be the resource owner 3. Select _Only selected repositories_ and then select **napari/napari** repository -![screenshot of the token creation form](../images/token_permission_form.png) +![screenshot of the token creation form](../../images/token_permission_form.png) 4. Select the required permissions for repository metadata, pull requests, and code (contents) -![screenshot of the token creation form](../images/token_permission_selection.png) +![screenshot of the token creation form](../../images/token_permission_selection.png) 5. Click the _Generate token_ button -6. Copy token +6. Copy token 7. Go to the napari repository settings 8. Expand the _Secrets and variables_ section and select _Actions_ 9. Click the edit button for the `GHA_TOKEN` secret -![screenshot of the token creation form](../images/secrets_section.png) +![screenshot of the token creation form](../../images/secrets_section.png) 10. Paste a new token to the value field diff --git a/docs/developers/packaging.md b/docs/developers/coredev/packaging.md similarity index 100% rename from docs/developers/packaging.md rename to docs/developers/coredev/packaging.md diff --git a/docs/developers/release.md b/docs/developers/coredev/release.md similarity index 99% rename from docs/developers/release.md rename to docs/developers/coredev/release.md index edd62d87..cb2ee9e1 100644 --- a/docs/developers/release.md +++ b/docs/developers/coredev/release.md @@ -1,3 +1,5 @@ +(release)= + # Release guide This guide documents `napari`'s release process. diff --git a/docs/developers/index.md b/docs/developers/index.md index 98ee3280..acf07ace 100644 --- a/docs/developers/index.md +++ b/docs/developers/index.md @@ -1,21 +1,42 @@ +(contributing-index)= # Contributing -Here you can find resources about the contributing workflow for both code to napari core and documentation of the project, as well as information for onboarding of new core developers. +We welcome your contributions! Here you will find resources to help you contribute +to napari. -You can see the general direction for napari development and possible work plans in our current [Roadmap](../roadmaps/index.md). +napari has a [Code of Conduct](napari-coc) that should be honored by everyone who participates in the `napari` community. -## For contributors +- [](contact): how to contact us. +- [](roadmaps): convey the general direction for napari development and possible + work plans. +- **Contributor guides**: resources on for contributors: + - [Contributing guide](napari-contributing) + - [Development installation](dev-installation) + - [Testing](napari-testing) + - [Translations](translations) + - [Performance](performance) + - [Profiling](profiling) + - [Benchmarks](napari-benchmarks) + - [Contributing documentation](contributing-docs) + - [](architecture-index) -- [Contributing guide](./contributing) -- [Contributing documentation](./documentation/index) -- [Translations](./translations) -- [Testing](./testing) -- [Profiling](./profiling) -- [Benchmarks](./benchmarks) +- **Core developer guides**: resources for core developers, including information for + onboarding new core developers: + - [Core Developer guide](core-dev-guide) + - [Maintenance](maintenance) + - [Release guide](release) + - [Deploying documentation](docs-deployment) + - [Packaging](napari-packaging) -## For core developers +(contact)= -- [Core Developer guide](./core_dev_guide) -- [Release guide](./release) -- [Maintenance](./maintenance) +## Contact +There are a number of ways to contact the napari community: + +- [zulip](https://napari.zulipchat.com/): the zulip napari community chat channel. +- [GitHub issue](https://github.com/napari/napari/issues): feel free to open an + issue in our GitHub repository. Issues and pull-requests are written in [Markdown](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/about-writing-and-formatting-on-github). You can find a comprehensive guide [here](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) +- [Image.sc forum](https://forum.image.sc/tags/napari): napari is a community partner + on the Image.sc forum. All usage support requests should be posted on the forum with + the tag "napari". diff --git a/docs/further-resources/napari-workshops.md b/docs/further-resources/napari-workshops.md index 4e4062bc..8f4448d7 100644 --- a/docs/further-resources/napari-workshops.md +++ b/docs/further-resources/napari-workshops.md @@ -1,4 +1,4 @@ -(napari-workshops)= +(workshops)= # napari workshops There have been many workshops and tutorials given about napari. @@ -14,7 +14,8 @@ as a starting point. If you have organized a napari workshop and would like to see it featured here in this page, you can -[send a Pull Request to the napari/docs repository](../developers/documentation/index.md) +[send a Pull Request](contributing-docs-step-one) to the +[napari/docs repository](https://github.com/napari/docs) or contact the core developers on [zulip chat](https://napari.zulipchat.com/login/). ``` diff --git a/docs/guides/index.md b/docs/guides/index.md index ab6adac4..9c732713 100644 --- a/docs/guides/index.md +++ b/docs/guides/index.md @@ -3,8 +3,8 @@ ```{note} These pages describe advanced usage and how napari works internally. If you are -just getting started, check out our [tutorials](../tutorials/index.md) or -[how-to guides](../howtos/index.md) instead. +just getting started, check out our [tutorials](tutorials) or +[how-to guides](how-tos) instead. ``` ## Advanced usage diff --git a/docs/guides/layers.md b/docs/guides/layers.md index 5071a9af..dd27b1de 100644 --- a/docs/guides/layers.md +++ b/docs/guides/layers.md @@ -1,7 +1,7 @@ (layers-glance)= # Layers at a glance -[Layers](napari.layers) are the basic viewable objects that can be added to a +{class}`~napari.layers` are the basic viewable objects that can be added to a viewer. **napari** supports seven main different layer types: `Image`, `Labels`, `Points`, `Shapes`, `Surface`, `Tracks` and `Vectors`. Each of the layer types corresponds to a different data type, visualization, and interactivity. You can @@ -22,19 +22,21 @@ viewer.add_image(data, name='astronaut') ``` To learn more about the layers available, see the -[Layers documentation](napari.layers). To learn about how to use the layers currently supported by napari, check out the -[Using layers how-to guides](../../howtos/layers/index). For a gentle +[Layers documentation](napari.layers). To learn about how to use the layers +currently supported by napari, check out the +[Using layers how-to guides](using-layers). For a gentle introduction, check out the -[Layer list section in the napari viewer tutorial](layer_list). +[Layer list section in the napari viewer tutorial](layer-list). ## Layer visibility All our layers support a visibility toggle that allows you to set the `visible` property of each layer. This property is located inside the layer widget in the -layers list and is represented by an eye icon indicating the `visibility` button. -Note that you can Option/Alt-click on the `visibility` button to show *just* that -one layer, hiding all others. If you then Option/Alt-click on the `visibility` -button of a layer a second time, the visibility state of all layers will be restored. +layers list and is represented by an eye icon indicating the `visibility` +button. Note that you can Option/Alt-click on the `visibility` button to show +*just* that one layer, hiding all others. If you then Option/Alt-click on the +`visibility` button of a layer a second time, the visibility state of all layers +will be restored. (layer_opacity)= ## Layer opacity @@ -54,25 +56,30 @@ globally to all the vectors in the layer. * For the [tracks layer](napari.layers.Tracks), the opacity value applies globally to all the tracks in the layer. ``` +(blending-layers)= ## Blending layers -All our layers support three blending modes: `translucent`, `additive`, and -`opaque`. These modes determine how the visuals for this layer get mixed with -the visuals from the other layers. +All our layers support a number of different blending modes. These modes +determine how the visuals for this layer get mixed with the visuals from the +other layers. -* An `opaque` layer hides any layer data below it. * A `translucent` setting will cause the layer to blend with the layers below -it if you decrease its opacity but will fully block those layers if its opacity -is `1`. This is a reasonable default, useful for many applications. -* A `minimum` blending mode will cause the layer to blend using the minimum of each pixel's R, G, and B values. This mode is uniquely useful for -blending multiple layers with inverted colormaps/LUTs, which represent measured signal with color on a white background. For some inspiration, see the twitter hashtag [#invertedLUT](https://twitter.com/hashtag/invertedLUT). + it if you decrease its opacity but will fully block those layers if its + opacity is `1`. This is a reasonable default, useful for many applications. +* A `translucent-no depth` setting allows for multiple layers to be blended with + different opacity, but no depth testing is performed. * An `additive` blending mode will cause the layer to blend with the layers -below even when it has full opacity. This mode is especially useful for -visualizing multiple layers at the same time, such as cell biology applications -where you have multiple different components of a cell labeled in different -colors. + below even when it has full opacity. This mode is especially useful for + visualizing multiple layers at the same time, such as cell biology + applications where you have multiple different components of a cell labeled in + different colors. +* A `minimum` blending mode will cause the layer to blend using the minimum of + each pixel's R, G, and B values. This mode is uniquely useful for blending + multiple layers with inverted colormaps/LUTs, which represent measured signal + with color on a white background. +* An `opaque` layer hides any layer data below it. -For example: +For example, the image below shows an image with the blending set to `additive`. ![napari viewer with an image of a cell. Layer controls are open in the left sidebar with the blending set to additive.](./images/blending.png) @@ -91,6 +98,7 @@ Switching to 3D mode for a very large data set could trigger computation that leads to a memory error. ``` +(layer-interpolation)= ## Layer interpolation We support a variety of interpolation modes when viewing 2D slices. In the diff --git a/docs/howtos/docker.md b/docs/howtos/docker.md index 6fea186f..52297025 100644 --- a/docs/howtos/docker.md +++ b/docs/howtos/docker.md @@ -1,3 +1,5 @@ +(docker)= + # Napari in Docker ## Build diff --git a/docs/howtos/headless.md b/docs/howtos/headless.md index e97bbec4..0a7fc7b1 100644 --- a/docs/howtos/headless.md +++ b/docs/howtos/headless.md @@ -1,3 +1,5 @@ +(headless)= + # Running napari headlessly Running napari headlessly (without opening a napari GUI interface) may be diff --git a/docs/howtos/index.md b/docs/howtos/index.md index fe49d5f4..76929cc2 100644 --- a/docs/howtos/index.md +++ b/docs/howtos/index.md @@ -4,23 +4,22 @@ These guides show you how to complete tasks with napari. They assume you have already installed **napari**, know how to launch the viewer, and are familiar with its layout. For help with installation see our -[installation tutorial](../tutorials/fundamentals/installation). For help +[installation tutorial](installation). For help getting started with the viewer see our -[Getting started guide](../tutorials/fundamentals/getting_started). For +[How to launch napari guide](launch). For help understanding the organisation of the viewer, including things like the layers list, the layer properties widgets, the layer control panels, and the -dimension sliders see our [napari viewer](../tutorials/fundamentals/viewer) +dimension sliders see our [napari viewer](viewer-tutorial) tutorial. -- [Using layers](layers/index): Learn about how to use the layers currently +- [Using layers](using-layers): Learn about how to use the layers currently supported by napari. - [Extending napari](extending-napari): Learn how to extend napari by adding widgets and connecting callbacks. -- [napari + ImageJ how-to guide](./napari_imageJ): Learn about how to use napari -and ImageJ simultaneously. -- [napari in Docker](./docker): Learn about using napari in docker. -- [Performance monitoring](./perfmon): Learn about how to monitor napari +- [napari + ImageJ how-to guide](napari-imagej): Learn about how to use napari +- [napari in Docker](docker): Learn about using napari in docker. +- [Performance monitoring](perfmon): Learn about how to monitor napari performance and diagnose potential problems. -- [napari headless](./headless): Tips on how to run napari headlessly. +- [napari headless](headless): Tips on how to run napari headlessly. - [Themes](themes): Changing appearance of the napari GUI with your own theme and sharing your theme via a plugin. diff --git a/docs/howtos/layers/image.md b/docs/howtos/layers/image.md index ea94803d..9516fc50 100644 --- a/docs/howtos/layers/image.md +++ b/docs/howtos/layers/image.md @@ -11,20 +11,80 @@ kernelspec: name: python3 --- -# Using the image layer +# Using the `image` layer -In this document, you will learn how to use the `napari` image layer, including -the types of images that can be displayed, and how to set properties like the -contrast, opacity, colormaps and blending mode. You will also understand how -to add and manipulate a variety of different types of images both from the GUI -and from the console. +In this document, you will learn how to use the `napari` `image` layer, +including the types of images that can be displayed, and how to set properties +like `contrast limits`, `opacity`, `colormaps`, `blending` and `interpolation`. +You will also understand how to add and manipulate a variety of different types +of images both from the GUI and from the console. -## A simple example +For more information about layers, refer to [Layers at a glance](../../guides/layers). -You can create a new viewer and add an image in one go using the -`napari.view_image` function, or if you already have an existing viewer, you can -add an image to it using `viewer.add_image`. The api of both methods is the -same. In these examples we'll mainly use `view_image`. +## Controlling the `image` layer using the GUI + +The GUI contains following tools in the `layer controls` panel for the `image` +layer: +* Opacity +* Contrast Limits +* Auto-contrast +* Gamma +* Colormap +* Blending +* Interpolation + +Before we can use any of the GUI `layer controls`, we must load an image. +1. Start napari. +2. Click `File` > `Open Sample` > `napari builtins` > `Cells (3D+2Ch)` or any +sample image of your choice. + +The GUI controls may be adjusted as follows: + +* `opacity` is adjusted by moving the circle along the slider until the image + has the opacity you want. 0 is transparent and 1 is completely opaque. + +* `contrast limits` are adjusted by moving the minimum and maximum circles along + the slider until you have the contrast limits you want. For more precise + control, including the ability to set specific numerical values, you can + right-click on the slider. **Note:** Contrast limits are explained in + [Adjusting contrast limits](#adjusting-contrast-limits). + +* `auto-contrast` is adjusted by selecting either `once` or `continuous`. `once` + adjusts the contrast one time while `continuous` adjusts the contrast as you + explore the image. + +* `gamma` can be adjusted from a minimum of 0.20 to a maximum of 2.00. + *Gamma correction* or *gamma* is a nonlinear operation used to encode and + decode luminance or tristimulus values. + +* `colormap` is selected from the dropdown. **Note:** If the image you select is + an RGB or RGBA image, the colormap is automatically assigned RGB and cannot be + changed. You can find out if your image is RGB or RGBA by looking at the + `.rgb` property of the image layer. + +* `blending` has the options of `translucent`, `translucent no depth`, + `additive`, `minimum`, or `opaque` in the dropdown. Refer to the + [Blending layers](blending-layers) section of _Layers at a glance_ for an + explanation of each type of blending. + +* `interpolation` may be assigned one of the following from the dropdown: + * `cubic` + * `linear` + * `kaiser` + * `nearest` - default + * `spline36` + + **Note:** There is a brief explation of [interpolation](layer-interpolation) + in [Layers at a glance](../../guides/layers). + +## Controlling the `image` layer from the console + +### A simple example + +Create a new viewer and add an image in one go using the {func}`napari.view_image` +function, or if you already have an existing viewer, add an image to it using +`viewer.add_image`. The API for both methods is the same. In these examples +we'll mainly use `view_image`. A simple example of viewing an image is as follows: @@ -56,42 +116,42 @@ viewer.close() accept the same layer-creation parameters. ```{code-cell} python -:tags: [hide-cell] +:tags: [hide-output] help(napari.view_image) ``` ## Image data and NumPy-like arrays -napari can take any numpy-like array as input for its image layer. A numpy-like -array can just be a +napari can take any NumPy-like array as input for its image layer. A NumPy-like +array can be a [numpy array](https://numpy.org/doc/stable/reference/generated/numpy.array.html), a [dask array](https://docs.dask.org/en/stable/array.html), an [xarray](https://docs.xarray.dev/en/stable/generated/xarray.DataArray.html), a [zarr array](https://zarr.readthedocs.io/en/stable/api/core.html), or any other object that you can index into and when you call [`np.asarray`](https://numpy.org/doc/stable/reference/generated/numpy.asarray.html) -on it you get back a numpy array. +on it you get back a NumPy array. -The great thing about napari support of array-like objects is that you get to keep -on using your favorite array libraries without worrying about any conversions as -we'll handle all of that for you. +The great thing about napari support of array-like objects is that you get to +keep on using your favorite array libraries without worrying about any +conversions. napari handles all of that for you. napari will also wait until just before it displays data onto the screen to -actually generate a numpy array from your data, and so if you're using a library +actually generate a NumPy array from your data, and so if you're using a library like `dask` or `zarr` that supports lazy loading and lazy evaluation, we won't -force you load or compute on data that you're not looking at. This enables +force you to load or compute data that you're not examining. This enables napari to seamlessly browse enormous datasets that are loaded in the right way. For example, here we are browsing over 100GB of lattice lightsheet data stored -in a zarr file: +in a `zarr` file: ![napari viewer with an image layer of lattice lightsheet data opened. It can be browsed using the slider at the bottom of the viewer.](../../images/LLSM.webm) ## Multiscale images -For exceptionally large datasets napari supports multiscale images (sometimes +For exceptionally large datasets, napari supports multiscale images (sometimes called image pyramids). A multiscale image is a list of arrays, where each -array is downsampling of the previous array in the list, so that you end up +array is downsampling of the previous array in the list. This means you end up with images of successively smaller and smaller shapes. A standard multiscale image might have a 2x downsampling at each level, but napari can support any type of multiscale image as long as the shapes are getting smaller each time. @@ -104,25 +164,27 @@ multiscale image and the part of the image that needs to be displayed: ![napari viewer with a large image layer zoomed all the way in and all the way out in a matter of seconds thanks to multiscale image support.](../../images/pathology.webm) -This example had precomputed multiscale images stored in a zarr file, which is -best for performance. If, however you don't have a precomputed multiscale image -but try and show a exceptionally large image napari will try and compute the -multiscale image for you unless you tell it not too. +This example had precomputed multiscale images stored in a `zarr` file, which is +best for performance. If you don't have a precomputed multiscale image but try +and show an exceptionally large image, napari will try and compute the +multiscale image for you unless you tell it not to. -You can use the `multiscale` keyword argument to specify if your data is a -multiscale image or not. If you don't provide this value, then will try and -guess whether your data is or needs to be a multiscale image. +You can use the boolean `multiscale` keyword argument when creating an image +layer to specify if your data is a multiscale image or not. If you don't provide +this value, then napari will try and guess whether your data is or needs to be a +multiscale image. ## Loading multichannel images -Each channel in a multichannel image can be displayed as an individual layer -by using the `channel_axis` argument in `viewer.add_image()`. All the rest -of the arguments to `viewer.add_image()` (e.g. name, colormap, contrast_limit) -can take the form of a list of the same size as the number of channels. +Each channel in a multichannel image can be displayed as an individual layer by +using the `channel_axis` argument in {meth}`viewer.add_image()`. All the rest of +the arguments to `viewer.add_image()` (e.g. `name`, `colormap`, +`contrast_limit`) can take the form of a list of the same size as the number of +channels. For example, the multichannel image below has dimensions (60, 2, 256, 256) with axes ordered ZCYX (so the channel axis has an index of 1). It is loaded into -napari in one line. +napari in one line, as shown below: ```{code-cell} python import napari @@ -135,21 +197,32 @@ viewer = napari.view_image(cells, channel_axis=1) # load multichannel image in one line, with additional options viewer = napari.view_image( - cells, - channel_axis=1, - name=["membrane", "nuclei"], - colormap=["green", "magenta"], - contrast_limits=[[1000, 20000], [1000, 50000]], - ) + cells, + channel_axis=1, + name=["membrane", "nuclei"], + colormap=["green", "magenta"], + contrast_limits=[[1000, 20000], [1000, 50000]], +) +``` + +```{code-cell} python +:tags: [hide-input] + +from napari.utils import nbscreenshot +nbscreenshot(viewer, alt_text="napari viewer with a multichannel image of cells displayed as two image layers: nuclei and membrane.") ``` -![napari viewer with a multichannel image of cells displayed as two image layers: nuclei and membrane.](../../images/multichannel_cells.png) +```{code-cell} python +:tags: [remove-cell] + +viewer.close() +``` ## Viewing RGB vs luminance (grayscale) images -In this example we explicitly set the `rgb` keyword to be `True` -because we know we are working with an `rgb` image: +In this example, the `rgb` keyword is explicitly set to `True` because we know +we are working with an `rgb` image: ```{code-cell} python viewer = napari.view_image(data.astronaut(), rgb=True) @@ -169,10 +242,11 @@ nbscreenshot(viewer, alt_text="napari viewer with the left sidebar layer control viewer.close() ``` -If we had left that keyword argument out napari would have successfully guessed -that we were trying to show an `rgb` or `rgba` image because the final dimension -was 3 or 4. If you have a luminance image where the last dimension is 3 or 4 you -can set the `rgb` property to `False` so napari handles the image correctly. +If we had left the `rgb` keyword argument out, napari would have successfully +guessed that we were trying to show an `rgb` or `rgba` image because the final +dimension for the image array was 3 or 4. If you have a luminance image where +the last dimension is 3 or 4, you can set the `rgb` argument to `False` to +explicitly state this is not a color image and get a slider for that dimension. `rgb` data must either be `uint8`, corresponding to values between 0 and 255, or `float` and between 0 and 1. If the values are `float` and outside the 0 to 1 @@ -188,7 +262,8 @@ their name. These include: list(napari.utils.colormaps.AVAILABLE_COLORMAPS) ``` -Passing any of these strings as follows to set the image colormap: +Pass any of these strings to set the image colormap as shown below: + ```{code-cell} python viewer = napari.view_image(data.moon(), colormap='red') @@ -199,22 +274,21 @@ which returns a tuple of the colormap name followed by the vispy colormap object. You can list all the available colormaps using `layer.colormaps`. It is also possible to create your own colormaps using vispy's -`vispy.color.Colormap` object; see its full [documentation -here](https://vispy.org/api/vispy.color.colormap.html#vispy.color.colormap.Colormap). -Briefly, you can pass `Colormap` a list of length 3 or length 4 lists, -corresponding to the `rgb` or `rgba` values at different points along the -colormap. +`vispy.color.Colormap` object. See its +[full documentation](https://vispy.org/api/vispy.color.colormap.html#vispy.color.colormap.Colormap). +Briefly, you can pass `Colormap` a list of length 3 or 4, corresponding to the +`rgb` or `rgba` values at different points along the colormap. For example, to make a diverging colormap that goes from red to blue through -black, and color a random array you can do the following: +black, and color a random array, you can use this example code: ```{code-cell} python import napari -import numpy as np +from skimage.data import cell from vispy.color import Colormap cmap = Colormap([[1, 0, 0], [0, 0, 0], [0, 0, 1]]) -image = np.random.random((100, 100)) +image = cell() viewer = napari.view_image(image, colormap=('diverging', cmap)) ``` @@ -224,20 +298,20 @@ viewer = napari.view_image(image, colormap=('diverging', cmap)) from napari.utils import nbscreenshot -nbscreenshot(viewer, alt_text="napari viewer with colormap example using random data") +nbscreenshot(viewer, alt_text="napari viewer with colormap example using the cell example from skimage") ``` -Note in this example how we passed the colormap keyword argument as a tuple -containing both a name for our new custom colormap and the colormap itself. If -we had only passed the colormap it would have been given a default name. +Note in this example the colormap keyword argument was passed as a tuple +containing both a name for the new custom colormap and the colormap itself. If +we had passed only the colormap it would have been given a default name. -The named colormap now appears in the dropdown menu alongside a little thumbnail -of the full range of the colormap. +The named colormap now appears in the dropdown alongside a thumbnail of the full +range of the colormap. ## Adjusting contrast limits Each image layer gets mapped through its colormap according to values called -contrast limits. The contrast limits are a 2-tuple where the second value is +contrast limits. Contrast limits are a 2-tuple where the second value is larger than the first. The smaller contrast limit corresponds to the value of the image data that will get mapped to the color defined by 0 in the colormap. All values of image data smaller than this value will also get mapped to this @@ -245,15 +319,15 @@ color. The larger contrast limit corresponds to the value of the image data that will get mapped to the color defined by 1 in the colormap. All values of image data larger than this value will also get mapped to this color. -For example, you are looking at an image that has values between 0 and 100 with -a standard `gray` colormap, and you set the contrast limits to `(20, 75)`. Then +For example, if you are looking at an image that has values between 0 and 100 with +a standard `gray` colormap, and you set the contrast limits to `(20, 75)`, then all the pixels with values less than 20 will get mapped to black, the color corresponding to 0 in the colormap, and all pixels with values greater than 75 will get mapped to white, the color corresponding to 1 in the colormap. All other pixel values between 20 and 75 will get linearly mapped onto the range of colors between black and white. -In napari you can set the contrast limits when creating an `Image` layer or on +In napari you can set the *contrast limits* when creating an `Image` layer or on an existing layer using the `contrast_limits` keyword argument or property, respectively. @@ -276,30 +350,30 @@ nbscreenshot(viewer, alt_text="A viewer where the contrast limits have been adju viewer.close() ``` -Because the contrast limits are defined by two values the corresponding slider -has two handles, one the adjusts the smaller value, one that adjusts the larger +Because the contrast limits are defined by two values, the corresponding slider +has two handles: one adjusts the smaller value, and one adjusts the larger value. -As of right now adjusting the contrast limits has no effect for `rgb` data. +As of right now, adjusting the contrast limits has no effect for `rgb` data. -If no contrast limits are passed, then napari will compute them. If your data is -small, then napari will just take the minimum and maximum values across your +If contrast limits are not passed, napari will compute them. If your data is +small, napari will take the minimum and maximum values across your entire image. If your data is exceptionally large, this operation can be very -time consuming and so if you have passed an image pyramid then napari will just -use the top level of that pyramid, or it will use the minimum and maximum values +time consuming and so if you pass an image pyramid then napari will use only the +top level of that pyramid, or it will use the minimum and maximum values across the top, middle, and bottom slices of your image. In general, if working -with big images it is recommended you explicitly set the contrast limits if you +with big images, it is recommended to explicitly set the contrast limits if you can. -Currently if you pass contrast limits as a keyword argument to a layer then full -extent of the contrast limits range slider will be set to those values. +Currently if you pass contrast limits as a keyword argument to a layer, then the +full extent of the `contrast limits:` range slider will be set to those values. ## Saving without image compression -When saving an image layer, lossless zlib compression is applied by default. - To save with a different level of compression, consider using - [imageio.imwrite](https://imageio.readthedocs.io/en/stable/_autosummary/imageio.v3.imwrite.html). -Adjusting compression can be accomplished by including the appropriate kwargs -as outlined in the following locations for +When saving an image layer, lossless zlib compression is applied by default. To +save with a different level of compression, consider using +[imageio.imwrite](https://imageio.readthedocs.io/en/stable/_autosummary/imageio.v3.imwrite.html). +Adjusting compression can be accomplished by including the appropriate kwargs as +outlined in the following locations for [tiff](https://imageio.readthedocs.io/en/stable/_autosummary/imageio.plugins.tifffile.html#metadata-for-writing) or [png](https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#png) files. diff --git a/docs/howtos/layers/index.md b/docs/howtos/layers/index.md index 98cdfbed..c1424adf 100644 --- a/docs/howtos/layers/index.md +++ b/docs/howtos/layers/index.md @@ -8,5 +8,8 @@ following how-to guides: ```{tableofcontents} ``` +Each of these guides has a section on how to manipulate the layers using the GUI +controls and a section on how to manipulate them programmatically. + For a high-level overview of the napari Layers, see -[Layers at a glance](../../guides/layers). \ No newline at end of file +[Layers at a glance](layers-glances). \ No newline at end of file diff --git a/docs/howtos/layers/labels.md b/docs/howtos/layers/labels.md index 26c8b8c2..430339ab 100644 --- a/docs/howtos/layers/labels.md +++ b/docs/howtos/layers/labels.md @@ -11,32 +11,343 @@ kernelspec: name: python3 --- -# Using the labels layer +# Using the `labels` layer In this document, you will learn about the `napari` `Labels` layer, including using the layer to display the results of image segmentation analyses, and how to manually segment images using the paintbrush and fill buckets. You will also -understand how to add a labels image and edit it from the GUI and from the +understand how to add a labels image and edit it from the GUI and the console. -## When to use the labels layer +For more information about layers, refer to [Layers at a glance](../../guides/layers). -The labels layer allows you to take an array of integers and display each +## When to use the `labels` layer + +The `labels` layer allows you to take an array of integers and display each integer as a different random color, with the background color 0 rendered as transparent. -The `Labels` layer is therefore especially useful for segmentation tasks where -each pixel is assigned to a different class, as occurs in semantic segmentation, -or where pixels corresponding to different objects all get assigned the same -label, as occurs in instance segmentation. +The `labels` layer is especially useful for segmentation tasks where each pixel +is assigned to a different class, as in semantic segmentation, or where pixels +corresponding to different objects all get assigned the same label, as in +instance segmentation. + +## GUI tools for the `labels` layer + +The GUI contains following tools in the `layer controls` panel for the `labels` +layer: + +* Buttons + * shuffle colors + * label eraser + * paintbrush + * polygon tool + * fill bucket + * color picker + * pan/zoom mode +* Controls + * label + * opacity + * brush size + * blending + * color mode + * contour + * n edit dim + * contiguous + * preserve labels + * show selected + +### Buttons + +* **Shuffle colors** + + The color that each integer gets assigned is random, aside from 0 which always + gets assigned to be transparent. The colormap we use is designed such that + nearby integers get assigned distinct colors. The exact colors that get + assigned are determined by a [random seed](https://numpy.org/doc/stable/reference/random/generated/numpy.random.seed.html). + Changing that seed will shuffle the colors assigned to each label. To change + the seed, click on the `shuffle colors` button in the layer controls panel. + This changes the color of existing labels. Shuffling colors can be useful as + some colors may be hard to distinguish from the background or nearby objects. + +* **Label eraser** + + Use this tool to manually erase a label on the `labels layer`. Other layers + will not be affected. The label eraser tool looks like this: + ![image: eraser tool](../../images/labels-layer-eraser.png) + +* **Paintbrush** + + One of the major use cases for the `labels layer` is to manually edit or + create image segmentations. One of the tools that can be used for manual + editing is the `paintbrush`, activated by clicking the `paintbrush` icon in + the `layer controls` panel. Once the paintbrush is enabled, the pan and zoom + functionality of the viewer canvas is disabled, and you can paint on the + canvas. You can temporarily re-enable pan and zoom by pressing and holding the + spacebar. This feature is useful if you want to move around the `labels layer` + as you paint. + + Click the `paintbrush` icon and select a color from the `label` option by + clicking on the + or - on the label bar in the layer controls panel. This will + scroll through the available colors. Whatever color you pick will be the + *edge color* of the label. Draw the edge of the label using the `paintbrush`. + If you draw a continuous edge, you can fill it in using the `paint bucket` or + `fill bucket` tool. It can be the same color as the edge or a different color. + + Adjust the size of your `paintbrush` using the `brush size` slider or using + the default keybindings: `[` and `]`. The brush size can be as small as a + single pixel for incredibly detailed painting. + + If you have a multidimensional `labels layer` then your `paintbrush` will edit + data only in the visible slice by default. If you enable the `n_dimensional` + property and paintbrush then your paintbrush will extend out into neighbouring + slices according to its size. + + To quickly select the paintbrush, press the `2` key when the `labels layer` is + selected. + +* **Polygon** + + Another tool that can be used to quickly add or edit image segmentations is + the `polygon` tool. It combines functionality of the `paintbrush` and + `fill bucket` tools by allowing for readily drawing enclosed instance + segmentations. The `polygon` tool can be activated by clicking on the icon + resembling a polygon in the layer control panel or by pressing `3`. Once + activated, the user actions are as follows: + + 1. Left-click anywhere on the canvas to start drawing the polygon. + 2. Move the mouse to the location where you want the next vertex to be. + 3. Click again to set the vertex that is tracking the mouse cursor. + 4. After this step a polygon overlay will appear when moving the mouse. Repeat + steps 2 and 3 until the shape to be segmented is enclosed by the polygon + overlay. + 5. To undo the last added vertex, use a right-click. + 6. To cancel the drawing at any time without making a permanent change on the + labels layer, press `Esc`. This will delete the polygon overlay. + 7. Press `Enter` to finish drawing at any time or double click within a radius + of 20 screen pixels of the first vertex. This will add the polygon overlay + to the labels layer. + + The polygon overlay will have the color of the label. The polygon overlay also + has an opacity that can be adjusted the value of the `opacity` slider in the + layer control panel. Furthermore, while the polygon overlay may be visible + outside the canvas space during drawing, upon finishing drawing the polygon + will be cut off so that the part outside the canvas space is removed. This + ensures that the dimensions of the label image are not larger than the image + for which you are segmenting of for which you are editing the segmentations. + + Note: if you use the `polygon` tool for adding or editing segmentations of 3D + image data, you can only adjust labels in one plane, with the exception when + viewing the image data as RGB. The `polygon` tool cannot be activated if the + number of displayed dimensions is higher than two. If already active upon + toggling the number of displayed dimensions, the `polygon` tool will be + automatically deactivated. + +* **Fill bucket** + + Sometimes you might want to replace an entire label with a different label. + This could be because you want to make two touching regions have the same + label, or you want to replace only one label with a different one, or maybe + you have painted around the edge of a region and you want to quickly fill in + its inside. To do this you can select the `fill bucket` tool by clicking on + its icon in the `layer controls` panel, and then click on a target region of interest in the layer. The fill bucket will fill using the currently selected + label. If nothing is selected the entire layer will be filled with that label. + + By default, the `fill bucket` will change only contiguous or connected pixels + of the same label as the pixel that is clicked on. If you want to change all + the pixels of that label layer regardless of where they are in the slice, then + you can set the `contiguous` property or checkbox to `False`. Then everything + on that layer will be colored by the new label. + + If you have a multidimensional `labels layer` the `fill bucket` will edit data + only in the visible slice by default. Enable the `n_dimensional` property and + `paintbrush` so the `fill bucket` will extend out into neighbouring slices, + either to all pixels with that label in the layer, or only connected pixels + depending on if the contiguous property is disabled or not. + + To quickly select the fill bucket, press the `4` key when the `labels layer` + is selected. + +* **Color picker** + + The `color picker` can be used to select another color at any time. Click the + color picker tool then click on the existing color in the labels layer you + would like to use. That color now appears on the label bar as the selected + color. If the color does not exist in the label color pallette, it defaults + to 0 and a checkerboard pattern appears in the thumbnail on the label bar to + represent the transparent color. + + To quickly select the color picker, press the `5` key when the `labels layer` + is selected. + + **Note:** The color of the label can be selected by clicking on the + or - + symbols at either end of the bar or by clicking on the number in the center of + the bar and typing in the number of the color to use. 255 colors are available. + +### Controls + +* Label + + Use this control to choose a color for a label you are about to create or to + change the color of an existing label. + +* Opacity + + Click and hold the oval on the opacity slider bar and adjust it to any value + between 0.00 (clear) and 1.00 (completely opaque). + +* Brush size + + Adjust the size of the `paintbrush` using the `brush size` slider to any value + from 1 to 40. 1 is as small as a single pixel. + +* Blending + + Select from `translucent`, `translucent no depth`, `additive`, `minimum`, or + `opaque` from the dropdown. Refer to the [Blending layers](blending-layers) + section of _Layers at a glance_ for an explanation of each type of blending. + +* Color mode + + Select `auto` or `direct` from the dropdown. Auto is the default and allows + color to be set via a hash function with a seed. Direct allows the color of + each label to be set directly by a color dictionary, which can be accessed + directly via the `color` property of the layer, `layer.color`. + +* Contour + + If this field has any value other than 0, only the contours of the labels + will show. Change the value by clicking the - or + symbols on either end of + the bar, or by clicking the number in the center of the bar and typing in the + desired value. + +* n edit dim -## A simple example + This is the number of dimensions across which labels will be edited. + +* Contiguous + + If this box is checked, the `fill bucket` changes only connected pixels of the + same label. + +* Preserve labels + + If this box is checked, existing labels are preserved while painting. It + defaults to false to allow painting on existing labels. When set to true, + existing labels will be preserved during painting. + + **You can toggle this mode using the default keybinding `p`.** DOESN'T WORK + +* Show selected + + When this is checked, only the selected labels will be displayed. Selected + labels are those labels that match the color in the `label` control. When it + is not checked, all labels will be displayed. + +## Editing using the tools in the GUI + +### Pan and zoom mode + +The default mode of the `labels layer` is to support panning and zooming. This +mode is represented by the magnifying glass in the `layer controls` panel. While +pan and zoom is selected, editing the layer is not possible. Once you click on +one of the editing tools, pan and zoom is turned off. Return to pan and zoom +mode by pressing the `6` key when the `labels layer` is selected. + +### Creating a new `labels layer` + +Create a brand-new empty `labels layer` by clicking the `New labels layer` +button above the layer list. The shape of the new labels layer will match the +size of any currently existing image layers, allowing you to paint on top of +them. + +### Selecting a label + +A particular label can be chosen in one of three ways: + +* Using the label control inside the `layer controls` panel and typing in the + numeric value of the desired label; + +* Using the + or - buttons to get to the desired label color or **press the + default keybinding `m` to set a new label;** DOESN'T WORK + +* Selecting the `color picker` tool and then clicking on a pixel with the + desired label color in the image. + +When a label is chosen, the integer value associated with it appears inside the +label control and the color of the label is shown in the thumbnail next to the +control. If the 0 label is selected, then a checkerboard pattern is shown in the +thumbnail to represent the transparent color. + +You can quickly select the color picker by pressing the `5` key when the labels +layer is selected. -You can create a new viewer and add an labels image in one go using the -`napari.view_labels` method, or if you already have an existing viewer, you can -add a `Labels` image to it using `viewer.add_labels`. The api of both methods is -the same. In these examples we'll mainly use `add_labels` to overlay a `Labels` -image onto on image. +While painting with a label, you can swap between the current (selected) label +and the transparent background label (`0`) by pressing `x`. + +You can set the selected label to a new label -- one larger than the current +largest label -- by pressing `m` with either the `paintbrush` or `fill bucket` +tools selected. This selection will guarantee that you are using a label that +hasn't been used before. + +You can also increment or decrement the currently selected label by pressing the +`=` or `-` keys, respectively. + +### Creating, deleting, merging, and splitting connected components + +Create and edit object segmentation maps using the `color picker`, `paintbrush`, +and `fill bucket` tools. Below we show how to use these tools by performing +common editing tasks on connected components (keep the `contiguous` box checked). + +* Creating or drawing a connected component + ![Using the paintbrush and fill bucket tools to draw a connected component](../../images/draw_component.webm) + + * Press `m` to select a label color that has not been used. + * Select the `paintbrush` tool and draw a closed contour around the object. + * Select the `fill bucket` tool and click inside the contour to assign the + label to all pixels of the object. + +* Deleting a connected component + ![Deleting selected labels](../../images/delete_label.webm) + Select the background label with the `color picker` or press `x`, then use the + `fill bucket` to set all pixels of the + connected component to background. + +* Merging connected components + ![Selecting a label and merging with a connecting label](../../images/merge_labels.webm) + * Select the label of one of the components with the `color picker` tool. + * Select the `fill bucket` and fill the components to be merged. + +* Splitting a connected component + ![Using the paintbrush tool to split a label into two](../../images/split_label.webm) + Splitting a connected component will introduce an additional object. + * Select the background label with the `color picker` or press `x`. + * Use the `paintbrush` tool to draw a dividing line where you want to split + the component. + * Assign the new label to one of the parts with the `fill bucket`. + +### Undo/redo functionality + +When using the `fill bucket` or `paintbrush` it can be easy to make a mistake +that you might want to undo or you might want to redo something that has just +been undone. Use `ctrl-z` to redo and `shift-ctrl-z` to redo. There are plans +to support this sort of functionality more generally, but for now these actions +will undo the most recent painting or filling event, up to 100 events in the +past. + +```{warning} +If you have multidimensional data, adjusting the currently viewed slice will +cause the undo history to be reset. +``` + +## Controlling the `labels` layer from the console +### A simple example + +Create a new viewer and add a labels image in one go using the +{meth}`napari.view_labels` method. If you already have an existing viewer, you +can add a `Labels` image to it using `viewer.add_labels`. The API for both +methods is the same. In these examples we'll mainly use `add_labels` to overlay +a `Labels` layer onto on image. In this example of instance segmentation, we will find and segment each of the coins in an image, assigning each one an integer label, and then overlay the @@ -79,31 +390,31 @@ nbscreenshot(viewer, alt_text="Segmentation of coins in an image, displayed usin viewer.close() ``` -## Arguments of `view_labels` and `add_labels` +### Arguments of `view_labels` and `add_labels` {meth}`~napari.view_layers.view_labels` and {meth}`~napari.Viewer.add_labels` accept the same layer-creation parameters. ```{code-cell} python -:tags: [hide-cell] +:tags: [hide-output] help(napari.view_labels) ``` -## Labels data +### Labels data -The labels layer is a subclass of the `Image` layer and as such can support the -same numpy-like arrays, including +The `labels` layer is a subclass of the `image` layer and as such can support +the same NumPy-like arrays, including [dask arrays](https://docs.dask.org/en/stable/array.html), [xarrays](https://docs.xarray.dev/en/stable/generated/xarray.DataArray.html), and [zarr arrays](https://zarr.readthedocs.io/en/stable/api/core.html). A -`Labels` layer though must be integer valued, and the background label must be +`Labels` layer must be integer valued, and the background label must be 0. -Because the labels layer subclasses the image layer it inherits the great -properties of the image layer, like supporting lazy loading and multiscale +Because the `labels` layer subclasses the `image` layer, it inherits the great +properties of the `image` layer, like supporting lazy loading and multiscale images for big data layers. For more information about both these concepts see -the details in the [image layer guide](./image). +the details in the [image layer guide](image-layer). ## Creating a new labels layer @@ -117,29 +428,34 @@ them. :class: tip When saving a labels layer, lossless zlib compression is applied by default. - To save with a different level of compression, consider using +To save with a different level of compression, consider using [imageio.imwrite](https://imageio.readthedocs.io/en/stable/_autosummary/imageio.v3.imwrite.html). -Adjusting compression can be accomplished by including the appropriate kwargs -as outlined in the following locations for -[tiff](https://imageio.readthedocs.io/en/stable/_autosummary/imageio.plugins.tifffile.html#metadata-for-writing) or + +Adjusting compression can be accomplished by including the appropriate keyword +arguments as outlined in the following locations for +[tif](https://imageio.readthedocs.io/en/stable/_autosummary/imageio.plugins.tifffile.html#metadata-for-writing) or [png](https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#png) files. ``` -## Non-editable mode +### Non-editable mode If you want to disable editing of the labels layer you can set the `editable` property of the layer to `False`. -As note in the section on 3D rendering, when using 3D rendering the labels layer -is not editable. Similarly, for now, a labels layer where the data is -represented as a multiscale image is not editable. +As noted in the section on [3D rendering](#3d-rendering), when using 3D +rendering the labels layer is not editable. Similarly, for now, a `labels` layer +where the data is represented as a multiscale image is not editable. + +### 3D rendering -## 3D rendering of labels +All layers can be rendered in both 2D and 3D. One of the viewer buttons at the +bottom of the left panel can toggle between these 2 modes. +When in 2D, the button looks like this: ![image: 2D/3D button](../../images/3D-button.png), ready to switch to 3D mode. +When in 3D, the button looks like this: ![image: 2D/3D button](../../images/2D-button.png), ready to switch to 2D mode. -All our layers can be rendered in both 2D and 3D mode, and one of our viewer -buttons can toggle between each mode. The number of dimensions sliders will be 2 -or 3 less than the total number of dimensions of the layer, allowing you to -browse volumetric timeseries data and other high dimensional data. +The number of dimensions sliders will be 2 or 3 less than the total number of +dimensions of the layer, allowing you to browse volumetric timeseries data and +other high dimensional data. ```{code-cell} python :tags: [remove-output] @@ -163,184 +479,6 @@ viewer.camera.angles = (3, 38, 53) nbscreenshot(viewer, alt_text="A 3D view of a labels layer on top of 3D blobs") ``` -Note though that when entering 3D rendering mode the colorpicker, paintbrush, -and fill bucket options which allow for layer editing are all disabled. Those -options are only supported when viewing a layer using 2D rendering. - -## Pan and zoom mode - -The default mode of the labels layer is to support panning and zooming, as in -the image layer. This mode is represented by the magnifying glass in the layers -control panel, and while it is selected editing the layer is not possible. -Continue reading to learn how to use some of the editing modes. You can always -return to pan and zoom mode by pressing the `Z` key when the labels layer is -selected. - -## Shuffling label colors - -The color that each integer gets assigned is random, aside from 0 which always -gets assigned to be transparent. The colormap we use is designed such that -nearby integers get assigned distinct colors. The exact colors that get assigned -as determined by a -[random seed](https://numpy.org/doc/stable/reference/random/generated/numpy.random.seed.html) -and changing that seed will shuffle the colors that each label gets assigned. -Changing the seed can be done by clicking on the `shuffle colors` button in the -layers control panel. Shuffling colors can be useful as some colors may be hard -to distinguish from the background or nearby objects. - -## Selecting a label - -A particular label can be selected either using the label combobox inside the -layers control panel and typing in the value of the desired label or using the -plus / minus buttons, or by selecting the color picker tool and then clicking on -a pixel with the desired label in the image. When a label is selected you will -see its integer inside the label combobox and the color or the label shown in -the thumbnail next to the label combobox. If the 0 label is selected, then a -checkerboard pattern is shown in the thumbnail to represent the transparent -color. - -You can quickly select the color picker by pressing the `L` key when the labels -layer is selected. - -You can set the selected label to be 0, the background label, by pressing `E`. - -You can set the selected label to be one larger than the current largest label -by pressing `M`. This selection will guarantee that you are then using a label -that hasn't been used before. - -You can also increment or decrement the currently selected label by pressing the -`I` or `D` key, respectively. - -## Painting in the labels layer - -One of the major use cases for the labels layer is to manually edit or create -image segmentations. One of the tools that can be used for manual editing is the -`paintbrush`, that can be made active from by clicking the paintbrush icon in -the layers control panel. Once the paintbrush is enabled, the pan and zoom -functionality of the viewer canvas gets disabled, and you can paint onto the -canvas. You can temporarily re-enable pan and zoom by pressing and holding the -spacebar. This feature can be useful if you want to move around the labels layer -as you paint. - -When you start painting the label that you are painting with, and the color that -you will see are determined by the selected label. Note there is no explicit -eraser tool, instead you just need to make the selected label 0 and then you are -effectively painting with the background color. Remember you can use the color -picker tool at any point to change the selected label. - -You can adjust the size of your paintbrush using the brush size slider, making -it as small as a single pixel for incredibly detailed painting. - -If you have a multidimensional labels layer then your paintbrush will only edit -data in the visible slice by default; however, if you enable the `n_dimensional` -property and paintbrush then your paintbrush will extend out into neighbouring -slices according to its size. - -You can quickly select the paintbrush by pressing the `P` key when the labels -layer is selected. - -## Using the fill bucket - -Sometimes you might want to replace an entire label with a different label. This -could be because you want to make two touching regions have the same label, or -you want to just replace one label with a different one, or maybe you have -painted around the edge of a region and you want to quickly fill in its inside. -To do this you can select the `fill bucket` by clicking on the droplet icon in -the layer controls panel and then click on a target region of interest in the -layer. The fill bucket will fill using the currently selected label. - -By default, the fill bucket will only change contiguous or connected pixels of -the same label as the pixel that is clicked on. If you want to change all the -pixels of that label regardless of where they are in the slice, then you can set -the `contiguous` property or checkbox to `False`. - -If you have a multidimensional labels layer then your fill bucket will only edit -data in the visible slice by default; however, if you enable the `n_dimensional` -property and paintbrush then your fill bucket will extend out into neighbouring -slices, either to all pixels with that label in the layer, or only connected -pixels depending on if the contiguous property is disabled or not. - -You can quickly select the fill bucket by pressing the `F` key when the labels -layer is selected. - -## Drawing using polygons in the labels layer - -Another tool that can be used to quickly add or edit image segmentations is the -`polygon` tool. It combines functionality of the `paintbrush` and `fill bucket` -tool by allowing for readily drawing enclosed instance segmentations. The `polygon` tool -can be activated by clicking on the icon resembling a polygon in the layer control -panel or by pressing `3`. Once activated, the user actions are as follows: - -1. Left-click anywhere on the canvas to start drawing the polygon. -2. Move the mouse to the location where you want the next vertex to be. -3. Click again to set the vertex that is tracking the mouse cursor. -4. After this step a polygon overlay will appear when moving the mouse. Repeat step 2 and 3 - until the shape to be segmented is enclosed by the polygon overlay. -5. To undo the last added vertex right-click.' -6. To cancel the drawing at any time without making a permanent change on the labels layer press - `escape`. This will delete the polygon overlay -7. Press `enter` to finish drawing at any time or double click within a radius of 20 screen pixels - of the first vertex. This will add the polygon overlay to the labels layer. - -The polygon overlay will have the color of the label. The polygon overlay also has an opacity -that can be adjusted the value of the `opacity` slider in the layer control panel. -Furthermore, while the polygon overlay may be visible outside the canvas space during drawing, upon -finishing drawing the polygon will be cut off so that the part outside the canvas space is -removed. This ensures that the dimensions of the label image are not larger than the image -for which you are segmenting of for which you are editing the segmentations. - -Note: if you use the `polygon` tool for adding or editing segmentations of 3D image data, you can only -adjust labels in one plane, with the exception when viewing the image data as RGB. -The `polygon` tool cannot be activated if the number of displayed dimensions is higher than two. -If already active upon toggling the number of displayed dimensions, the `polygon` tool will be -automatically deactivated. - -## Creating, deleting, merging, and splitting connected components - -Using the `color picker`, `paintbrush`, and `fill bucket` tools one can create -and edit object segmentation maps. Below we show how to use these tools to by -perform common editing tasks on connected components (keep the `contiguous` box -checked). - -**Drawing a connected component**: - -![image: draw component](../../images/draw_component.webm) - -Press `M` to select a new label color. Select the `paintbrush` tool and draw a -closed contour around the object. Select the `fill bucket` tool and click inside -the contour to assign the label to all pixels of the object. - -**Selecting a connected component**: - -![image: delete label](../../images/delete_label.webm) - -Select the background label with the `color picker` (alternative: press keyboard -shortcut `E`), then use the `fill bucket` to set all pixels of the connected -component to background. - -**Merging connected components**: - -![image: merge labels](../../images/merge_labels.webm) - -Select the label of one of the components with the `color picker` tool and then -filling the components to be merged with the fill bucket. - -**Splitting a connected component**: - -![image: split label](../../images/split_label.webm) - -Splitting a connected component will introduce an additional object, therefore -press `M` to select a label number that is not already in use. Use the -paintbrush tool to draw a dividing line, then assign the new label to one of the -parts with the `fill bucket`. - -## Undo / redo functionality - -When painting or using the fill bucket it can be easy to make a mistake that you -might want to undo or then redo. For the labels layer we support an undo with -`ctrl-Z` and redo with `shift-ctrl-Z`. We plan to support this sort of -functionality more generally, but for now these actions will undo the most -recent painting or filling event, up to 100 events in the past. - -If you have multidimensional data, then adjusting the currently viewed slice -will cause the undo history to be reset. +Note that in 3D rendering mode the `colorpicker`, `paintbrush`, and +`fill bucket` options are all disabled. Those options allow for layer editing +and are only supported when viewing a layer rendered in 2D. diff --git a/docs/howtos/layers/points.md b/docs/howtos/layers/points.md index d174b3e2..ee4527aa 100644 --- a/docs/howtos/layers/points.md +++ b/docs/howtos/layers/points.md @@ -11,35 +11,206 @@ kernelspec: name: python3 --- -# Using the points layer +# Using the `points` layer In this document, you will learn about the `napari` `Points` layer, including -displaying spots over an image that have been found in an automated fashion, or -manually annotating an image with points. You will also understand how to add a -points layer and edit it from the GUI and from the console. +displaying `points` over an image that have been found in an automated fashion, +or manually annotating an image with `points`. You will also understand how to +add a `points layer` and edit it from the GUI and from the console. -## When to use the points layer +For more information about layers, refer to [Layers at a glance](../../guides/layers). -The points layer allows you to display an `NxD` array of `N` points in `D` +## When to use the `points` layer + +The `points` layer allows you to display an `NxD` array of `N` points in `D` coordinates. You can adjust the size, face color, and edge color of all the -points independently. You can also adjust the opactiy, edge width, and symbol -representing all the points simultaneously. +points independently. You can also adjust `opacity` and `symbol` representing +all the points simultaneously. Each data point can have annotations associated with it using the `Points.properties` dictionary. These properties can be used to set the face and edge colors of the points. For example, when displaying points of different classes/types, one could automatically set color the individual points by their -respective class/type. For more details on point properties, see the "setting -point edge and face color with properties" below or the [point annotation -tutorial](../../tutorials/annotation/annotate_points). +respective class/type. For more details on point properties, see +[](#setting-point-edge-and-face-color-with-properties) or +[point annotation tutorial](../../tutorials/annotation/annotate_points). + +## Creating and editing the `points` layer using the GUI + +The GUI contains following tools in the `layer controls` panel for the `points` +layer: + +* Buttons + * Delete selected points + * Add points + * Select points + * Pan/zoom +* Controls + * Opacity + * Point size + * Blending + * Symbol + * Face color + * Edge color + * Display text + * Out of slice +* Other tools + * New points layer button + * 2D/3D button + +### Buttons + +* **Deleting points** + ![image: Delete points tool](../../images/point-deleting-tool.png) + + Points can be deleted after they have been selected. First select the point or + points to delete, then click on the `delete` button in the `layer controls` + panel or press the delete key on your keyboard. + +* **Adding points** + ![image: Add points tool](../../images/point-adding-tool.png) + + New points can be added using the point adding tool, shown above, from the + layer controls panel. Points can then be added by clicking in the canvas. + + **Note:** Clicking and dragging moves the image, just as pan/zoom does. Just + click where you want the point to go. You cannot adjust the point by clicking + and dragging. Use the `point size` control to make it larger or smaller. + + If you have a multidimensional points layer then the coordinates of the new + point will keep track of the currently viewed slice the point has been added + to. + + Quickly select the `add points` tool by pressing the `2` key when the `points` + layer is selected. The add points tool supports panning and zooming. + + Additionally, you can select all the points in the currently viewed slice by + pressing the `a` key and all the points in the layer (across all slices) using + `Shift-a`. + + Note: Pressing either keybinding again will toggle the selection, so you can + select all points in a layer and the *deselect* points from a slice. + +* **Selecting points** + ![image: Select points tool](../../images/point-selecting-tool.png) + + Select a point using the tool (shown above) and then clicking on that point. + You can select multiple points by continuing to shift+click on additional + points, or by dragging a bounding box around the points you want to select. + You can quickly switch to the `select points` tool by pressing the `3` key + when the points layer is selected. Select all the points in the currently + viewed slice by clicking the `a` key while in select mode. + + Using the `select points` tool disables pan and zoom functionality. This + allows you to select points on the layer. Temporarily re-enable pan and zoom + by pressing and holding the spacebar. This feature can be useful if you want + to move around the `points` layer as you create your selection. + +* **Pan/zoom** + ![image: Pan/zoom tool](../../images/pan-zoom-tool.png) + + The default mode of the points layer supports panning and zooming, as in the + image layer. This mode is represented by the magnifying glass in the layers + control panel, and while it is selected, the `Add point`, + `Delete selected points`, and `Select points` tools are all disabled. Those + options are supported only when viewing a layer using 2D rendering. Return to + pan and zoom mode by pressing the `4` key when the points layer is selected. + +### Controls + +* Opacity + + The opacity slider adjusts the opacity of a point or points from 0 + (transparent) to 1.00 (completely opaque). + +* Point size + + Point size can be adjusted from 1 to 100 using the point size slider. + +* Blending + + Select `translucent`, `translucent no depth`, `additive`, `minimum`, or + `opaque` from the dropdown. Refer to the [Blending layers](blending-layers) + section of _Layers at a glance_ for an explanation of each type of blending. + +* Symbol + + Select one of the symbol types from the dropdown menu. This will be the shape + of a new point or will change the shape of all points on the current `points` + layer. The symbol property applies to all the points on a layer so you don't + need to have any points selected for it to have an effect. In fact, you cannot + change the symbol for a single point on a layer and leave the rest the same. + +* Face and edge colors + + To change the point color properties from the GUI first select the points + whose properties you want to change, otherwise you will just be initializing + the property for the next point to add. Select the point you want to change, + then click the thumbnail next to `face color:` or `edge color:` to select or + create a color from the pallette. -## A simple example +* Display text + + Check this box to turn `display text` on or off. Currently, text can be added + to the points only programmatically and not through the GUI. Refer to the + example [](../../gallery/add_points_with_multicolor_text) for more + information. + +* Out of slice + + If this box is checked, `out of slice` is on or true. If this box is not + checked, `out of slice` is off or false. If it is on or true, points slightly + out of slice are rendered. Refer to + [Changing points size](#changing-points-size) below for more information. + +### Other tools + +* `New points layer` button + + Create a brand new empty points layer by clicking the `New points layer` + button at the top of the `layers list` panel. The shape of the points layer is + defined by the points inside it, as you add new points the shape will adjust + as needed. The dimension of the new points layer will default to the largest + dimension of any layer currently in the viewer, or to 2 if no other layers are + present in the viewer. + +* 2D/3D button or `Toggle ndisplay` button + + All layers can be rendered in both 2D and 3D. The `Toggle ndisplay` button at + the bottom of the left panel toggles between these 2 modes. + When in 2D, the button looks like this: ![image: 2D/3D button](../../images/3D-button.png), ready to switch to 3D mode. + When in 3D, the button looks like this: ![image: 2D/3D button](../../images/2D-button.png), ready to switch to 2D mode. + You can also switch modes by pressing `Ctrl+y`. + + Note that when entering 3D rendering mode the GUI `Add point`, + `Delete selected points`, and `Select points` tools are all disabled. Those + options are supported only when viewing a layer using 2D rendering. + +* `ctrl-c` and `ctrl-v` (copying and pasting points) + + Copy and paste any selected points using `ctrl-c` and `ctrl-v`, respectively. + If you have a multidimensional `Points` layer you can copy points from one + slice to another by pasting them into the new slice. The coordinates of the + points in the visible dimensions will be in the same place on the new slice as + in the old slice, but the rest of the coordinates will be updated with the new + slice values. + +## Controlling the `points` layer programmatically +### A simple example You can create a new viewer and add a set of points in one go using the -`napari.view_points` method, or if you already have an existing viewer, you can -add points to it using `viewer.add_points`. The api of both methods is the same. -In these examples we'll mainly use `add_points` to overlay points onto on an -existing image. +{meth}`napari.view_points` method, or if you already have an existing viewer, +you can add points to it using `viewer.add_points`. The API of both methods is +the same. In these examples we'll mainly use `add_points` to overlay points onto +on an existing image. + +Each data point can have annotations associated with it using the +`Points.properties` dictionary. These properties can be used to set the face and +edge colors of the points. For example, when displaying points of different +classes/types, one could automatically set the color of the individual points by +their respective class/type. For more details on point properties, see +[](#setting-point-edge-and-face-color-with-properties) below or the +[Point annotation tutorial](../../tutorials/annotation/annotate_points). In this example, we will overlay some points on the image of an astronaut: @@ -68,146 +239,89 @@ nbscreenshot(viewer, alt_text="3 points overlaid on an astronaut image") viewer.close() ``` -## Arguments of `view_points` and `add_points` +### Arguments of `view_points` and `add_points` {meth}`~napari.view_layers.view_points` and {meth}`~napari.Viewer.add_points` accept the same layer-creation parameters. ```{code-cell} python -:tags: [hide-cell] +:tags: [hide-output] help(napari.view_points) ``` -## Points data +### Points data -The input data to the points layer must be an `NxD` numpy array containing the +The input data to the `points` layer must be an `NxD` NumPy array containing the coordinates of `N` points in `D` dimensions. The ordering of these dimensions is the same as the ordering of the dimensions for image layers. This array is always accessible through the `layer.data` property and will grow or shrink as new points are either added or deleted. -## Using the points properties dictionary +### Using the points properties dictionary -The `Points` layer can contain properties that annotate each point. +The `points` layer can contain properties that annotate each point. `Points.properties` stores the properties in a dictionary where each key is the -name of the property and the values are numpy arrays with a value for each point +name of the property and the values are NumPy arrays with a value for each point (i.e., length N for N points in `Points.data`). As we will see below, we can use the values in a property to set the display properties of the points (e.g., face color or edge color). To see the points properties in action, please see the -[point annotation tutorial](../../tutorials/annotation/annotate_points). - -## Creating a new points layer +[Point annotation tutorial](annotating-points). -As you can add new points to a points layer using the add points tool, it is -possible to create a brand new empty points layers by clicking the new points -layer button above the layers list. The shape of the points layer is defined by -the points inside it, and so as you add new points the shape will adjust as -needed. The dimension of the new points layer will default to the largest -dimension of any layer currently in the viewer, or to 2 if no other layers are -present in the viewer. -## Non-editable mode +### Non-editable mode -If you want to disable editing of the points layer you can set the `editable` -property of the layer to `False`. +To disable editing the points layer, set the `editable` property of the layer to +`False`. -As note in the section on 3D rendering, when using 3D rendering the points layer -is not editable. +When using 3D rendering the points layer cannot be edited. -## 3D rendering of points +### 3D rendering -All our layers can be rendered in both 2D and 3D mode, and one of our viewer -buttons can toggle between each mode. The number of dimensions sliders will be 2 -or 3 less than the total number of dimensions of the layer. See for example -these points overlaid on an image in both 2D and 3D: +The number of dimensions sliders will be 2 or 3 less than the total number of +dimensions of the layer, allowing you to browse volumetric timeseries data and +other high dimensional data. See for example these points overlaid on an image +in both 2D and 3D: ![image: smFISH with points overlaid](../../images/smFISH.webm) -Note though that when entering 3D rendering mode the point add, delete, and -select tools are all disabled. Those options are only supported when viewing a -layer using 2D rendering. - -## Pan and zoom mode - -The default mode of the points layer is to support panning and zooming, as in -the image layer. This mode is represented by the magnifying glass in the layers -control panel, and while it is selected editing the layer is not possible. -Continue reading to learn how to use some of the editing modes. You can always -return to pan and zoom mode by pressing the `Z` key when the points layer is -selected. - -## Adding, deleting, and selecting points - -New points can be added using the point adding tool. This tool can be selected -from layer controls panel. Points can then be added by clicking in the canvas. -If you have a multidimensional points layer then the coordinates of the new -point will keep track of the currently viewed slice that you added the point -too. You can quickly select the add points tool by pressing the `P` key when the -points layer is selected. The point adding tool also supports panning and -zooming. - -You can select a point by selecting the select points tool and then clicking on -that point. You can select multiple points by continuing to shift click on -additional points, or by dragging a bounding box around the points you want to -select. You can quickly select the select points tool by pressing the `S` key -when the points layer is selected. - -Additionally, you can select all the points in the currently viewed slice by pressing -the `A` key and all the points in the layer (across all slices) using `Shift-A`. -Note: Pressing either keybinding again will toggle the selection, so you can select -all points in a layer and the *deselect* points from a slice. +### Adding, deleting, and selecting points -Once selected you can delete the selected points by clicking on the delete -button in the layer controls panel or pressing the delete key. +To do this in the console, use code something like the example in +[Add points on nD shapes](../../gallery/add_points_on_nD_shapes). -When using the point selection tool the pan and zoom functionality of the viewer -canvas is disabled and you are able to select points the layer. You can -temporarily re-enable pan and zoom by pressing and holding the spacebar. This -feature can be useful if you want to move around the points layer as you create -your selection. - -## Changing points size +### Changing points size Each point can have a different size. You can pass a list or 1-dimensional array of points through the size keyword argument to initialize the layer with points -of different sizes. These sizes are then accessible through the `size` -property. If you pass a single size then all points will get initialized with -that size. Points can be pseudo-visualized as n-dimensional if the -`out_of_slice_display` property is set to `True` or the `out of slice` checkbox is -checked. In this setting when viewing different slices of the layer points will -appear in the neighbouring slices to the ones in which they are located with a -size scaled by the distance from their center to that slice. This feature can be -especially useful when visualizing 2D slices of points that are located in a 3D -volume. - -Points can also be resized within the GUI by first selecting them and then -adjusting the point size slider. If no points are selected, then adjusting the -slider value will only serve to initialize the size for new points that are -about to be added. The value of the size of the next point to be added can be -found in the `layer.current_size` property. Note this property is different from -`layer.size` which contains the current sizes of all the points. - -## Changing points edge and face color +of different sizes. These sizes are then accessible through the `size` property. +If you pass a single size then all points will get initialized with that size. +Points can be pseudo-visualized as n-dimensional if the `out_of_slice_display` +property is set to `True`. When `True` and viewing different slices of the +layer, points will appear in the neighbouring slices to the ones in which they +are located with a size scaled by the distance from their center to that slice. +This feature can be especially useful when visualizing 2D slices of points that +are located in a 3D volume. + +The value of the size of the next point to be added can be found in the +`layer.current_size` property. Note this property is different from `layer.size` +which contains the current sizes of all the points. + +### Changing points edge and face color Individual points can each have different edge and face colors. You can initially set these colors by providing a list of colors to the `edge_color` or -`face_color` keyword arguments respectively, or you can edit them from the GUI. -The colors of each of the points are available as lists under the -`layer.edge_color` and `layer.face_color` properties. Similar to the `size` -and `current_size` properties these properties are different from the -`layer.current_edge_color` and `layer.current_face_color` properties that will -determine the color of the next point to be added or any currently selected -points. - -To change the point color properties from the GUI you must first select the -points whose properties you want to change, otherwise you will just be -initializing the property for the next point you add. +`face_color` keyword arguments respectively. The colors of each of the points +are available as lists under the `layer.edge_color` and `layer.face_color` +properties. Similar to the `size` and `current_size` properties, these +properties are different from the `layer.current_edge_color` and +`layer.current_face_color` properties that will determine the color of the next +point to be added or any currently selected points. -## Setting point edge and face color with properties +### Setting point edge and face color with properties Point edge and face colors can be set as a function of a property in -`Points.properties`. There are two ways that the values in properties can be +`Points.properties`. There are two ways the values in `Points.properties` can be mapped to colors: (1) color cycles and (2) colormaps. Color cycles are sets of colors that are mapped to categorical properties. The @@ -217,8 +331,8 @@ number of colors in the color cycle. Colormaps are a continuum of colors that are mapped to a continuous property value. The available colormaps are listed below (colormaps are from [vispy](https://vispy.org/api/vispy.color.colormap.html#vispy.color.colormap.Colormap)). -For some guidance on choosing colormaps, see the [matplotlib colormap -docs](https://matplotlib.org/stable/tutorials/colors/colormaps.html). +For guidance on choosing colormaps, see the +[matplotlib colormap docs](https://matplotlib.org/stable/tutorials/colors/colormaps.html). ```{code-cell} python list(napari.utils.colormaps.AVAILABLE_COLORMAPS) @@ -258,21 +372,21 @@ nbscreenshot(viewer, alt_text="3 points overlaid on an astronaut image, where th viewer.close() ``` -In the example above, the properties (`point_properties`) were provided as a -dictionary with two properties: `good_point` and `confidence`. The values of -each property are stored in a numpy ndarray with length 3 since there were three -coordinates provided in `points`. We set the edge color as a function of the -`good_point` property by providing the keyword argument -`edge_color='good_point'` to the `viewer.add_points()` method. We set the color -cycle via the `edge_color_cycle` keyword argument (`edge_color_cycle=['magenta', -'green']`). The color cycle can be provided as a list of colors (a list of -strings or a (M x 4) array of M RGBA colors). +In the example above, the `point_properties` were provided as a dictionary with +two properties: `good_point` and `confidence`. The values of each property are +stored in a NumPy ndarray with length 3 since there were 3 coordinates provided +in `points`. We set the edge color as a function of the `good_point` property by +providing the keyword argument `edge_color='good_point'` to the +`viewer.add_points()` method. The color cycle is set via the `edge_color_cycle` +keyword argument, `edge_color_cycle=['magenta', 'green']`. The color cycle can +be provided as a list of colors (as a list of strings or a (M x 4) array of M +RGBA colors). ### Setting edge or face color with a colormap -Here we will set the face color of the markers with a colormap on a property. -To do the same for an edge color, substitute `face` for `edge` in the -example snippet below. +In the example snippet below, we set the face color of the markers with a +colormap on a property. To do the same for an edge color, substitute `face` for +`edge`. ```{code-cell} python viewer = napari.view_image(data.astronaut(), rgb=True) @@ -301,35 +415,23 @@ nbscreenshot(viewer, alt_text="3 points overlaid on an astronaut image, where th viewer.close() ``` -In the example above, the properties (`point_properties`) were provided as a -dictionary with two properties: `good_point` and `confidence`. The values of -each property are stored in a numpy ndarray with length 3 since there were three -coordinates provided in `points`. We set the face color as a function of the -`confidence` property by providing the keyword argument -`face_color='confidence'` to the `viewer.add_points()` method. We set the -colormap to viridis using the `face_colormap` keyword argument -(`face_colormap='viridis'`). +In the example above, the `point_properties` were provided as a dictionary with +two properties: `good_point` and `confidence`. The values of each property are +stored in a NumPy ndarray with length 3 since there were 3 coordinates provided +in `points`. We set the face color as a function of the `confidence` property by +providing the keyword argument `face_color='confidence'` to the +`viewer.add_points()` method. We set the colormap to viridis using the +`face_colormap` keyword argument as `face_colormap='viridis'`. -## Changing the points symbol +### Changing the points symbol The symbol for the points layer is a global property for the layer. All points -must have the same symbol. You can set the symbol on the loading of the layer -using the `symbol` keyword argument, or you can change it from the the GUI using -the symbol dropdown menu. Since the symbol property applies to all the points -you don't need to have any points selected for it to have an effect. - -## Copying and pasting points - -It is possible to copy and paste any selected points using the `ctrl-C` and -`ctrl-V` keybindings, respectively. If you have a multidimensional `Points` -layer you can copy points from one slice to another by pasting them into the new -slice. The coordinates of the points in the visible dimensions will be in the -same place on the new slice as in the old slice, but the rest of the coordinates -will be updated with the new slice values. +on a layer must have the same symbol. You can set the symbol when loading the +layer using the `symbol` keyword argument. ## Putting it all together -Here you can see an example of adding, selecting, deleting points and change +Here you can see an example of adding, selecting, deleting points, and changing their properties: ![image: editing points](../../images/editing_points.webm) diff --git a/docs/howtos/layers/shapes.md b/docs/howtos/layers/shapes.md index 41979aa6..95058937 100644 --- a/docs/howtos/layers/shapes.md +++ b/docs/howtos/layers/shapes.md @@ -11,29 +11,321 @@ kernelspec: name: python3 --- -# Using the shapes layer +# Using the `shapes` layer -In this document, you will learn about the `napari` `Shapes` layer, including +In this document, you will learn about the `napari` `shapes` layer, including how to display and edit shapes like rectangle, ellipses, polygons, paths, and -lines. You will also understand how to add a shapes layer and edit it from the +lines. You will also understand how to add a `shapes` layer and edit it from the GUI and from the console. -## When to use the shapes layer +For more information about layers, refer to [Layers at a glance](../../guides/layers). -The `Shapes` layer allows you to display a list of an NxD arrays, where each array -corresponds to one shape, specified by N points in D coordinates. You can adjust -the position, size, face color, edge color, and opacity of all the shapes +## When to use the `shapes` layer + +The `shapes` layer allows you to display a list of an NxD arrays, where each +array corresponds to one shape, specified by N points in D coordinates. You can +adjust the position, size, face color, edge color, and opacity of all the shapes independently, both programmatically and from the GUI. -## A simple example +## Controlling the `shapes` layer using the GUI + +Before we start talking about all the controls on the GUI, here is an overview +of how to handle the `shapes` layer. + +### Selecting, resizing, moving, editing, and deleting shapes + +All shapes are edited in the same way: +1. Click the select shapes tool. +2. Draw a box around the shape you want to edit. +3. Adjust the size or contour of the shape using the square handles that appear + on the bounding box of the shape. When resizing a layer, hold down the + `shift` key to lock the aspect ratio of the shape. Then you can continue to + resize the shape with a fixed aspect ratio. Note: you have to hold the + `shift` key down and when finished release the mouse button first! Here is a + shape being resized: + + ![image: shape resizing](../../images/shape_resizing.webm) + +4. Change the face or edge color by clicking on the thumbnail to the right of + `face color:` or `edge color:` and choosing or creating a color from the + pallette. +5. Change the edge width of a shape or the width of a line or path by clicking + the circle next to `edge width:` and dragging it to a new width. +6. Move the shape by dragging it. +7. Rotate the shape by clicking and dragging on the rotation handle above the + shape bounding box. +8. Select multiple shapes by continuing to `shift`+click additional shapes after + the first, or drag a box around the shapes to select. +9. Select all the shapes in the current slice by clicking the `a` key if you are + in select mode. Once selected you can delete the shapes by clicking the + delete button in the layer controls panel or pressing the delete key on the + keyboard. + +### Copying and pasting shapes + +Copy and paste any selected shapes using the `ctrl-c` and `ctrl-v` keybindings +respectively. If you have a multidimensional shapes layer you can copy shapes +from one slice to another by pasting them into the new slice. The coordinates of +the shapes in the visible dimensions will be in the same place on the new slice +as in the old slice, but the rest of the coordinates will be updated with the +new slice values. + +### Adding (inserting), editing, and deleting (removing) individual vertices + +![animation of napari viewer with a shapes layer bounded by vertices over an initial static image. The shapes are selected and the vertices moved by the mouse pointer, resulting in new shapes.](../../images/shape_vertex_editing.webm) + +### Creating a new `shapes` layer + +You can create a brand-new empty `shapes` layer by clicking the +`New shapes layer` button at the top of the `layer list` panel. The shape of the +new layer is defined by the shapes inside it, as new shapes are added the new +shape layer will adjust as needed. The dimension of the new shapes layer will +default to the largest dimension of any layer currently in the viewer, or to 2 +if no other layers are present in the viewer. + +### `shapes` layer buttons and controls + +Here are the buttons and controls that are available in the GUI for the `shapes` +layer. This is the order they are presented in, not necessarily the order they +are used. i.e. You can't remove a vertex before you have created a shape. + +* Buttons + * Remove vertex + * Insert vertex + * Delete selected shape + * Select vertices + * Select shapes + * Pan/zoom + * Move to back + * Move to front + * Add ellipses + * Add rectangles + * Add polygons + * Add polygons lasso + * Add lines + * Add path +* Controls + * Opacity + * Edge width + * Blending + * Face color + * Edge color + * Display text +* Other tools + * 2D/3D button or `Toggle ndisplay` button + * `New shapes layer` button + +### Buttons + +* **Remove vertex** + ![image: Remove vertex](../../images/shape_vertex_delete.png) + + To remove a vertex, click this button and then click the vertex you want to + remove. + +* **Insert vertex (Add vertex)** + ![image: Insert vertex](../../images/shape-vertex-insert.png) + + Click this button and then click where you want to insert (add) a vertex. + +* **Delete selected shape** + ![image: Delete shape](../../images/shape-delete-shape.png) + + Select the vertex to delete using the `select vertices` tool (below), then + click this button, or hit the delete key on your keyboard. + +* **Select vertices** + ![image: Select vertices](../../images/shape-vertices-select.png) + + Use this tool to select the vertex or vertices you want to move or delete. To + select more than one vertex, select one, hold down the shift key and select + the rest. Once a vertex is selected, it can be moved by dragging it to a new + location. + +* **Select shapes** + ![image: Select shapes](../../images/shape-select-shape.png) + + Use this tool to select the shape or shapes you want to delete. To select more + than one shape, select one, hold down the shift key and select the rest. + +* **Pan/zoom** + ![image: Select shapes](../../images/pan-zoom-tool.png) + + Use this tool to pan around the image or zoom in. Pan and zoom functionality + is disabled when using the adding and editing tools. Temporarily re-enable pan + and zoom by pressing and holding the spacebar. This feature can be useful if + you want to move around the shapes layer as you edit it. + +* **Move to back** + ![image: Move to back](../../images/shape-move-to-back.png) + + Using the `select shapes` tool, select the shape to move behind other shapes + and then click this button. + +* **Move to front** + ![image: Move to front](../../images/shape-move-to-front.png) + + Using the `select shapes` tool, select the shape to move in front of other + shapes and then click this button. + +* **Add ellipses** + ![image: Add ellipses](../../images/shape-add-ellipses.png) + + Use this tool to draw ovals or circles. Click the tool or press `e` (the + default keybinding for this tool); next, click the point where you want the + ellipse to begin. Hold down the left button on the mouse and go to the point + where you want the ellipse to end. Release the mouse button. Add other + ellipses as needed. A single click creates an ellipse of default size centered + on that click. + +* **Add rectangles** + ![image: Add rectangles](../../images/shape-add-rectangles.png) + + Select `Add rectangles` from the layer controls panel or by pressing the `r` + key when the `shapes` layer is selected. Click and drag the rectangle to the + desired size. Releasing the mouse completes the rectangle. Add other + rectangles as needed. A single click creates a rectangle of default size + centered on that click. + +* **Add polygons** + ![image: Add polygons](../../images/shape-add-polygons.png) + + The `Add polygon` tool can be selected from the layer controls panel or by + pressing the `p` key when the shapes layer is selected. When adding a polygon, + each click will add a vertex at the clicked location. Hit the `Esc` key to + stop creating the polygon. This adds a final vertex at the current mouse + position and completes the polygon. You can then add another polygon. + +* **Add polygons lasso** + ![image: Add polygons lasso](../../images/shape-add-lasso.png) + + `Polygons` can also be created with the polygon lasso creation tool, which can + be found in the layer control panel or by pressing `shift+p`. The tool can be + used to draw complex `Polygons` with the mouse or tablet. + + :::{dropdown} More details on the lasso tool + + When using the mouse, the sequence of events to draw a polygon is as follows: + + 1. Click mouse (left-click) to begin drawing. + 2. Move mouse -- without holding down the mouse button -- to draw the polygon. + 3. Click mouse (left-click) or press `Esc` to end drawing—the polygon will + auto-complete. + + The polygon lasso tool can also be used to draw `Polygons` using a tablet. In + this case, drawing the polygon is started by touching the tablet screen with + the tablet stylus and drawing will continue for as long as the pencil is moved + while touching the tablet screen. Note that similar behavior is also available + when using a macOS trackpad, using three-finger drag mode. + + For both modes, vertices are added only if the vertex to be added is at a + certain number of screen pixels away from the previous vertex. This value can + be adjusted in the settings in napari by going to `File` -> `Preferences` (or + `control + shift + p`), then in the menu on the left-clicking on + `Experimental` and then adjusting the value of + `Minimum distance threshold of shapes lasso tool`. The default is 10 and can + be any integer higher than 0 and lower than 50. As with the polygon creation + tool, drawing the shape can also be finished by pressing the `Esc` key. + + After finishing drawing a polygon using the polygon lasso tool, an + implementation of the [Ramer–Douglas–Peucker algorithm](https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm) + is applied to reduce the number of vertices that make up the shape, while + preserving its contours. The aggressiveness with which the algorithm reduces + the number of vertices of the polygon is determined by an `epsilon` parameter, + which is a perpendicular distance threshold. Any vertices beyond the threshold + will be preserved, so if `epsilon` is set to `0`, no vertices will be removed. + With increasing values of `epsilon`, more and more vertices will be removed. + The value of `epsilon` can be set in napari by going to `File` -> + `Preferences` (or `control + shift + p`), then in the menu on the + left-clicking on `Experimental` and then adjusting the value of `RDP epsilon`. + The default value is 0.5 and cannot be set lower than 0. + ::: + +* **Add lines** + ![image: Add lines](../../images/shape-add-lines.png) + + Select the `Add lines` tool from the layer controls panel or by pressing the + `l` key when the shapes layer is selected. `Lines` consist of two vertices + representing the end points of the line. Click where you want the line to + start and then click where you want it to stop. The first click marks the + coordinates of the first endpoint and the second click marks the coordinates + of the second endpoint. Add other lines as needed. + +* **Add path** + ![image: Add path](../../images/shape-add-path.png) + + Select the `Add path` tool from the layer controls panel or by pressing the + `t` key when the shapes layer is selected. Click where you want the path to + start and then click each location where the direction of the path changes, + this adds a vertex at that location. When you have drawn the complete path, + hit `Esc`. This adds a final vertex at the current mouse position and + completes the path. You can then add another path. + +### Controls + +* Opacity + + Click and hold the oval on the opacity slider bar and adjust it to any value + between 0.00 (clear) and 1.00 (completely opaque). + +* Edge width + + Click and drag the circle on the `edge width` slider bar to adjust + `edge width` from 0 to 40. + +* Blending + + `blending` has the options of `opaque`, `translucent`, `translucent no depth`, + `additive`, and `minimum` in the dropdown. Refer to the + [Blending layers](blending-layers) section of _Layers at a glance_ for an + explanation of each type of blending. + +* Face and edge colors + + To change the shape color properties from the GUI, first select the shapes + whose properties you want to change, otherwise you will just be initializing + the color for the next shape to add. Select the shape you want to change, + click the thumbnail next to `face color:` or `edge color:` to select or create + a color from the pallette. + +* Display text + + Check this box to turn `display text` on or off. Text can be added to the + points only programmatically and not through the GUI. Refer to + [](../../gallery/add_points_with_multicolor_text) for more information. + +### Other tools + +* 2D/3D button or `Toggle ndisplay` button + + All layers can be rendered in both 2D and 3D. The `Toggle ndisplay` button at + the bottom of the left panel toggles between these 2 modes. + When in 2D, the button looks like this: ![image: 2D/3D button](../../images/3D-button.png), ready to switch to 3D mode. + When in 3D, the button looks like this: ![image: 2D/3D button](../../images/2D-button.png), ready to switch to 2D mode. + + You can also switch modes by pressing `ctrl+y`. + + Note that when entering 3D rendering mode the GUI `Add point`, + `Delete selected points`, and `Select points` tools are all disabled. Those + options are supported only when viewing a layer using 2D rendering. + +* `New shapes layer` button + + Create a brand new empty `shapes` layer by clicking the `New shapes layer` + button at the top of the `layers list` panel. The shape of this layer is + defined by the shapes inside it, as new shapes are added the layer will adjust + as needed. + +## Controlling the shapes layer programmatically +### A simple example You can create a new viewer and add a list of shapes in one go using the -`napari.view_shapes` method, or if you already have an existing viewer, you can -add shapes to it using `viewer.add_shapes`. The api of both methods is the same. -In these examples we'll mainly use `add_shapes` to overlay shapes onto on an -existing image. +{meth}`napari.view_shapes` method, or if you already have an existing viewer, +you can add shapes to it using `viewer.add_shapes`. The API of both methods is +the same. In these examples we'll mainly use `add_shapes` to overlay shapes onto +an existing image. -In this example, we will overlay some shapes on the image of a photographer: +In this example, we will overlay shapes on the image of a photographer: ```{code-cell} python import napari @@ -43,9 +335,10 @@ from skimage import data # create the list of polygons triangle = np.array([[11, 13], [111, 113], [22, 246]]) -person = np.array([[505, 60], [402, 71], [383, 42], [251, 95], [212, 59], - [131, 137], [126, 187], [191, 204], [171, 248], [211, 260], - [273, 243], [264, 225], [430, 173], [512, 160]]) +person = np.array([[505, 60], [402, 71], [383, 42], [251, 95], + [212, 59], [131, 137], [126, 187], [191, 204], + [171, 248], [211, 260], [273, 243], [264, 225], + [430, 173], [512, 160]]) building = np.array([[310, 382], [229, 381], [209, 401], [221, 411], [258, 411], [300, 412], [306, 435], [268, 434], @@ -58,8 +351,13 @@ polygons = [triangle, person, building] viewer = napari.view_image(data.camera(), name='photographer') # add the polygons -shapes_layer = viewer.add_shapes(polygons, shape_type='polygon', edge_width=5, - edge_color='coral', face_color='royalblue') +shapes_layer = viewer.add_shapes( + polygons, + shape_type='polygon', + edge_width=5, + edge_color='coral', + face_color='royalblue' +) ``` ```{code-cell} python @@ -76,129 +374,69 @@ nbscreenshot(viewer, alt_text="Shapes overlaid on image") viewer.close() ``` -## Arguments of `view_shapes` and `add_shapes` +### Arguments of `view_shapes` and `add_shapes` {meth}`~napari.view_layers.view_shapes` and {meth}`~napari.Viewer.add_shapes` accept the same layer-creation parameters. ```{code-cell} python -:tags: [hide-cell] +:tags: [hide-output] help(napari.view_shapes) ``` -## Shapes data +### Shapes data -The input data to the shapes layer must be a list of NxD numpy array, with each -array containing the coordinates of the N vertices in D dimensions that make up -the shape. The ordering of these dimensions is the same as the ordering of the -dimensions for image layers. This list of arrays is always accessible through -the `layer.data` property and will grow or shrink as new shapes are either added -or deleted. By storing data as a list of arrays it is possible for each shape to -have a different number of vertices in it. This is especially useful when -drawing polygons or paths. +The input data to the `shapes` layer must be a list of NxD NumPy array, with +each array containing the coordinates of the N vertices in D dimensions that +make up the shape. The ordering of these dimensions is the same as the ordering +of the dimensions for image layers. This list of arrays is always accessible +through the `layer.data` property and will grow or shrink as new shapes are +added or deleted. By storing data as a list of arrays it is possible for each +shape to have a different number of vertices in it. This is especially useful +when drawing polygons and paths. -## Adding different shape types +### Adding different shape types Right now the shapes layer supports 5 types of shapes, `Lines`, `Rectangles`, `Ellipses`, `Polygons`, and `Paths`. When adding new data can set the shape type through the `shape_type` keyword argument, as either a single shape type if all the shapes to be added have the same type or as a list of shape types if some of the shapes have different types. The actual shape types of all the shapes is -accessible through the `layer.shape_types` property. Selecting different shape -creation tools will cause shapes of the different types to be added. - -`Lines` consist of two vertices representing the end points of the line. The -line creation tool can be selected from the layer control panel or by pressing -the `L` key when the shapes layer is selected. When adding a new line the first -click will coordinates of the first endpoint and the second click will mark the -coordinates of the second endpoint. You'll then be able to add another line. - -`Rectangles` can be added using two vertices representing the corners of the -rectangle for axis aligned rectangle, or using four corners so that non-axis -aligned rectangle can be represented too. Internally we use the four vertex -representation so we can always support rotated rectangles. The rectangle -creation tool can be selected from the layer control panel or by pressing the -`R` key when the shapes layer is selected. When adding a rectangle you must -click and drag the rectangle to have the desired shape. When you release the -mouse the rectangle will be completed and you'll then be able to add another -one. If you just make a single click then a rectangle of default size will be -created centered on that click. - -`Ellipses` can be added using either two vectors, one representing the center -position of the ellipse and the other representing the radii of the ellipse in -all dimensions for an axis aligned ellipse, or by using the four corners of the -ellipse bounding box for a non-axis aligned ellipse. Internally we use the four -vertex representation so we can always support rotated ellipses. The ellipse -creation tool can be selected from the layer control panel or by pressing the -`E` key when the shapes layer is selected. When adding an ellipse you must click -and drag the ellipse to have the desired shape. When you release the mouse the -ellipse will be completed and you'll then be able to add another one. If you -just make a single click then an ellipse of default size will be created -centered on that click. - -`Polygons` can be added using an array of N vertices. Polygons are closed by -default, and so you don't also need to include the first point at the end of the -array. The order of the vertices will determine the triangulation of the -polygon, which can be non-convex, but cannot have holes. For drawing polygons, -multiple tools can be used. -The polygon creation tool can be selected from the layer control panel or by -pressing the `P` key when the shapes layer is selected. When adding a polygon -each click will add a vertex at the clicked location. To finish drawing a polygon -you must click the`escape` key, which will add a final vertex at the current mouse -position and complete the polygon. You'll then be able to start adding another one. - -`Polygons` can also be created with the polygon lasso creation tool, which can be -found in the layer control panel or by pressing `shift+P`. The tool can be used to -draw complex `Polygons` with the mouse -or tablet. When using the mouse, the sequence of events to draw a polygon is as -follows: - -1. Click mouse (left-click) to begin drawing. -2. Move mouse — without holding down the mouse button — to draw the polygon. -3. Click mouse (left-click) or press `escape` to end drawing—the polygon will auto-complete. - -The polygon lasso tool can also be used to draw `Polygons` using a tablet. In this case, -drawing the polygon is started by touching the tablet screen with the tablet stylus and -drawing will continue for as long as the pencil is moved while touching the tablet screen. -Note that similar behavior is also available when using a macOS trackpad, using three-finger -drag mode. -For both modes, vertices are added only if the vertex to be added is at a certain number of screen pixels -away from the previous vertex. This value can be adjusted in the settings in napari by going to -`File` -> `Preferences` (or `control + shift + P`), then in the menu on the left-clicking on -`Experimental` and then adjusting the value of ` Minimum distance threshold of shapes lasso tool`. -The default is 10 and can be any integer higher than 0 and lower than 50. As with the polygon creation -tool drawing the shape can also be finished by pressing the `escape` key. - -After finishing drawing a polygon using the polygon lasso tool, an implementation of the [Ramer–Douglas–Peucker -algorithm](https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm) is applied to reduce the -number of vertices that make up the shape, while preserving its contours. The aggressiveness with -which the algorithm reduces the number of vertices of the polygon is determined by an `epsilon` parameter, -which is a perpendicular distance threshold. Any vertices beyond the threshold will be preserved, so -if `epsilon` is set to `0`, no vertices will be removed. With increasing values of `epsilon`, more and -more vertices will be removed. The value of `epsilon` can be set in napari by going to -`File` -> `Preferences` (or `control + shift + P`), then in the menu on the left-clicking on -`Experimental` and then adjusting the value of `RDP epsilon`. The default value is 0.5 and cannot -set lower than 0. - -`Paths` are like polygons but are not closed or filled in. They can also be -added using an array of N vertices. The path creation tool can be selected from -the layer control panel or by pressing the `T` key when the shapes layer is -selected. When adding a path each click will add a vertex at the clicked -location. To finish drawing a path you must click the `escape` key, which will -add a final vertex at the current mouse position and complete the path. You'll -then be able to start adding another one. - -When using the shapes addition or editing tools the pan and zoom functionality -of the viewer canvas is disabled and you can edit the layer. You can temporarily -re-enable pan and zoom by pressing and holding the spacebar. This feature can be -useful if you want to move around the shapes layer as you edit it. +accessible through the `layer.shape_types` property. + +* `Lines` consist of two vertices representing the end points of the line. The + line creation tool can be selected from the layer control panel or by pressing + the `l` key when the shapes layer is selected. When adding a new line the + first click will coordinates of the first endpoint and the second click will + mark the coordinates of the second endpoint. You'll then be able to add + another line. + +* `Rectangles` can be added using two vertices representing the corners of the + rectangle for axis aligned rectangle, or using four corners so that non-axis + aligned rectangle can be represented. Internally we use the four vertex + representation so we can always support rotated rectangles. + +* `Ellipses` can be added using either two vectors, one representing the center + position of the ellipse and the other representing the radii of the ellipse in + all dimensions for an axis aligned ellipse, or by using the four corners of + the ellipse bounding box for a non-axis aligned ellipse. Internally we use the + four vertex representation so we can always support rotated ellipses. + +* `Polygons` can be added using an array of N vertices. Polygons are closed by + default, so you don't also need to include the first point at the end of the + array. The order of the vertices will determine the triangulation of the + polygon, which can be non-convex, but cannot have holes. For drawing polygons, + multiple tools can be used. + +* `Paths` are like polygons but are not closed or filled in. They can be added + using an array of N vertices. ### Adding new shapes -You can add new shapes to an existing `Shapes` layer programmatically by using -the `add` method, which allows you to pass in a `shape_type` list when you -have mixed shape data. +You can add new shapes to an existing `shapes` layer programmatically using the +`add` method. This allows you to pass in a `shape_type` list when there is mixed +shape data (data for different types of shapes). ```{code-cell} python import napari @@ -244,9 +482,9 @@ nbscreenshot(viewer, alt_text="Add new shapes to an existing shapes layer") viewer.close() ``` -Finally, each shape type has its own convenience method for adding new shapes -to a layer. Their arguments are identical to those of the `add` method, but -they do not take a `shape_type`. +Finally, each shape type has its own convenience method for adding new shapes to +a layer. Their arguments are identical to those of the `add` method, but they do +not take a `shape_type`. ```{code-cell} python import napari @@ -290,125 +528,51 @@ nbscreenshot(viewer, alt_text="Add new ellipses to an existing shapes layer usin viewer.close() ``` -## Creating a new shapes layer +### Non-editable mode -As you can add new shapes to a shapes layer using the various shape creation -tools, it is possible to create a brand-new empty shapes layers by clicking the -new shapes layer button above the layers list. The shape of the shapes layer is -defined by the shapes inside it, and so as you add new shapes the shape will -adjust as needed. The dimension of the new shapes layer will default to the -largest dimension of any layer currently in the viewer, or to 2 if no other -layers are present in the viewer. +To disable editing of the shapes layer, set the `editable` property of the layer +to `False`. -## Non-editable mode +As noted in [3D rendering](#3d-rendering), below, the shapes layer is not +editable when using 3D rendering. -If you want to disable editing of the shapes layer you can set the `editable` -property of the layer to `False`. +### 3D rendering -As note in the section on 3D rendering, when using 3D rendering the shapes layer -is not editable. +All layers can be rendered in both 2D and 3D. -## 3D rendering of shapes +The number of dimensions sliders will be 2 or 3 less than the total number of +dimensions of the layer, allowing you to browse volumetric timeseries data and +other high dimensional data. See [](../../gallery/nD_shapes) to see shapes in +both 2D and 3D: -All our layers can be rendered in both 2D and 3D mode, and one of our viewer -buttons can toggle between each mode. The number of dimensions sliders will be 2 -or 3 less than the total number of dimensions of the layer. See for example the -[`examples/nD_shapes.py`](https://github.com/napari/napari/blob/main/examples/nD_shapes.py) -to see shapes in both 2D and 3D: - -![image: nD shapes](../../images/nD_shapes.webm) - -Note though that when entering 3D rendering mode the shape editing tools are all -disabled. Those options are only supported when viewing a layer using 2D -rendering. +![A stack of colorful polygon shapes over an image layer. The view alternates between 2D and 3D views of the data.](../../images/nD_shapes.webm) Also note that for a multidimensional shape to be displayed on a given view -slice all of its non-displayed coordinates must match the coordinates of that +slice, all of its non-displayed coordinates must match the coordinates of that view slice, i.e. the shape must be entirely defined within that plane. For paths that are defined by coordinates spanning more than two dimensions, it -is possible to visualize them as 3D cylinders, see for example the -[`examples/3D_paths.py`](https://github.com/napari/napari/blob/main/examples/3D_paths.py) +is possible to visualize them as 3D cylinders, see [](../../gallery/3D_paths) +for examples. ![image: 3D paths](../../images/3D_paths.png) ```{note} -Right now, it is not possible to display 3D cuboids or 3D spheroids, but will be -supporting those options soon. +Right now, it is not possible to display 3D cuboids or 3D spheroids, but we will +be supporting those options soon. ``` -## Pan and zoom mode - -The default mode of the shapes layer is to support panning and zooming, as in -the image layer. This mode is represented by the magnifying glass in the layers -control panel, and while it is selected editing the layer is not possible. -Continue reading to learn how to use some of the editing modes. You can always -return to pan and zoom mode by pressing the `Z` key when the shapes layer is -selected. - -## Selecting, resizing, moving, and deleting shapes - -New shapes can be added using one of the 5 shape creation tools, for `Lines`, -`Rectangles`, `Ellipses`, `Polygons`, and `Paths`. For more information on the -different shape types see the shape types section. - -You can select a shape by clicking on it using the shape selection tool, which -can be selected by clicking on it in the layer controls panel or by pressing the -`S` key when the shapes layer is selected. Once selected you can move the shape -by dragging it. You can also resize the shape by clicking and dragging on one of -the handles along the edge of the shape bounding box. You can also rotate the -shape by clicking and dragging on the rotation handle above the shape bounding -box. - -When resizing a layer if you hold down the `shift` key the aspect ratio of the -shape will lock and you can continue to resize the shape now with a fixed aspect -ratio. - -You can select multiple shapes by continuing to shift click on additional shapes -after the first, or by dragging a bounding box around the shapes you want to -select. - -You can select all the shapes in the currently viewed slice by clicking the `A` -key if you are in select mode. - -Once selected you can delete the selected shapes by clicking on the delete -button in the layer controls panel or pressing the delete key. - -For example see below: ![image: shape resizing](../../images/shape_resizing.webm) - -## Adding, moving, and deleting individual vertices - -You can move individual vertices by entering the direct selection mode by either -clicking on the direct select tool in the layer controls panel or pressing the -`D` key while the shapes layer is selected. To move a vertex, you can click and -drag it to its new position. - -You can add vertices to a selected shape using the vertex addition tool which -can be selected either clicking on the vertex addition tool in the layer -controls panel or pressing the `I` key while the shapes layer is selected. - -You can delete vertices to a selected shape using the vertex deletion tool which -can be selected either clicking on the vertex deletion tool in the layer -controls panel or pressing the `X` key while the shapes layer is selected. - -For example see below: ![animation of napari viewer with a shapes layer bounded by vertices over an initial static image. The shapes are selected and the vertices moved by the mouse pointer, resulting in new shapes.](../../images/shape_vertex_editing.webm) - -## Changing shape edge and face colors +### Changing shape edge and face colors Individual shapes can each have different edge and face colors. You can initially set these colors by providing a list of colors to the `edge_color` or -`face_color` keyword arguments respectively, or you can edit them from the GUI. -The colors of each of the shapes are available as lists under the -`layer.edge_color` and `layer.face_color` properties. These properties are -different from the `layer.current_edge_color` and `layer.current_face_color` -properties that will determine the color of the next shape to be added or any -currently selected shapes. - -To change the shape color properties from the GUI you must first select the -shape whose properties you want to change, otherwise you will just be -initializing the property for the next shape you add. +`face_color` keyword arguments respectively. The colors of each of the shapes +are available as lists under the `layer.edge_color` and `layer.face_color` +properties. These properties are different from the `layer.current_edge_color` +and `layer.current_face_color` properties that will determine the color of the +next shape to be added or any currently selected shapes. -## Changing shape edge widths +### Changing shape edge widths Individual shapes can each have different edge widths. You can initially set the edge widths by providing a list of values to the `edge_width` keyword arguments @@ -418,27 +582,13 @@ to the edge and face colors, these property is different from the `layer.current_edge_width` property that will determine the edge width of the next shape to be added or any currently selected shapes. -To change the edge with property from the GUI you must first select the shape -whose properties you want to change, otherwise you will just be initializing the -property for the next shape you add. - -## Layer ordering - -You can adjust the ordering of shapes in the layer by selecting shapes and then -clicking the move to front or move to back buttons. You can get the ordering of -all the shapes using the `layer.z_indices` property. You can also set the -initial ordering of shapes by passing a list to the `layer.z_index` property. - -## Copying and pasting shapes +### Layer ordering -It is possible to copy and paste any selected shapes using the `ctrl-C` and -`ctrl-V` keybindings respectively. If you have a multidimensional shapes layer -you can copy shapes from one slice to another by pasting them into the new -slice. The coordinates of the shapes in the visible dimensions will be in the -same place on the new slice as in the old slice, but the rest of the coordinates -will be updated with the new slice values. +You can get the ordering of all the shapes using the `layer.z_indices` property. +You can also set the initial ordering of shapes by passing a list to the +`layer.z_index` property. -## Shapes layer opacity +### `shapes` layer opacity The {ref}`opacity value ` applies to all shapes. You can initialize the shape opacities using the `opacity` keyword argument which @@ -447,9 +597,9 @@ access the opacity using the `layer.opacity` property. In order to adjust the opacity of individual shapes you need to adjust the alpha value in the `layer.edge_color` and `layer.face_color` properties. -## Putting it all together +### Putting it all together -Here you can see an example of adding, selecting, and editing shapes and change -their properties: +Here you can see an example of adding, selecting, and editing shapes and +changing their properties: ![image: editing shapes](../../images/editing_shapes.webm) diff --git a/docs/howtos/layers/surface.md b/docs/howtos/layers/surface.md index cae122eb..f224d65a 100644 --- a/docs/howtos/layers/surface.md +++ b/docs/howtos/layers/surface.md @@ -11,14 +11,24 @@ kernelspec: name: python3 --- -# Using the surface layer +# Using the `surface` layer -In this document, you will learn about the `napari` `Surface` layer, including +In this document, you will learn about the `napari` `surface` layer, including how to display surface data and edit the properties of surfaces like the contrast, opacity, colormaps and blending mode. You will also understand how to -add and manipulate surfaces both from the GUI and from the console. +add and manipulate surfaces mostly from the console. There are a few slider +controls that are available in the GUI. -## When to use the surface layer +For more information about layers, refer to [Layers at a glance](../../guides/layers). + +```{note} +Surface layers can be created only programmatically, i.e. in the console, or +using a script, not from the GUI. Please refer to +[A simple example](#a-simple-example) and use the code there to add a surface +layer first, then explore the GUI controls. +``` + +## When to use the `surface` layer The surface layer allows you to display a precomputed surface mesh that is defined by an `NxD` array of `N` vertices in `D` coordinates, an `Mx3` integer @@ -29,11 +39,12 @@ colormap. ## A simple example You can create a new viewer and add a surface in one go using the -`napari.view_surface` method, or if you already have an existing viewer, you can -add an image to it using `viewer.add_surface`. The api of both methods is the -same. In these examples we'll mainly use `view_surface`. +{meth}`napari.view_surface` method, or if you already have an existing viewer, +you can add an image to it using `viewer.add_surface`. The API of both methods +is the same. In these examples we'll mainly use `view_surface`. -A simple example of viewing a surface is as follows: +A simple example of viewing a surface follows. You can copy and paste these +statements into the napari console to see how they work: ```{code-cell} python import napari @@ -61,62 +72,85 @@ nbscreenshot(viewer, alt_text="A viewer with a surface") viewer.close() ``` +## GUI controls for the `surface` layer + +Once you have created a `surface` layer programmatically, the following GUI +controls are available in the viewer: + +* Opacity - use this slider control to assign opacity from 0 to 1.00 where 0 is + transparent and 1.00 is completely opaque. +* Contrast Limits - click and slide the dots on either end of the slider bar to + adjust upper and lower contrast limits. +* Auto-contrast - choose once or continuous. +* Gamma - Click on the oval on the gamma slider bar and adjust it to any value + between 0.20 and 2.00. Gamma correction or gamma is a nonlinear operation used + to encode and decode luminance or tristimulus values in video or still image + systems. +* Colormap - select a value from the dropdown list. +* Blending - Choose `opaque`, `translucent`, `translucent no depth`, or + `additive` from the dropdown. Refer to the [Blending layers](blending-layers) + section of _Layers at a glance_ for an explanation of each type of blending. +* Shading - Choose `none`, `flat`, or `smooth` from the dropdown. + ## Arguments of `view_surface` and `add_surface` {meth}`~napari.view_layers.view_surface` and {meth}`~napari.Viewer.add_surface` accept the same layer-creation parameters. ```{code-cell} python -:tags: [hide-cell] +:tags: [hide-output] help(napari.view_surface) ``` ## Surface data -The data for a surface layer is defined by a 3-tuple of its vertices, faces, and -vertex values. The vertices are an `NxD` array of `N` vertices in `D` +The data for a `surface` layer is defined by a 3-tuple of its vertices, faces, +and vertex values. The vertices are an `NxD` array of `N` vertices in `D` coordinates. The faces are an `Mx3` integer array of the indices of the triangles making up the faces of the surface. The vertex values are a length `N` list of values to associate with each vertex to use alongside a colormap. This 3-tuple is accessible through the `layer.data` property. -## 3D rendering of images +## 3D rendering + +All layers can be rendered in both 2D and 3D. One of the viewer buttons at the +bottom of the left panel can toggle between these 2 modes. +When in 2D, the button looks like this: ![image: 2D/3D button](../../images/3D-button.png), ready to switch to 3D mode. +When in 3D, the button looks like this: ![image: 2D/3D button](../../images/2D-button.png), ready to switch to 2D mode. -All our layers can be rendered in both 2D and 3D mode, and one of our viewer -buttons can toggle between each mode. The number of dimensions sliders will be 2 -or 3 less than the total number of dimensions of the layer. See for example -these brain surfaces rendered in 3D: +The number of dimensions sliders will be 2 or 3 less than the total number of +dimensions of the layer, allowing you to browse volumetric timeseries data and +other high dimensional data. An example is these brain surfaces rendered in 3D: ![image: brain surface](../../images/brain_surface.webm) ## Working with colormaps -The same colormaps available for the `Image` layer are also available for the -`Surface` layer. napari supports any colormap that is created with +The same colormaps available for the `image` layer are also available for the +`surface` layer. napari supports any colormap that is created with `vispy.color.Colormap`. We provide access to some standard colormaps that you -can set using a string of their name. +can set using a string of their name. Please see the list below. ```{code-cell} python list(napari.utils.colormaps.AVAILABLE_COLORMAPS) ``` -Passing any of these as follows as keyword arguments will set the colormap of -that surface. You can also access the current colormap through the -`layer.colormap` property which returns a tuple of the colormap name followed by -the vispy colormap object. You can list all the available colormaps using -`layer.colormaps`. +Passing any of these as keyword arguments will set the colormap of that surface. +You can also access the current colormap through the `layer.colormap` property +which returns a tuple of the colormap name followed by the vispy colormap +object. You can list all the available colormaps using `layer.colormaps`. It is also possible to create your own colormaps using vispy's `vispy.color.Colormap` object, see it's full [documentation here](https://vispy.org/api/vispy.color.colormap.html#vispy.color.colormap.Colormap). -For more detail see the [image layer guide](./image). +For more detail see the [image layer guide](image-layer). ## Adjusting contrast limits -The vertex values of the surface layer get mapped through its colormap according -to values called contrast limits. These are a 2-tuple of values defining how +The vertex values of the `surface` layer get mapped through its colormap according +to values called `contrast limits`. These are a 2-tuple of values defining how what values get applied the minimum and maximum of the colormap and follow the -same principles as the `contrast_limits` described in the [image layer -guide](./image). They are also accessible through the same keyword arguments, -properties, and range slider as in the image layer. +same principles as the `contrast_limits` described in the +[image layer guide](image-layer). They are also accessible through the same keyword +arguments, properties, and GUI layer controls as in the image layer. diff --git a/docs/howtos/layers/tracks.md b/docs/howtos/layers/tracks.md index 58025285..ae79ae9a 100644 --- a/docs/howtos/layers/tracks.md +++ b/docs/howtos/layers/tracks.md @@ -11,21 +11,32 @@ kernelspec: name: python3 --- -# Using the tracks layer +(layers-tracks)= -In this document, you will learn about the `napari` `Tracks` layer, including +# Using the `tracks` layer + +In this document, you will learn about the `napari` `tracks` layer, including displaying tracks and defining relationships between tracks. -## When to use the tracks layer +For more information about layers, refer to [Layers at a glance](../../guides/layers). + +```{note} +Tracks layers can be created only programmatically, i.e. in the console, using a +script, etc. Please refer to [A simple example](#a-simple-example) and use the +code there to add a tracks layer first, then explore the GUI controls. +``` + +## When to use the `tracks` layer -The tracks layer allows you to display trajectories in `nD+t` while visualizing -the recent history of the track via a fading tail. +The `tracks` layer allows you to display trajectories in `nD+t` while +visualizing the recent history of the track via a fading tail. Each track can have annotations associated with it using the `Tracks.properties` dictionary. These properties can be used to set the colors of the tracks. For example, when displaying tracks of different classes/types, one could -automatically set color the individual tracks by their respective class/type. +automatically set the color of the individual tracks by their respective +class/type. ## A simple example @@ -68,9 +79,40 @@ napari.run() ![image: tracks simple demo](../../images/tracks_simple_demo.webm) +## GUI controls for the `tracks` layer + +* Color by - there is a dropdown for this but at present the only choice is + `track_id`. +* Colormap - choose a colormap from the dropdown. These are explained in + [the colormaps section](./surface.md#working-with-colormaps) of + _Using the surface layer_. +* Blending - choose `opaque`, `translucent`, `translucent no depth`, `minimum` + or `additive` from the dropdown. Refer to the + [Blending layers](blending-layers) section of _Layers at a glance_ for an + explanation of each type of blending. +* Opacity - click and hold the circle on the opacity slider bar and adjust it to + any value between 0.00 (clear) and 1.00 (completely opaque). +* Tail width - adjusting the tail width gives the track the appearance of being + narrower or wider. At the minimum value, the track looks like a one-pixel + line. +* Tail length - adjusting the tail length gives the track the appearance of + being shorter or longer. At the minimum value, it looks something like a + dotted line, at the maximum value it almost looks like an unbroken line. +* Head length - Adjusting the head length gives the track the appearance of + being longer. If it is adjusted to the maximum value, the tracks look like + stripes. At the minimum value, the tracks flash across the canvas and + disappear before starting again. +* Tail - check this box to see the tracks. If it is not checked, you will not be + able to see the tracks at all. +* Show ID - check this box to display a previously assigned `track_id` label for + each track. Assigning values to `track_id` is explained in + [Tracks data](#tracks-data) below. +* Graph - check this box to display a previously created graph as explained in + [](#arguments-of-view_tracks-and-add_tracks). + ## Arguments of `view_tracks` and `add_tracks` -Both `view_tracks` and `add_tracks` have the following doc strings: +Both `view_tracks` and `add_tracks` have the following docstrings: ```python """ @@ -130,7 +172,7 @@ layer : napari.layers.Tracks ## Tracks data -The input data to the tracks layer must be an `NxD+1` numpy array or list +The input data to the tracks layer must be an `NxD+1` NumPy array or list containing the coordinates of `N` vertices with a track ID and coordinate in `D` dimensions. The ordering of these dimensions is the same as the ordering of the dimensions for image layers. This array is always accessible through the @@ -194,29 +236,34 @@ graph = { 3: [1, 2] } ``` -For a full example of 3d+t tracks data with a parent graph, please see our -[`tracks_3d_with_graph.py` example](https://github.com/napari/napari/blob/main/examples/tracks_3d_with_graph.py). +For a full example of 3d+t tracks data with a parent graph, please see +[](../../gallery/tracks_3d_with_graph). -## Using the tracks properties dictionary +## Using the `tracks` properties dictionary -The `Tracks` layer can contain properties that annotate the vertices of each +The `tracks` layer can contain properties that annotate the vertices of each track. `Tracks.properties` stores the properties in a dictionary where each key -is the name of the property and the values are numpy arrays with a value for +is the name of the property and the values are NumPy arrays with a value for each vertex in the track (i.e., length `N` for `N` vertices in `Tracks.data`). As we will see below, we can use the values in a property to set the display properties of the tracks (e.g., the track color). -## 3D rendering of tracks +## 3D rendering + +All layers can be rendered in both 2D and 3D. One of the viewer buttons at the +bottom of the left panel can toggle between these 2 modes. +When in 2D, the button looks like this: ![image: 2D/3D button](../../images/3D-button.png), ready to switch to 3D mode. +When in 3D, the button looks like this: ![image: 2D/3D button](../../images/2D-button.png), ready to switch to 2D mode. -All our layers can be rendered in both 2D and 3D mode, and one of our viewer -buttons can toggle between each mode. The number of dimensions sliders will be 2 -or 3 less than the total number of dimensions of the layer. +The number of dimensions sliders will be 2 or 3 less than the total number of +dimensions of the layer, allowing you to browse volumetric timeseries data and +other high dimensional data. ## Changing track width We can specify the width of the tracks in pixels. The track width can be specified via the `tail_width` keyword argument in the `viewer.add_tracks()` and -`napari.view_tracks()` methods. From a layer that as already been constructed, +`napari.view_tracks()` methods. From a layer that has already been constructed, we can set the track width via the `layer.tail_width` property. ```python @@ -225,16 +272,21 @@ viewer = napari.view_tracks(data, tail_width=5, name="my_tracks") # update the tail width to 3 pixels viewer.layers["my_tracks"].tail_width = 3 - ``` -Additionally, we can adjust the width of the track in the GUI using the "tail width" slider in the Tracks layer controls. +Additionally, we can adjust the width of the track in the GUI using the +"tail width" slider in the `tracks` layer controls. ![image: tracks tail width](../../images/tracks_tail_width.webm) ## Changing tail length -We can specify the length of the tails of the tracks in time units. The tail is the portion of the track displayed from previous time steps. The track tail length can be specified via the `tail_length ` keyword argument in the `viewer.add_tracks()` and `napari.view_tracks()` methods. From a layer that as already been constructed, we can set the track width via the `tail_length ` property. +We can specify the length of the tails of the tracks in time units. The tail is +the portion of the track displayed from previous time steps. The track tail +length can be specified via the `tail_length` keyword argument in the +`viewer.add_tracks()` and `napari.view_tracks()` methods. From a layer that has +already been constructed, we can set the track width via the `tail_length` +property. ```python # create a tracks layer with a tail length of 5 time units @@ -245,16 +297,24 @@ viewer.layers["my_tracks"].tail_length = 3 ``` -Additionally, we can adjust the width of the track in the GUI using the "tail length" slider in the Tracks layer controls. +Additionally, we can adjust the width of the track in the GUI using the "tail +length" slider in the `tracks` layer controls. ![image: tracks tail length](../../images/tracks_tail_length.webm) ## Setting the track color with properties -We can color the tracks by mapping colors to the track properties defined in `Tracks.properties`. If we define properties and pass them via the properties keyword argument in the `viewer.add_tracks()` and `napari.view_tracks()` methods, we can then select the property we would like to color the tracks by in the "color by" dropdown menu in the `Tracks` layer controls. We can additionally specify the colormap used to map the property value to color via the "colormap" dropdown menu. +We can color the tracks by mapping colors to the track properties defined in +`Tracks.properties`. If we define properties and pass them via the `properties` +keyword argument in the `viewer.add_tracks()` and `napari.view_tracks()` +methods, we can then select the property we would like to color the tracks by in +the "color by" dropdown menu in the `tracks` layer controls. We can additionally +specify the colormap used to map the property value to color via the "colormap" +dropdown menu. ```python import napari +import numpy as np from skimage import data hubble_image = data.hubble_deep_field() @@ -291,6 +351,7 @@ napari.run() ## Putting it all together -Here you can see an example of 3D+t tracks. You can view the source code for this example [here](https://github.com/napari/napari/blob/main/examples/tracks_3d.py) +Here you can see an example of 3D+t tracks. You can view the source code for +this example in [](../../gallery/tracks_3d) ![image: tracks 3D plus time](../../images/tracks_3d_t.webm) diff --git a/docs/howtos/layers/vectors.md b/docs/howtos/layers/vectors.md index a3152f3c..67d5d43f 100644 --- a/docs/howtos/layers/vectors.md +++ b/docs/howtos/layers/vectors.md @@ -11,30 +11,37 @@ kernelspec: name: python3 --- -# Using the vectors layer +# Using the `vectors` layer -In this document, you will learn about the `napari` `Vectors` layer, including -how to display many vectors simultaneously and adjust their properties. You will -also understand how to add a vectors layer and edit it from the GUI and from the -console. +In this document, you will learn about the `napari` `vectors` layer, including +how to display many vectors simultaneously and adjust their properties. -## When to use the vectors layer +For more information about layers, refer to [Layers at a glance](../../guides/layers). -The vectors layer allows you to display many vectors with defined starting +```{note} +Vector layers can be added only programmatically, i.e., in the console, or using +a script, not from the GUI. Please refer to +[A simple example](#a-simple-example) and use the code there to add a vectors +layer first, then explore the GUI controls. +``` + +## When to use the `vectors` layer + +The `vectors` layer allows you to display many vectors with defined starting points and directions. It is particularly useful for people who want to visualize large vector fields, for example if you are doing polarization -microscopy. You can adjust the color, width, and length of all the vectors both -programmatically and from the GUI. +microscopy. You can adjust the color, width, and length of all the vectors from +the console or from the GUI. ## A simple example You can create a new viewer and add vectors in one go using the -`napari.view_vectors` method, or if you already have an existing viewer, you can -add shapes to it using `viewer.add_vectors`. The api of both methods is the -same. In these examples we'll mainly use `add_vectors` to overlay shapes onto on -an existing image. +{meth}`napari.view_vectors` method, or if you already have an existing viewer, +you can add vectors to it using `viewer.add_vectors`. The API of both methods is +the same. In these examples we'll mainly use `add_vectors` to overlay vectors +onto an existing image. -In this example, we will overlay some shapes on the image of a photographer: +In this example, we will overlay vectors on the image of a photographer: ```{code-cell} python import napari @@ -72,22 +79,82 @@ nbscreenshot(viewer, alt_text="Vectors overlaid on an image") viewer.close() ``` +## Using the GUI to manipulate vectors + +Before you can use the GUI to manipulate vectors, you must load a vector layer. +Please refer to [A simple example](#a-simple-example) to add a `vectors` layer +first, then explore the editing options the GUI provides. + +* Opacity - click and hold the circle on the opacity slider bar and adjust it to + any value between 0.00 (clear) and 1.00 (completely opaque). +* Width - adjusting the width makes the vectors appear thicker or thinner. Use + the + and - buttons on either side of the width bar to adjust width or click + on the number in the middle of the bar and enter a value. The minimum value is + 0.10. +* Length - adjusting the length makes the vector longer or shorter. Use the + + and - buttons on either side of the length bar to adjust length or click on + the number in the middle of the bar and enter a value. The minimum value is + 0.10. +* Blending - `blending` has the options of `opaque`, `translucent`, + `translucent no depth`, `minimum`, or `additive` in the dropdown. Refer to the + [Blending layers](blending-layers) section of _Layers at a glance_ for an + explanation of each type of blending. +* Edge color mode - select `direct`, `cycle`, or `colormap` from the dropdown. + * Direct (default mode) allows each vector to be set arbitrarily. + * Cycle allows the color to be set via a color cycle over an attribute. + * Colormap allows the color to be set via a color map over an attribute. +* Edge color - click the thumbnail next to `edge color:` to select or create a + color from the pallette. +* Out of slice - if this box is checked, `out of slice` is on or true. If this + box is not checked, `out of slice` is off or false. If it is on or true, + vectors slightly out of slice are rendered. + +### Vector starting position + +The starting position of vectors cannot be edited from the GUI. Nor is it +possible to draw vectors from the GUI. If you want to draw lines using the GUI +you should use the `Lines` shape inside a `shapes` layer. + +### 3D rendering + +All layers can be rendered in both 2D and 3D. One of the viewer buttons at the +bottom of the left panel can toggle between these 2 modes. +When in 2D, the button looks like this: ![image: 2D/3D button](../../images/3D-button.png), ready to switch to 3D mode. +When in 3D, the button looks like this: ![image: 2D/3D button](../../images/2D-button.png), ready to switch to 2D mode. + +The number of dimensions sliders will be 2 or 3 less than the total number of +dimensions of the layer, allowing you to browse volumetric timeseries data and +other high dimensional data. See [](../../gallery/nD_vectors) to see shapes in +both 2D and 3D: + +![image: nD vectors](../../images/nD_vectors.webm) + ## Arguments of `view_vectors` and `add_vectors` {meth}`~napari.view_layers.view_vectors` and {meth}`~napari.Viewer.add_vectors` accept the same layer-creation parameters. ```{code-cell} python -:tags: [hide-cell] +:tags: [hide-output] help(napari.view_vectors) ``` +### Changing vector length, width, and color + +Scale the length of all the vectors on a layer using the `layer.length` property. + +Set the width of all the vectors in a layer using the `layer.width` property. + +Set the color of all the vectors in a layer using the `layer.edge_color` property. + +Pan and zoom are not available on the vectors layer. + ## Vectors data -The input data to the vectors layer must either be a `Nx2xD` numpy array +The input data to the `vectors` layer must be an `Nx2xD` NumPy array representing `N` vectors with start position and projection values in `D` -dimensions, or it must be an `N1xN2 ... xNDxD`, array where each of the first +dimensions, or it must be an `N1xN2 ... xNDxD` array where each of the first `D` dimensions corresponds to the voxel of the location of the vector, and the last dimension contains the `D` values of the projection of that vector. The former representation is useful when you have vectors that can start in @@ -95,37 +162,11 @@ arbitrary positions in the canvas. The latter representation is useful when your vectors are defined on a grid, say corresponding to the voxels of an image, and you have one vector per grid. -See here for the example from -[`examples/add_vectors_image.py`](https://github.com/napari/napari/blob/main/examples/add_vectors_image.py) -of a grid of vectors defined over a random image: +Here is an example from [](../../gallery/add_vectors_image) of a grid of vectors +defined over a random image: ![image: add vectors overlaid on an image](../../images/add_vectors_image.png) Regardless of how the data is passed, we convert it to the `Nx2xD` -representation internally. This representation is accessible through the +representation internally. This representation is accessible through the `layer.data` property. - -Editing the start position of the vectors from the GUI is not possible. Nor is -it possible to draw vectors from the GUI. If you want to draw lines from the GUI -you should use the `Lines` shape inside a `Shapes` layer. - -## 3D rendering of vectors - -All our layers can be rendered in both 2D and 3D mode, and one of our viewer -buttons can toggle between each mode. The number of dimensions sliders will be 2 -or 3 less than the total number of dimensions of the layer. See for example the -[`examples/nD_vectors.py`](https://github.com/napari/napari/blob/main/examples/nD_vectors.py) -to see shapes in both 2D and 3D: - -![image: nD vectors](../../images/nD_vectors.webm) - -## Changing vector length, width, and color - -You can multiplicatively scale the length of all the vectors projections using -the `layer.length` property or combobox inside the layer controls panel. - -You can also set the width of all the vectors in a layer using the `layer.width` -property or combobox inside the layer controls panel. - -You can also set the color of all the vectors in a layer using the -`layer.edge_color` property or dropdown menu inside the layer controls panel. diff --git a/docs/howtos/napari_imageJ.md b/docs/howtos/napari_imageJ.md index a3d89d12..21f510fc 100644 --- a/docs/howtos/napari_imageJ.md +++ b/docs/howtos/napari_imageJ.md @@ -1,3 +1,5 @@ +(napari-imagej)= + # napari + ImageJ how-to guide ImageJ is a Java-based image processing program that provides extensibility via Java plugins and recordable macros. It can display, edit, analyze, process, save, and print 8-bit color and grayscale, 16-bit integer, and 32-bit floating point images. It can read many image file formats, including TIFF, PNG, GIF, JPEG, BMP, DICOM, and FITS, as well as raw formats. It has a plethora of features that can be checked out [here](https://en.wikipedia.org/wiki/ImageJ#Features). diff --git a/docs/howtos/perfmon.md b/docs/howtos/perfmon.md index 02032838..c3918a8a 100644 --- a/docs/howtos/perfmon.md +++ b/docs/howtos/perfmon.md @@ -18,7 +18,7 @@ The module can do several things: ## Monitoring vs. profiling -Profiling is similar to performance monitoring. However profiling usually +[Profiling](profiling) is similar to performance monitoring. However profiling usually involves running an external tool to acquire timing data on every function in the program. Sometimes this will cause the program to run so slowly it's hard to use the program interactively. @@ -26,10 +26,12 @@ hard to use the program interactively. Performance monitoring does not require running a separate tool to collect the timing information, however we do use Chrome to view the trace files. With performance monitoring napari can run at close to full speed in many -cases. This document discusses only napari's performance monitoring -features. Profiling napari might be useful as well, but it is not discussed -here. - +cases. Performance monitoring is also more flexible as you can run napari and +interact with the app while checking performance. This document discusses only napari's +performance monitoring +features. Profiling napari might be useful as well, especially if you do not know +the cause of the performance issue. You can find more information in +[our profiling documentation](profiling). ## Enabling perfmon diff --git a/docs/images/2D-button.png b/docs/images/2D-button.png new file mode 100644 index 0000000000000000000000000000000000000000..032c6e8fe28e23c0c07a6c75c82579d609f9849c GIT binary patch literal 863 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 N)m5}0#Y$GV{{gKg-fRE> literal 0 HcmV?d00001 diff --git a/docs/images/3D_paths.png b/docs/images/3D_paths.png index 4a718a7852502c74d7ebe6f95c6b73903da208ac..f78641291eb0486ad43b538a3340ff5b18d9e8c6 100644 GIT binary patch literal 259019 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

|8h9qbtc^w6O_$*Icy( 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 Ang9R* literal 804132 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

(h4+tCLDT$pwRnE&Q=T};zE|= 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∋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