code: def plot_summary_chart(
      disparity_df,
      metrics_list,
      attributes_list=None,
      fairness_threshold=1.25,
      chart_height=None,
      chart_width=None,
  ):
      """Draws chart that summarizes the parity results for the provided metrics across the existing attributes.
      This includes an overall result, the specific results by each attribute's groups as well as the percentage
      of population by result.
  
      :param disparity_df: a dataframe generated by the Aequitas Bias class
      :type disparity_df: pandas.core.frame.DataFrame
      :param metrics_list: a list of the metrics of interest
      :type metrics_list: list
      :param attributes_list: a list of the attributes of interest, defaults to using all in the dataframe
      :type attributes_list: list, optional
      :param fairness_threshold: a value for the maximum allowed disparity, defaults to 1.25
      :type fairness_threshold: float, optional
      :param chart_height: a value (in pixels) for the height of the chart
      :type chart_height: int, optional
      :param chart_width: a value (in pixels) for the width of the chart
      :type chart_width: int, optional
  
      :return: the full summary chart
      :rtype: Altair chart object
      """
  
      ## If a specific list of attributes was not passed, use all from df
      (
          metrics,
          attributes,
          chart_height,
          chart_width,
      ) = Initializer.prepare_summary_chart(
          disparity_df,
          metrics_list,
          attributes_list,
          fairness_threshold,
          chart_height,
          chart_width,
          Summary_Chart,
      )
  
      num_metrics = len(metrics)
      num_attributes = len(attributes)
  
      max_num_groups = max(
          disparity_df.loc[
              disparity_df["attribute_name"].isin(attributes)
          ]
          .groupby(by="attribute_name")["attribute_value"]
          .count()
      )
  
      size_constants = __get_size_constants(
          chart_height,
          chart_width,
          num_attributes,
          num_metrics,
          max_num_groups,
      )
  
      Validator.chart_size_summary(
          size_constants, num_metrics, num_attributes
      )
  
      # SCALES
      scales = __get_scales(max_num_groups)
  
      # METRIC TITLES
      metric_titles = __draw_metric_line_titles(metrics, size_constants)
  
      # RELEVANT FIELDS
      viz_fields = [
          "attribute_name",
          "attribute_value",
          "group_size",
          "total_entities",
          f"{metrics[0]}_ref_group_value",
          *metrics,
      ]
      viz_fields += [f"{metric}_disparity" for metric in metrics]
  
      attribute_columns = []
      attribute_warnings = []
      for attribute in attributes:
          # CREATE ATTRIBUTE DF
          attribute_df = (
              disparity_df[viz_fields]
              .loc[disparity_df["attribute_name"] == attribute]
              .copy(deep=True)
          )
  
          attribute_df.rename(
              columns={
                  f"{metrics[0]}_ref_group_value": "ref_group_value"
              },
              inplace=True,
          )
  
          # ATTRIBUTE COLUMN
          attribute_column, metric_warning = __get_attribute_column(
              attribute_df,
              metrics,
              scales,
              attribute,
              size_constants,
              fairness_threshold,
          )
          if metric_warning:
              attribute_warnings.append(metric_warning)
          attribute_columns.append((attribute_column))
  
      # CONCATENATE ATTRIBUTE COLUMNS
      summary_chart_columns = alt.hconcat(
          *attribute_columns,
          bounds="flush",
          spacing=size_constants["column_spacing"]
          + size_constants["column_width"],
      )
      # ADD METRIC TITLES
      summary_chart_table = alt.hconcat(
          metric_titles,
          summary_chart_columns,
          bounds="flush",
          spacing=size_constants["metric_titles_width"]
          + size_constants["column_spacing"],
      )
  
      summary_chart_explanation = __draw_parity_test_explanation(
          fairness_threshold,
          size_constants["column_spacing"] / 2,
          attribute_warnings,
      )
  
      full_summary_chart = (
          alt.vconcat(summary_chart_table, summary_chart_explanation)
          .properties(
              padding=Summary_Chart.full_chart_padding,
              usermeta=get_chart_metadata("summary_chart"),
          )
          .configure_legend(
              labelColor=Legend.font_color,
              labelFont=FONT,
              labelFontSize=Legend.font_size,
              rowPadding=Legend.offset,
              symbolSize=Legend.symbol_size,
              titleBaseline=Legend.title_baseline,
              titleColor=Legend.title_font_color,
              titleFont=FONT,
              titleFontSize=Legend.title_font_size,
              titleFontWeight=Legend.title_font_weight,
              titlePadding=Legend.title_padding,
          )
          .configure_view(strokeWidth=0)
      )
  
      return full_summary_chart
  
imports: import altair
  import pandas
  from aequitas.plot.commons.helpers import no_axis, transform_ratio, format_number, get_chart_metadata
  from aequitas.plot.commons.tooltips import get_tooltip_text_group_size, get_tooltip_text_disparity_explanation, get_tooltip_text_parity_test_explanation
  from aequitas.plot.commons.style.classes import Title, Subtitle, Parity_Result, Annotation, Legend
  from aequitas.plot.commons.style.text import FONT
  from aequitas.plot.commons.style.sizes import Summary_Chart
  from aequitas.plot.commons import initializers
  from aequitas.plot.commons import validators
  from aequitas.plot.commons import labels
label_desc: Use image node_id 15 for calling a global function with example usage: plot_summary_chart(disparity_df, metrics_list, attributes_list, fairness_threshold, chart_height, chart_width) and returns: full_summary_chart