code: def test_update_non_param_kwarg():
      class RetainVal:
          a = 1
  
      @InteractiveFunction
      def a(x=3, **kwargs):
          RetainVal.a = sum(kwargs.values()) + x
          return RetainVal.a
  
      a.parametersNeedRunKwargs = True
  
      host = interact(a)
      assert a(y=10) == 13
      assert len(host.names) == 1 and host["x"] == 3
  
      assert a() == 3
  
      # Code path where "propagateParamChanges" shouldn't be reconnected if
      # it's already disconnected
      a.disconnect()
      assert a(y=10) == 13
      host["x"] = 5
      assert RetainVal.a == 13
  
      # But the cache should still be up-to-date
      assert a() == 5
  
imports: from functools import wraps
  import numpy
  import pyqtgraph
  import pytest
  from pyqtgraph import functions
  from pyqtgraph.parametertree import InteractiveFunction, Interactor, interact, RunOptions
  from pyqtgraph.parametertree import Parameter
  from pyqtgraph.parametertree.Parameter import PARAM_TYPES
  from pyqtgraph.parametertree.parameterTypes import GroupParameter
  from pyqtgraph.Qt import QtGui
label_desc: Use image node_id 15 for calling a global function with example usage: test_update_non_param_kwarg() and returns: RetainVal