def plot_detailed_profiler_data()

in smdebug/profiler/analysis/notebook_utils/timeline_charts.py [0:0]


    def plot_detailed_profiler_data(self, indexes):

        if len(indexes) > 0:
            cpu_util = None
            for key in self.system_metrics.keys():
                if key.startswith("CPUUtilization"):
                    width = self.system_metrics[key]["cpu0"].shape[0]
                    if cpu_util is None or np.min(indexes) <= width <= np.max(indexes):
                        cpu_util = self.system_metrics[key]

            begin_timestamp = cpu_util["cpu0"][np.min(indexes), 0]
            end_timestamp = cpu_util["cpu0"][np.max(indexes), 0]
            print(
                f"Selected timerange: {begin_timestamp + self.start} to {end_timestamp + self.start}"
            )
            events = self.framework_metrics_reader.get_events(
                begin_timestamp + self.start, end_timestamp + self.start, unit=TimeUnits.SECONDS
            )

            dataloaders = self.plot_dataloaders(
                events, begin_timestamp + self.start, end_timestamp + self.start
            )
            framework_events = self.plot_framework_events(
                events, begin_timestamp + self.start, end_timestamp + self.start
            )

            # define figure
            plot_dataloaders = figure(
                plot_height=250,
                plot_width=1000,
                tools="crosshair,xbox_select,pan,reset,save,xwheel_zoom",
            )
            plot_dataloaders.xaxis.axis_label = "Time in ms"
            plot_dataloaders.yaxis.axis_label = "Thread ID"
            # tooltip
            hover = HoverTool(tooltips=[("metric", "@metric"), ("index", "$x{10}")])

            for event in dataloaders.keys():
                for entry in range(len(dataloaders[event])):
                    # create source that contains time annotations
                    source = ColumnDataSource(
                        data=dict(
                            top=[dataloaders[event][entry][2]],
                            bottom=[dataloaders[event][entry][2] - 1],
                            left=[dataloaders[event][entry][0]],
                            right=[dataloaders[event][entry][1]],
                            metric=[event],
                        )
                    )

                    # vertical bars
                    quad = Quad(
                        top="top",
                        bottom="bottom",
                        left="left",
                        right="right",
                        fill_color="black",
                        line_color=None,
                        fill_alpha=0.2,
                    )

                    # plot
                    plot_dataloaders.add_glyph(source, quad)
            plot_dataloaders.add_tools(hover)

            plot_framework_events = figure(
                plot_height=250,
                plot_width=1000,
                tools="crosshair,xbox_select,pan,reset,save,xwheel_zoom",
            )
            plot_framework_events.xaxis.axis_label = "Time in ms"
            plot_framework_events.yaxis.axis_label = "Framework metric"
            # tooltip
            hover = HoverTool(tooltips=[("metric", "@metric"), ("index", "$x{10}")])

            for event in framework_events.keys():
                for entry in range(len(framework_events[event])):
                    # create source that contains time annotations
                    source = ColumnDataSource(
                        data=dict(
                            top=[framework_events[event][entry][2]],
                            bottom=[framework_events[event][entry][2] - 1],
                            left=[framework_events[event][entry][0]],
                            right=[framework_events[event][entry][1]],
                            metric=[event],
                        )
                    )

                    # vertical bars
                    quad = Quad(
                        top="top",
                        bottom="bottom",
                        left="left",
                        right="right",
                        fill_color="blue",
                        fill_alpha=0.2,
                        line_color=None,
                    )

                    # plot
                    plot_framework_events.add_glyph(source, quad)
            plot_framework_events.add_tools(hover)

            p = column([plot_dataloaders, plot_framework_events])
            self.target = show(p, notebook_handle=True)
        else:
            print("No selection made")