diff --git a/projects/rocprofiler-compute/pyproject.toml b/projects/rocprofiler-compute/pyproject.toml index 58273fd47b..64c1bacadb 100644 --- a/projects/rocprofiler-compute/pyproject.toml +++ b/projects/rocprofiler-compute/pyproject.toml @@ -24,7 +24,6 @@ extend-exclude = [ # deprecated files "src/rocprof_compute_profile/profiler_rocprof_v1.py", "src/rocprof_compute_profile/profiler_rocprof_v2.py", - "src/rocprof_compute_analyze/analysis_db.py", "src/utils/db_connector.py", # WIP files "src/rocprof_compute_tui/widgets/splitter.py" diff --git a/projects/rocprofiler-compute/src/config.py b/projects/rocprofiler-compute/src/config.py index 7020d4cae3..bb5bb25457 100644 --- a/projects/rocprofiler-compute/src/config.py +++ b/projects/rocprofiler-compute/src/config.py @@ -23,7 +23,6 @@ ############################################################################## - from pathlib import Path # NB: Creating a new module to share global vars across modules diff --git a/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_cli.py b/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_cli.py index 59f9e8094a..a1b3e0884e 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_cli.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_cli.py @@ -23,7 +23,6 @@ ############################################################################## - from rocprof_compute_analyze.analysis_base import OmniAnalyze_Base from utils import file_io, parser, tty from utils.kernel_name_shortener import kernel_name_shortener diff --git a/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_db.py b/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_db.py index d7897bcf2d..e4b26f7964 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_db.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_analyze/analysis_db.py @@ -26,6 +26,7 @@ import ast import json import re from pathlib import Path +from typing import Any, Callable, Optional, Union import astunparse import pandas as pd @@ -37,9 +38,9 @@ from utils import rocpd_data from utils.analysis_orm import Database, get_views from utils.logger import console_debug, console_error, console_warning, demarcate from utils.parser import ( + BUILD_IN_VARS, PC_SAMPLING_NOT_ISSUE_PREFIX, CodeTransformer, - BUILD_IN_VARS, to_avg, to_concat, to_int, @@ -66,7 +67,7 @@ class db_analysis(OmniAnalyze_Base): # Required child methods # ----------------------- @demarcate - def pre_processing(self): + def pre_processing(self) -> None: """Perform any pre-processing steps prior to analysis.""" super().pre_processing() if self._profiling_config.get("format_rocprof_output") != "rocpd": @@ -101,7 +102,7 @@ class db_analysis(OmniAnalyze_Base): self._roofline_data_per_workload = self.calc_roofline_data() @demarcate - def run_analysis(self): + def run_analysis(self) -> None: """Run CLI analysis.""" super().run_analysis() @@ -210,8 +211,8 @@ class db_analysis(OmniAnalyze_Base): console_debug("Completed writing database") console_warning(f"Created file: {db_name}") - def calc_roofline_ceilings(self): - roofline_ceilings_per_workload = dict() + def calc_roofline_ceilings(self) -> dict[str, dict[str, Any]]: + roofline_ceilings_per_workload: dict[str, dict[str, Any]] = {} for workload_path in self._runs.keys(): if not (Path(workload_path) / "roofline.csv").exists(): @@ -221,7 +222,7 @@ class db_analysis(OmniAnalyze_Base): roofline_dict = ( pd.read_csv(f"{workload_path}/roofline.csv").iloc[0].to_dict() ) - keys = list() + keys: list[str] = [] for mem_level in CACHE_HIERARCHY: keys.append(f"{mem_level}Bw") for dtype in SUPPORTED_DATATYPES[ @@ -247,8 +248,8 @@ class db_analysis(OmniAnalyze_Base): console_debug("Collected roofline ceilings") return roofline_ceilings_per_workload - def calc_pc_sampling_data(self): - pc_sampling_data_per_workload = dict() + def calc_pc_sampling_data(self) -> dict[str, pd.DataFrame]: + pc_sampling_data_per_workload: dict[str, pd.DataFrame] = {} for workload_path in self._runs.keys(): if not (Path(workload_path) / "ps_file_results.json").exists(): @@ -289,16 +290,18 @@ class db_analysis(OmniAnalyze_Base): for pc_sample in pc_sampling_stochastic + pc_sampling_host_trap ]) - def custom_aggregator(column_name): + def custom_aggregator( + column_name: str, + ) -> Callable[[pd.Series], Union[int, dict[str, int], None]]: if column_name == "count_issued": - def aggregator(series): + def aggregator(series: pd.Series) -> Optional[int]: return None if series.isnull().all() else series.sum() return aggregator if column_name == "count_stalled": - def aggregator(series): + def aggregator(series: pd.Series) -> Optional[int]: if series.isnull().all(): return None return series.count() - series.sum() @@ -306,7 +309,7 @@ class db_analysis(OmniAnalyze_Base): return aggregator if column_name == "stall_reason": - def aggregator(series): + def aggregator(series: pd.Series) -> Optional[dict[str, int]]: if series.isnull().all(): return None cleaned_series = series.dropna().str[ @@ -352,7 +355,13 @@ class db_analysis(OmniAnalyze_Base): return pc_sampling_data_per_workload @staticmethod - def evaluate(name, value, pmc_df, sys_info, parse=False): + def evaluate( + name: str, + value: str, + pmc_df: pd.DataFrame, + sys_info: dict[str, Any], # noqa ANN401 + parse: bool = False, + ) -> Any: # noqa ANN401 if parse: value = re.sub( r"\$([0-9A-Za-z_]+)", @@ -397,7 +406,7 @@ class db_analysis(OmniAnalyze_Base): console_warning(f"Failed to evaluate expression for {name}: {value} - {e}") return None - def calc_expressions(self): + def calc_expressions(self) -> dict[str, pd.DataFrame]: values_data_per_workload = self._values_data_per_workload.copy() for workload_path in self._runs.keys(): @@ -438,9 +447,11 @@ class db_analysis(OmniAnalyze_Base): console_debug("Calculated metric values") return values_data_per_workload - def calc_metrics_data(self): - metrics_info_data_per_workload = dict() - values_data_per_workload = dict() + def calc_metrics_data( + self, + ) -> tuple[dict[str, pd.DataFrame], dict[str, pd.DataFrame]]: + metrics_info_data_per_workload: dict[str, pd.DataFrame] = {} + values_data_per_workload: dict[str, pd.DataFrame] = {} for workload_path in self._runs.keys(): gfx_arch = self._runs[workload_path].sys_info.iloc[0]["gpu_arch"] @@ -504,8 +515,8 @@ class db_analysis(OmniAnalyze_Base): console_debug("Collected metrics data") return metrics_info_data_per_workload, values_data_per_workload - def calc_dispatch_data(self): - dispatch_data_per_workload = dict() + def calc_dispatch_data(self) -> dict[str, pd.DataFrame]: + dispatch_data_per_workload: dict[str, pd.DataFrame] = {} for workload_path in self._runs.keys(): dispatch_df = pd.DataFrame([ @@ -522,7 +533,7 @@ class db_analysis(OmniAnalyze_Base): console_debug("Calculated dispatch data") return dispatch_data_per_workload - def apply_pmc_filters(self): + def apply_pmc_filters(self) -> dict[str, pd.DataFrame]: pmc_df_per_workload = self._pmc_df_per_workload.copy() for workload_path, pmc_df in pmc_df_per_workload.items(): @@ -559,8 +570,8 @@ class db_analysis(OmniAnalyze_Base): console_debug("Applied analysis mode filters") return pmc_df_per_workload - def calc_roofline_data(self): - roofline_data_per_workload = dict() + def calc_roofline_data(self) -> dict[str, pd.DataFrame]: + roofline_data_per_workload: dict[str, pd.DataFrame] = {} for workload_path in self._runs.keys(): pmc_df = self._pmc_df_per_workload[workload_path].copy() diff --git a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx908.py b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx908.py index 176970215f..6a83282b25 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx908.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx908.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import argparse from typing import Any, Optional diff --git a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx90a.py b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx90a.py index f2e859d2ec..4aeadc3843 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx90a.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx90a.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import argparse from typing import Any, Optional diff --git a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx940.py b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx940.py index 759fc09803..6e24dd0ebf 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx940.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx940.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import argparse from typing import Any, Optional diff --git a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx941.py b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx941.py index e87ca25cdb..5b88162404 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx941.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx941.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import argparse from typing import Any, Optional diff --git a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx942.py b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx942.py index 75c858faa8..5aa7a29f3d 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx942.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx942.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import argparse from typing import Any, Optional diff --git a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx950.py b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx950.py index cd5a3ad542..d3a8ca7ac4 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx950.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_soc/soc_gfx950.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import argparse from typing import Any, Optional diff --git a/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/collapsibles.py b/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/collapsibles.py index 716e0f5c18..0a3c57b147 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/collapsibles.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/collapsibles.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + from typing import Any, Optional, Union import pandas as pd diff --git a/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/recent_directories.py b/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/recent_directories.py index 9a0bb8dc42..5198fbcf51 100644 --- a/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/recent_directories.py +++ b/projects/rocprofiler-compute/src/rocprof_compute_tui/widgets/recent_directories.py @@ -23,7 +23,6 @@ ############################################################################## - from textual.app import ComposeResult from textual.containers import Container, Horizontal from textual.screen import ModalScreen diff --git a/projects/rocprofiler-compute/src/utils/analysis_orm.py b/projects/rocprofiler-compute/src/utils/analysis_orm.py index 3b7315d9c0..92e78b6b75 100644 --- a/projects/rocprofiler-compute/src/utils/analysis_orm.py +++ b/projects/rocprofiler-compute/src/utils/analysis_orm.py @@ -21,6 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. ##############################################################################el + from typing import Any, Optional from sqlalchemy import ( diff --git a/projects/rocprofiler-compute/src/utils/file_io.py b/projects/rocprofiler-compute/src/utils/file_io.py index c9375d7162..2481caaf5e 100644 --- a/projects/rocprofiler-compute/src/utils/file_io.py +++ b/projects/rocprofiler-compute/src/utils/file_io.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import re from collections import OrderedDict from pathlib import Path diff --git a/projects/rocprofiler-compute/src/utils/gui_components/memchart.py b/projects/rocprofiler-compute/src/utils/gui_components/memchart.py index ac1ad169a6..53d1f512f0 100644 --- a/projects/rocprofiler-compute/src/utils/gui_components/memchart.py +++ b/projects/rocprofiler-compute/src/utils/gui_components/memchart.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + from typing import Any from dash import html diff --git a/projects/rocprofiler-compute/src/utils/parser.py b/projects/rocprofiler-compute/src/utils/parser.py index 1674c02033..6c9ef031e2 100755 --- a/projects/rocprofiler-compute/src/utils/parser.py +++ b/projects/rocprofiler-compute/src/utils/parser.py @@ -22,6 +22,7 @@ # THE SOFTWARE. ############################################################################## + import argparse import ast import json diff --git a/projects/rocprofiler-compute/src/utils/roofline_calc.py b/projects/rocprofiler-compute/src/utils/roofline_calc.py index 6f0b7b0348..c91fd76bb4 100644 --- a/projects/rocprofiler-compute/src/utils/roofline_calc.py +++ b/projects/rocprofiler-compute/src/utils/roofline_calc.py @@ -23,7 +23,6 @@ ############################################################################## - import csv from dataclasses import dataclass from pathlib import Path diff --git a/projects/rocprofiler-compute/src/utils/schema.py b/projects/rocprofiler-compute/src/utils/schema.py index b12bbfa2e3..5d85998e18 100644 --- a/projects/rocprofiler-compute/src/utils/schema.py +++ b/projects/rocprofiler-compute/src/utils/schema.py @@ -23,11 +23,6 @@ ############################################################################## -# -# Define all common data storage classes, -# predifned dict and global functions. -# - from collections import OrderedDict from dataclasses import dataclass, field from typing import Any