power-grid-model-io 1.3.18__tar.gz → 1.3.20__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of power-grid-model-io might be problematic. Click here for more details.

Files changed (145) hide show
  1. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/PKG-INFO +1 -1
  2. power_grid_model_io-1.3.20/PYPI_VERSION +1 -0
  3. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_stores/excel_file_store.py +8 -1
  4. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io.egg-info/PKG-INFO +1 -1
  5. power_grid_model_io-1.3.20/tests/unit/data_stores/test_vision_excel_file_store.py +76 -0
  6. power_grid_model_io-1.3.18/PYPI_VERSION +0 -1
  7. power_grid_model_io-1.3.18/tests/unit/data_stores/test_vision_excel_file_store.py +0 -22
  8. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/LICENSE +0 -0
  9. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/MANIFEST.in +0 -0
  10. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/README.md +0 -0
  11. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/VERSION +0 -0
  12. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/pyproject.toml +0 -0
  13. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/setup.cfg +0 -0
  14. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/setup.py +0 -0
  15. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/__init__.py +0 -0
  16. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/__init__.py +0 -0
  17. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/examples/__init__.py +0 -0
  18. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/examples/multipliers.yaml +0 -0
  19. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/excel/__init__.py +0 -0
  20. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/excel/vision_en.yaml +0 -0
  21. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/excel/vision_en_9_7.yaml +0 -0
  22. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/excel/vision_en_9_8.yaml +0 -0
  23. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/config/excel/vision_nl.yaml +0 -0
  24. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/converters/__init__.py +0 -0
  25. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/converters/base_converter.py +0 -0
  26. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/converters/pandapower_converter.py +0 -0
  27. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/converters/pgm_json_converter.py +0 -0
  28. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/converters/tabular_converter.py +0 -0
  29. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/converters/vision_excel_converter.py +0 -0
  30. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_stores/__init__.py +0 -0
  31. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_stores/base_data_store.py +0 -0
  32. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_stores/csv_dir_store.py +0 -0
  33. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_stores/json_file_store.py +0 -0
  34. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_stores/vision_excel_file_store.py +0 -0
  35. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_types/__init__.py +0 -0
  36. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_types/_data_types.py +0 -0
  37. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/data_types/tabular_data.py +0 -0
  38. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/functions/__init__.py +0 -0
  39. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/functions/_functions.py +0 -0
  40. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/functions/filters.py +0 -0
  41. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/functions/phase_to_phase.py +0 -0
  42. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/mappings/__init__.py +0 -0
  43. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/mappings/field_mapping.py +0 -0
  44. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/mappings/multiplier_mapping.py +0 -0
  45. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/mappings/tabular_mapping.py +0 -0
  46. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/mappings/unit_mapping.py +0 -0
  47. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/mappings/value_mapping.py +0 -0
  48. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/py.typed +0 -0
  49. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/__init__.py +0 -0
  50. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/auto_id.py +0 -0
  51. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/dict.py +0 -0
  52. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/download.py +0 -0
  53. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/excel_ambiguity_checker.py +0 -0
  54. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/json.py +0 -0
  55. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/modules.py +0 -0
  56. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/parsing.py +0 -0
  57. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/uuid_excel_cvtr.py +0 -0
  58. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io/utils/zip.py +0 -0
  59. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io.egg-info/SOURCES.txt +0 -0
  60. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io.egg-info/dependency_links.txt +0 -0
  61. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io.egg-info/requires.txt +0 -0
  62. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/src/power_grid_model_io.egg-info/top_level.txt +0 -0
  63. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/__init__.py +0 -0
  64. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/conftest.py +0 -0
  65. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/config/dummy_mapping.yaml +0 -0
  66. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/config/mapping.yaml +0 -0
  67. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pgm_asym_output_data.json +0 -0
  68. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pgm_asym_output_data.json.license +0 -0
  69. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pgm_input_data.json +0 -0
  70. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pgm_input_data.json.license +0 -0
  71. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pgm_output_data.json +0 -0
  72. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pgm_output_data.json.license +0 -0
  73. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pp_v2_net_3ph_output.json +0 -0
  74. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pp_v2_net_3ph_output.json.license +0 -0
  75. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pp_v2_net_3ph_output_current_loading.json +0 -0
  76. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pp_v2_net_3ph_output_current_loading.json.license +0 -0
  77. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pp_v2_net_output.json +0 -0
  78. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pp_v2_net_output.json.license +0 -0
  79. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/pandapower/pp_validation.py +0 -0
  80. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/excel_ambiguity_check_data.xlsx +0 -0
  81. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/excel_ambiguity_check_data.xlsx.license +0 -0
  82. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/pgm_input_data_en.json +0 -0
  83. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/pgm_input_data_en.json.license +0 -0
  84. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/pgm_input_data_nl.json +0 -0
  85. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/pgm_input_data_nl.json.license +0 -0
  86. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_9_5_en.yaml +0 -0
  87. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_9_5_nl.yaml +0 -0
  88. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_en.xlsx +0 -0
  89. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_en.xlsx.license +0 -0
  90. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_en_9_7.xlsx +0 -0
  91. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_en_9_7.xlsx.license +0 -0
  92. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_nl.xlsx +0 -0
  93. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_nl.xlsx.license +0 -0
  94. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_validation.vnf +0 -0
  95. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/vision/vision_validation.vnf.license +0 -0
  96. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/zip/foo-bar.zip +0 -0
  97. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/zip/foo-bar.zip.license +0 -0
  98. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/zip/foo.zip +0 -0
  99. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/data/zip/foo.zip.license +0 -0
  100. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/test_utils.py +0 -0
  101. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/__init__.py +0 -0
  102. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/conftest.py +0 -0
  103. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/converters/__init__.py +0 -0
  104. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/converters/test_base_converter.py +0 -0
  105. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/converters/test_pandapower_converter_input.py +0 -0
  106. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/converters/test_pandapower_converter_output.py +0 -0
  107. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/converters/test_pgm_json_converter.py +0 -0
  108. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/converters/test_tabular_converter.py +0 -0
  109. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/converters/test_vision_excel_converter.py +0 -0
  110. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_stores/__init__.py +0 -0
  111. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_stores/test_base_data_store.py +0 -0
  112. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_stores/test_csv_dir_store.py +0 -0
  113. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_stores/test_excel_file_store.py +0 -0
  114. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_stores/test_json_file_store.py +0 -0
  115. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_types/__init__.py +0 -0
  116. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_types/test_data_types.py +0 -0
  117. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/data_types/test_tabular_data.py +0 -0
  118. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/functions/__init__.py +0 -0
  119. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/functions/test_filters.py +0 -0
  120. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/functions/test_functions.py +0 -0
  121. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/functions/test_phase_to_phase.py +0 -0
  122. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/mappings/__init__.py +0 -0
  123. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/mappings/test_field_mapping.py +0 -0
  124. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/mappings/test_multiplier_mapping.py +0 -0
  125. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/mappings/test_tabular_mapping.py +0 -0
  126. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/mappings/test_unit_mapping.py +0 -0
  127. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/mappings/test_value_mapping.py +0 -0
  128. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/__init__.py +0 -0
  129. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_auto_id.py +0 -0
  130. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_dict.py +0 -0
  131. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_download.py +0 -0
  132. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_json.py +0 -0
  133. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_modules.py +0 -0
  134. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_parsing.py +0 -0
  135. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_uuid_excel_cvtr.py +0 -0
  136. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/unit/utils/test_zip.py +0 -0
  137. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/utils.py +0 -0
  138. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/__init__.py +0 -0
  139. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/conftest.py +0 -0
  140. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/converters/__init__.py +0 -0
  141. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/converters/test_pandapower_converter_input.py +0 -0
  142. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/converters/test_pandapower_converter_output.py +0 -0
  143. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/converters/test_vision_excel_converter.py +0 -0
  144. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/test_test_utils.py +0 -0
  145. {power_grid_model_io-1.3.18 → power_grid_model_io-1.3.20}/tests/validation/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-io
