code: def test_same_callback_as_all_three_types(self) -> None:
      with LoopAndGroup() as ctx:
          func = _make_invocation_counter(ctx.io_loop, stop_after=5)
          # we want the timeout and next_tick to run before the periodic
          ctx.group.add_periodic_callback(
              callback=func,
              period_milliseconds=2,
              callback_id=make_id(),
          )
          ctx.group.add_timeout_callback(
              callback=func,
              timeout_milliseconds=1,
              callback_id=make_id(),
          )
          ctx.group.add_next_tick_callback(
              callback=func, callback_id=make_id()
          )
      assert 5 == func.count()
  
imports: from __future__ import annotations
  import pytest
  from concurrent.futures import ThreadPoolExecutor
  from itertools import repeat
  from tornado.ioloop import IOLoop
  from bokeh.util.serialization import make_id
  from bokeh.util.tornado import _CallbackGroup
label_desc: Use image node_id 7 for calling the TestCallbackGroup obj's underlying member method code with example usage: obj.test_same_callback_as_all_three_types() without return types