def METHOD_NAME(operator_name, arr_method_name=None):
    # `operator_name` is the name of the method on the numpy API
    # `arr_method_name` is the name of the method on the modin.numpy.array object,
    # which is assumed to be `operator_name` by default
    @_inherit_docstrings(getattr(numpy, operator_name))
    def call(x, *args, **kwargs):
        x = try_convert_from_interoperable_type(x)
        if not isinstance(x, array):
            ErrorMessage.bad_type_for_numpy_op(operator_name, type(x))
            return getattr(numpy, operator_name)(x, *args, **kwargs)
        return getattr(x, arr_method_name or operator_name)(*args, **kwargs)
    return call