class_docstr: Enforce that new arguments added to the signature of a widget function are taken
  into account when computing widget IDs unless explicitly excluded.
class_docstr_tok: ["Enforce","that","new","arguments","added","to","the","signature","of","a","widget","function","are","taken","into","account","when","computing","widget","IDs","unless","explicitly","excluded","."]
code: def signature_to_expected_kwargs(self, sig):
      # These widget kwargs aren't used for widget ID calculation, meaning that they
      # can be changed without resetting the widget.
      excluded_kwargs = {
          # Internal stuff
          "ctx",
          # Formatting/display stuff
          "disabled",
          "format_func",
          "label_visibility",
          # on_change callbacks and similar/related parameters.
          "args",
          "kwargs",
          "on_change",
          "on_click",
          "on_submit",
      }
  
      kwargs = {
          kwarg: ANY
          for kwarg in sig.parameters.keys()
          if kwarg not in excluded_kwargs
      }
  
      # Add some kwargs that are passed to compute_widget_id but don't appear in widget
      # signatures.
      for kwarg in ["form_id", "user_key", "page"]:
          kwargs[kwarg] = ANY
  
      return kwargs
  
imports: import inspect
  import unittest
  from unittest.mock import ANY, MagicMock, call, patch
  from parameterized import parameterized
  import streamlit
  from streamlit import errors
  from streamlit.proto.Common_pb2 import StringTriggerValue
  from streamlit.proto.WidgetStates_pb2 import WidgetStates
  from streamlit.runtime.scriptrunner.script_run_context import get_script_run_ctx
  from streamlit.runtime.state import coalesce_widget_states
  from streamlit.runtime.state.common import GENERATED_WIDGET_ID_PREFIX, compute_widget_id
  from streamlit.runtime.state.session_state import SessionState, WidgetMetadata
  from streamlit.runtime.state.widgets import user_key_from_widget_id
  from tests.delta_generator_test_case import DeltaGeneratorTestCase
label_desc: Use image node_id 1 for calling the ComputeWidgetIdTests obj's underlying member method code with example usage: obj.signature_to_expected_kwargs(sig) and returns: kwargs