test_indexers.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # Tests aimed at pandas.core.indexers
  2. import numpy as np
  3. import pytest
  4. from pandas.core.indexers import (
  5. is_scalar_indexer,
  6. length_of_indexer,
  7. validate_indices,
  8. )
  9. def test_length_of_indexer():
  10. arr = np.zeros(4, dtype=bool)
  11. arr[0] = 1
  12. result = length_of_indexer(arr)
  13. assert result == 1
  14. def test_is_scalar_indexer():
  15. indexer = (0, 1)
  16. assert is_scalar_indexer(indexer, 2)
  17. assert not is_scalar_indexer(indexer[0], 2)
  18. indexer = (np.array([2]), 1)
  19. assert not is_scalar_indexer(indexer, 2)
  20. indexer = (np.array([2]), np.array([3]))
  21. assert not is_scalar_indexer(indexer, 2)
  22. indexer = (np.array([2]), np.array([3, 4]))
  23. assert not is_scalar_indexer(indexer, 2)
  24. assert not is_scalar_indexer(slice(None), 1)
  25. indexer = 0
  26. assert is_scalar_indexer(indexer, 1)
  27. indexer = (0,)
  28. assert is_scalar_indexer(indexer, 1)
  29. class TestValidateIndices:
  30. def test_validate_indices_ok(self):
  31. indices = np.asarray([0, 1])
  32. validate_indices(indices, 2)
  33. validate_indices(indices[:0], 0)
  34. validate_indices(np.array([-1, -1]), 0)
  35. def test_validate_indices_low(self):
  36. indices = np.asarray([0, -2])
  37. with pytest.raises(ValueError, match="'indices' contains"):
  38. validate_indices(indices, 2)
  39. def test_validate_indices_high(self):
  40. indices = np.asarray([0, 1, 2])
  41. with pytest.raises(IndexError, match="indices are out"):
  42. validate_indices(indices, 2)
  43. def test_validate_indices_empty(self):
  44. with pytest.raises(IndexError, match="indices are out"):
  45. validate_indices(np.array([0, 1]), 0)