xref: /aosp_15_r20/external/executorch/examples/apple/coreml/scripts/inspector_cli.py (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1# Copyright © 2024 Apple Inc. All rights reserved.
2#
3# Please refer to the license found in the LICENSE file in the root directory of the source tree.
4
5import argparse
6
7import sys
8
9from pathlib import Path
10
11from executorch.devtools import Inspector
12from executorch.devtools.inspector import compare_results
13
14
15def get_root_dir_path() -> Path:
16    return Path().resolve().parent.parent.parent.parent
17
18
19sys.path.append(str((get_root_dir_path() / "examples").resolve()))
20
21from inspector_utils import convert_coreml_delegate_time, parse_coreml_delegate_metadata
22
23
24def main() -> None:
25    parser = argparse.ArgumentParser()
26    parser.add_argument(
27        "--etdump_path",
28        required=True,
29        help="Provide an ETDump file path.",
30    )
31    parser.add_argument(
32        "--etrecord_path",
33        required=False,
34        help="Provide an optional ETRecord file path.",
35    )
36    parser.add_argument(
37        "--debug_buffer_path",
38        required=False,
39        help="Provide an optional debug buffer file path.",
40    )
41    parser.add_argument("--compare_results", action="store_true")
42
43    args = parser.parse_args()
44
45    inspector = Inspector(
46        etdump_path=args.etdump_path,
47        etrecord=args.etrecord_path,
48        debug_buffer_path=args.debug_buffer_path,
49        delegate_metadata_parser=parse_coreml_delegate_metadata,
50        delegate_time_scale_converter=convert_coreml_delegate_time,
51    )
52    inspector.print_data_tabular(include_delegate_debug_data=True)
53    if args.compare_results:
54        for event_block in inspector.event_blocks:
55            if event_block.name == "Execute":
56                compare_results(
57                    reference_output=event_block.reference_output,
58                    run_output=event_block.run_output,
59                    plot=True,
60                )
61
62
63if __name__ == "__main__":
64    main()  # pragma: no cover
65