def _validate_for_numeric_binop(self, other, op):
opstr = '<STR_LIT>'.format(opname=op.__name__)<EOL>if not self._is_numeric_dtype:<EOL><INDENT>raise TypeError("<STR_LIT>"<EOL>"<STR_LIT>"<EOL>.format(opstr=opstr, typ=type(self).__name__))<EOL><DEDENT>if isinstance(other, Index):<EOL><INDENT>if not other._is_numeric_dtype:<EOL><INDENT>raise TypeError("<STR_LIT>"<EOL>"<STR_LIT>"<EOL>.format(opstr=opstr, typ=type(other)))<EOL><DEDENT><DEDENT>elif isinstance(other, np.ndarray) and not other.ndim:<EOL><INDENT>other = other.item()<EOL><DEDENT>if isinstance(other, (Index, ABCSeries, np.ndarray)):<EOL><INDENT>if len(self) != len(other):<EOL><INDENT>raise ValueError("<STR_LIT>"<EOL>"<STR_LIT>")<EOL><DEDENT>other = com.values_from_object(other)<EOL>if other.dtype.kind not in ['<STR_LIT:f>', '<STR_LIT:i>', '<STR_LIT:u>']:<EOL><INDENT>raise TypeError("<STR_LIT>"<EOL>"<STR_LIT>")<EOL><DEDENT><DEDENT>elif isinstance(other, (ABCDateOffset, np.timedelta64, timedelta)):<EOL><INDENT>pass<EOL><DEDENT>elif isinstance(other, (datetime, np.datetime64)):<EOL><INDENT>pass<EOL><DEDENT>else:<EOL><INDENT>if not (is_float(other) or is_integer(other)):<EOL><INDENT>raise TypeError("<STR_LIT>")<EOL><DEDENT><DEDENT>return other<EOL>
Return valid other; evaluate or raise TypeError if we are not of
the appropriate type.

Notes
-----
This is an internal method called by ops.