Skip to content

Commit 82faed2

Browse files
committed
Getting ready for release 4.5.0
1 parent 5390017 commit 82faed2

4 files changed

Lines changed: 80 additions & 35 deletions

File tree

ANNOUNCE.rst

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,44 @@
1-
Announcing Python-Blosc2 4.4.5
1+
Announcing Python-Blosc2 4.5.0
22
==============================
33

4-
We are happy to announce this release, which promotes the ``b2view``
5-
terminal data viewer to a core feature — installed by default and with new
6-
interactive row and column filtering — and makes BatchArray block layouts
7-
(and hence compression ratios) reproducible across CPUs.
4+
We are happy to announce this release, which teaches the ``b2view``
5+
terminal data viewer to **plot**, gives ``CTable`` a **pandas-like display
6+
and CSV** experience, and publishes **WASM/Pyodide wheels to PyPI**.
87

98
The main highlights are:
109

11-
- **b2view installed by default**: the terminal browser for Blosc2 stores
12-
(``.b2d`` directories and ``.b2z`` files) now ships with the package —
13-
no extras needed. It shows the tree of a store and pages through
14-
NDArrays of any dimensionality and CTables far larger than the screen.
10+
- **Plotting in b2view**: press ``p`` on a numeric series (a CTable column
11+
or an array row) to draw an in-terminal line plot. Plots are
12+
peak-preserving min/max envelopes by default, so no spike or trough is
13+
hidden however large the series is — large local series stream their
14+
envelope *exactly*. Zoom into a row range, press ``v`` to lock the data
15+
grid to it, or ``h`` to open a high-resolution ``matplotlib`` view (new
16+
optional ``hires`` extra).
1517

16-
- **Interactive filtering**: press ``f`` on a CTable to type the same
17-
string expressions ``CTable.where()`` accepts (dotted nested names,
18-
``and``/``or``) and page through just the matching rows, and ``/`` to
19-
narrow the visible columns by substring. Both filters combine, are
20-
remembered per node, and escape clears them one layer at a time.
18+
- **pandas-like CTable display**: ``to_string()`` now renders the whole
19+
table by default (with ``max_rows``/``max_width`` to truncate), ``repr``
20+
shows the same truncated table as ``str``, and a new
21+
``blosc2.printoptions(...)`` context manager plus ``display_width`` /
22+
``display_rows`` options control the view. ``to_csv()`` called without a
23+
path now returns the CSV as a string.
2124

22-
- **Friendlier mouse and navigation**: the terminal keeps the mouse by
23-
default, so selecting and copying text works as usual (``--mouse`` opts
24-
into capture with click-to-focus and wheel scrolling); ``?`` opens a key
25-
reference, ``c`` jumps to a column by name or index, and float columns
26-
align their decimal points.
25+
- **WASM/Pyodide wheels on PyPI**: ``blosc2`` now ships ``pyemscripten``
26+
wheels for CPython 3.13 and 3.14, so it is ``micropip``-installable in
27+
Pyodide straight from PyPI.
2728

28-
- **Reproducible BatchArray layouts**: automatic variable-length block
29-
sizing now uses fixed byte budgets per compression level instead of the
30-
CPU cache sizes, so the layout — and the compression ratio — no longer
31-
depends on the machine that created the array.
29+
- **Faster strided reads**: ``NDArray`` and ``Column`` getitem gain fast
30+
paths for large strides and identity gathers, and compact CTable queries
31+
prune more blocks via cross-column index pruning.
3232

33-
A quick taste of ``b2view``::
33+
A quick taste of the new plotting — open a store and press ``p`` on a
34+
numeric column::
3435

3536
$ pip install blosc2 --upgrade
3637
$ b2view chicago-taxi.b2z
3738

38-
Then press ``f`` on the table node and type a filter, e.g.::
39-
40-
payment.tips > 100 and trip.km > 0 and trip.sec > 0
41-
42-
and page through the 67 matching trips of the 24-million-row table —
43-
instantly, and without decompressing anything you do not look at.
39+
Zoom into a range, press ``v`` to pin the grid to it, then ``h`` for a
40+
high-resolution view — all without decompressing anything you do not look
41+
at.
4442

