test_managers.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. """
  2. Testing interaction between the different managers (BlockManager, ArrayManager)
  3. """
  4. from pandas.core.dtypes.missing import array_equivalent
  5. import pandas as pd
  6. import pandas._testing as tm
  7. from pandas.core.internals import (
  8. ArrayManager,
  9. BlockManager,
  10. SingleArrayManager,
  11. SingleBlockManager,
  12. )
  13. def test_dataframe_creation():
  14. with pd.option_context("mode.data_manager", "block"):
  15. df_block = pd.DataFrame({"a": [1, 2, 3], "b": [0.1, 0.2, 0.3], "c": [4, 5, 6]})
  16. assert isinstance(df_block._mgr, BlockManager)
  17. with pd.option_context("mode.data_manager", "array"):
  18. df_array = pd.DataFrame({"a": [1, 2, 3], "b": [0.1, 0.2, 0.3], "c": [4, 5, 6]})
  19. assert isinstance(df_array._mgr, ArrayManager)
  20. # also ensure both are seen as equal
  21. tm.assert_frame_equal(df_block, df_array)
  22. # conversion from one manager to the other
  23. result = df_block._as_manager("block")
  24. assert isinstance(result._mgr, BlockManager)
  25. result = df_block._as_manager("array")
  26. assert isinstance(result._mgr, ArrayManager)
  27. tm.assert_frame_equal(result, df_block)
  28. assert all(
  29. array_equivalent(left, right)
  30. for left, right in zip(result._mgr.arrays, df_array._mgr.arrays)
  31. )
  32. result = df_array._as_manager("array")
  33. assert isinstance(result._mgr, ArrayManager)
  34. result = df_array._as_manager("block")
  35. assert isinstance(result._mgr, BlockManager)
  36. tm.assert_frame_equal(result, df_array)
  37. assert len(result._mgr.blocks) == 2
  38. def test_series_creation():
  39. with pd.option_context("mode.data_manager", "block"):
  40. s_block = pd.Series([1, 2, 3], name="A", index=["a", "b", "c"])
  41. assert isinstance(s_block._mgr, SingleBlockManager)
  42. with pd.option_context("mode.data_manager", "array"):
  43. s_array = pd.Series([1, 2, 3], name="A", index=["a", "b", "c"])
  44. assert isinstance(s_array._mgr, SingleArrayManager)
  45. # also ensure both are seen as equal
  46. tm.assert_series_equal(s_block, s_array)
  47. # conversion from one manager to the other
  48. result = s_block._as_manager("block")
  49. assert isinstance(result._mgr, SingleBlockManager)
  50. result = s_block._as_manager("array")
  51. assert isinstance(result._mgr, SingleArrayManager)
  52. tm.assert_series_equal(result, s_block)
  53. result = s_array._as_manager("array")
  54. assert isinstance(result._mgr, SingleArrayManager)
  55. result = s_array._as_manager("block")
  56. assert isinstance(result._mgr, SingleBlockManager)
  57. tm.assert_series_equal(result, s_array)