code: def normalize_squeeze_default(match: Match, *args, **kwargs):
      squeeze_node = match.nodes[0]
      squeeze_input = get_arg_value(squeeze_node, 0)
  
      if "dim" in squeeze_node.kwargs:
          assert len(squeeze_node.args) == 1
          dim = squeeze_node.kwargs["dim"]
      elif len(squeeze_node.args) == 1:
          # squeeze(Tensor)
          dim = None
      elif len(squeeze_node.args) == 2:
          # squeeze(Tensor self, int dim)
          # squeeze(Tensor self, int[] dim)
          dim = squeeze_node.args[1]
      else:
          # squeeze(Tensor self, int[] dim) (called with varargs)
          dim = squeeze_node.args[1:]
  
      if isinstance(dim, Sequence) and len(dim) == 1:
          dim = dim[0]
  
      with match.graph.inserting_after(squeeze_node):
          if dim is None:
              new_squeeze_node = match.graph.call_function(
                  torch.squeeze, args=(squeeze_input,)
              )
          else:
              new_squeeze_node = match.graph.call_function(
                  torch.squeeze,
                  args=(squeeze_input,),
                  kwargs={"dim": dim},
              )
      squeeze_node.replace_all_uses_with(new_squeeze_node)
      match.graph.erase_node(squeeze_node)
  
imports: import itertools
  import logging
  import operator
  from typing import Any, Callable, List, Optional, Sequence, Set, Tuple, Union
  from typing_extensions import TypeAlias
  import torch
  from torch._dynamo.utils import counters
  from ..pattern_matcher import Arg, CallFunction, CallFunctionVarArgs, CallMethodVarArgs, config_flag, FailedMatch, get_arg_value, Ignored, KeywordArg, ListOf, Match, MatchContext, MULTIPLE, PatternExpr, register_graph_pattern, RepeatedExpr
  from .pre_grad import merge_getitem_cat_pass, merge_splits_pass, normalization_pass, split_cat_pass, unbind_stack_pass
label_desc: Use image node_id 8 for calling a global function with example usage: normalize_squeeze_default(match) without return types