code: def test_over_window_aggregate_function(self):
      import datetime
  
      t = self.t_env.from_elements(
          [
              (1, 2, 3, datetime.datetime(2018, 3, 11, 3, 10, 0, 0)),
              (3, 2, 1, datetime.datetime(2018, 3, 11, 3, 10, 0, 0)),
              (2, 1, 2, datetime.datetime(2018, 3, 11, 3, 10, 0, 0)),
              (1, 3, 1, datetime.datetime(2018, 3, 11, 3, 10, 0, 0)),
              (1, 8, 5, datetime.datetime(2018, 3, 11, 4, 20, 0, 0)),
              (2, 3, 6, datetime.datetime(2018, 3, 11, 3, 30, 0, 0)),
          ],
          DataTypes.ROW(
              [
                  DataTypes.FIELD("a", DataTypes.TINYINT()),
                  DataTypes.FIELD("b", DataTypes.SMALLINT()),
                  DataTypes.FIELD("c", DataTypes.INT()),
                  DataTypes.FIELD("rowtime", DataTypes.TIMESTAMP(3)),
              ]
          ),
      )
      sink_table = generate_random_table_name()
      sink_table_ddl = f"""
              CREATE TABLE {sink_table}(
                  a TINYINT,
                  b FLOAT,
                  c INT,
                  d FLOAT,
                  e FLOAT,
                  f FLOAT,
                  g FLOAT,
                  h FLOAT,
                  i FLOAT,
                  j FLOAT
              ) WITH ('connector'='test-sink')
          """
      self.t_env.execute_sql(sink_table_ddl)
      self.t_env.create_temporary_view(
          "T_test_over_window_aggregate_function", t
      )
      self.t_env.execute_sql(
          f"""
              insert into {sink_table}
              select a,
               mean_udaf(b)
               over (PARTITION BY a ORDER BY rowtime
               ROWS BETWEEN UNBOUNDED preceding AND UNBOUNDED FOLLOWING),
               max_add(b, c)
               over (PARTITION BY a ORDER BY rowtime
               ROWS BETWEEN UNBOUNDED preceding AND 0 FOLLOWING),
               mean_udaf(b)
               over (PARTITION BY a ORDER BY rowtime
               ROWS BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING),
               mean_udaf(c)
               over (PARTITION BY a ORDER BY rowtime
               ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING),
               mean_udaf(c)
               over (PARTITION BY a ORDER BY rowtime
               RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING),
               mean_udaf(b)
               over (PARTITION BY a ORDER BY rowtime
               RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
               mean_udaf(b)
               over (PARTITION BY a ORDER BY rowtime
               RANGE BETWEEN INTERVAL '20' MINUTE PRECEDING AND UNBOUNDED FOLLOWING),
               mean_udaf(c)
               over (PARTITION BY a ORDER BY rowtime
               RANGE BETWEEN INTERVAL '20' MINUTE PRECEDING AND UNBOUNDED FOLLOWING),
               mean_udaf(c)
               over (PARTITION BY a ORDER BY rowtime
               RANGE BETWEEN INTERVAL '20' MINUTE PRECEDING AND CURRENT ROW)
              from T_test_over_window_aggregate_function
          """
      ).wait()
      actual = source_sink_utils.results()
      self.assert_equals(
          actual,
          [
              "+I[1, 4.3333335, 5, 4.3333335, 3.0, 3.0, 2.5, 4.3333335, 3.0, 2.0]",
              "+I[1, 4.3333335, 13, 5.5, 3.0, 3.0, 4.3333335, 8.0, 5.0, 5.0]",
              "+I[1, 4.3333335, 6, 4.3333335, 2.0, 3.0, 2.5, 4.3333335, 3.0, 2.0]",
              "+I[2, 2.0, 9, 2.0, 4.0, 4.0, 2.0, 2.0, 4.0, 4.0]",
              "+I[2, 2.0, 3, 2.0, 2.0, 4.0, 1.0, 2.0, 4.0, 2.0]",
              "+I[3, 2.0, 3, 2.0, 1.0, 1.0, 2.0, 2.0, 1.0, 1.0]",
          ],
      )
  
imports: import uuid
  from pyflink.table.expressions import col, call, lit, row_interval
  from pyflink.table.types import DataTypes
  from pyflink.table.udf import udaf, udf, AggregateFunction
  from pyflink.testing import source_sink_utils
  from pyflink.testing.test_case_utils import PyFlinkBatchTableTestCase, PyFlinkStreamTableTestCase
label_desc: Use image node_id 8 for calling the BatchPandasUDAFITTests obj's underlying member method code with example usage: obj.test_over_window_aggregate_function() without return types