docstr: Find all interesting expressions in the given tree that can be safely evaluated,
  grouping equivalent nodes together.
  
  For more control and details, see:
   - Evaluator.find_expressions
   - is_expression_interesting
   - group_expressions
  
  :param root: any AST node
  :return: A list of pairs (tuples) containing:
              - A list of equivalent AST expressions
              - The value of the first expression node
                 (which should be the same for all nodes, unless threads are involved)
docstr_tok: ["Find","all","interesting","expressions","in","the","given","tree","that","can","be","safely","evaluated",",","grouping","equivalent","nodes","together",".","For","more","control","and","details",",","see",":","-","Evaluator.find_expressions","-","is_expression_interesting","-","group_expressions",":","param","root",":","any","AST","node",":","return",":","A","list","of","pairs","(","tuples",")","containing",":","-","A","list","of","equivalent","AST","expressions","-","The","value","of","the","first","expression","node","(","which","should","be","the","same","for","all","nodes",",","unless","threads","are","involved",")"]
code: def interesting_expressions_grouped(
      self, root: ast.AST
  ) -> List[Tuple[List[ast.expr], Any]]:
      """
      Find all interesting expressions in the given tree that can be safely evaluated,
      grouping equivalent nodes together.
  
      For more control and details, see:
       - Evaluator.find_expressions
       - is_expression_interesting
       - group_expressions
  
      :param root: any AST node
      :return: A list of pairs (tuples) containing:
                  - A list of equivalent AST expressions
                  - The value of the first expression node
                     (which should be the same for all nodes, unless threads are involved)
      """
  
      return group_expressions(
          pair
          for pair in self.find_expressions(root)
          if is_expression_interesting(*pair)
      )
  
imports: import ast
  import builtins
  import operator
  from collections import ChainMap, OrderedDict, deque
  from contextlib import suppress
  from types import FrameType
  from typing import Any, Tuple, Iterable, List, Mapping, Dict, Union, Set
  from pure_eval.my_getattr_static import getattr_static
  from pure_eval.utils import CannotEval, has_ast_name, copy_ast_without_context, is_standard_types, of_standard_types, is_any, of_type, ensure_dict
label_desc: Use image node_id 13 for calling the Evaluator obj's underlying member method code with example usage: obj.interesting_expressions_grouped(root) and returns: group_expressions