parameters: (op, op_str, a, b, dtype_check)
return_statement: return False
docstring: return a boolean if we WILL be using numexpr
docstring_summary: return a boolean if we WILL be using numexpr
docstring_tokens: return a boolean if we WILL be using numexpr
function: def _can_use_numexpr(op, op_str, a, b, dtype_check):
      """ return a boolean if we WILL be using numexpr """
      if op_str is not None:
  
          # required min elements (otherwise we are adding overhead)
          if np.prod(a.shape) > _MIN_ELEMENTS:
  
              # check for dtype compatibility
              dtypes = set()
              for o in [a, b]:
                  if hasattr(o, 'get_dtype_counts'):
                      s = o.get_dtype_counts()
                      if len(s) > 1:
                          return False
                      dtypes |= set(s.index)
                  elif isinstance(o, np.ndarray):
                      dtypes |= {o.dtype.name}
  
              # allowed are a superset
              if not len(dtypes) or _ALLOWED_DTYPES[dtype_check] >= dtypes:
                  return True
  
      return False
function_tokens: def _can_use_numexpr ( op , op_str , a , b , dtype_check ) : if op_str is not None : # required min elements (otherwise we are adding overhead) if np . prod ( a . shape ) > _MIN_ELEMENTS : # check for dtype compatibility dtypes = set ( ) for o in [ a , b ] : if hasattr ( o , 'get_dtype_counts' ) : s = o . get_dtype_counts ( ) if len ( s ) > 1 : return False dtypes |= set ( s . index ) elif isinstance ( o , np . ndarray ) : dtypes |= { o . dtype . name } # allowed are a superset if not len ( dtypes ) or _ALLOWED_DTYPES [ dtype_check ] >= dtypes : return True return False