code: def _cramers_v_matrix(df):
      """Computes Cramer's V for all column pairs.
  
      Adapted from https://github.com/shakedzy/dython/blob/master/dython/nominal.py
  
      Args:
          df (DataFrame): A data frame containing only categorical features
  
      Returns:
          A pandas data frame
      """
      index = df.columns.values
      cramers_matrix = pd.DataFrame(
          [[_cramers_v(df[x], df[y]) for x in index] for y in index]
      )
  
      # Cramer's V can be NaN when there are not enough instances in a category
      cramers_matrix.fillna(0)
  
      # Assign column and row labels
      cramers_matrix.columns = index
      cramers_matrix.set_index(index, inplace=True)
  
      return cramers_matrix
  
imports: import warnings
  import pandas
  import numpy
  from scipy.cluster import hierarchy
  from sklearn.metrics import matthews_corrcoef
  from scipy.stats import chi2_contingency
  import seaborn
  import matplotlib.pyplot
  import plotly.graph_objs
  import plotly.offline
  from data_describe.config._config import get_option
  from data_describe.misc.colors import get_p_RdBl_cmap, mpl_to_plotly_cmap
  from data_describe._widget import BaseWidget
  from data_describe.compat import _is_dataframe, _in_notebook, _requires
  from data_describe.backends import _get_viz_backend, _get_compute_backend
label_desc: Use image node_id 3 for calling a global function with example usage: _cramers_v_matrix(df) and returns: cramers_matrix