code: def test_austourists_additive(printer, austourists):
      """https://otexts.com/fpp2/holt-winters.html#example-international-tourist-visitor-nights-in-australia"""
  
      model = HoltWinters(
          alpha=0.3063, beta=1e-04, gamma=0.4263, seasonality=4
      )
      model.level.append(32.2597)
      model.trend.append(0.7014)
      model.season.extend([9.6962, -9.3132, -1.6935, 1.3106])
      model._initialized = True
  
      template = "{:>2d} | {:>8.2f} | {:>8.2f} | {:>8.2f} | {:>11.2f} | {:>8.2f}"
      printer(
          "t  | y        | level    | trend    | seasonality | y_pred"
      )
      printer(
          "------------------------------------------------------------"
      )
  
      for t, y in enumerate(austourists, start=1):
          y_pred = model.forecast(1)[0]
          model.learn_one(y)
          printer(
              template.format(
                  t,
                  y,
                  model.level[-1],
                  model.trend[-1],
                  model.season[-1],
                  y_pred,
              )
          )
  
      for h, y_pred in enumerate(model.forecast(8), start=1):
          printer(
              f"{t + h:>2d} |          |          |          |             |    {y_pred:.2f}"
          )
  
      expected = """
  t  | y        | level    | trend    | seasonality | y_pred
  ------------------------------------------------------------
   1 |    42.21 |    32.82 |     0.70 |        9.50 |    42.66
   2 |    24.65 |    33.66 |     0.70 |       -9.13 |    24.21
   3 |    32.67 |    34.36 |     0.70 |       -1.69 |    32.67
   4 |    37.26 |    35.33 |     0.70 |        1.69 |    36.37
   5 |    45.24 |    35.94 |     0.70 |        9.38 |    45.54
   6 |    29.35 |    37.21 |     0.70 |       -8.35 |    27.52
   7 |    36.34 |    37.95 |     0.70 |       -1.64 |    36.21
   8 |    41.78 |    39.09 |     0.70 |        2.30 |    40.34
   9 |    49.28 |    39.83 |     0.70 |        9.42 |    49.17
  10 |    31.28 |    40.25 |     0.70 |       -8.73 |    32.18
  11 |    37.85 |    40.50 |     0.70 |       -2.26 |    39.31
  12 |    38.84 |    39.77 |     0.70 |        0.31 |    43.51
  13 |    51.24 |    40.89 |     0.70 |        9.99 |    49.90
  14 |    31.84 |    41.28 |     0.70 |       -9.16 |    32.85
  15 |    41.32 |    42.47 |     0.70 |       -1.58 |    39.72
  16 |    42.80 |    42.96 |     0.70 |        0.02 |    43.48
  17 |    55.71 |    44.29 |     0.70 |       10.87 |    53.66
  18 |    33.41 |    44.25 |     0.70 |      -10.20 |    35.83
  19 |    42.32 |    44.63 |     0.70 |       -2.03 |    43.38
  20 |    45.16 |    45.27 |     0.70 |       -0.06 |    45.35
  21 |    59.58 |    46.81 |     0.70 |       12.04 |    56.84
  22 |    34.84 |    46.75 |     0.70 |      -11.25 |    37.31
  23 |    44.84 |    47.27 |     0.70 |       -2.28 |    45.43
  24 |    46.97 |    47.69 |     0.70 |       -0.46 |    47.91
  25 |    60.02 |    48.26 |     0.70 |       11.86 |    60.42
  26 |    38.37 |    49.17 |     0.70 |      -10.97 |    37.71
  27 |    46.98 |    49.68 |     0.70 |       -2.54 |    47.59
  28 |    50.73 |    50.63 |     0.70 |       -0.12 |    49.92
  29 |    61.65 |    50.86 |     0.70 |       11.20 |    63.20
  30 |    39.30 |    51.16 |     0.70 |      -11.52 |    40.59
  31 |    52.67 |    52.89 |     0.70 |       -1.11 |    49.33
  32 |    54.33 |    53.85 |     0.70 |        0.25 |    53.48
  33 |    66.83 |    54.88 |     0.70 |       11.66 |    65.76
  34 |    40.87 |    54.61 |     0.70 |      -12.88 |    44.07
  35 |    51.83 |    54.58 |     0.70 |       -2.12 |    54.20
  36 |    57.49 |    55.88 |     0.70 |        1.08 |    55.53
  37 |    65.25 |    55.67 |     0.70 |       10.38 |    68.25
  38 |    43.06 |    56.24 |     0.70 |      -13.06 |    43.49
  39 |    54.76 |    56.92 |     0.70 |       -2.15 |    54.82
  40 |    59.83 |    57.97 |     0.70 |        1.56 |    58.71
  41 |    73.26 |    59.96 |     0.70 |       12.18 |    69.05
  42 |    47.70 |    60.69 |     0.70 |      -13.02 |    47.59
  43 |    61.10 |    61.96 |     0.70 |       -1.36 |    59.24
  44 |    66.06 |    63.22 |     0.70 |        2.34 |    64.22
  45 |          |          |          |             |    76.10
  46 |          |          |          |             |    51.60
  47 |          |          |          |             |    63.97
  48 |          |          |          |             |    68.37
  49 |          |          |          |             |    78.90
  50 |          |          |          |             |    54.41
  51 |          |          |          |             |    66.77
  52 |          |          |          |             |    71.18"""
  
      assert repr(printer).strip() == expected.strip()
  
file_path: river/river/time_series/test_holt_winters.py
imports: from __future__ import annotations
  import io
  import pytest
  from river.time_series import HoltWinters
label_desc: Use image node_id 7 for calling a global function with example usage: test_austourists_additive(printer, austourists) without return types