arrayview 0.26.1__tar.gz → 0.26.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.26.1 → arrayview-0.26.2}/PKG-INFO +1 -1
- {arrayview-0.26.1 → arrayview-0.26.2}/pyproject.toml +1 -1
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_stdio_server.py +51 -2
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_io.py +58 -1
- {arrayview-0.26.1 → arrayview-0.26.2}/uv.lock +1 -1
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/frontend-designer/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/invocation-consistency/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/modes-consistency/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/element-attributes.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/playwright-tests.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/request-mocking.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/running-code.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/session-management.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/storage-state.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/test-generation.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/tracing.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/video-recording.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/todo-workflow/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/ui-consistency-audit/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/viewer-ui-checklist/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/visual-bug-fixing/SKILL.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.github/copilot-instructions.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.github/workflows/docs.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.github/workflows/python-publish.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.gitignore +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.ignore +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/AGENTS.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/ROUTER.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/SETUP.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/SYNC.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/architecture.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/conventions.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/decisions.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/frontend.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/lifecycle.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/project-state.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/render-pipeline.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/setup.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/stack.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/INDEX.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/README.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/add-file-format.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/add-server-endpoint.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/animation-verify.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/debug-render.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/debug-vscode-extension-python.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/extend-compare-mode.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/extract-server-route-module.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/frontend-change.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/setup.sh +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.mex/sync.sh +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.opencode/opencode.json +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T18-46-49-737Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T18-48-21-979Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T18-51-35-665Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-07-01-393Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-14-37-969Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-21-30-940Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-23-08-126Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-29-33-155Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-31-25-336Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-31-53-789Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-39-12-257Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-39-16-449Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T20-15-25-513Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T20-25-13-179Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T20-39-01-435Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-01-27-659Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-01-41-283Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-03-00-625Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-04-12-887Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-33-39-044Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-38-01-530Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-45-20-383Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-55-11-545Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-56-03-307Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-56-35-733Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-57-12-181Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-57-37-748Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-58-13-679Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T22-37-23-895Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T00-39-18-637Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T01-41-46-243Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T04-31-48-472Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-14-15-632Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-14-47-582Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-16-23-471Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-17-10-247Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-18-24-707Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-20-06-164Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-20-28-342Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-21-54-962Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-22-34-666Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-23-11-336Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-23-36-260Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-24-09-267Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-24-35-434Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-25-57-010Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-34-48-823Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-46-46-468Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-48-17-930Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-49-26-400Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-50-31-563Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-56-45-568Z.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/theme-dark.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.python-version +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/.vscode/settings.json +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/AGENTS.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/CONTRIBUTING.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/DESIGN.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/LICENSE +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/README.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/comparing.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/configuration.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/display.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/index.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/lifecycle.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/loading.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/logo.png +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/measurement.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/remote.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/stylesheets/extra.css +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/docs/viewing.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/matlab/arrayview.m +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/mkdocs.yml +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/plans/2026-04-14-immersive-animation.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/plans/2026-05-07-unified-colormap-picker.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/plans/arrayview_tool_menu_fix_prompt.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/plans/arrayview_tool_menu_implementation_plan.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/plans/egg-placement-mockup.html +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/plans/refactoring_plan.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/plans/webview/LOG.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/scripts/demo.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/scripts/release.sh +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/ARCHITECTURE.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/__init__.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/__main__.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_analysis.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_app.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_codex_open.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_config.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_diff.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_icon.png +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_imaging.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_io.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_launcher.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_lifecycle.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_overlays.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_platform.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_render.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_analysis.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_export.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_loading.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_persistence.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_preload.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_query.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_rendering.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_segmentation.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_state.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_vectorfield.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_websocket.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_segmentation.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_server.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_session.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_shell.html +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_synthetic_mri.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_torch.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vectorfield.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_viewer.html +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_browser.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_extension.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_shm.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_signal.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/arrayview-opener.vsix +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/gsap.min.js +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/capture_v_animation.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/conftest.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/lifecycle_matrix.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/make_vectorfield_test_arrays.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_api.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_backend_shared.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_browser.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_cli.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_colorbar_hover_highlight.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_command_reachability.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_config.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_cross_mode_parametrized.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_interactions.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_large_arrays.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_lifecycle_contract.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_loading_server.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_consistency.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_entry_batching.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_matrix.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_roundtrip.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_nifti_meta.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_rgb_pixel_art.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_stdio_server.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_torch.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_view_component_integration.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_view_component_unit.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/ui_audit.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/v_anim_frames/.gitkeep +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/tests/visual_smoke.py +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/AGENTS.md +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/LICENSE +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/extension.js +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/lifecycle_helpers.js +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/package.json +0 -0
- {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/test_lifecycle_helpers.js +0 -0
|
@@ -115,14 +115,19 @@ def _handle_register(msg: dict) -> None:
|
|
|
115
115
|
name = msg.get("name") or __import__("os").path.basename(file_path)
|
|
116
116
|
options = msg.get("options", {})
|
|
117
117
|
|
|
118
|
-
from ._io import
|
|
118
|
+
from ._io import list_array_keys
|
|
119
119
|
|
|
120
|
+
array_keys = list_array_keys(file_path)
|
|
121
|
+
key = array_keys[0]["key"] if array_keys else None
|
|
120
122
|
data, spatial_meta = load_data_with_meta(
|
|
121
123
|
file_path,
|
|
122
|
-
key=
|
|
124
|
+
key=key,
|
|
123
125
|
)
|
|
124
126
|
session = Session(data=data, filepath=file_path, name=name)
|
|
125
127
|
session.spatial_meta = spatial_meta
|
|
128
|
+
if len(array_keys) > 1:
|
|
129
|
+
session.array_keys = array_keys
|
|
130
|
+
session.array_filepath = file_path
|
|
126
131
|
if spatial_meta is not None:
|
|
127
132
|
session.original_volume = data
|
|
128
133
|
|
|
@@ -154,6 +159,48 @@ def _handle_metadata(msg: dict) -> None:
|
|
|
154
159
|
_write_json(_build_metadata(session))
|
|
155
160
|
|
|
156
161
|
|
|
162
|
+
def _handle_reload_key(sid: str, msg: dict) -> None:
|
|
163
|
+
"""Reload a session's data from a multi-array file with a different key."""
|
|
164
|
+
session = SESSIONS.get(sid)
|
|
165
|
+
if not session:
|
|
166
|
+
_write_error("session not found")
|
|
167
|
+
return
|
|
168
|
+
array_filepath = getattr(session, "array_filepath", None)
|
|
169
|
+
if not array_filepath:
|
|
170
|
+
_write_error("session has no array keys")
|
|
171
|
+
return
|
|
172
|
+
|
|
173
|
+
try:
|
|
174
|
+
body = json.loads(msg.get("body") or "{}")
|
|
175
|
+
except Exception:
|
|
176
|
+
_write_error("invalid JSON body")
|
|
177
|
+
return
|
|
178
|
+
key = body.get("key")
|
|
179
|
+
if not key:
|
|
180
|
+
_write_error("key is required")
|
|
181
|
+
return
|
|
182
|
+
|
|
183
|
+
try:
|
|
184
|
+
from ._io import load_data
|
|
185
|
+
|
|
186
|
+
data = load_data(array_filepath, key=key)
|
|
187
|
+
except Exception as e:
|
|
188
|
+
_write_error(str(e))
|
|
189
|
+
return
|
|
190
|
+
|
|
191
|
+
session.data = data
|
|
192
|
+
session.shape = data.shape
|
|
193
|
+
session.data_version += 1
|
|
194
|
+
session.raw_cache.clear()
|
|
195
|
+
session.rgba_cache.clear()
|
|
196
|
+
session.mosaic_cache.clear()
|
|
197
|
+
session._raw_bytes = 0
|
|
198
|
+
session._rgba_bytes = 0
|
|
199
|
+
session._mosaic_bytes = 0
|
|
200
|
+
session._estimated_mem = session._estimate_memory()
|
|
201
|
+
_write_json({"ok": True})
|
|
202
|
+
|
|
203
|
+
|
|
157
204
|
def _handle_sessions() -> None:
|
|
158
205
|
"""Return list of active sessions."""
|
|
159
206
|
_write_json([_session_summary(s) for s in SESSIONS.values()])
|
|
@@ -409,6 +456,8 @@ def _handle_fetch_proxy(msg: dict) -> None:
|
|
|
409
456
|
_handle_metadata({"sid": sid})
|
|
410
457
|
elif route == "clearcache" and sid:
|
|
411
458
|
_handle_clearcache({"sid": sid})
|
|
459
|
+
elif route == "session" and len(parts) >= 3 and parts[2] == "reload-key":
|
|
460
|
+
_handle_reload_key(parts[1], msg)
|
|
412
461
|
elif route == "sessions":
|
|
413
462
|
_handle_sessions()
|
|
414
463
|
elif route == "histogram" and sid:
|
|
@@ -52,7 +52,7 @@ def test_mat_loader_returns_key_list_for_multiple_numeric_arrays(tmp_path):
|
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
def
|
|
55
|
+
def test_stdio_mat_register_exposes_keys_and_reload_switches_array(tmp_path, monkeypatch):
|
|
56
56
|
import scipy.io
|
|
57
57
|
|
|
58
58
|
import arrayview._stdio_server as stdio
|
|
@@ -75,8 +75,65 @@ def test_stdio_register_uses_default_mat_key(tmp_path, monkeypatch):
|
|
|
75
75
|
try:
|
|
76
76
|
stdio._handle_register({"path": str(path)})
|
|
77
77
|
assert len(responses) == 1
|
|
78
|
+
sid = responses[0]["sid"]
|
|
78
79
|
assert responses[0]["shape"] == [2, 3]
|
|
80
|
+
assert SESSIONS[sid].array_keys == [
|
|
81
|
+
{"key": "first", "shape": [2, 3], "dtype": "float32"},
|
|
82
|
+
{"key": "second", "shape": [4, 5], "dtype": "float32"},
|
|
83
|
+
]
|
|
79
84
|
assert "error" not in responses[0]
|
|
85
|
+
|
|
86
|
+
responses.clear()
|
|
87
|
+
stdio._handle_fetch_proxy(
|
|
88
|
+
{
|
|
89
|
+
"endpoint": f"/session/{sid}/reload-key",
|
|
90
|
+
"method": "POST",
|
|
91
|
+
"body": '{"key":"second"}',
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
assert responses == [{"ok": True}]
|
|
96
|
+
assert SESSIONS[sid].shape == (4, 5)
|
|
97
|
+
finally:
|
|
98
|
+
for sid in set(SESSIONS) - before:
|
|
99
|
+
SESSIONS.pop(sid, None)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def test_stdio_npz_register_exposes_keys_and_reload_switches_array(tmp_path, monkeypatch):
|
|
103
|
+
import arrayview._stdio_server as stdio
|
|
104
|
+
from arrayview._session import SESSIONS
|
|
105
|
+
|
|
106
|
+
path = tmp_path / "stdio_multiple_arrays.npz"
|
|
107
|
+
np.savez(
|
|
108
|
+
path,
|
|
109
|
+
first=np.zeros((2, 3), dtype=np.float32),
|
|
110
|
+
second=np.ones((4, 5), dtype=np.float32),
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
responses = []
|
|
114
|
+
monkeypatch.setattr(stdio, "_write_json", responses.append)
|
|
115
|
+
|
|
116
|
+
before = set(SESSIONS)
|
|
117
|
+
try:
|
|
118
|
+
stdio._handle_register({"path": str(path)})
|
|
119
|
+
sid = responses[0]["sid"]
|
|
120
|
+
assert responses[0]["shape"] == [2, 3]
|
|
121
|
+
assert SESSIONS[sid].array_keys == [
|
|
122
|
+
{"key": "first", "shape": [2, 3], "dtype": "float32"},
|
|
123
|
+
{"key": "second", "shape": [4, 5], "dtype": "float32"},
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
responses.clear()
|
|
127
|
+
stdio._handle_fetch_proxy(
|
|
128
|
+
{
|
|
129
|
+
"endpoint": f"/session/{sid}/reload-key",
|
|
130
|
+
"method": "POST",
|
|
131
|
+
"body": '{"key":"second"}',
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
assert responses == [{"ok": True}]
|
|
136
|
+
assert SESSIONS[sid].shape == (4, 5)
|
|
80
137
|
finally:
|
|
81
138
|
for sid in set(SESSIONS) - before:
|
|
82
139
|
SESSIONS.pop(sid, None)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/element-attributes.md
RENAMED
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/playwright-tests.md
RENAMED
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/request-mocking.md
RENAMED
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/running-code.md
RENAMED
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/session-management.md
RENAMED
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/storage-state.md
RENAMED
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/test-generation.md
RENAMED
|
File without changes
|
|
File without changes
|
{arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/video-recording.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|