code: def find_matching_long_package_names(
      short_packages: tuple[str, ...],
      filters: tuple[str, ...] | None = None,
  ) -> tuple[str, ...]:
      """Finds matching long package names based on short package name and package filters specified.
  
      The sequence of specified packages / filters is kept (filters first, packages next). In case there
      are filters that do not match any of the packages error is raised.
  
      :param short_packages: short forms of package names
      :param filters: package filters specified
      """
      available_doc_packages = list(
          get_long_package_names(
              get_available_packages(
                  include_non_provider_doc_packages=True
              )
          )
      )
      if not filters and not short_packages:
          available_doc_packages.extend(filters or ())
          return tuple(set(available_doc_packages))
  
      processed_package_filters = list(filters or ())
      processed_package_filters.extend(
          get_long_package_names(short_packages)
      )
  
      removed_packages: list[str] = [
          f"apache-airflow-providers-{provider.replace('.','-')}"
          for provider in get_removed_provider_ids()
      ]
      all_packages_including_removed: list[str] = (
          available_doc_packages + removed_packages
      )
      invalid_filters = [
          f
          for f in processed_package_filters
          if not any(
              fnmatch.fnmatch(p, f)
              for p in all_packages_including_removed
          )
      ]
      if invalid_filters:
          raise SystemExit(
              f"Some filters did not find any package: {invalid_filters}, Please check if they are correct."
          )
  
      return tuple(
          [
              p
              for p in all_packages_including_removed
              if any(
                  fnmatch.fnmatch(p, f)
                  for f in processed_package_filters
              )
          ]
      )
  
imports: from __future__ import annotations
  import fnmatch
  import json
  import os
  import subprocess
  import sys
  from enum import Enum
  from functools import lru_cache
  from pathlib import Path
  from typing import Any, Iterable, NamedTuple
  from airflow_breeze.global_constants import ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS, PROVIDER_DEPENDENCIES, PROVIDER_RUNTIME_DATA_SCHEMA_PATH, REGULAR_DOC_PACKAGES
  from airflow_breeze.utils.console import get_console
  from airflow_breeze.utils.path_utils import AIRFLOW_PROVIDERS_ROOT, BREEZE_SOURCES_ROOT, DOCS_ROOT, GENERATED_PROVIDER_PACKAGES_DIR, PROVIDER_DEPENDENCIES_JSON_FILE_PATH
  from airflow_breeze.utils.publish_docs_helpers import _load_schema, get_provider_yaml_paths
  from airflow_breeze.utils.run_utils import run_command
  from airflow_breeze.utils.versions import get_version_tag, strip_leading_zeros_from_version
label_desc: Use image node_id 17 for calling a global function with example usage: find_matching_long_package_names(short_packages, filters) and returns: tuple, tuple