From fce5c49c8a42f32f24625d1376a5e575551d3fe2 Mon Sep 17 00:00:00 2001 From: jorgep31415 Date: Fri, 22 Nov 2024 11:23:53 -0800 Subject: [PATCH 1/5] [ET] Add `csv_path` to `inspector_cli` Per https://fb.workplace.com/groups/pytorch.edge.users/posts/1640064163530537/?comment_id=1640127190190901 Differential Revision: [D66379005](https://our.internmc.facebook.com/intern/diff/D66379005/) [ghstack-poisoned] --- devtools/inspector/_inspector.py | 27 +++++++++++++++++++++++++++ devtools/inspector/inspector_cli.py | 7 +++++++ 2 files changed, 34 insertions(+) diff --git a/devtools/inspector/_inspector.py b/devtools/inspector/_inspector.py index d951a1ada90..f480b6ce6f5 100644 --- a/devtools/inspector/_inspector.py +++ b/devtools/inspector/_inspector.py @@ -1173,6 +1173,33 @@ def print_data_tabular( display_or_print_df(filtered_column_df, file) + + def save_data_to_csv( + self, + file: IO[str], + ) -> None: + """ + Stores the underlying EventBlocks in a csv format with tab separator, to facilitate copy-paste into spreadsheets. + + Args: + file: Which IO stream to print to. Do not use stdout, as tab separator is not preserved. + + Returns: + None + """ + combined_df = self.to_dataframe() + + # Filter out some columns and rows for better readability when printing + filtered_column_df = combined_df.drop(columns=EXCLUDED_COLUMNS_WHEN_PRINTING) + for filter_name in EXCLUDED_EVENTS_WHEN_PRINTING: + filtered_column_df = filtered_column_df[ + ~filtered_column_df["event_name"].str.contains(filter_name) + ] + filtered_column_df.reset_index(drop=True, inplace=True) + + filtered_column_df.to_csv(file, sep="\t") + + # TODO: write unit test def find_total_for_module(self, module_name: str) -> float: """ diff --git a/devtools/inspector/inspector_cli.py b/devtools/inspector/inspector_cli.py index db3536a84bf..62f2ec736cf 100644 --- a/devtools/inspector/inspector_cli.py +++ b/devtools/inspector/inspector_cli.py @@ -43,6 +43,11 @@ def main() -> None: required=False, help="Provide an optional buffer file path.", ) + parser.add_argument( + "--csv_path", + required=False, + help="Provide an optional csv file path.", + ) parser.add_argument("--compare_results", action="store_true") args = parser.parse_args() @@ -55,6 +60,8 @@ def main() -> None: target_time_scale=TimeScale(args.target_time_scale), ) inspector.print_data_tabular() + if args.csv_path: + inspector.save_data_to_csv(args.csv_path) if args.compare_results: for event_block in inspector.event_blocks: if event_block.name == "Execute": From 507a99fbd8c65eef878aaba5e63ecc97f77913fb Mon Sep 17 00:00:00 2001 From: jorgep31415 Date: Fri, 22 Nov 2024 12:56:29 -0800 Subject: [PATCH 2/5] Update on "[ET] Add `tsv_path` to `inspector_cli`" Differential Revision: [D66379005](https://our.internmc.facebook.com/intern/diff/D66379005/) [ghstack-poisoned] --- devtools/inspector/_inspector.py | 4 ++-- devtools/inspector/inspector_cli.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/devtools/inspector/_inspector.py b/devtools/inspector/_inspector.py index f480b6ce6f5..f09ebe3ee0e 100644 --- a/devtools/inspector/_inspector.py +++ b/devtools/inspector/_inspector.py @@ -1174,12 +1174,12 @@ def print_data_tabular( display_or_print_df(filtered_column_df, file) - def save_data_to_csv( + def save_data_to_tsv( self, file: IO[str], ) -> None: """ - Stores the underlying EventBlocks in a csv format with tab separator, to facilitate copy-paste into spreadsheets. + Stores the underlying EventBlocks in tsv format to facilitate copy-paste into spreadsheets. Args: file: Which IO stream to print to. Do not use stdout, as tab separator is not preserved. diff --git a/devtools/inspector/inspector_cli.py b/devtools/inspector/inspector_cli.py index 62f2ec736cf..fa1be877667 100644 --- a/devtools/inspector/inspector_cli.py +++ b/devtools/inspector/inspector_cli.py @@ -44,9 +44,9 @@ def main() -> None: help="Provide an optional buffer file path.", ) parser.add_argument( - "--csv_path", + "--tsv_path", required=False, - help="Provide an optional csv file path.", + help="Provide an optional tsv file path.", ) parser.add_argument("--compare_results", action="store_true") @@ -60,8 +60,8 @@ def main() -> None: target_time_scale=TimeScale(args.target_time_scale), ) inspector.print_data_tabular() - if args.csv_path: - inspector.save_data_to_csv(args.csv_path) + if args.tsv_path: + inspector.save_data_to_tsv(args.tsv_path) if args.compare_results: for event_block in inspector.event_blocks: if event_block.name == "Execute": From aca8131e70d1fa7d5fa890c3a69e6ae13d81f750 Mon Sep 17 00:00:00 2001 From: jorgep31415 Date: Fri, 22 Nov 2024 15:55:06 -0800 Subject: [PATCH 3/5] Update on "[ET] Add `tsv_path` to `inspector_cli`" Differential Revision: [D66379005](https://our.internmc.facebook.com/intern/diff/D66379005/) [ghstack-poisoned] --- devtools/inspector/_inspector.py | 48 +++++++++++++++++++------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/devtools/inspector/_inspector.py b/devtools/inspector/_inspector.py index f09ebe3ee0e..f781bafa78d 100644 --- a/devtools/inspector/_inspector.py +++ b/devtools/inspector/_inspector.py @@ -1143,23 +1143,18 @@ def to_dataframe( ] return pd.concat(df_list, ignore_index=True) - def print_data_tabular( + def _prepare_dataframe( self, - file: IO[str] = sys.stdout, include_units: bool = True, include_delegate_debug_data: bool = False, - ) -> None: + ) -> pd.DataFrame: """ - Displays the underlying EventBlocks in a structured tabular format, with each row representing an Event. - Args: - file: Which IO stream to print to. Defaults to stdout. - Not used if this is in an IPython environment such as a Jupyter notebook. include_units: Whether headers should include units (default true) include_delegate_debug_data: Whether to include delegate debug metadata (default false) Returns: - None + Returns a pandas DataFrame of the Events in each EventBlock in the inspector, with additional filtering. """ combined_df = self.to_dataframe(include_units, include_delegate_debug_data) @@ -1171,7 +1166,29 @@ def print_data_tabular( ] filtered_column_df.reset_index(drop=True, inplace=True) - display_or_print_df(filtered_column_df, file) + return filtered_column_df + + + def print_data_tabular( + self, + file: IO[str] = sys.stdout, + include_units: bool = True, + include_delegate_debug_data: bool = False, + ) -> None: + """ + Displays the underlying EventBlocks in a structured tabular format, with each row representing an Event. + + Args: + file: Which IO stream to print to. Defaults to stdout. + Not used if this is in an IPython environment such as a Jupyter notebook. + include_units: Whether headers should include units (default true) + include_delegate_debug_data: Whether to include delegate debug metadata (default false) + + Returns: + None + """ + df = self._prepare_dataframe(include_units, include_delegate_debug_data) + display_or_print_df(df, file) def save_data_to_tsv( @@ -1187,17 +1204,8 @@ def save_data_to_tsv( Returns: None """ - combined_df = self.to_dataframe() - - # Filter out some columns and rows for better readability when printing - filtered_column_df = combined_df.drop(columns=EXCLUDED_COLUMNS_WHEN_PRINTING) - for filter_name in EXCLUDED_EVENTS_WHEN_PRINTING: - filtered_column_df = filtered_column_df[ - ~filtered_column_df["event_name"].str.contains(filter_name) - ] - filtered_column_df.reset_index(drop=True, inplace=True) - - filtered_column_df.to_csv(file, sep="\t") + df = self._prepare_dataframe() + df.to_csv(file, sep="\t") # TODO: write unit test From befb2052729cf16401376f0ed95d2c3537197f9e Mon Sep 17 00:00:00 2001 From: jorgep31415 Date: Fri, 22 Nov 2024 16:08:35 -0800 Subject: [PATCH 4/5] Update on "[ET] Add `tsv_path` to `inspector_cli`" Differential Revision: [D66379005](https://our.internmc.facebook.com/intern/diff/D66379005/) [ghstack-poisoned] --- devtools/inspector/inspector_cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devtools/inspector/inspector_cli.py b/devtools/inspector/inspector_cli.py index fa1be877667..00e74cc25f8 100644 --- a/devtools/inspector/inspector_cli.py +++ b/devtools/inspector/inspector_cli.py @@ -43,7 +43,7 @@ def main() -> None: required=False, help="Provide an optional buffer file path.", ) - parser.add_argument( + parser.add_argument( "--tsv_path", required=False, help="Provide an optional tsv file path.", From e2b7ceb903e9efdbfd9f88bbdbbc52392fc4fc74 Mon Sep 17 00:00:00 2001 From: jorgep31415 Date: Fri, 22 Nov 2024 16:32:37 -0800 Subject: [PATCH 5/5] Update on "[ET] Add `tsv_path` to `inspector_cli`" Differential Revision: [D66379005](https://our.internmc.facebook.com/intern/diff/D66379005/) [ghstack-poisoned] --- devtools/inspector/_inspector.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/devtools/inspector/_inspector.py b/devtools/inspector/_inspector.py index f781bafa78d..001ea505501 100644 --- a/devtools/inspector/_inspector.py +++ b/devtools/inspector/_inspector.py @@ -1168,7 +1168,6 @@ def _prepare_dataframe( return filtered_column_df - def print_data_tabular( self, file: IO[str] = sys.stdout, @@ -1190,7 +1189,6 @@ def print_data_tabular( df = self._prepare_dataframe(include_units, include_delegate_debug_data) display_or_print_df(df, file) - def save_data_to_tsv( self, file: IO[str], @@ -1207,7 +1205,6 @@ def save_data_to_tsv( df = self._prepare_dataframe() df.to_csv(file, sep="\t") - # TODO: write unit test def find_total_for_module(self, module_name: str) -> float: """