arrayview 0.27.0__tar.gz → 0.27.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {arrayview-0.27.0 → arrayview-0.27.2}/PKG-INFO +1 -1
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/viewing.md +4 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/pyproject.toml +1 -1
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_rendering.py +3 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_websocket.py +3 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_stdio_server.py +3 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_synthetic_mri.py +18 -1
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_viewer.html +806 -84
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_api.py +55 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_view_component_integration.py +79 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/visual_smoke.py +11 -1
- {arrayview-0.27.0 → arrayview-0.27.2}/uv.lock +1 -1
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/frontend-designer/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/invocation-consistency/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/modes-consistency/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/element-attributes.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/playwright-tests.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/request-mocking.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/running-code.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/session-management.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/storage-state.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/test-generation.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/tracing.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/playwright-cli/references/video-recording.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/todo-workflow/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/ui-consistency-audit/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/viewer-ui-checklist/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.agents/skills/visual-bug-fixing/SKILL.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.github/copilot-instructions.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.github/workflows/docs.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.github/workflows/python-publish.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.gitignore +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.ignore +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/AGENTS.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/ROUTER.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/SETUP.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/SYNC.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/architecture.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/conventions.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/decisions.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/frontend.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/lifecycle.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/project-state.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/render-pipeline.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/setup.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/context/stack.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/INDEX.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/README.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/add-file-format.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/add-server-endpoint.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/animation-verify.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/debug-render.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/debug-vscode-extension-python.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/extend-compare-mode.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/extract-server-route-module.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/patterns/frontend-change.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/setup.sh +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.mex/sync.sh +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.opencode/opencode.json +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T18-46-49-737Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T18-48-21-979Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T18-51-35-665Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-07-01-393Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-14-37-969Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-21-30-940Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-23-08-126Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-29-33-155Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-31-25-336Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-31-53-789Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-39-12-257Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T19-39-16-449Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T20-15-25-513Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T20-25-13-179Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T20-39-01-435Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-01-27-659Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-01-41-283Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-03-00-625Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-04-12-887Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-33-39-044Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-38-01-530Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-45-20-383Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-55-11-545Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-56-03-307Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-56-35-733Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-57-12-181Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-57-37-748Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T21-58-13-679Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-06T22-37-23-895Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T00-39-18-637Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T01-41-46-243Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T04-31-48-472Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-14-15-632Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-14-47-582Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-16-23-471Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-17-10-247Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-18-24-707Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-20-06-164Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-20-28-342Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-21-54-962Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-22-34-666Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-23-11-336Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-23-36-260Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-24-09-267Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-24-35-434Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-25-57-010Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-34-48-823Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-46-46-468Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-48-17-930Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-49-26-400Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-50-31-563Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/page-2026-05-07T12-56-45-568Z.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.playwright-cli/theme-dark.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.python-version +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/.vscode/settings.json +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/AGENTS.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/CONTRIBUTING.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/DESIGN.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/LICENSE +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/README.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/comparing.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/configuration.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/display.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/index.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/launch-routing-refactor.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/lifecycle.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/loading.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/logo.png +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/measurement.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/remote.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/docs/stylesheets/extra.css +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/matlab/arrayview.m +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/mkdocs.yml +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/2026-04-14-immersive-animation.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/2026-05-07-unified-colormap-picker.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/arrayview_tool_menu_fix_prompt.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/arrayview_tool_menu_implementation_plan.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/egg-placement-mockup.html +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/refactoring_plan.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/roi-analysis-requirements.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/plans/webview/LOG.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/scripts/demo.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/scripts/release.sh +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/ARCHITECTURE.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/__init__.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/__main__.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_analysis.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_app.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_codex_open.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_config.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_diff.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_icon.png +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_imaging.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_io.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_launch_plan.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_launcher.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_lifecycle.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_overlays.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_platform.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_render.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_analysis.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_export.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_loading.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_persistence.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_preload.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_query.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_segmentation.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_state.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_routes_vectorfield.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_segmentation.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_server.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_session.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_shell.html +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_torch.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_vectorfield.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_vscode.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_vscode_browser.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_vscode_extension.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_vscode_shm.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/_vscode_signal.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/arrayview-opener.vsix +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/src/arrayview/gsap.min.js +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/capture_v_animation.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/conftest.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/lifecycle_matrix.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/make_vectorfield_test_arrays.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_backend_shared.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_browser.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_cli.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_colorbar_hover_highlight.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_command_reachability.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_config.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_cross_mode_parametrized.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_interactions.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_io.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_large_arrays.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_launch_plan.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_lifecycle_contract.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_loading_server.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_mode_consistency.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_mode_entry_batching.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_mode_matrix.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_mode_roundtrip.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_nifti_meta.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_rgb_pixel_art.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_stdio_server.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_torch.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/test_view_component_unit.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/ui_audit.py +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/tests/v_anim_frames/.gitkeep +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/vscode-extension/AGENTS.md +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/vscode-extension/LICENSE +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/vscode-extension/extension.js +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/vscode-extension/lifecycle_helpers.js +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/vscode-extension/package.json +0 -0
- {arrayview-0.27.0 → arrayview-0.27.2}/vscode-extension/test_lifecycle_helpers.js +0 -0
|
@@ -38,6 +38,10 @@ Rendered as direct color via `--rgb` on the CLI or `rgb=True` in Python. The fir
|
|
|
38
38
|
|
|
39
39
|
`m` — cycles through magnitude, phase, real, and imaginary parts for complex-valued arrays.
|
|
40
40
|
|
|
41
|
+
## qMRI
|
|
42
|
+
|
|
43
|
+
`q` — opens qMRI for a parameter dimension. Hold Alt/Option while qMRI is active to choose quantitative parameters and synthesised contrasts. Synthetic contrasts show TE/TR/TI sliders below each pane when available.
|
|
44
|
+
|
|
41
45
|
## Navigation
|
|
42
46
|
|
|
43
47
|
Scroll through slices. `/` opens the tool launcher for ortho, compare, qMRI, ROI, segmentation, FFT, projections, and overlays. The direct keys still work. `0` resets the zoom. `?` shows the full key guide.
|
|
@@ -25,6 +25,7 @@ from arrayview._render import (
|
|
|
25
25
|
)
|
|
26
26
|
from arrayview._session import HEAVY_OP_LIMIT_BYTES, SESSIONS
|
|
27
27
|
from arrayview._synthetic_mri import (
|
|
28
|
+
_qmri_adjust_vmin_vmax,
|
|
28
29
|
qmri_display_slice,
|
|
29
30
|
render_qmri_mosaic_rgba,
|
|
30
31
|
synthetic_qmri_slice,
|
|
@@ -256,6 +257,8 @@ def register_rendering_routes(app, *, get_session_or_404) -> None:
|
|
|
256
257
|
vmin_override=vmin_override,
|
|
257
258
|
vmax_override=vmax_override,
|
|
258
259
|
)
|
|
260
|
+
if qmri_role:
|
|
261
|
+
vmin, vmax = _qmri_adjust_vmin_vmax(vmin, vmax, qmri_role)
|
|
259
262
|
render_ms = (time.perf_counter() - render_t0) * 1000.0
|
|
260
263
|
encode_t0 = time.perf_counter()
|
|
261
264
|
img = _pil_image().fromarray(rgba[:, :, :3], mode="RGB")
|
|
@@ -31,6 +31,7 @@ from arrayview._session import (
|
|
|
31
31
|
)
|
|
32
32
|
from arrayview._vectorfield import _compute_vfield_arrows
|
|
33
33
|
from arrayview._synthetic_mri import (
|
|
34
|
+
_qmri_adjust_vmin_vmax,
|
|
34
35
|
qmri_display_slice,
|
|
35
36
|
render_qmri_mosaic_rgba,
|
|
36
37
|
synthetic_qmri_slice,
|
|
@@ -319,6 +320,8 @@ def register_websocket_routes(app) -> None:
|
|
|
319
320
|
vmin_override=vmin_override,
|
|
320
321
|
vmax_override=vmax_override,
|
|
321
322
|
)
|
|
323
|
+
if qmri_role:
|
|
324
|
+
vmin, vmax = _qmri_adjust_vmin_vmax(vmin, vmax, qmri_role)
|
|
322
325
|
|
|
323
326
|
overlay_sid = msg.get("overlay_sid")
|
|
324
327
|
overlay_colors = msg.get("overlay_colors")
|
|
@@ -52,6 +52,7 @@ from arrayview._render import (
|
|
|
52
52
|
)
|
|
53
53
|
from arrayview._session import SESSIONS, Session
|
|
54
54
|
from arrayview._synthetic_mri import (
|
|
55
|
+
_qmri_adjust_vmin_vmax,
|
|
55
56
|
qmri_display_slice,
|
|
56
57
|
render_qmri_mosaic_rgba,
|
|
57
58
|
synthetic_qmri_slice,
|
|
@@ -638,6 +639,8 @@ def _build_slice_payload(msg: dict) -> bytes:
|
|
|
638
639
|
session, raw, complex_mode, dr, log_scale,
|
|
639
640
|
vmin_override=vmin_override, vmax_override=vmax_override,
|
|
640
641
|
)
|
|
642
|
+
if qmri_role:
|
|
643
|
+
vmin, vmax = _qmri_adjust_vmin_vmax(vmin, vmax, qmri_role)
|
|
641
644
|
|
|
642
645
|
# Overlay compositing
|
|
643
646
|
overlay_sid = msg.get("overlay_sid")
|
|
@@ -48,7 +48,8 @@ def normalize_relaxation_ms(data: np.ndarray, role: str | None = None) -> np.nda
|
|
|
48
48
|
if finite.size == 0:
|
|
49
49
|
return arr
|
|
50
50
|
central = float(np.nanmedian(finite))
|
|
51
|
-
|
|
51
|
+
seconds_threshold = 10.0 if role == "t1" else 5.0
|
|
52
|
+
if 0.0 < central <= seconds_threshold:
|
|
52
53
|
return (arr * np.float32(1000.0)).astype(np.float32)
|
|
53
54
|
return arr
|
|
54
55
|
|
|
@@ -145,6 +146,21 @@ def synthetic_window(data: np.ndarray, contrast: str) -> tuple[float, float]:
|
|
|
145
146
|
return vmin, vmax
|
|
146
147
|
|
|
147
148
|
|
|
149
|
+
def _qmri_adjust_vmin_vmax(vmin: float, vmax: float, role: str) -> tuple[float, float]:
|
|
150
|
+
"""Adjust vmin/vmax for display according to qMRI role conventions."""
|
|
151
|
+
if not role:
|
|
152
|
+
return vmin, vmax
|
|
153
|
+
if role in ("t1", "t2"):
|
|
154
|
+
return 0.0, float(int(np.ceil(vmax)))
|
|
155
|
+
if role == "pd":
|
|
156
|
+
return 0.0, vmax
|
|
157
|
+
if role == "b1":
|
|
158
|
+
return round(float(vmin), 2), round(float(vmax), 2)
|
|
159
|
+
if role == "phase":
|
|
160
|
+
return -3.14, 3.14
|
|
161
|
+
return vmin, vmax
|
|
162
|
+
|
|
163
|
+
|
|
148
164
|
def render_qmri_mosaic_rgba(
|
|
149
165
|
session,
|
|
150
166
|
dim_x: int,
|
|
@@ -174,6 +190,7 @@ def render_qmri_mosaic_rgba(
|
|
|
174
190
|
else:
|
|
175
191
|
vmin = float(np.percentile(all_data, 1))
|
|
176
192
|
vmax = float(np.percentile(all_data, 99))
|
|
193
|
+
vmin, vmax = _qmri_adjust_vmin_vmax(vmin, vmax, role)
|
|
177
194
|
grid, _, _ = _build_mosaic_grid(
|
|
178
195
|
all_data, session.shape[dim_z], cols=mosaic_cols
|
|
179
196
|
) if mosaic_cols is not None else _build_mosaic_grid(all_data, session.shape[dim_z])
|