code: def test_cbpu003_no_update_chains(dash_duo):
      app = Dash(__name__)
  
      app.layout = html.Div(
          [
              dcc.Input(id="a_in", value="a"),
              dcc.Input(id="b_in", value="b"),
              html.P("", id="a_out"),
              html.P("", id="a_out_short"),
              html.P("", id="b_out"),
              html.P("", id="ab_out"),
          ]
      )
  
      @app.callback(
          [
              Output("a_out", "children"),
              Output("a_out_short", "children"),
          ],
          [Input("a_in", "value")],
      )
      def a_out(a):
          return a, a if len(a) < 3 else no_update
  
      @app.callback(
          Output("b_out", "children"), [Input("b_in", "value")]
      )
      def b_out(b):
          return b
  
      @app.callback(
          Output("ab_out", "children"),
          [Input("a_out_short", "children")],
          [State("b_out", "children")],
      )
      def ab_out(a, b):
          return a + " " + b
  
      dash_duo.start_server(app)
  
      a_in = dash_duo.find_element("#a_in")
      b_in = dash_duo.find_element("#b_in")
  
      b_in.send_keys("b")
      a_in.send_keys("a")
      dash_duo.wait_for_text_to_equal("#a_out", "aa")
      dash_duo.wait_for_text_to_equal("#b_out", "bb")
      dash_duo.wait_for_text_to_equal("#a_out_short", "aa")
      dash_duo.wait_for_text_to_equal("#ab_out", "aa bb")
  
      b_in.send_keys("b")
      a_in.send_keys("a")
      dash_duo.wait_for_text_to_equal("#a_out", "aaa")
      dash_duo.wait_for_text_to_equal("#b_out", "bbb")
      dash_duo.wait_for_text_to_equal("#a_out_short", "aa")
      # ab_out has not been triggered because a_out_short received no_update
      dash_duo.wait_for_text_to_equal("#ab_out", "aa bb")
  
      b_in.send_keys("b")
      a_in.send_keys(Keys.END)
      a_in.send_keys(Keys.BACKSPACE)
      dash_duo.wait_for_text_to_equal("#a_out", "aa")
      dash_duo.wait_for_text_to_equal("#b_out", "bbbb")
      dash_duo.wait_for_text_to_equal("#a_out_short", "aa")
      # now ab_out *is* triggered - a_out_short got a new value
      # even though that value is the same as the last value it got
      dash_duo.wait_for_text_to_equal("#ab_out", "aa bbbb")
  
file_path: dash/tests/integration/callbacks/test_prevent_update.py
imports: from multiprocessing import Value
  from copy import copy
  from selenium.webdriver.common.keys import Keys
  from dash import Dash, no_update, Input, Output, State, html, dcc
  from dash.exceptions import PreventUpdate
  from dash.testing.wait import until
label_desc: Use image node_id 3 for calling a global function with example usage: test_cbpu003_no_update_chains(dash_duo) and returns: a,  unknown, b, unknown