parameters: (
      left: Union[np.ndarray, ABCExtensionArray], right: Any, op, str_rep: str
  )
return_statement: return res_values
docstring: Evaluate an arithmetic operation `+`, `-`, `*`, `/`, `//`, `%`, `**`, ...
  
      Parameters
      ----------
      left : np.ndarray or ExtensionArray
      right : object
          Cannot be a DataFrame or Index.  Series is *not* excluded.
      op : {operator.add, operator.sub, ...}
          Or one of the reversed variants from roperator.
      str_rep : str
  
      Returns
      -------
      ndarrray or ExtensionArray
          Or a 2-tuple of these in the case of divmod or rdivmod.
docstring_summary: Evaluate an arithmetic operation `+`, `-`, `*`, `/`, `//`, `%`, `**`, ...
docstring_tokens: Evaluate an arithmetic operation + - * / // % ** ...
function: def arithmetic_op(
      left: Union[np.ndarray, ABCExtensionArray], right: Any, op, str_rep: str
  ):
      """
      Evaluate an arithmetic operation `+`, `-`, `*`, `/`, `//`, `%`, `**`, ...
  
      Parameters
      ----------
      left : np.ndarray or ExtensionArray
      right : object
          Cannot be a DataFrame or Index.  Series is *not* excluded.
      op : {operator.add, operator.sub, ...}
          Or one of the reversed variants from roperator.
      str_rep : str
  
      Returns
      -------
      ndarrray or ExtensionArray
          Or a 2-tuple of these in the case of divmod or rdivmod.
      """
  
      from pandas.core.ops import maybe_upcast_for_op
  
      # NB: We assume that extract_array has already been called
      #  on `left` and `right`.
      lvalues = left
      rvalues = right
  
      rvalues = maybe_upcast_for_op(rvalues, lvalues.shape)
  
      if should_extension_dispatch(left, rvalues) or isinstance(
          rvalues, (ABCTimedeltaArray, ABCDatetimeArray, Timestamp, Timedelta)
      ):
          # TimedeltaArray, DatetimeArray, and Timestamp are included here
          #  because they have `freq` attribute which is handled correctly
          #  by dispatch_to_extension_op.
          # Timedelta is included because numexpr will fail on it, see GH#31457
          res_values = dispatch_to_extension_op(op, lvalues, rvalues)
  
      else:
          with np.errstate(all="ignore"):
              res_values = na_arithmetic_op(lvalues, rvalues, op, str_rep)
  
      return res_values
function_tokens: def arithmetic_op ( left : Union [ np . ndarray , ABCExtensionArray ] , right : Any , op , str_rep : str ) : from pandas . core . ops import maybe_upcast_for_op # NB: We assume that extract_array has already been called #  on `left` and `right`. lvalues = left rvalues = right rvalues = maybe_upcast_for_op ( rvalues , lvalues . shape ) if should_extension_dispatch ( left , rvalues ) or isinstance ( rvalues , ( ABCTimedeltaArray , ABCDatetimeArray , Timestamp , Timedelta ) ) : # TimedeltaArray, DatetimeArray, and Timestamp are included here #  because they have `freq` attribute which is handled correctly #  by dispatch_to_extension_op. # Timedelta is included because numexpr will fail on it, see GH#31457 res_values = dispatch_to_extension_op ( op , lvalues , rvalues ) else : with np . errstate ( all = "ignore" ) : res_values = na_arithmetic_op ( lvalues , rvalues , op , str_rep ) return res_values