code: def observe(self, event_name: str = "", **obs_vars) -> None:
      # get stream requests for this event
      stream_infos = self._stream_infos.get(event_name, {})
  
      # TODO: remove list() call - currently needed because of error dictionary
      # can't be changed - happens when multiple clients gets started
      for stream_info in list(stream_infos.values()):
          if stream_info.disabled or stream_info.evaler is None:
              continue
  
          # apply throttle
          if (
              stream_info.req.throttle is None
              or stream_info.last_sent is None
              or time.time() - stream_info.last_sent
              >= stream_info.req.throttle
          ):
              stream_info.last_sent = time.time()
  
              events_vars = EventData(self._global_vars, **obs_vars)
              self._eval_write(stream_info, events_vars)
          else:
              utils.debug_log("Throttled", event_name, verbosity=5)
  
imports: from typing import Dict, Any, Sequence
  from .lv_types import EventData, StreamItem, StreamCreateRequest, VisArgs
  from .evaler import Evaler
  from .stream import Stream
  from .stream_factory import StreamFactory
  from .filtered_stream import FilteredStream
  import uuid, time, functools
  from .None import utils
  from .notebook_maker import NotebookMaker
label_desc: Use image node_id 11 for calling the WatcherBase obj's underlying member method code with example usage: obj.observe(event_name) without return types