[matter_yamltests] Replace python 3.9 list/tuple syntax with typing.List/typing.Tuple (#26873)

diff --git a/scripts/py_matter_yamltests/matter_yamltests/constraints.py b/scripts/py_matter_yamltests/matter_yamltests/constraints.py
index fb0ecd8..572da63 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/constraints.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/constraints.py
@@ -18,6 +18,7 @@
 import re
 import string
 from abc import ABC, abstractmethod
+from typing import List
 
 from .errors import TestStepError
 
@@ -759,7 +760,7 @@
         return f'The response value "{value}" is not a value from {self._any_of}.'
 
 
-def get_constraints(constraints: dict) -> list[BaseConstraint]:
+def get_constraints(constraints: dict) -> List[BaseConstraint]:
     _constraints = []
     context = constraints
 
diff --git a/scripts/py_matter_yamltests/matter_yamltests/definitions.py b/scripts/py_matter_yamltests/matter_yamltests/definitions.py
index 23995fa..8597262 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/definitions.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/definitions.py
@@ -161,17 +161,17 @@
 
         return None
 
-    def get_command_names(self, cluster_name: str) -> list[str]:
+    def get_command_names(self, cluster_name: str) -> List[str]:
         targets = self.__get_targets_by_cluster_name(
             cluster_name, _ItemType.Request)
         return [] if targets is None else [name for name in targets]
 
-    def get_event_names(self, cluster_name: str) -> list[str]:
+    def get_event_names(self, cluster_name: str) -> List[str]:
         targets = self.__get_targets_by_cluster_name(
             cluster_name, _ItemType.Event)
         return [] if targets is None else [name for name in targets]
 
-    def get_attribute_names(self, cluster_name: str) -> list[str]:
+    def get_attribute_names(self, cluster_name: str) -> List[str]:
         targets = self.__get_targets_by_cluster_name(
             cluster_name, _ItemType.Attribute)
         return [] if targets is None else [name for name in targets]
diff --git a/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py b/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py
index 2305900..70a4eb0 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/parser_builder.py
@@ -16,6 +16,7 @@
 import copy
 import time
 from dataclasses import dataclass, field
+from typing import List
 
 from .hooks import TestParserHooks
 from .parser import TestParser, TestParserConfig
@@ -50,7 +51,7 @@
            parsing. It may may allow the callers to gain insights about the
            current parsing state.
     """
-    tests: list[str] = field(default_factory=list)
+    tests: List[str] = field(default_factory=list)
     parser_config: TestParserConfig = field(default_factory=TestParserConfig)
     hooks: TestParserHooks = TestParserHooks()
     options: TestParserBuilderOptions = field(
diff --git a/scripts/py_matter_yamltests/matter_yamltests/pics_checker.py b/scripts/py_matter_yamltests/matter_yamltests/pics_checker.py
index e349761..af43210 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/pics_checker.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/pics_checker.py
@@ -14,6 +14,7 @@
 #    limitations under the License.
 
 import unicodedata
+from typing import List
 
 _COMMENT_CHARACTER = '#'
 _VALUE_SEPARATOR = '='
@@ -78,7 +79,7 @@
                 line = f.readline()
         return pics
 
-    def __evaluate_expression(self, tokens: list[str], pics: dict):
+    def __evaluate_expression(self, tokens: List[str], pics: dict):
         leftExpr = self.__evaluate_sub_expression(tokens, pics)
         if self.__expression_index >= len(tokens):
             return leftExpr
@@ -102,7 +103,7 @@
 
         raise InvalidPICSParsingError(f'Unknown token: {token}')
 
-    def __evaluate_sub_expression(self, tokens: list[str], pics: dict):
+    def __evaluate_sub_expression(self, tokens: List[str], pics: dict):
         token = tokens[self.__expression_index]
         if token == '(':
             self.__expression_index += 1
diff --git a/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/pseudo_clusters.py b/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/pseudo_clusters.py
index 2f453c0..eabd286 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/pseudo_clusters.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/pseudo_clusters/pseudo_clusters.py
@@ -12,6 +12,8 @@
 #    See the License for the specific language governing permissions and
 #    limitations under the License.
 
+from typing import List
+
 from .clusters.commissioner_commands import CommissionerCommands
 from .clusters.delay_commands import DelayCommands
 from .clusters.discovery_commands import DiscoveryCommands
@@ -22,7 +24,7 @@
 
 
 class PseudoClusters:
-    def __init__(self, clusters: list[PseudoCluster]):
+    def __init__(self, clusters: List[PseudoCluster]):
         self.clusters = clusters
 
     def supports(self, request) -> bool:
diff --git a/scripts/py_matter_yamltests/matter_yamltests/yaml_loader.py b/scripts/py_matter_yamltests/matter_yamltests/yaml_loader.py
index 33fd8b9..a8cf541 100644
--- a/scripts/py_matter_yamltests/matter_yamltests/yaml_loader.py
+++ b/scripts/py_matter_yamltests/matter_yamltests/yaml_loader.py
@@ -13,7 +13,7 @@
 #    See the License for the specific language governing permissions and
 #    limitations under the License.
 
-from typing import Union
+from typing import Tuple, Union
 
 from .errors import (TestStepError, TestStepGroupResponseError, TestStepInvalidTypeError, TestStepKeyError,
                      TestStepNodeIdAndGroupIdError, TestStepValueAndValuesError, TestStepVerificationStandaloneError,
@@ -33,7 +33,7 @@
 class YamlLoader:
     """This class loads a file from the disk and validates that the content is a well formed yaml test."""
 
-    def load(self, yaml_file: str) -> tuple[str, Union[list, str], dict, list]:
+    def load(self, yaml_file: str) -> Tuple[str, Union[list, str], dict, list]:
         filename = ''
         name = ''
         pics = None
diff --git a/scripts/tests/yaml/chiptool.py b/scripts/tests/yaml/chiptool.py
index eb24257..f36e29f 100755
--- a/scripts/tests/yaml/chiptool.py
+++ b/scripts/tests/yaml/chiptool.py
@@ -19,6 +19,7 @@
 import asyncio
 import json
 import sys
+from typing import List
 
 import click
 from matter_chip_tool_adapter.decoder import MatterLog
@@ -31,7 +32,7 @@
 
 
 @click.pass_context
-def send_yaml_command(ctx, test_name: str, server_path: str, server_arguments: str, pics: str, additional_pseudo_clusters_directory: str, commands: list[str]):
+def send_yaml_command(ctx, test_name: str, server_path: str, server_arguments: str, pics: str, additional_pseudo_clusters_directory: str, commands: List[str]):
     kwargs = {'test_name': test_name, 'pics': pics, 'additional_pseudo_clusters_directory': additional_pseudo_clusters_directory}
 
     index = 0
@@ -125,7 +126,7 @@
 @click.argument('commands', nargs=-1)
 @chiptool_runner_options
 @click.pass_context
-def chiptool_py(ctx, commands: list[str], server_path: str, server_name: str, server_arguments: str, trace_file: str, trace_decode: bool, delay_in_ms: int, continueonfailure: bool, pics: str, additional_pseudo_clusters_directory: str):
+def chiptool_py(ctx, commands: List[str], server_path: str, server_name: str, server_arguments: str, trace_file: str, trace_decode: bool, delay_in_ms: int, continueonfailure: bool, pics: str, additional_pseudo_clusters_directory: str):
     success = False
 
     server_arguments = maybe_update_server_arguments(ctx)
diff --git a/scripts/tests/yaml/tests_finder.py b/scripts/tests/yaml/tests_finder.py
index 0eaa43f..99ee4a1 100755
--- a/scripts/tests/yaml/tests_finder.py
+++ b/scripts/tests/yaml/tests_finder.py
@@ -15,6 +15,7 @@
 
 import json
 import os.path
+from typing import List
 
 import click
 
@@ -40,7 +41,7 @@
     def get_default_configuration_name() -> str:
         return _CI_CONFIGURATION_NAME
 
-    def get(self, test_name: str) -> list[str]:
+    def get(self, test_name: str) -> List[str]:
         test_names = []
 
         if self.__test_collections and test_name == _KEYWORD_ALL_TESTS:
@@ -54,7 +55,7 @@
 
         return self.__get_paths(test_names)
 
-    def __get_collections(self, configuration_directory: str, configuration_name: str) -> list[str]:
+    def __get_collections(self, configuration_directory: str, configuration_name: str) -> List[str]:
         if os.path.isfile(configuration_name):
             configuration_filepath = configuration_name
         elif os.path.isfile(os.path.join(configuration_directory, configuration_name + _JSON_FILE_EXTENSION)):
@@ -82,7 +83,7 @@
 
         return collections
 
-    def __get_paths(self, test_names: list[str]) -> list[str]:
+    def __get_paths(self, test_names: List[str]) -> List[str]:
         paths = []
 
         for name in test_names: