arrayview 0.6.0__tar.gz → 0.7.0__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 (77) hide show
  1. arrayview-0.7.0/.github/workflows/docs.yml +20 -0
  2. {arrayview-0.6.0 → arrayview-0.7.0}/.gitignore +2 -0
  3. {arrayview-0.6.0 → arrayview-0.7.0}/AGENTS.md +7 -2
  4. {arrayview-0.6.0 → arrayview-0.7.0}/PKG-INFO +54 -2
  5. arrayview-0.7.0/README.md +85 -0
  6. arrayview-0.7.0/docs/superpowers/plans/2026-03-27-mode-dispatch-refactor.md +717 -0
  7. arrayview-0.7.0/docs/superpowers/plans/2026-03-28-exploded-volume-view.md +854 -0
  8. arrayview-0.7.0/docs/superpowers/plans/2026-03-28-instance-previewer-ram-guard.md +601 -0
  9. arrayview-0.7.0/docs/superpowers/plans/2026-03-29-multi-array-immersive.md +726 -0
  10. arrayview-0.7.0/docs/superpowers/plans/2026-03-30-loading-screen.md +192 -0
  11. arrayview-0.7.0/docs/superpowers/plans/2026-03-30-pytorch-dl-integration.md +807 -0
  12. arrayview-0.7.0/docs/superpowers/specs/2026-03-27-islands-immersive-only-design.md +60 -0
  13. arrayview-0.7.0/docs/superpowers/specs/2026-03-28-exploded-volume-view-design.md +94 -0
  14. arrayview-0.7.0/docs/superpowers/specs/2026-03-28-instance-previewer-ram-guard-design.md +158 -0
  15. arrayview-0.7.0/docs/superpowers/specs/2026-03-29-multi-array-immersive-design.md +84 -0
  16. arrayview-0.7.0/docs/superpowers/specs/2026-03-30-loading-screen-design.md +33 -0
  17. arrayview-0.7.0/docs/superpowers/specs/2026-03-30-pytorch-dl-integration-design.md +205 -0
  18. arrayview-0.7.0/matlab/arrayview.m +74 -0
  19. {arrayview-0.6.0 → arrayview-0.7.0}/mkdocs.yml +2 -0
  20. {arrayview-0.6.0 → arrayview-0.7.0}/pyproject.toml +1 -1
  21. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/__init__.py +2 -1
  22. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_app.py +0 -2
  23. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_config.py +12 -0
  24. arrayview-0.7.0/src/arrayview/_icon.png +0 -0
  25. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_io.py +4 -0
  26. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_launcher.py +215 -87
  27. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_render.py +10 -37
  28. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_server.py +242 -123
  29. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_session.py +8 -3
  30. arrayview-0.7.0/src/arrayview/_torch.py +217 -0
  31. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_viewer.html +2609 -1175
  32. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_vscode.py +143 -88
  33. arrayview-0.7.0/src/arrayview/arrayview-opener.vsix +0 -0
  34. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_api.py +36 -0
  35. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_config.py +27 -0
  36. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_mode_consistency.py +38 -22
  37. arrayview-0.7.0/tests/test_torch.py +223 -0
  38. {arrayview-0.6.0 → arrayview-0.7.0}/tests/ui_audit.py +14 -5
  39. {arrayview-0.6.0 → arrayview-0.7.0}/tests/visual_smoke.py +59 -5
  40. {arrayview-0.6.0 → arrayview-0.7.0}/vscode-extension/extension.js +23 -3
  41. {arrayview-0.6.0 → arrayview-0.7.0}/vscode-extension/package.json +1 -1
  42. arrayview-0.6.0/README.md +0 -33
  43. arrayview-0.6.0/src/arrayview/arrayview-opener.vsix +0 -0
  44. {arrayview-0.6.0 → arrayview-0.7.0}/.claude/skills/invocation-consistency/SKILL.md +0 -0
  45. {arrayview-0.6.0 → arrayview-0.7.0}/.claude/skills/modes-consistency/SKILL.md +0 -0
  46. {arrayview-0.6.0 → arrayview-0.7.0}/.claude/skills/task-workflow/SKILL.md +0 -0
  47. {arrayview-0.6.0 → arrayview-0.7.0}/.claude/skills/ui-consistency-audit/SKILL.md +0 -0
  48. {arrayview-0.6.0 → arrayview-0.7.0}/.claude/skills/viewer-ui-checklist/SKILL.md +0 -0
  49. {arrayview-0.6.0 → arrayview-0.7.0}/.github/workflows/python-publish.yml +0 -0
  50. {arrayview-0.6.0 → arrayview-0.7.0}/.python-version +0 -0
  51. {arrayview-0.6.0 → arrayview-0.7.0}/.tmp-vsix/extension/extension.js +0 -0
  52. {arrayview-0.6.0 → arrayview-0.7.0}/.tmp-vsix/extension/package.json +0 -0
  53. {arrayview-0.6.0 → arrayview-0.7.0}/LICENSE +0 -0
  54. {arrayview-0.6.0 → arrayview-0.7.0}/docs/comparing.md +0 -0
  55. {arrayview-0.6.0 → arrayview-0.7.0}/docs/configuration.md +0 -0
  56. {arrayview-0.6.0 → arrayview-0.7.0}/docs/display.md +0 -0
  57. {arrayview-0.6.0 → arrayview-0.7.0}/docs/index.md +0 -0
  58. {arrayview-0.6.0 → arrayview-0.7.0}/docs/loading.md +0 -0
  59. /arrayview-0.6.0/src/arrayview/_icon.png → /arrayview-0.7.0/docs/logo.png +0 -0
  60. {arrayview-0.6.0 → arrayview-0.7.0}/docs/measurement.md +0 -0
  61. {arrayview-0.6.0 → arrayview-0.7.0}/docs/remote.md +0 -0
  62. {arrayview-0.6.0 → arrayview-0.7.0}/docs/stylesheets/extra.css +0 -0
  63. {arrayview-0.6.0 → arrayview-0.7.0}/docs/superpowers/plans/2026-03-27-colorbar-class-refactor.md +0 -0
  64. {arrayview-0.6.0 → arrayview-0.7.0}/docs/viewing.md +0 -0
  65. {arrayview-0.6.0 → arrayview-0.7.0}/scripts/demo.py +0 -0
  66. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_platform.py +0 -0
  67. {arrayview-0.6.0 → arrayview-0.7.0}/src/arrayview/_shell.html +0 -0
  68. {arrayview-0.6.0 → arrayview-0.7.0}/tests/conftest.py +0 -0
  69. {arrayview-0.6.0 → arrayview-0.7.0}/tests/make_vectorfield_test_arrays.py +0 -0
  70. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_browser.py +0 -0
  71. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_cli.py +0 -0
  72. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_interactions.py +0 -0
  73. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_large_arrays.py +0 -0
  74. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_mode_matrix.py +0 -0
  75. {arrayview-0.6.0 → arrayview-0.7.0}/tests/test_rgb_pixel_art.py +0 -0
  76. {arrayview-0.6.0 → arrayview-0.7.0}/uv.lock +0 -0
  77. {arrayview-0.6.0 → arrayview-0.7.0}/vscode-extension/LICENSE +0 -0