3
- Version: 1.3.18
3
+ Version: 1.3.20
4
4
  Summary: Power Grid Model Input/Output
5
5
  Author-email: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
6
6
  License: MPL-2.0
@@ -0,0 +1 @@
1
+ 1.3.20
@@ -88,11 +88,18 @@ class ExcelFileStore(BaseDataStore[TabularData]):
88
88
 
89
89
  def lazy_sheet_loader(xls_file: pd.ExcelFile, xls_sheet_name: str):
90
90
  def sheet_loader():
91
- sheet_data = xls_file.parse(xls_sheet_name, header=self._header_rows)
91
+ preview = xls_file.parse(xls_sheet_name, header=self._header_rows, nrows=0)
92
+ columns = list(preview.columns)
93
+ dtype = {}
94
+ for col in columns:
95
+ if "Name" in str(col) or (isinstance(col, tuple) and ("Name" in str(col[0]))):
96
+ dtype[col] = str
97
+ sheet_data = xls_file.parse(xls_sheet_name, header=self._header_rows, dtype=dtype)
92
98
  sheet_data = self._remove_unnamed_column_placeholders(data=sheet_data)
93
99
  sheet_data = self._handle_duplicate_columns(data=sheet_data, sheet_name=xls_sheet_name)
94
100
  sheet_data = self._process_uuid_columns(data=sheet_data, sheet_name=xls_sheet_name)
95
101
  sheet_data = self._update_column_names(data=sheet_data)
102
+
96
103
  return sheet_data
97
104
 
98
105
  return sheet_loader
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-io
3
- Version: 1.3.18
3
+ Version: 1.3.20
4
4
  Summary: Power Grid Model Input/Output
