code: def test_rdmo004_multi_output_circular_dependencies(dash_duo):
      app = Dash(__name__)
      app.layout = html.Div(
          [dcc.Input(id="a"), dcc.Input(id="b"), html.P(id="c")]
      )
  
      @app.callback(Output("a", "value"), [Input("b", "value")])
      def set_a(b):
          return ((b or "") + "X")[:100]
  
      @app.callback(
          [Output("b", "value"), Output("c", "children")],
          [Input("a", "value")],
      )
      def set_bc(a):
          return [a, a]
  
      dash_duo.start_server(
          app,
          debug=True,
          use_debugger=True,
          use_reloader=False,
          dev_tools_hot_reload=False,
      )
  
      # the UI still renders the output triggered by callback.
      # The new system does NOT loop infinitely like it used to, each callback
      # is invoked no more than once.
      dash_duo.wait_for_text_to_equal("#c", "X")
  
      err_text = dash_duo.find_element("span.dash-fe-error__title").text
      assert err_text == "Circular Dependencies"
  
file_path: dash/tests/integration/renderer/test_multi_output.py
imports: from multiprocessing import Lock, Value
  from dash import Dash, Input, Output, html, dcc
  from dash.exceptions import PreventUpdate
  from dash.testing import wait
label_desc: Use image node_id 4 for calling a global function with example usage: test_rdmo004_multi_output_circular_dependencies(dash_duo) and returns: unknown, list