code: def iter_children_ast(node, include_joined_str=False):
      # type: (AST, bool) -> Iterator[Union[AST, expr]]
      if not include_joined_str and is_joined_str(node):
          return
  
      if isinstance(node, ast.Dict):
          # override the iteration order: instead of <all keys>, <all values>,
          # yield keys and values in source order (key1, value1, key2, value2, ...)
          for key, value in zip(node.keys, node.values):
              if key is not None:
                  yield key
              yield value
          return
  
      for child in ast.iter_child_nodes(node):
          # Skip singleton children; they don't reflect particular positions in the code and break the
          # assumptions about the tree consisting of distinct nodes. Note that collecting classes
          # beforehand and checking them in a set is faster than using isinstance each time.
          if child.__class__ not in SINGLETONS:
              yield child
  
imports: import ast
  import collections
  import io
  import sys
  import token
  import tokenize
  from abc import ABCMeta
  from ast import Module, expr, AST
  from typing import Callable, Dict, Iterable, Iterator, List, Optional, Tuple, Union, cast, Any, TYPE_CHECKING
  from six import iteritems
label_desc: Use image node_id 7 for calling a global function with example usage: iter_children_ast(node, include_joined_str) without return types