def get_data(filter): try: sc = results.get_scalars(filter, include_attrs=True) iv = results.get_itervars(filter) ra = results.get_runattrs(filter) except ValueError as e: raise chart.ChartScriptError("Error while querying results: " + str(e)) df = pd.concat([sc, iv, ra]) df["value"] = pd.to_numeric(df["value"], errors="ignore") df = pd.pivot_table(df, columns="name", index="runID", dropna=False, aggfunc=aggfunc) return df
# collect parameters for query filter_expression = props["filter"] start_time = float(props["vector_start_time"] or -math.inf) end_time = float(props["vector_end_time"] or math.inf) # query vector data into a data frame try: df = results.get_vectors(filter_expression, include_attrs=True, include_runattrs=True, include_itervars=True, start_time=start_time, end_time=end_time) except results.ResultQueryError as e: raise chart.ChartScriptError("Error while querying results: " + str(e)) if df.empty: raise chart.ChartScriptError("The result filter returned no data.") def compute_histogram(row): values = row["vecvalue"] edges = utils.histogram_bin_edges(values) row["binvalues"], row["binedges"] = np.histogram(values, bins=edges) return row df = df.apply(compute_histogram, axis=1) # plot
# collect parameters for query filter_expression = props["filter"] include_fields = props["include_fields"] == "true" xaxis_itervar = props["xaxis_itervar"] yaxis_itervar = props["yaxis_itervar"] # query data into a data frame try: df = results.get_scalars(filter_expression, include_fields=include_fields, include_attrs=True, include_itervars=True, include_runattrs=True) except ValueError as e: raise chart.ChartScriptError("Error while querying results: " + str(e)) if df.empty: raise chart.ChartScriptError("The result filter returned no data.") if not xaxis_itervar and not yaxis_itervar: print( "The X Axis and Y Axis options were not set in the dialog, inferring them from the data.." ) xaxis_itervar, yaxis_itervar = utils.pick_two_columns(df) if not xaxis_itervar or not yaxis_itervar: raise chart.ChartScriptError( "Please set both the X Axis and Y Axis options in the dialog - or neither, for automatic selection!" ) utils.assert_columns_exist(
props = chart.get_properties() utils.preconfigure_plot(props) # collect parameters for query filter_expression = props["filter"] include_fields = props["include_fields"] == "true" # query scalar data into dataframe try: df = results.get_scalars(filter_expression, include_fields=include_fields, include_attrs=True, include_itervars=True, include_runattrs=True) except ValueError as e: raise chart.ChartScriptError("Error while querying results: " + str(e)) if df.empty: raise chart.ChartScriptError("The result filter returned no data.") # determine "groups" and "series" for pivoting, and check them groups = utils.split(props["groups"]) series = utils.split(props["series"]) if not groups and not series: print( "The Groups and Series options were not set in the dialog, inferring them from the data." ) g, s = ("module", "name") if len(df) == 1 else utils.pick_two_columns(df) groups, series = [g], [s]
# collect parameters for query filter_expression = props["filter"] include_fields = props["include_fields"] == "true" xaxis_itervar = props["xaxis_itervar"] group_by = utils.split(props["group_by"]) # query data into a data frame try: df = results.get_scalars(filter_expression, include_fields=include_fields, include_runattrs=True, include_attrs=True, include_itervars=True) except ValueError as e: raise chart.ChartScriptError("Error while querying results: " + str(e)) if df.empty: raise chart.ChartScriptError("The result filter returned no data.") if not xaxis_itervar and not group_by: print( "The 'X Axis' and 'Group By' options were not set in the dialog, inferring them from the data.." ) xaxis_itervar, group_by = utils.pick_two_columns(df) group_by = [group_by] if group_by else [] print("X Axis: " + xaxis_itervar + ", Group By: " + ",".join(group_by)) if xaxis_itervar: utils.assert_columns_exist( df, [xaxis_itervar],
return df def filter_for(what): return "(" + props["common_filter"] + ") AND (" + props[what] + ")" xa = get_data(filter_for("xaxis_filter")) ya = get_data(filter_for("yaxis_filter")) iso = get_data(filter_for("iso_filter")) cols = xa["value"].columns.values if len(cols) != 1: raise chart.ChartScriptError( "X axis filter must result in exactly one value column, instead of " + str(cols)) xaxis_column = cols[0] cols = ya["value"].columns.values if len(cols) != 1: raise chart.ChartScriptError( "Y axis filter must result in exactly one variable, instead of: " + ", ".join(cols) + "\nTry narrowing down the filter expression to one of these by name!") yaxis_column = cols[0] cols = iso["value"].columns.values if len(cols) != 1: raise chart.ChartScriptError( "Iso line filter must result in exactly one value column, instead of "