code: def test_3d_fill_nonna(self, dtype_fill_out_dtype):
      dtype, fill_value, out_dtype = dtype_fill_out_dtype
  
      data = (
          np.random.default_rng(2)
          .integers(0, 2, (5, 4, 3))
          .astype(dtype)
      )
      indexer = [2, 1, 0, -1]
  
      result = algos.take_nd(
          data, indexer, axis=0, fill_value=fill_value
      )
      assert (result[[0, 1, 2], :, :] == data[[2, 1, 0], :, :]).all()
      assert (result[3, :, :] == fill_value).all()
      assert result.dtype == out_dtype
  
      result = algos.take_nd(
          data, indexer, axis=1, fill_value=fill_value
      )
      assert (result[:, [0, 1, 2], :] == data[:, [2, 1, 0], :]).all()
      assert (result[:, 3, :] == fill_value).all()
      assert result.dtype == out_dtype
  
      result = algos.take_nd(
          data, indexer, axis=2, fill_value=fill_value
      )
      assert (result[:, :, [0, 1, 2]] == data[:, :, [2, 1, 0]]).all()
      assert (result[:, :, 3] == fill_value).all()
      assert result.dtype == out_dtype
  
      indexer = [2, 1, 0, 1]
      result = algos.take_nd(
          data, indexer, axis=0, fill_value=fill_value
      )
      assert (result[[0, 1, 2, 3], :, :] == data[indexer, :, :]).all()
      assert result.dtype == dtype
  
      result = algos.take_nd(
          data, indexer, axis=1, fill_value=fill_value
      )
      assert (result[:, [0, 1, 2, 3], :] == data[:, indexer, :]).all()
      assert result.dtype == dtype
  
      result = algos.take_nd(
          data, indexer, axis=2, fill_value=fill_value
      )
      assert (result[:, :, [0, 1, 2, 3]] == data[:, :, indexer]).all()
      assert result.dtype == dtype
  
imports: from datetime import datetime
  import numpy
  import pytest
  from pandas._libs import iNaT
  import pandas._testing
  import pandas.core.algorithms
label_desc: Use image node_id 3 for calling the TestTake obj's underlying member method code with example usage: obj.test_3d_fill_nonna(dtype_fill_out_dtype) without return types