arrayview 0.10.0__tar.gz → 0.11.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.
- {arrayview-0.10.0 → arrayview-0.11.0}/PKG-INFO +3 -2
- {arrayview-0.10.0 → arrayview-0.11.0}/README.md +2 -1
- {arrayview-0.10.0 → arrayview-0.11.0}/pyproject.toml +1 -1
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_config.py +15 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_io.py +7 -1
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_render.py +10 -2
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_server.py +142 -149
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_session.py +9 -1
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_stdio_server.py +1 -4
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_viewer.html +167 -85
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_browser.py +32 -49
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_interactions.py +34 -27
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_mode_matrix.py +31 -33
- arrayview-0.11.0/tests/test_mode_roundtrip.py +347 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/visual_smoke.py +1 -1
- {arrayview-0.10.0 → arrayview-0.11.0}/uv.lock +1 -1
- {arrayview-0.10.0 → arrayview-0.11.0}/.claude/skills/invocation-consistency/SKILL.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.claude/skills/modes-consistency/SKILL.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.claude/skills/ui-consistency-audit/SKILL.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.claude/skills/viewer-ui-checklist/SKILL.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.claude/skills/visual-bug-fixing/SKILL.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.github/workflows/docs.yml +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.github/workflows/python-publish.yml +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.gitignore +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.python-version +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.tmp-vsix/extension/extension.js +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/.tmp-vsix/extension/package.json +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/AGENTS.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/LICENSE +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/comparing.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/configuration.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/display.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/index.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/loading.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/logo.png +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/measurement.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/remote.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/stylesheets/extra.css +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/docs/viewing.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/matlab/arrayview.m +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/mkdocs.yml +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/plans/webview/LOG.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/scripts/demo.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/scripts/release.sh +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/ARCHITECTURE.md +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/__init__.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/__main__.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_app.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_icon.png +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_launcher.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_platform.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_segmentation.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_shell.html +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_torch.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/_vscode.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/src/arrayview/arrayview-opener.vsix +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/conftest.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/make_vectorfield_test_arrays.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_api.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_cli.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_config.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_large_arrays.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_mode_consistency.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_rgb_pixel_art.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/test_torch.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/tests/ui_audit.py +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/vscode-extension/LICENSE +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/vscode-extension/extension.js +0 -0
- {arrayview-0.10.0 → arrayview-0.11.0}/vscode-extension/package.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arrayview
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.11.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
|
|
@@ -35,6 +35,8 @@ Description-Content-Type: text/markdown
|
|
|
35
35
|
|
|
36
36
|
# arrayview
|
|
37
37
|
|
|
38
|
+
[](https://oscarvanderheide.github.io/arrayview/)
|
|
39
|
+
|
|
38
40
|
A viewer for multi-dimensional arrays.
|
|
39
41
|
|
|
40
42
|
- CLI and Python
|
|
@@ -133,4 +135,3 @@ colormaps = ["gray", "viridis", "plasma"] # colormaps cycled by 'c'
|
|
|
133
135
|
default = "browser" # browser | native | vscode | inline
|
|
134
136
|
```
|
|
135
137
|
|
|
136
|
-
[Full documentation →](https://oscarvanderheide.github.io/arrayview/)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# arrayview
|
|
2
2
|
|
|
3
|
+
[](https://oscarvanderheide.github.io/arrayview/)
|
|
4
|
+
|
|
3
5
|
A viewer for multi-dimensional arrays.
|
|
4
6
|
|
|
5
7
|
- CLI and Python
|
|
@@ -98,4 +100,3 @@ colormaps = ["gray", "viridis", "plasma"] # colormaps cycled by 'c'
|
|
|
98
100
|
default = "browser" # browser | native | vscode | inline
|
|
99
101
|
```
|
|
100
102
|
|
|
101
|
-
[Full documentation →](https://oscarvanderheide.github.io/arrayview/)
|
|
@@ -41,6 +41,21 @@ def get_viewer_colormaps() -> list[str] | None:
|
|
|
41
41
|
return None
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
_VALID_THEMES = {"dark", "light", "solarized", "nord"}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def get_viewer_theme() -> str | None:
|
|
48
|
+
"""Return user-configured default theme name, or None if not configured."""
|
|
49
|
+
cfg = load_config()
|
|
50
|
+
viewer_cfg = cfg.get("viewer", {})
|
|
51
|
+
if not isinstance(viewer_cfg, dict):
|
|
52
|
+
return None
|
|
53
|
+
theme = viewer_cfg.get("theme")
|
|
54
|
+
if isinstance(theme, str) and theme.strip().lower() in _VALID_THEMES:
|
|
55
|
+
return theme.strip().lower()
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
|
|
44
59
|
def get_nninteractive_url() -> str | None:
|
|
45
60
|
"""Return configured nnInteractive server URL, or None.
|
|
46
61
|
|
|
@@ -133,7 +133,13 @@ def load_data(filepath):
|
|
|
133
133
|
if len(keys) == 1:
|
|
134
134
|
return npz[keys[0]]
|
|
135
135
|
return _select_npz_array(npz, filepath)
|
|
136
|
-
elif filepath.endswith(".nii
|
|
136
|
+
elif filepath.endswith(".nii.gz"):
|
|
137
|
+
# Gzip streams aren't seekable, so nibabel's lazy dataobj decompresses
|
|
138
|
+
# large portions of the file on every arbitrary slice access. Materialize
|
|
139
|
+
# the volume up front so subsequent slicing is cheap.
|
|
140
|
+
return np.asarray(_nib().load(filepath).dataobj)
|
|
141
|
+
elif filepath.endswith(".nii"):
|
|
142
|
+
# Uncompressed NIfTI is memory-mapped via dataobj — slicing is cheap.
|
|
137
143
|
return _nib().load(filepath).dataobj
|
|
138
144
|
elif filepath.endswith(".zarr") or filepath.endswith(".zarr.zip"):
|
|
139
145
|
import zarr
|
|
@@ -111,7 +111,10 @@ def _compute_vmin_vmax(session, data, dr=0, complex_mode=0):
|
|
|
111
111
|
|
|
112
112
|
|
|
113
113
|
def extract_slice(session, dim_x, dim_y, idx_list):
|
|
114
|
-
|
|
114
|
+
# Mask out indices along the displayed dims — they're slice(None) in the
|
|
115
|
+
# slicer below, so the extracted data doesn't depend on them.
|
|
116
|
+
key_idx = tuple(None if i in (dim_x, dim_y) else idx_list[i] for i in range(len(idx_list)))
|
|
117
|
+
key = (dim_x, dim_y, key_idx)
|
|
115
118
|
if key in session.raw_cache:
|
|
116
119
|
session.raw_cache.move_to_end(key)
|
|
117
120
|
return session.raw_cache[key]
|
|
@@ -154,7 +157,12 @@ def extract_projection(session, dim_x, dim_y, idx_list, proj_dim, proj_mode):
|
|
|
154
157
|
|
|
155
158
|
proj_mode: 1=max, 2=min, 3=mean, 4=std, 5=sos (sum of squares)
|
|
156
159
|
"""
|
|
157
|
-
|
|
160
|
+
# Mask out indices along the displayed/projected dims — they're slice(None).
|
|
161
|
+
key_idx = tuple(
|
|
162
|
+
None if i in (dim_x, dim_y, proj_dim) else idx_list[i]
|
|
163
|
+
for i in range(len(idx_list))
|
|
164
|
+
)
|
|
165
|
+
key = ("proj", dim_x, dim_y, key_idx, proj_dim, proj_mode)
|
|
158
166
|
if key in session.raw_cache:
|
|
159
167
|
session.raw_cache.move_to_end(key)
|
|
160
168
|
return session.raw_cache[key]
|