code: def get_package_class_summary(
      full_package_name: str, imported_classes: list[str]
  ) -> dict[EntityType, EntityTypeSummary]:
      """Gets summary of the package in the form of dictionary containing all types of entities.
  
      :param full_package_name: full package name
      :param imported_classes: entities imported_from providers
      :return: dictionary of objects usable as context for JINJA2 templates, or
          None if there are some errors
      """
      from airflow.hooks.base import BaseHook
      from airflow.models.baseoperator import BaseOperator
      from airflow.secrets import BaseSecretsBackend
      from airflow.sensors.base import BaseSensorOperator
      from airflow.triggers.base import BaseTrigger
  
      # Remove this conditional check after providers are 2.6+ compatible
      try:
          from airflow.notifications.basenotifier import BaseNotifier
  
          has_notifier = True
      except ImportError:
          has_notifier = False
  
      all_verified_entities: dict[EntityType, VerifiedEntities] = {
          EntityType.Operators: find_all_entities(
              imported_classes=imported_classes,
              base_package=full_package_name,
              sub_package_pattern_match=r".*\.operators\..*",
              ancestor_match=BaseOperator,
              expected_class_name_pattern=OPERATORS_PATTERN,
              unexpected_class_name_patterns=ALL_PATTERNS
              - {OPERATORS_PATTERN},
              exclude_class_type=BaseSensorOperator,
              false_positive_class_names={
                  "ProduceToTopicOperator",
                  "CloudVisionAddProductToProductSetOperator",
                  "CloudDataTransferServiceGCSToGCSOperator",
                  "CloudDataTransferServiceS3ToGCSOperator",
                  "BigQueryCreateDataTransferOperator",
                  "CloudTextToSpeechSynthesizeOperator",
                  "CloudSpeechToTextRecognizeSpeechOperator",
              },
          ),
          EntityType.Sensors: find_all_entities(
              imported_classes=imported_classes,
              base_package=full_package_name,
              sub_package_pattern_match=r".*\.sensors\..*",
              ancestor_match=BaseSensorOperator,
              expected_class_name_pattern=SENSORS_PATTERN,
              unexpected_class_name_patterns=ALL_PATTERNS
              - {OPERATORS_PATTERN, SENSORS_PATTERN},
          ),
          EntityType.Hooks: find_all_entities(
              imported_classes=imported_classes,
              base_package=full_package_name,
              sub_package_pattern_match=r".*\.hooks\..*",
              ancestor_match=BaseHook,
              expected_class_name_pattern=HOOKS_PATTERN,
              unexpected_class_name_patterns=ALL_PATTERNS
              - {HOOKS_PATTERN},
          ),
          EntityType.Secrets: find_all_entities(
              imported_classes=imported_classes,
              sub_package_pattern_match=r".*\.secrets\..*",
              base_package=full_package_name,
              ancestor_match=BaseSecretsBackend,
              expected_class_name_pattern=SECRETS_PATTERN,
              unexpected_class_name_patterns=ALL_PATTERNS
              - {SECRETS_PATTERN},
          ),
          EntityType.Transfers: find_all_entities(
              imported_classes=imported_classes,
              base_package=full_package_name,
              sub_package_pattern_match=r".*\.transfers\..*",
              ancestor_match=BaseOperator,
              expected_class_name_pattern=TRANSFERS_PATTERN,
              unexpected_class_name_patterns=ALL_PATTERNS
              - {OPERATORS_PATTERN, TRANSFERS_PATTERN},
          ),
          EntityType.Trigger: find_all_entities(
              imported_classes=imported_classes,
              base_package=full_package_name,
              sub_package_pattern_match=r".*\.triggers\..*",
              ancestor_match=BaseTrigger,
              expected_class_name_pattern=TRIGGER_PATTERN,
              unexpected_class_name_patterns=ALL_PATTERNS
              - {TRIGGER_PATTERN},
          ),
      }
      if has_notifier:
          all_verified_entities[
              EntityType.Notification
          ] = find_all_entities(
              imported_classes=imported_classes,
              base_package=full_package_name,
              sub_package_pattern_match=r".*\.notifications\..*",
              ancestor_match=BaseNotifier,
              expected_class_name_pattern=NOTIFICATION_PATTERN,
              unexpected_class_name_patterns=ALL_PATTERNS
              - {NOTIFICATION_PATTERN},
          )
      else:
          all_verified_entities[
              EntityType.Notification
          ] = VerifiedEntities(all_entities=set(), wrong_entities=[])
  
      for entity in EntityType:
          print_wrong_naming(
              entity, all_verified_entities[entity].wrong_entities
          )
  
      entities_summary: dict[EntityType, EntityTypeSummary] = {}
  
      for entity_type in EntityType:
          entities_summary[entity_type] = get_details_about_classes(
              entity_type,
              all_verified_entities[entity_type].all_entities,
              all_verified_entities[entity_type].wrong_entities,
              full_package_name,
          )
  
      return entities_summary
  
imports: from __future__ import annotations
  import importlib
  import json
  import logging
  import os
  import pkgutil
  import re
  import subprocess
  import sys
  import traceback
  import warnings
  from enum import Enum
  from inspect import isclass
  from pathlib import Path
  from typing import NamedTuple
  from rich.console import Console
  from airflow.exceptions import AirflowOptionalProviderFeatureException
  from airflow.secrets import BaseSecretsBackend
label_desc: Use image node_id 16 for calling a global function with example usage: get_package_class_summary(full_package_name, imported_classes) and returns: entities_summary