class_docstr: A collection of tasks.
  
  When set_downstream() or set_upstream() are called on the TaskGroup, it is applied across
  all tasks within the group if necessary.
  
  :param group_id: a unique, meaningful id for the TaskGroup. group_id must not conflict
      with group_id of TaskGroup or task_id of tasks in the DAG. Root TaskGroup has group_id
      set to None.
  :param prefix_group_id: If set to True, child task_id and group_id will be prefixed with
      this TaskGroup's group_id. If set to False, child task_id and group_id are not prefixed.
      Default is True.
  :param parent_group: The parent TaskGroup of this TaskGroup. parent_group is set to None
      for the root TaskGroup.
  :param dag: The DAG that this TaskGroup belongs to.
  :param default_args: A dictionary of default parameters to be used
      as constructor keyword parameters when initialising operators,
      will override default_args defined in the DAG level.
      Note that operators have the same hook, and precede those defined
      here, meaning that if your dict contains `'depends_on_past': True`
      here and `'depends_on_past': False` in the operator's call
      `default_args`, the actual value will be `False`.
  :param tooltip: The tooltip of the TaskGroup node when displayed in the UI
  :param ui_color: The fill color of the TaskGroup node when displayed in the UI
  :param ui_fgcolor: The label color of the TaskGroup node when displayed in the UI
  :param add_suffix_on_collision: If this task group name already exists,
      automatically add `__1` etc suffixes
class_docstr_tok: ["A","collection","of","tasks",".","When","set_downstream","(",")","or","set_upstream","(",")","are","called","on","the","TaskGroup",",","it","is","applied","across","all","tasks","within","the","group","if","necessary",".",":","param","group_id",":","a","unique",",","meaningful","id","for","the","TaskGroup",".","group_id","must","not","conflict","with","group_id","of","TaskGroup","or","task_id","of","tasks","in","the","DAG",".","Root","TaskGroup","has","group_id","set","to","None",".",":","param","prefix_group_id",":","If","set","to","True",",","child","task_id","and","group_id","will","be","prefixed","with","this","TaskGroup","'s","group_id",".","If","set","to","False",",","child","task_id","and","group_id","are","not","prefixed",".","Default","is","True",".",":","param","parent_group",":","The","parent","TaskGroup","of","this","TaskGroup",".","parent_group","is","set","to","None","for","the","root","TaskGroup",".",":","param","dag",":","The","DAG","that","this","TaskGroup","belongs","to",".",":","param","default_args",":","A","dictionary","of","default","parameters","to","be","used","as","constructor","keyword","parameters","when","initialising","operators",",","will","override","default_args","defined","in","the","DAG","level",".","Note","that","operators","have","the","same","hook",",","and","precede","those","defined","here",",","meaning","that","if","your","dict","contains","`","'depends_on_past","'",":","True","`","here","and","`","'depends_on_past","'",":","False","`","in","the","operator","'s","call","`","default_args","`",",","the","actual","value","will","be","`","False","`",".",":","param","tooltip",":","The","tooltip","of","the","TaskGroup","node","when","displayed","in","the","UI",":","param","ui_color",":","The","fill","color","of","the","TaskGroup","node","when","displayed","in","the","UI",":","param","ui_fgcolor",":","The","label","color","of","the","TaskGroup","node","when","displayed","in","the","UI",":","param","add_suffix_on_collision",":","If","this","task","group","name","already","exists",",","automatically","add","`","__1","`","etc","suffixes"]
code: def __exit__(self, _type, _value, _tb):
      TaskGroupContext.pop_context_managed_task_group()
  
imports: from __future__ import annotations
  import copy
  import functools
  import operator
  import weakref
  from typing import TYPE_CHECKING, Any, Generator, Iterator, Sequence
  import re2
  from airflow.compat.functools import cache
  from airflow.exceptions import AirflowDagCycleException, AirflowException, DuplicateTaskIdFound, TaskAlreadyInTaskGroup
  from airflow.models.taskmixin import DAGNode
  from airflow.serialization.enums import DagAttributeTypes
  from airflow.utils.helpers import validate_group_key
label_desc: Use image node_id 16 for calling the TaskGroup obj's underlying member method code with example usage: obj.__exit__(_type, _value, _tb) without return types