code: def test_window_all_reduce_process(self):
      self.env.set_parallelism(1)
      data_stream = self.env.from_collection(
          [
              ("a", 1),
              ("a", 2),
              ("b", 3),
              ("a", 6),
              ("b", 8),
              ("b", 9),
              ("a", 15),
          ],
          type_info=Types.TUPLE([Types.STRING(), Types.INT()]),
      )  # type: DataStream
      watermark_strategy = WatermarkStrategy.for_monotonous_timestamps().with_timestamp_assigner(
          SecondColumnTimestampAssigner()
      )
  
      class MyProcessFunction(ProcessAllWindowFunction):
          def process(
              self,
              context: "ProcessAllWindowFunction.Context",
              elements: Iterable[Tuple[str, int]],
          ) -> Iterable[str]:
              yield "current window start at {}, reduce result {}".format(
                  context.window().start,
                  next(iter(elements)),
              )
  
      data_stream.assign_timestamps_and_watermarks(
          watermark_strategy
      ).window_all(
          EventTimeSessionWindows.with_gap(Time.milliseconds(2))
      ).reduce(
          lambda a, b: (a[0], a[1] + b[1]),
          window_function=MyProcessFunction(),
          output_type=Types.STRING(),
      ).add_sink(
          self.test_sink
      )
  
      self.env.execute("test_window_all_reduce_process")
      results = self.test_sink.get_results()
      expected = [
          "current window start at 1, reduce result ('a', 6)",
          "current window start at 6, reduce result ('a', 23)",
          "current window start at 15, reduce result ('a', 15)",
      ]
      self.assert_equals_sorted(expected, results)
  
imports: from typing import Iterable, Tuple, Dict
  from pyflink.common import Configuration
  from pyflink.common.time import Time
  from pyflink.common.typeinfo import Types
  from pyflink.common.watermark_strategy import WatermarkStrategy, TimestampAssigner
  from pyflink.datastream.data_stream import DataStream
  from pyflink.datastream.functions import ProcessWindowFunction, WindowFunction, AggregateFunction, ProcessAllWindowFunction
  from pyflink.datastream.output_tag import OutputTag
  from pyflink.datastream.window import TumblingEventTimeWindows, SlidingEventTimeWindows, EventTimeSessionWindows, CountSlidingWindowAssigner, SessionWindowTimeGapExtractor, CountWindow, PurgingTrigger, EventTimeTrigger, TimeWindow, GlobalWindows, CountTrigger
  from pyflink.datastream.tests.test_util import DataStreamTestSinkFunction
  from pyflink.java_gateway import get_gateway
  from pyflink.testing.test_case_utils import PyFlinkStreamingTestCase
  from pyflink.util.java_utils import get_j_env_configuration
label_desc: Use image node_id 20 for calling the WindowTests obj's underlying member method code with example usage: obj.test_window_all_reduce_process() without return types