code: def szng003_on_prop_change_impl(
      test,
      fixed_columns,
      fixed_rows,
      merge_duplicate_headers,
      callback_props,
  ):
      props = {
          **base_props,
          **fixed_columns,
          **fixed_rows,
          **merge_duplicate_headers,
      }
  
      table = DataTable(**props, id="table")
  
      app = dash.Dash(__name__)
      app.layout = Div([Button(id="btn", children=["Update"]), table])
  
      @app.callback(
          [Output("table", key) for key in callback_props.keys()],
          [Input("btn", "n_clicks")],
          prevent_initial_call=True,
      )
      def callback(n_clicks):
          return [
              callback_props.get(key) for key in callback_props.keys()
          ]
  
      test.start_server(app)
  
      cells_are_same_width(test, "#table", "#table")
  
      test.find_element("#btn").click()
      cells_are_same_width(test, "#table", "#table")
  
      assert test.get_log_errors() == []
  
file_path: dash/components/dash-table/tests/selenium/test_sizing.py
imports: from selenium.common.exceptions import StaleElementReferenceException
  from selenium.webdriver.common.by import By
  import dash
  from utils import get_props
  from dash.dependencies import Input, Output
  from dash.exceptions import PreventUpdate
  from dash.testing import wait
  from dash.dash_table import DataTable
  from dash.html import Button, Div
label_desc: Use image node_id 2 for calling a global function with example usage: szng003_on_prop_change_impl(test, fixed_columns, fixed_rows, merge_duplicate_headers, callback_props) and returns: unknown