5
5
  Author-email: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
6
6
  License: MPL-2.0
@@ -0,0 +1,76 @@
1
+ # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
+ #
3
+ # SPDX-License-Identifier: MPL-2.0
4
+ from pathlib import Path
5
+ from unittest.mock import MagicMock, mock_open, patch
6
+
7
+ import pandas as pd
8
+
9
+ from power_grid_model_io.data_stores.vision_excel_file_store import VisionExcelFileStore
10
+
11
+
12
+ @patch("power_grid_model_io.data_stores.excel_file_store.pd.ExcelFile")
13
+ @patch("power_grid_model_io.data_stores.excel_file_store.Path.open", mock_open())
14
+ def test_header_rows(mock_excel_file: MagicMock):
15
+ # Arrange
16
+ store = VisionExcelFileStore(file_path=Path("dummy.xlsx"))
17
+ mock_excel_file.return_value.sheet_names = ["foo"]
18
+
19
+ # Act
20
+ data = store.load()
21
+ data["foo"]
22
+
23
+ # Assert
24
+ assert mock_excel_file.return_value.parse.call_count == 2
25
+
26
+
27
+ @patch("power_grid_model_io.data_stores.excel_file_store.pd.ExcelFile")
28
+ @patch("power_grid_model_io.data_stores.excel_file_store.Path.open", mock_open())
29
+ def test_name_column_dtype_conversion(mock_excel_file: MagicMock):
30
+ store = VisionExcelFileStore(file_path=Path("dummy.xlsx"))
31
+ mock_excel_file.return_value.sheet_names = ["test_sheet"]
32
+
33
+ preview_df = pd.DataFrame(columns=["Mock.Name", "Other.Column", "ID"])
34
+
35
+ def mock_parse(*args, **kwargs):
36
+ if kwargs.get("nrows") == 0:
37
+ return preview_df
38
+ else:
39
+ actual_data = {
40
+ "Mock.Name": [12345678900000000000, 987.654],
41
+ "Other.Column": ["value1", "value2"],
42
+ "ID": [1, 2],
43
+ "ratio": [0.1, 0.2],
44
+ }
45
+ df = pd.DataFrame(actual_data)
46
+
47
+ if "dtype" in kwargs:
48
+ for col, dtype_val in kwargs["dtype"].items():
49
+ if col in df.columns and dtype_val is str:
50
+ df[col] = df[col].apply(lambda x: str(int(x)) if float(x).is_integer() else str(x))
51
+
52
+ return df
53
+
54
+ mock_excel_file.return_value.parse.side_effect = mock_parse
55
+
56
+ data = store.load()
57
+ result_df = data["test_sheet"]
58
+
59
+ assert mock_excel_file.return_value.parse.call_count == 2
60
+
61
+ first_call = mock_excel_file.return_value.parse.call_args_list[0]
62
+ assert first_call[1]["nrows"] == 0
63
+
64
+ second_call = mock_excel_file.return_value.parse.call_args_list[1]
65
+ assert "dtype" in second_call[1]
66
+ assert "Mock.Name" in second_call[1]["dtype"]
67
+ assert second_call[1]["dtype"]["Mock.Name"] is str
68
+
69
+ assert result_df["Mock.Name"][0] == "12345678900000000000" # Long int as string
70
+ assert result_df["Mock.Name"][1] == "987.654" # Float as string
71
+ assert result_df["Other.Column"][0] == "value1"
72
+ assert result_df["Other.Column"][1] == "value2"
73
+ assert result_df["ID"][0] == 1
74
+ assert result_df["ID"][1] == 2
75
+ assert result_df["ratio"][0] == 0.1
76
+ assert result_df["ratio"][1] == 0.2
@@ -1 +0,0 @@
1
- 1.3.18
@@ -1,22 +0,0 @@
1
- # SPDX-FileCopyrightText: Contributors to the Power Grid Model project <powergridmodel@lfenergy.org>
2
- #
3
- # SPDX-License-Identifier: MPL-2.0
4
- from pathlib import Path
5
- from unittest.mock import MagicMock, mock_open, patch
6
-
7
- from power_grid_model_io.data_stores.vision_excel_file_store import VisionExcelFileStore
8
-
9
-
10
- @patch("power_grid_model_io.data_stores.excel_file_store.pd.ExcelFile")
11
- @patch("power_grid_model_io.data_stores.excel_file_store.Path.open", mock_open())
12
- def test_header_rows(mock_excel_file: MagicMock):
13
- # Arrange
14
- store = VisionExcelFileStore(file_path=Path("dummy.xlsx"))
15
- mock_excel_file.return_value.sheet_names = ["foo"]
16
-
17
- # Act
18
- data = store.load()
19
- data["foo"]
20
-
21
- # Assert
22
- mock_excel_file.return_value.parse.assert_called_once_with("foo", header=[0, 1])