Skip to content

Commit 5dde671

Browse files
authored
Improves graph rendering for timeseries (#162)
* update version * Improves graph on timeseries * mypy * group
1 parent 752b783 commit 5dde671

File tree

4 files changed

+377
-74
lines changed

4 files changed

+377
-74
lines changed

_unittests/ut_helpers/test_log_helper.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@
99
from onnx_diagnostic.helpers.log_helper import (
1010
CubeLogs,
1111
CubeLogsPerformance,
12+
CubePlot,
1213
CubeViewDef,
1314
enumerate_csv_files,
1415
open_dataframe,
16+
filter_data,
1517
)
1618

1719

@@ -303,6 +305,103 @@ def test_historical(self):
303305
self.assertEqual((2, 3), view.shape)
304306
self.assertEqual(["METRICS", "exporter", "date"], view.columns.names)
305307

308+
def test_group_columns(self):
309+
val = [
310+
"eager/export-nostrict/none",
311+
"eager/inductor/none",
312+
"eager/modelbuilder/none",
313+
"eager/olive-exporter/ir",
314+
"eager/olive-exporter/none",
315+
"eager/torch_script/default",
316+
"eager/torch_script/none",
317+
"sdpa/export-nostrict/none",
318+
"sdpa/olive-exporter/ir",
319+
"sdpa/olive-exporter/none",
320+
]
321+
spl = CubePlot.group_columns(val, depth=1)
322+
expected = [
323+
[
324+
"eager/export-nostrict/none",
325+
"eager/inductor/none",
326+
"eager/modelbuilder/none",
327+
"eager/olive-exporter/ir",
328+
"eager/olive-exporter/none",
329+
"eager/torch_script/default",
330+
"eager/torch_script/none",
331+
],
332+
[
333+
"sdpa/export-nostrict/none",
334+
"sdpa/olive-exporter/ir",
335+
"sdpa/olive-exporter/none",
336+
],
337+
]
338+
self.assertEqual(expected, spl)
339+
340+
val = [
341+
"eager/custom/default",
342+
"eager/custom/default+onnxruntime",
343+
"eager/custom/none",
344+
"eager/export-nostrict/none",
345+
"eager/inductor/none",
346+
"eager/modelbuilder/none",
347+
"eager/olive-exporter/ir",
348+
"eager/olive-exporter/none",
349+
"eager/onnx_dynamo-fallback/ir",
350+
"eager/onnx_dynamo-fallback/none",
351+
"eager/onnx_dynamo-fallback/os_ort",
352+
"eager/onnx_dynamo/ir",
353+
"eager/onnx_dynamo/none",
354+
"eager/onnx_dynamo/os_ort",
355+
"eager/torch_script/default",
356+
"eager/torch_script/none",
357+
"sdpa/custom/default",
358+
"sdpa/custom/default+onnxruntime",
359+
"sdpa/custom/none",
360+
"sdpa/export-nostrict/none",
361+
"sdpa/olive-exporter/ir",
362+
"sdpa/olive-exporter/none",
363+
"sdpa/onnx_dynamo/ir",
364+
"sdpa/onnx_dynamo/none",
365+
"sdpa/onnx_dynamo/os_ort",
366+
]
367+
spl = CubePlot.group_columns(val)
368+
expected = [
369+
[
370+
"eager/export-nostrict/none",
371+
"eager/inductor/none",
372+
"eager/modelbuilder/none",
373+
"eager/olive-exporter/ir",
374+
"eager/olive-exporter/none",
375+
"eager/torch_script/default",
376+
"eager/torch_script/none",
377+
],
378+
[
379+
"sdpa/export-nostrict/none",
380+
"sdpa/olive-exporter/ir",
381+
"sdpa/olive-exporter/none",
382+
],
383+
["eager/custom/default", "eager/custom/default+onnxruntime", "eager/custom/none"],
384+
["eager/onnx_dynamo/ir", "eager/onnx_dynamo/none", "eager/onnx_dynamo/os_ort"],
385+
[
386+
"eager/onnx_dynamo-fallback/ir",
387+
"eager/onnx_dynamo-fallback/none",
388+
"eager/onnx_dynamo-fallback/os_ort",
389+
],
390+
["sdpa/custom/default", "sdpa/custom/default+onnxruntime", "sdpa/custom/none"],
391+
["sdpa/onnx_dynamo/ir", "sdpa/onnx_dynamo/none", "sdpa/onnx_dynamo/os_ort"],
392+
]
393+
self.assertEqual(expected, spl)
394+
395+
@hide_stdout()
396+
def test_filter_data(self):
397+
df = self.df1()
398+
df2 = filter_data(df, "", "", verbose=1)
399+
self.assertEqualDataFrame(df, df2)
400+
df2 = filter_data(df, "model_exporter:onnx-dynamo;T", "", verbose=1)
401+
self.assertEqualDataFrame(df[df.model_exporter == "onnx-dynamo"], df2)
402+
df2 = filter_data(df, "", "model_exporter:onnx-dynamo;T", verbose=1)
403+
self.assertEqualDataFrame(df[df.model_exporter != "onnx-dynamo"], df2)
404+
306405

307406
if __name__ == "__main__":
308407
unittest.main(verbosity=2)

onnx_diagnostic/_command_lines_parser.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -733,11 +733,28 @@ def get_parser_agg() -> ArgumentParser:
733733
help="Views to dump as csv files.",
734734
)
735735
parser.add_argument("-v", "--verbose", type=int, default=0, help="verbosity")
736+
parser.add_argument(
737+
"--filter_in",
738+
default="",
739+
help="adds a filter to filter in data, syntax is\n"
740+
'``"<column1>:<value1>;<value2>/<column2>:<value3>"`` ...',
741+
)
742+
parser.add_argument(
743+
"--filter_out",
744+
default="",
745+
help="adds a filter to filter out data, syntax is\n"
746+
'``"<column1>:<value1>;<value2>/<column2>:<value3>"`` ...',
747+
)
736748
return parser
737749

738750

739751
def _cmd_agg(argv: List[Any]):
740-
from .helpers.log_helper import CubeLogsPerformance, open_dataframe, enumerate_csv_files
752+
from .helpers.log_helper import (
753+
CubeLogsPerformance,
754+
open_dataframe,
755+
enumerate_csv_files,
756+
filter_data,
757+
)
741758

742759
parser = get_parser_agg()
743760
args = parser.parse_args(argv[1:])
@@ -761,7 +778,7 @@ def _cmd_agg(argv: List[Any]):
761778
assert (
762779
args.time in df.columns
763780
), f"Missing time column {args.time!r} in {c!r}\n{df.head()}\n{sorted(df.columns)}"
764-
dfs.append(df)
781+
dfs.append(filter_data(df, filter_in=args.filter_in, filter_out=args.filter_out))
765782

766783
drop_keys = set(args.drop_keys.split(","))
767784
cube = CubeLogsPerformance(

onnx_diagnostic/ext_test_case.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,15 @@ def assertEqualArray(
917917
]
918918
raise AssertionError("\n".join(rows)) # noqa: B904
919919

920+
def assertEqualDataFrame(self, d1, d2, **kwargs):
921+
"""
922+
Checks that two dataframes are equal.
923+
Calls :func:`pandas.testing.assert_frame_equal`.
924+
"""
925+
from pandas.testing import assert_frame_equal
926+
927+
assert_frame_equal(d1, d2, **kwargs)
928+
920929
def assertEqualTrue(self, value: Any, msg: str = ""):
921930
if value is True:
922931
return

0 commit comments

Comments
 (0)