class_docstr: Context manager for setup/teardown tasks.
  
  :meta private:
docstr: Set relationship between setup to setup and teardown to teardown.
  
  code:: python
      with setuptask >> teardowntask:
          with setuptask2 >> teardowntask2:
              ...
  
  We set setuptask >> setuptask2, teardowntask >> teardowntask2
docstr_tok: ["Set","relationship","between","setup","to","setup","and","teardown","to","teardown",".","code",":",":","python","with","setuptask",">",">","teardowntask",":","with","setuptask2",">",">","teardowntask2",":","...","We","set","setuptask",">",">","setuptask2",",","teardowntask",">",">","teardowntask2"]
code: def set_setup_teardown_relationships(cls):
      """
      Set relationship between setup to setup and teardown to teardown.
  
      code:: python
          with setuptask >> teardowntask:
              with setuptask2 >> teardowntask2:
                  ...
  
      We set setuptask >> setuptask2, teardowntask >> teardowntask2
      """
      setup_task = cls.pop_context_managed_setup_task()
      teardown_task = cls.pop_context_managed_teardown_task()
      if isinstance(setup_task, list):
          setup_task = tuple(setup_task)
      if isinstance(teardown_task, list):
          teardown_task = tuple(teardown_task)
      cls.pop_teardown_downstream_of_setup()
      cls.pop_setup_upstream_of_teardown()
      cls.context_map.pop(setup_task, None)
      cls.context_map.pop(teardown_task, None)
  
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, cast
  from airflow.exceptions import AirflowException
label_desc: Use image node_id 17 for calling the BaseSetupTeardownContext obj's underlying member method code with example usage: obj.set_setup_teardown_relationships(cls) without return types