class_docstr: Finds a set of nodes that can be supported on ACC, excluding nodes that have non-tensor
  input/output to cpu nodes to prevent non-tensor data flow between backends and cpu.
  
  I.e. if we have a chain:
  
  ACC_NODE_1 -> ACC_NODE_2 -> ACC_NODE_3 -> CPU_NODE_1
  
  where every ACC node produces non-tensor output, then they all should be treated as CPU nodes.
  
  This behavior can be turned off by passing allow_non_tensor=True.
class_docstr_tok: ["Finds","a","set","of","nodes","that","can","be","supported","on","ACC",",","excluding","nodes","that","have","non-tensor","input\/output","to","cpu","nodes","to","prevent","non-tensor","data","flow","between","backends","and","cpu",".","I.e",".","if","we","have","a","chain",":","ACC_NODE_1","-",">","ACC_NODE_2","-",">","ACC_NODE_3","-",">","CPU_NODE_1","where","every","ACC","node","produces","non-tensor","output",",","then","they","all","should","be","treated","as","CPU","nodes",".","This","behavior","can","be","turned","off","by","passing","allow_non_tensor=True","."]
docstr: Excludes nodes from ACC supported set that have direct
  upstream CPU nodes that produce non-tensor outputs.
docstr_tok: ["Excludes","nodes","from","ACC","supported","set","that","have","direct","upstream","CPU","nodes","that","produce","non-tensor","outputs","."]
code: def reduce_acc_nodes_non_tensor_input(self):
      """
      Excludes nodes from ACC supported set that have direct
      upstream CPU nodes that produce non-tensor outputs.
      """
      non_tensor_cpu_nodes: NodeList = []
  
      for node in self.module.graph.nodes:
          if node.op not in CALLABLE_NODE_OPS:
              continue
          if node in self.acc_nodes:
              continue
          if is_node_output_tensor(node):
              continue
          non_tensor_cpu_nodes.append(node)
  
      self.reduce_acc_nodes_non_tensor_input_helper(
          non_tensor_cpu_nodes
      )
  
imports: import argparse
  import copy
  from collections import defaultdict
  from dataclasses import dataclass
  from typing import NamedTuple, Sequence, Iterable, Any, List, Dict, Optional, Tuple
  import logging
  import torch
  from torch.fx.passes.graph_manipulation import get_size_of_node
  from torch.fx.node import map_arg
  from torch.fx._compatibility import compatibility
  from .operator_support import get_node_target, OperatorSupportBase
  from .graph_drawer import FxGraphDrawer
  from .shape_prop import ShapeProp
  from .split_utils import split_by_tags
  from .tools_common import FxNetAccFusionsFinder, CALLABLE_NODE_OPS, Tensors, NodeList, NodeSet, is_node_output_tensor
label_desc: Use image node_id 3 for calling the FxNetAccNodesFinder obj's underlying member method code with example usage: obj.reduce_acc_nodes_non_tensor_input() without return types