@@ -0,0 +1,20 @@
1
+ name: Deploy docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths: [docs/**, mkdocs.yml]
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ jobs:
12
+ deploy:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: actions/setup-python@v5
17
+ with:
18
+ python-version: "3.x"
19
+ - run: pip install mkdocs-material
20
+ - run: mkdocs gh-deploy --force
@@ -11,6 +11,7 @@ wheels/
11
11
 
12
12
  *.npy
13
13
  .claude/
14
+ .worktrees/
14
15
  !.claude/skills/
15
16
  !.claude/skills/**
16
17
  CLAUDE.md
@@ -24,6 +25,7 @@ tests/smoke_output/
24
25
  dev/
25
26
  *.png
26
27
  !src/arrayview/_icon.png
28
+ !docs/logo.png
27
29
 
28
30
  benchmarks/data
29
31
  .superpowers/brainstorm
@@ -44,6 +44,7 @@ CLI / Python API
44
44
  | `_vscode.py` | Extension management, signal-file IPC, browser opening |
45
45
  | `_platform.py` | Platform/environment detection |
46
46
  | `_io.py` | Array I/O, format detection |
47
+ | `_torch.py` | PyTorch DL integration: `view_batch()`, `TrainingMonitor` |
47
48
  | `_app.py` | **Compat shim only** — re-exports; add no logic here |
48
49
 
49
50
  ### Frontend
@@ -74,6 +75,10 @@ Load the relevant skill before touching the corresponding area.
74
75
  | `docs-style` | Updating README, in-app help overlay, or docstrings |
75
76
  | `task-workflow` | Feature or fix tasks |
76
77
 
78
+ ## Execution Preferences
79
+
80
+ When implementing plans, always use **subagent-driven development** (`superpowers:subagent-driven-development`) — not inline execution.
81
+
77
82
  ## Non-Negotiables
78
83
 
79
84
  - Always use `localhost` (not `127.0.0.1`) — required for VS Code port forwarding
@@ -95,8 +100,6 @@ uv run pytest tests/ # all
95
100
  uv run python tests/visual_smoke.py # screenshots → tests/smoke_output/
96
101
  ```
97
102
 
98
- Visual baselines: `tests/snapshots/` — delete a file to reset.
99
-
100
103
  | What changed | Run |
101
104
  |---|---|
102
105
  | Server / API | `test_api.py` |
@@ -104,6 +107,8 @@ Visual baselines: `tests/snapshots/` — delete a file to reset.
104
107
  | Viewer UI | `test_browser.py` + `visual_smoke.py` |
105
108
  | VS Code / platform | manual: VS Code local terminal, VS Code tunnel |
106
109
 
110
+ **Visual consistency:** After any UI change, use the `/ui-consistency-audit` skill to verify the feature works consistently across all viewing modes (normal, multi-view, compare, immersive, inline). This replaces reference screenshot comparisons — the UI changes frequently, so consistency across modes matters more than pixel-matching baselines.
111
+
107
112
  ## VS Code Integration
108
113
 
109
114
  All key functions live in `_vscode.py`:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arrayview
3
- Version: 0.6.0
3
+ Version: 0.7.0
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
@@ -57,12 +57,64 @@ from arrayview import view
57
57
  view(arr)
58
58
  ```
59
59
 
60
+ ## MATLAB
61
+
62
+ Add the `matlab/` directory to your MATLAB path, then:
63
+
64
+ ```matlab
65
+ addpath('/path/to/arrayview/matlab')
66
+
67
+ A = rand(100, 200, 10);
68
+ arrayview(A)
69
+ ```
70
+
71
+ Requires arrayview installed in [MATLAB's Python environment](https://www.mathworks.com/help/matlab/matlab_external/install-supported-python-implementation.html):
72
+
73
+ ```bash
74
+ pip install arrayview
75
+ ```
76
+
77
+ Arrays are passed zero-copy via the buffer protocol (in-process Python). `arrayview()` enables this automatically — just call it before any other `py.*` call in your MATLAB session.
78
+
79
+ ## PyTorch / Deep Learning
80
+
81
+ ```python
82
+ from arrayview import view_batch, TrainingMonitor
83
+
84
+ # Browse a DataLoader batch
85
+ view_batch(train_loader)
86
+ view_batch(train_loader, overlay='label')
87
+
88
+ # Live training monitor — updates every N epochs
89
+ monitor = TrainingMonitor(every=5, samples=3)
90
+ for epoch in range(100):
91
+ for batch in val_loader:
92
+ pred = model(batch['image'])
93
+ monitor.step(input=batch['image'], target=batch['label'],
94
+ prediction=pred, epoch=epoch)
95
+ ```
96
+
97
+ `view_batch()` accepts DataLoaders, Datasets, dicts, tuples, or raw tensors. `TrainingMonitor` opens a compare window and calls `handle.update()` automatically. PyTorch is not required at import time.
98
+
99
+
60
100
  ## Formats
61
101
 
62
102
  `.npy` `.npz` `.nii` `.nii.gz` `.zarr` `.pt` `.h5` `.tif` `.mat`
63
103
 
64
104
  ## Once open
65
105
 
66
- `c` colormaps · `d` histogram · `v` 3-plane · `z` mosaic · `?` help
106
+ `c` colormaps · `d` dynamic range · `v` 3-plane · `z` mosaic · `Shift+O` overlay toggle · `?` help · colorbar dblclick histogram
107
+
108
+ ## Config
109
+
110
+ `~/.arrayview/config.toml`:
111
+
112
+ ```toml
113
+ [viewer]
114
+ colormaps = ["gray", "viridis", "plasma"] # colormaps cycled by 'c'
115
+
116
+ [window]
117
+ default = "browser" # browser | native | vscode | inline
118
+ ```
67
119
 
68
120
  [Full documentation →](https://oscarvanderheide.github.io/arrayview/)
@@ -0,0 +1,85 @@
1
+ # arrayview
2
+
3
+ A viewer for multi-dimensional arrays.
4
+
5
+ - CLI and Python
6
+ - Jupyter / VS Code
7
+ - Browser / native
8
+ - SSH / tunnels
9
+
10
+ ## CLI
11
+
12
+ ```bash
13
+ uvx arrayview scan.nii.gz
14
+ uvx arrayview --window browser scan.npy
15
+ uvx arrayview # demo
16
+ ```
17
+
18
+ ## Python
19
+
20
+ ```python
21
+ from arrayview import view
22
+ view(arr)
23
+ ```
24
+
25
+ ## MATLAB
26
+
27
+ Add the `matlab/` directory to your MATLAB path, then:
28
+
29
+ ```matlab
30
+ addpath('/path/to/arrayview/matlab')
31
+
32
+ A = rand(100, 200, 10);
33
+ arrayview(A)
34
+ ```
35
+
36
+ Requires arrayview installed in [MATLAB's Python environment](https://www.mathworks.com/help/matlab/matlab_external/install-supported-python-implementation.html):
37
+
38
+ ```bash
39
+ pip install arrayview
40
+ ```
41
+
42
+ Arrays are passed zero-copy via the buffer protocol (in-process Python). `arrayview()` enables this automatically — just call it before any other `py.*` call in your MATLAB session.
43
+
44
+ ## PyTorch / Deep Learning
45
+
46
+ ```python
47
+ from arrayview import view_batch, TrainingMonitor
48
+
49
+ # Browse a DataLoader batch
50
+ view_batch(train_loader)
51
+ view_batch(train_loader, overlay='label')
52
+
53
+ # Live training monitor — updates every N epochs
54
+ monitor = TrainingMonitor(every=5, samples=3)
55
+ for epoch in range(100):
56
+ for batch in val_loader:
57
+ pred = model(batch['image'])
58
+ monitor.step(input=batch['image'], target=batch['label'],
59
+ prediction=pred, epoch=epoch)
60
+ ```
61
+
62
+ `view_batch()` accepts DataLoaders, Datasets, dicts, tuples, or raw tensors. `TrainingMonitor` opens a compare window and calls `handle.update()` automatically. PyTorch is not required at import time.
63
+
64
+
65
+ ## Formats
66
+
67
+ `.npy` `.npz` `.nii` `.nii.gz` `.zarr` `.pt` `.h5` `.tif` `.mat`
68
+
69
+ ## Once open
70
+
71
+ `c` colormaps · `d` dynamic range · `v` 3-plane · `z` mosaic · `Shift+O` overlay toggle · `?` help · colorbar dblclick histogram
72
+
73
+ ## Config
74
+
75
+ `~/.arrayview/config.toml`:
76
+
77
+ ```toml
78
+ [viewer]
79
+ colormaps = ["gray", "viridis", "plasma"] # colormaps cycled by 'c'
80
+
81
+ [window]
82
+ default = "browser" # browser | native | vscode | inline
83
+ ```
84
+
85
+ [Full documentation →](https://oscarvanderheide.github.io/arrayview/)