class_docstr: The NodeHandler is an abstract class used to generate every possible strategies for an operator node.
  
  Args:
      node (Node): the input node in node argument list.
      device_mesh (DeviceMesh): A logical view of a physical mesh.
      strategies_vector (StrategiesVector): all the strategies generated in this handler will be recorded into the strategies_vector.
class_docstr_tok: ["The","NodeHandler","is","an","abstract","class","used","to","generate","every","possible","strategies","for","an","operator","node",".","Args",":","node","(","Node",")",":","the","input","node","in","node","argument","list",".","device_mesh","(","DeviceMesh",")",":","A","logical","view","of","a","physical","mesh",".","strategies_vector","(","StrategiesVector",")",":","all","the","strategies","generated","in","this","handler","will","be","recorded","into","the","strategies_vector","."]
docstr: This function is used to get the target function for the node handler.
  The target function is used to analyze the costs of strategies.
docstr_tok: ["This","function","is","used","to","get","the","target","function","for","the","node","handler",".","The","target","function","is","used","to","analyze","the","costs","of","strategies","."]
code: def get_target_function(self) -> callable:
      """
      This function is used to get the target function for the node handler.
      The target function is used to analyze the costs of strategies.
      """
      if self.node.op in ("placeholder", "get_attr", "output"):
          return None
  
      if self.node.op == "call_module":
          target = self.node.graph.owning_module.get_submodule(
              self.node.target
          )
      elif self.node.op == "call_function":
          target = self.node.target
      elif self.node.op == "call_method":
          target = getattr(
              self.node.args[0]._meta_data.__class__, self.node.target
          )
      else:
          raise ValueError(f"Unsupported node type: {self.node.op}")
  
      return target
  
imports: from abc import ABC, abstractmethod
  from typing import Dict, List, Tuple, Union
  import torch
  from torch.fx.node import Node
  from colossalai.auto_parallel.meta_profiler.shard_metainfo import ShardMetaInfo, meta_register
  from colossalai.auto_parallel.tensor_shard.options import ShardOption, SolverPerference
  from colossalai.auto_parallel.tensor_shard.sharding_strategy import OperationData, ShardingSpec, ShardingStrategy, StrategiesVector, TrainCycleItem
  from colossalai.auto_parallel.tensor_shard.utils import check_sharding_spec_validity
  from colossalai.device.device_mesh import DeviceMesh
  from colossalai.logging import get_dist_logger
  from colossalai.tensor.shape_consistency import ShapeConsistencyManager
  from .strategy import StrategyGenerator
label_desc: Use image node_id 3 for calling the NodeHandler obj's underlying member method code with example usage: obj.get_target_function() and returns: target, None