code: def test_codes_out_of_bound(self):
      values = np.array([3, 1, 2, 0, 4])
      expected = np.array([0, 1, 2, 3, 4])
  
      # out of bound indices
      codes = [0, 101, 102, 2, 3, 0, 99, 4]
      result, result_codes = safe_sort(
          values, codes, use_na_sentinel=True
      )
      expected_codes = np.array(
          [3, -1, -1, 2, 0, 3, -1, 4], dtype=np.intp
      )
      tm.assert_numpy_array_equal(result, expected)
      tm.assert_numpy_array_equal(result_codes, expected_codes)
  
imports: from collections import defaultdict
  from datetime import datetime
  from itertools import product
  import numpy
  import pytest
  from pandas import NA, DataFrame, MultiIndex, Series, array, concat, merge
  import pandas._testing
  from pandas.core.algorithms import safe_sort
  import pandas.core.common
  from pandas.core.sorting import _decons_group_index, get_group_index, is_int64_overflow_possible, lexsort_indexer, nargsort
label_desc: Use image node_id 3 for calling the TestSafeSort obj's underlying member method code with example usage: obj.test_codes_out_of_bound() without return types