Skip to content

Commit 6e5c9bf

Browse files
authored
Add access pattern info to MDIO command (#371)
Enhance the MDIO info command to include access patterns of datasets. The output now displays pattern names, chunks, formats, and compressors for a more comprehensive overview.
1 parent c4d7891 commit 6e5c9bf

File tree

1 file changed

+36
-4
lines changed

1 file changed

+36
-4
lines changed

src/mdio/commands/info.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"""MDIO Dataset information command."""
22

3-
43
from __future__ import annotations
54

65
from typing import TYPE_CHECKING
@@ -14,6 +13,7 @@
1413

1514

1615
if TYPE_CHECKING:
16+
from mdio import MDIOReader
1717
from mdio.core import Grid
1818

1919

@@ -59,11 +59,13 @@ def info(
5959

6060
grid_dict = parse_grid(reader.grid)
6161
stats_dict = cast_stats(reader.stats)
62+
access_pattern_dict = parse_access_patterns(reader)
6263

6364
mdio_info = {
6465
"path": mdio_path,
6566
"stats": stats_dict,
6667
"grid": grid_dict,
68+
"access_patterns": access_pattern_dict,
6769
}
6870

6971
if output_format == "pretty":
@@ -90,6 +92,23 @@ def parse_grid(grid: Grid) -> dict[str, dict[str, int | str]]:
9092
return grid_dict
9193

9294

95+
def parse_access_patterns(reader: MDIOReader) -> dict[str, Any]:
96+
"""Extract access patterns and their info."""
97+
access_pattern_dict = {}
98+
for name, array in reader._data_group.items():
99+
pattern = name.replace("chunked_", "")
100+
chunks = str(array.chunks)
101+
format_ = str(array.dtype)
102+
compressor = str(array.compressor)
103+
access_pattern_dict[pattern] = {
104+
"chunks": chunks,
105+
"format": format_,
106+
"compressor": compressor,
107+
}
108+
109+
return access_pattern_dict
110+
111+
93112
def json_print(mdio_info: dict[str, Any]) -> None:
94113
"""Convert MDIO Info to JSON and pretty print."""
95114
from json import dumps as json_dumps
@@ -123,10 +142,23 @@ def pretty_print(mdio_info: dict[str, Any]) -> None:
123142
for stat, value in mdio_info["stats"].items():
124143
stat_table.add_row(stat, f"{value:.4f}")
125144

145+
access_patter_table = Table(show_edge=False)
146+
access_patter_table.add_column(
147+
"Pattern", justify="right", style="cyan", no_wrap=True
148+
)
149+
access_patter_table.add_column("Chunks", justify="left", style="magenta")
150+
access_patter_table.add_column("Format", justify="left", style="magenta")
151+
access_patter_table.add_column("Compressor", justify="left", style="magenta")
152+
153+
for name, pattern_info in mdio_info["access_patterns"].items():
154+
chunks, format_, compressor = pattern_info.values()
155+
access_patter_table.add_row(name, chunks, format_, compressor)
156+
126157
master_table = Table(title=f"File Information for {mdio_info['path']}")
127-
master_table.add_column("MDIO Grid", justify="center")
128-
master_table.add_column("MDIO Statistics", justify="center")
129-
master_table.add_row(grid_table, stat_table)
158+
master_table.add_column("Grid", justify="center")
159+
master_table.add_column("Statistics", justify="center")
160+
master_table.add_column("Access Patterns", justify="center")
161+
master_table.add_row(grid_table, stat_table, access_patter_table)
130162

131163
console.print(master_table)
132164

0 commit comments

Comments
 (0)