11"""MDIO Dataset information command."""
22
3-
43from __future__ import annotations
54
65from typing import TYPE_CHECKING
1413
1514
1615if 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+
93112def 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