4543
Install it with::
4644

RELEASE_NOTES.md

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,30 @@
11
# Release notes
22

3-
## Changes from 4.4.5 to 4.4.6
4-
5-
XXX version-specific blurb XXX
3+
## Changes from 4.4.5 to 4.5.0
4+
5+
This release teaches the `b2view` terminal viewer to **plot** — peak-preserving
6+
envelope line plots of any series, with zoom, a row-window lock, and an optional
7+
high-resolution matplotlib view — and gives `CTable` a **pandas-like display and
8+
CSV** experience. It also publishes **WASM/Pyodide wheels to PyPI** and adds
9+
faster strided reads for `NDArray` and `Column`.
10+
11+
### b2view: plotting and data inspection
12+
13+
- **In-terminal plots**: press `p` on a numeric series (a CTable column or an
14+
array row) to draw a braille line plot. Plots are **peak-preserving min/max
15+
envelopes by default**, so no spike or trough is hidden however large the
16+
series is; large local series stream their envelope *exactly* in bounded
17+
spans (only remote c2arrays fall back to a labeled strided sample).
18+
- **Zoom and row-window lock**: zoom the plot into a row range and pan it; press
19+
`v` to **lock the data grid to the plotted range** so paging stays inside it
20+
(escape unlocks). The plot and high-res views honor the locked window.
21+
- **High-resolution view**: `h` opens a high-res `matplotlib` image of the
22+
plotted range (new optional `hires` extra: `matplotlib` + `textual-image`).
23+
- **On-demand cell decode**: `enter` decodes a single skipped/expensive CTable
24+
cell, and SChunk nodes now preview as a paged hex dump.
25+
- **Fixes and polish**: row paging re-aligns to the page grid after dim-mode
26+
single-row scrolls; the data panel now focuses correctly with
27+
`--path ... --panel data`; status chips are branded yellow.
628

729
### CTable display
830

@@ -32,6 +54,31 @@ XXX version-specific blurb XXX
3254
`pandas`' `DataFrame.to_csv()`. Passing a path still writes the file (and
3355
returns `None`); the returned string is byte-for-byte the same as the file.
3456

57+
### Performance
58+
59+
- **Faster strided reads**: `NDArray.__getitem__` gains a sparse-gather fast
60+
path for large strides, and `Column.__getitem__` short-circuits when the
61+
logical positions equal the physical ones.
62+
- **Fix**: a negative `step` in `Column` getitem could return `[]`; it now
63+
returns the reversed selection.
64+
65+
### Indexing
66+
67+
- **Fix**: a sidecar-handle cache collision could return the wrong SUMMARY
68+
index for a compact-store column.
69+
- **Cross-column index pruning** is now enabled for compact CTable queries, so
70+
more predicates prune blocks before any data is materialized. The docs also
71+
note when summary indexes are *not* created automatically.
72+
73+
### Packaging
74+
75+
- **WASM/Pyodide wheels on PyPI**: the main wheel build now also produces
76+
`pyemscripten` wheels for CPython 3.13 (2025 ABI) and 3.14 (2026 ABI) and
77+
uploads them to PyPI, so `blosc2` is `micropip`-installable in Pyodide. The
78+
cp313 build is pinned to Pyodide 0.29.3 (0.29.4 regresses `SChunk` slicing),
79+
and `b2view` prints a clear message instead of crashing when run under WASM.
80+
- **cibuildwheel updated to 4.1.**
81+
3582
## Changes from 4.4.3 to 4.4.5
3683

3784
Note: 4.4.4 was skipped due to a failure during the release process.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ dependencies = [
4343
"textual-plotext",
4444
"threadpoolctl; platform_machine != 'wasm32'",
4545
]
46-
version = "4.4.6.dev0"
46+
version = "4.5.0"
4747
[project.entry-points."array_api"]
4848
blosc2 = "blosc2"
4949

src/blosc2/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = "4.4.6.dev0"
1+
__version__ = "4.5.0"
22
__array_api_version__ = "2024.12"

0 commit comments

Comments
 (0)