code: def _can_fuse(node: ChunkType):
      op = node.op
      op_type = type(op)
      if op_type in REDUCTION_OP:
          if len(op.axis) == 1 or len(op.axis) == node.ndim:
              return REDUCTION
          else:
              return False
      # return op_type in SUPPORT_OP
      if op_type not in SUPPORT_OP:
          return False
      if op_type in (arithmetic.TensorOr, arithmetic.TensorAnd):
          # numexpr only support logical and or:
          # https://numexpr.readthedocs.io/projects/NumExpr3/en/latest/user_guide.html#supported-operators
          if np.isscalar(op.lhs) or np.isscalar(op.rhs):
              return False
      return True
  
file_path: mars/mars/optimization/physical/numexpr.py
imports: import dataclasses
  import functools
  import logging
  from typing import List, Set
  import numpy
  from ...core import ChunkType, ChunkGraph
  from ...tensor import arithmetic
  from ...tensor import reduction
  from ...tensor.fuse import TensorNeFuseChunk
  from ...tensor.fuse.numexpr import NUMEXPR_INSTALLED
  from .core import RuntimeOptimizer, register_optimizer
label_desc: Use image node_id 1 for calling a global function with example usage: _can_fuse(node) and returns: True, False, REDUCTION, False, False