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.
Files changed (212) hide show
  1. {arrayview-0.26.1 → arrayview-0.26.2}/PKG-INFO +1 -1
  2. {arrayview-0.26.1 → arrayview-0.26.2}/pyproject.toml +1 -1
  3. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_stdio_server.py +51 -2
  4. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_io.py +58 -1
  5. {arrayview-0.26.1 → arrayview-0.26.2}/uv.lock +1 -1
  6. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/frontend-designer/SKILL.md +0 -0
  7. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/invocation-consistency/SKILL.md +0 -0
  8. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/modes-consistency/SKILL.md +0 -0
  9. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/SKILL.md +0 -0
  10. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/element-attributes.md +0 -0
  11. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/playwright-tests.md +0 -0
  12. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/request-mocking.md +0 -0
  13. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/running-code.md +0 -0
  14. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/session-management.md +0 -0
  15. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/storage-state.md +0 -0
  16. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/test-generation.md +0 -0
  17. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/tracing.md +0 -0
  18. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/playwright-cli/references/video-recording.md +0 -0
  19. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/todo-workflow/SKILL.md +0 -0
  20. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/ui-consistency-audit/SKILL.md +0 -0
  21. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/viewer-ui-checklist/SKILL.md +0 -0
  22. {arrayview-0.26.1 → arrayview-0.26.2}/.agents/skills/visual-bug-fixing/SKILL.md +0 -0
  23. {arrayview-0.26.1 → arrayview-0.26.2}/.github/copilot-instructions.md +0 -0
  24. {arrayview-0.26.1 → arrayview-0.26.2}/.github/workflows/docs.yml +0 -0
  25. {arrayview-0.26.1 → arrayview-0.26.2}/.github/workflows/python-publish.yml +0 -0
  26. {arrayview-0.26.1 → arrayview-0.26.2}/.gitignore +0 -0
  27. {arrayview-0.26.1 → arrayview-0.26.2}/.ignore +0 -0
  28. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/AGENTS.md +0 -0
  29. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/ROUTER.md +0 -0
  30. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/SETUP.md +0 -0
  31. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/SYNC.md +0 -0
  32. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/architecture.md +0 -0
  33. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/conventions.md +0 -0
  34. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/decisions.md +0 -0
  35. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/frontend.md +0 -0
  36. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/lifecycle.md +0 -0
  37. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/project-state.md +0 -0
  38. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/render-pipeline.md +0 -0
  39. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/setup.md +0 -0
  40. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/context/stack.md +0 -0
  41. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/INDEX.md +0 -0
  42. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/README.md +0 -0
  43. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/add-file-format.md +0 -0
  44. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/add-server-endpoint.md +0 -0
  45. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/animation-verify.md +0 -0
  46. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/debug-render.md +0 -0
  47. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/debug-vscode-extension-python.md +0 -0
  48. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/extend-compare-mode.md +0 -0
  49. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/extract-server-route-module.md +0 -0
  50. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/patterns/frontend-change.md +0 -0
  51. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/setup.sh +0 -0
  52. {arrayview-0.26.1 → arrayview-0.26.2}/.mex/sync.sh +0 -0
  53. {arrayview-0.26.1 → arrayview-0.26.2}/.opencode/opencode.json +0 -0
  54. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T18-46-49-737Z.yml +0 -0
  55. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T18-48-21-979Z.yml +0 -0
  56. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T18-51-35-665Z.yml +0 -0
  57. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-07-01-393Z.yml +0 -0
  58. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-14-37-969Z.yml +0 -0
  59. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-21-30-940Z.yml +0 -0
  60. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-23-08-126Z.yml +0 -0
  61. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-29-33-155Z.yml +0 -0
  62. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-31-25-336Z.yml +0 -0
  63. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-31-53-789Z.yml +0 -0
  64. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-39-12-257Z.yml +0 -0
  65. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T19-39-16-449Z.yml +0 -0
  66. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T20-15-25-513Z.yml +0 -0
  67. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T20-25-13-179Z.yml +0 -0
  68. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T20-39-01-435Z.yml +0 -0
  69. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-01-27-659Z.yml +0 -0
  70. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-01-41-283Z.yml +0 -0
  71. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-03-00-625Z.yml +0 -0
  72. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-04-12-887Z.yml +0 -0
  73. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-33-39-044Z.yml +0 -0
  74. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-38-01-530Z.yml +0 -0
  75. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-45-20-383Z.yml +0 -0
  76. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-55-11-545Z.yml +0 -0
  77. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-56-03-307Z.yml +0 -0
  78. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-56-35-733Z.yml +0 -0
  79. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-57-12-181Z.yml +0 -0
  80. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-57-37-748Z.yml +0 -0
  81. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T21-58-13-679Z.yml +0 -0
  82. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-06T22-37-23-895Z.yml +0 -0
  83. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T00-39-18-637Z.yml +0 -0
  84. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T01-41-46-243Z.yml +0 -0
  85. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T04-31-48-472Z.yml +0 -0
  86. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-14-15-632Z.yml +0 -0
  87. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-14-47-582Z.yml +0 -0
  88. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-16-23-471Z.yml +0 -0
  89. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-17-10-247Z.yml +0 -0
  90. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-18-24-707Z.yml +0 -0
  91. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-20-06-164Z.yml +0 -0
  92. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-20-28-342Z.yml +0 -0
  93. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-21-54-962Z.yml +0 -0
  94. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-22-34-666Z.yml +0 -0
  95. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-23-11-336Z.yml +0 -0
  96. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-23-36-260Z.yml +0 -0
  97. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-24-09-267Z.yml +0 -0
  98. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-24-35-434Z.yml +0 -0
  99. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-25-57-010Z.yml +0 -0
  100. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-34-48-823Z.yml +0 -0
  101. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-46-46-468Z.yml +0 -0
  102. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-48-17-930Z.yml +0 -0
  103. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-49-26-400Z.yml +0 -0
  104. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-50-31-563Z.yml +0 -0
  105. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/page-2026-05-07T12-56-45-568Z.yml +0 -0
  106. {arrayview-0.26.1 → arrayview-0.26.2}/.playwright-cli/theme-dark.yml +0 -0
  107. {arrayview-0.26.1 → arrayview-0.26.2}/.python-version +0 -0
  108. {arrayview-0.26.1 → arrayview-0.26.2}/.vscode/settings.json +0 -0
  109. {arrayview-0.26.1 → arrayview-0.26.2}/AGENTS.md +0 -0
  110. {arrayview-0.26.1 → arrayview-0.26.2}/CONTRIBUTING.md +0 -0
  111. {arrayview-0.26.1 → arrayview-0.26.2}/DESIGN.md +0 -0
  112. {arrayview-0.26.1 → arrayview-0.26.2}/LICENSE +0 -0
  113. {arrayview-0.26.1 → arrayview-0.26.2}/README.md +0 -0
  114. {arrayview-0.26.1 → arrayview-0.26.2}/docs/comparing.md +0 -0
  115. {arrayview-0.26.1 → arrayview-0.26.2}/docs/configuration.md +0 -0
  116. {arrayview-0.26.1 → arrayview-0.26.2}/docs/display.md +0 -0
  117. {arrayview-0.26.1 → arrayview-0.26.2}/docs/index.md +0 -0
  118. {arrayview-0.26.1 → arrayview-0.26.2}/docs/lifecycle.md +0 -0
  119. {arrayview-0.26.1 → arrayview-0.26.2}/docs/loading.md +0 -0
  120. {arrayview-0.26.1 → arrayview-0.26.2}/docs/logo.png +0 -0
  121. {arrayview-0.26.1 → arrayview-0.26.2}/docs/measurement.md +0 -0
  122. {arrayview-0.26.1 → arrayview-0.26.2}/docs/remote.md +0 -0
  123. {arrayview-0.26.1 → arrayview-0.26.2}/docs/stylesheets/extra.css +0 -0
  124. {arrayview-0.26.1 → arrayview-0.26.2}/docs/viewing.md +0 -0
  125. {arrayview-0.26.1 → arrayview-0.26.2}/matlab/arrayview.m +0 -0
  126. {arrayview-0.26.1 → arrayview-0.26.2}/mkdocs.yml +0 -0
  127. {arrayview-0.26.1 → arrayview-0.26.2}/plans/2026-04-14-immersive-animation.md +0 -0
  128. {arrayview-0.26.1 → arrayview-0.26.2}/plans/2026-05-07-unified-colormap-picker.md +0 -0
  129. {arrayview-0.26.1 → arrayview-0.26.2}/plans/arrayview_tool_menu_fix_prompt.md +0 -0
  130. {arrayview-0.26.1 → arrayview-0.26.2}/plans/arrayview_tool_menu_implementation_plan.md +0 -0
  131. {arrayview-0.26.1 → arrayview-0.26.2}/plans/egg-placement-mockup.html +0 -0
  132. {arrayview-0.26.1 → arrayview-0.26.2}/plans/refactoring_plan.md +0 -0
  133. {arrayview-0.26.1 → arrayview-0.26.2}/plans/webview/LOG.md +0 -0
  134. {arrayview-0.26.1 → arrayview-0.26.2}/scripts/demo.py +0 -0
  135. {arrayview-0.26.1 → arrayview-0.26.2}/scripts/release.sh +0 -0
  136. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/ARCHITECTURE.md +0 -0
  137. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/__init__.py +0 -0
  138. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/__main__.py +0 -0
  139. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_analysis.py +0 -0
  140. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_app.py +0 -0
  141. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_codex_open.py +0 -0
  142. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_config.py +0 -0
  143. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_diff.py +0 -0
  144. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_icon.png +0 -0
  145. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_imaging.py +0 -0
  146. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_io.py +0 -0
  147. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_launcher.py +0 -0
  148. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_lifecycle.py +0 -0
  149. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_overlays.py +0 -0
  150. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_platform.py +0 -0
  151. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_render.py +0 -0
  152. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_analysis.py +0 -0
  153. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_export.py +0 -0
  154. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_loading.py +0 -0
  155. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_persistence.py +0 -0
  156. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_preload.py +0 -0
  157. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_query.py +0 -0
  158. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_rendering.py +0 -0
  159. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_segmentation.py +0 -0
  160. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_state.py +0 -0
  161. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_vectorfield.py +0 -0
  162. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_routes_websocket.py +0 -0
  163. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_segmentation.py +0 -0
  164. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_server.py +0 -0
  165. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_session.py +0 -0
  166. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_shell.html +0 -0
  167. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_synthetic_mri.py +0 -0
  168. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_torch.py +0 -0
  169. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vectorfield.py +0 -0
  170. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_viewer.html +0 -0
  171. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode.py +0 -0
  172. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_browser.py +0 -0
  173. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_extension.py +0 -0
  174. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_shm.py +0 -0
  175. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/_vscode_signal.py +0 -0
  176. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/arrayview-opener.vsix +0 -0
  177. {arrayview-0.26.1 → arrayview-0.26.2}/src/arrayview/gsap.min.js +0 -0
  178. {arrayview-0.26.1 → arrayview-0.26.2}/tests/capture_v_animation.py +0 -0
  179. {arrayview-0.26.1 → arrayview-0.26.2}/tests/conftest.py +0 -0
  180. {arrayview-0.26.1 → arrayview-0.26.2}/tests/lifecycle_matrix.py +0 -0
  181. {arrayview-0.26.1 → arrayview-0.26.2}/tests/make_vectorfield_test_arrays.py +0 -0
  182. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_api.py +0 -0
  183. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_backend_shared.py +0 -0
  184. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_browser.py +0 -0
  185. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_cli.py +0 -0
  186. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_colorbar_hover_highlight.py +0 -0
  187. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_command_reachability.py +0 -0
  188. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_config.py +0 -0
  189. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_cross_mode_parametrized.py +0 -0
  190. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_interactions.py +0 -0
  191. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_large_arrays.py +0 -0
  192. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_lifecycle_contract.py +0 -0
  193. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_loading_server.py +0 -0
  194. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_consistency.py +0 -0
  195. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_entry_batching.py +0 -0
  196. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_matrix.py +0 -0
  197. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_mode_roundtrip.py +0 -0
  198. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_nifti_meta.py +0 -0
  199. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_rgb_pixel_art.py +0 -0
  200. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_stdio_server.py +0 -0
  201. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_torch.py +0 -0
  202. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_view_component_integration.py +0 -0
  203. {arrayview-0.26.1 → arrayview-0.26.2}/tests/test_view_component_unit.py +0 -0
  204. {arrayview-0.26.1 → arrayview-0.26.2}/tests/ui_audit.py +0 -0
  205. {arrayview-0.26.1 → arrayview-0.26.2}/tests/v_anim_frames/.gitkeep +0 -0
  206. {arrayview-0.26.1 → arrayview-0.26.2}/tests/visual_smoke.py +0 -0
  207. {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/AGENTS.md +0 -0
  208. {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/LICENSE +0 -0
  209. {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/extension.js +0 -0
  210. {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/lifecycle_helpers.js +0 -0
  211. {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/package.json +0 -0
  212. {arrayview-0.26.1 → arrayview-0.26.2}/vscode-extension/test_lifecycle_helpers.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arrayview
3
- Version: 0.26.1
3
+ Version: 0.26.2
4
4
  Summary: Fast multi-dimensional array viewer
5
5
  Project-URL: Home, https://github.com/oscarvanderheide/arrayview
6
6
  Project-URL: Source, https://github.com/oscarvanderheide/arrayview
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "arrayview"
7
- version = "0.26.1"
7
+ version = "0.26.2"
8
8
  description = "Fast multi-dimensional array viewer"
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  requires-python = ">=3.12"
@@ -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 default_array_key
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=default_array_key(file_path),
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 test_stdio_register_uses_default_mat_key(tmp_path, monkeypatch):
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)
@@ -198,7 +198,7 @@ wheels = [
198
198
 
199
199
  [[package]]
200
200
  name = "arrayview"
201
- version = "0.26.1"
201
+ version = "0.26.2"
202
202
  source = { editable = "." }
203
203
  dependencies = [
204
204
  { name = "fastapi" },
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