code: def _numba_single_join(
      left: pd.Series,
      right: pd.Series,
      op: str,
      keep: str,
  ) -> tuple:
      """Return matching indices for single non-equi join."""
  
      if op == "!=":
          return _generic_func_cond_join(
              left=left,
              right=right,
              op=op,
              multiple_conditions=True,
              keep=keep,
          )
  
      strict = True if op in {"<", ">"} else False
  
      if op in less_than_join_types:
          # quick break, avoiding the hassle
          if left.min() > right.max():
              return None
  
          outcome = _null_checks_cond_join(left=left, right=right)
          if not outcome:
              return None
          (
              left,
              right,
              left_index,
              right_index,
              right_is_sorted,
              any_nulls,
          ) = outcome
  
          left, right = _convert_to_numpy(left=left, right=right)
          outcome = _less_than_indices_numba(
              left_array=left,
              right_array=right,
              strict=strict,
              left_index=left_index,
              right_index=right_index,
              keep=keep,
              right_is_sorted=right_is_sorted,
              any_nulls=any_nulls,
          )
  
      elif op in greater_than_join_types:
          # quick break, avoiding the hassle
          if left.max() < right.min():
              return None
  
          outcome = _null_checks_cond_join(left=left, right=right)
          if not outcome:
              return None
          (
              left,
              right,
              left_index,
              right_index,
              right_is_sorted,
              any_nulls,
          ) = outcome
  
          left, right = _convert_to_numpy(left=left, right=right)
          outcome = _greater_than_indices_numba(
              left_array=left,
              right_array=right,
              strict=strict,
              left_index=left_index,
              right_index=right_index,
              keep=keep,
              right_is_sorted=right_is_sorted,
              any_nulls=any_nulls,
          )
  
      if outcome[0] is None:
          return None
      return outcome
  
file_path: pyjanitor/janitor/functions/_numba.py
imports: import numpy
  import pandas
  from numba import njit, prange
  from pandas.api.types import is_datetime64_dtype, is_extension_array_dtype
  from janitor.functions.utils import _generic_func_cond_join, _null_checks_cond_join, greater_than_join_types, less_than_join_types
label_desc: Use image node_id 14 for calling a global function with example usage: _numba_single_join(left, right, op, keep) and returns: outcome, _generic_func_cond_join, None, None, None, None, None