power-grid-model-io 1.3.2__tar.gz → 1.3.5__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 (142) hide show
  1. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/PKG-INFO +1 -1
  2. power_grid_model_io-1.3.5/PYPI_VERSION +1 -0
  3. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/converters/tabular_converter.py +3 -0
  4. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io.egg-info/PKG-INFO +1 -1
  5. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/converters/test_tabular_converter.py +179 -48
  6. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_zip.py +2 -2
  7. power_grid_model_io-1.3.2/PYPI_VERSION +0 -1
  8. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/LICENSE +0 -0
  9. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/MANIFEST.in +0 -0
  10. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/README.md +0 -0
  11. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/VERSION +0 -0
  12. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/pyproject.toml +0 -0
  13. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/setup.cfg +0 -0
  14. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/setup.py +0 -0
  15. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/__init__.py +0 -0
  16. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/__init__.py +0 -0
  17. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/examples/__init__.py +0 -0
  18. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/examples/multipliers.yaml +0 -0
  19. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/excel/__init__.py +0 -0
  20. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/excel/vision_en.yaml +0 -0
  21. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/excel/vision_en_9_7.yaml +0 -0
  22. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/excel/vision_en_9_8.yaml +0 -0
  23. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/config/excel/vision_nl.yaml +0 -0
  24. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/converters/__init__.py +0 -0
  25. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/converters/base_converter.py +0 -0
  26. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/converters/pandapower_converter.py +0 -0
  27. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/converters/pgm_json_converter.py +0 -0
  28. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/converters/vision_excel_converter.py +0 -0
  29. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_stores/__init__.py +0 -0
  30. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_stores/base_data_store.py +0 -0
  31. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_stores/csv_dir_store.py +0 -0
  32. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_stores/excel_file_store.py +0 -0
  33. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_stores/json_file_store.py +0 -0
  34. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_stores/vision_excel_file_store.py +0 -0
  35. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_types/__init__.py +0 -0
  36. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_types/_data_types.py +0 -0
  37. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/data_types/tabular_data.py +0 -0
  38. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/functions/__init__.py +0 -0
  39. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/functions/_functions.py +0 -0
  40. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/functions/filters.py +0 -0
  41. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/functions/phase_to_phase.py +0 -0
  42. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/mappings/__init__.py +0 -0
  43. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/mappings/field_mapping.py +0 -0
  44. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/mappings/multiplier_mapping.py +0 -0
  45. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/mappings/tabular_mapping.py +0 -0
  46. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/mappings/unit_mapping.py +0 -0
  47. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/mappings/value_mapping.py +0 -0
  48. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/py.typed +0 -0
  49. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/__init__.py +0 -0
  50. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/auto_id.py +0 -0
  51. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/dict.py +0 -0
  52. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/download.py +0 -0
  53. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/excel_ambiguity_checker.py +0 -0
  54. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/json.py +0 -0
  55. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/modules.py +0 -0
  56. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/parsing.py +0 -0
  57. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/uuid_excel_cvtr.py +0 -0
  58. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io/utils/zip.py +0 -0
  59. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io.egg-info/SOURCES.txt +0 -0
  60. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io.egg-info/dependency_links.txt +0 -0
  61. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io.egg-info/requires.txt +0 -0
  62. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/src/power_grid_model_io.egg-info/top_level.txt +0 -0
  63. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/__init__.py +0 -0
  64. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/conftest.py +0 -0
  65. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/config/dummy_mapping.yaml +0 -0
  66. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/config/mapping.yaml +0 -0
  67. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pgm_asym_output_data.json +0 -0
  68. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pgm_asym_output_data.json.license +0 -0
  69. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pgm_input_data.json +0 -0
  70. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pgm_input_data.json.license +0 -0
  71. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pgm_output_data.json +0 -0
  72. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pgm_output_data.json.license +0 -0
  73. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pp_v2_net_3ph_output.json +0 -0
  74. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pp_v2_net_3ph_output.json.license +0 -0
  75. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pp_v2_net_output.json +0 -0
  76. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pp_v2_net_output.json.license +0 -0
  77. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/pandapower/pp_validation.py +0 -0
  78. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/excel_ambiguity_check_data.xlsx +0 -0
  79. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/excel_ambiguity_check_data.xlsx.license +0 -0
  80. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/pgm_input_data_en.json +0 -0
  81. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/pgm_input_data_en.json.license +0 -0
  82. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/pgm_input_data_nl.json +0 -0
  83. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/pgm_input_data_nl.json.license +0 -0
  84. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_9_5_en.yaml +0 -0
  85. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_9_5_nl.yaml +0 -0
  86. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_en.xlsx +0 -0
  87. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_en.xlsx.license +0 -0
  88. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_en_9_7.xlsx +0 -0
  89. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_en_9_7.xlsx.license +0 -0
  90. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_nl.xlsx +0 -0
  91. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_nl.xlsx.license +0 -0
  92. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_validation.vnf +0 -0
  93. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/vision/vision_validation.vnf.license +0 -0
  94. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/zip/foo-bar.zip +0 -0
  95. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/zip/foo-bar.zip.license +0 -0
  96. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/zip/foo.zip +0 -0
  97. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/data/zip/foo.zip.license +0 -0
  98. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/test_utils.py +0 -0
  99. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/__init__.py +0 -0
  100. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/conftest.py +0 -0
  101. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/converters/__init__.py +0 -0
  102. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/converters/test_base_converter.py +0 -0
  103. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/converters/test_pandapower_converter_input.py +0 -0
  104. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/converters/test_pandapower_converter_output.py +0 -0
  105. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/converters/test_pgm_json_converter.py +0 -0
  106. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/converters/test_vision_excel_converter.py +0 -0
  107. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_stores/__init__.py +0 -0
  108. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_stores/test_base_data_store.py +0 -0
  109. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_stores/test_csv_dir_store.py +0 -0
  110. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_stores/test_excel_file_store.py +0 -0
  111. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_stores/test_json_file_store.py +0 -0
  112. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_stores/test_vision_excel_file_store.py +0 -0
  113. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_types/__init__.py +0 -0
  114. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_types/test_data_types.py +0 -0
  115. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/data_types/test_tabular_data.py +0 -0
  116. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/functions/__init__.py +0 -0
  117. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/functions/test_filters.py +0 -0
  118. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/functions/test_functions.py +0 -0
  119. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/functions/test_phase_to_phase.py +0 -0
  120. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/mappings/__init__.py +0 -0
  121. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/mappings/test_field_mapping.py +0 -0
  122. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/mappings/test_multiplier_mapping.py +0 -0
  123. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/mappings/test_tabular_mapping.py +0 -0
  124. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/mappings/test_unit_mapping.py +0 -0
  125. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/mappings/test_value_mapping.py +0 -0
  126. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/__init__.py +0 -0
  127. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_auto_id.py +0 -0
  128. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_dict.py +0 -0
  129. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_download.py +0 -0
  130. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_json.py +0 -0
  131. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_modules.py +0 -0
  132. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_parsing.py +0 -0
  133. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/unit/utils/test_uuid_excel_cvtr.py +0 -0
  134. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/utils.py +0 -0
  135. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/validation/__init__.py +0 -0
  136. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/validation/conftest.py +0 -0
  137. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/validation/converters/__init__.py +0 -0
  138. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/validation/converters/test_pandapower_converter_input.py +0 -0
  139. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/validation/converters/test_pandapower_converter_output.py +0 -0
  140. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/validation/converters/test_vision_excel_converter.py +0 -0
  141. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/tests/validation/test_test_utils.py +0 -0
  142. {power_grid_model_io-1.3.2 → power_grid_model_io-1.3.5}/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.2
3
+ Version: 1.3.5
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.5
@@ -265,6 +265,9 @@ class TabularConverter(BaseConverter[TabularData]):
265
265
  """
266
266
  # To avoid mistakes, the attributes in the mapping should exist. There is one extra attribute called
267
267
  # 'extra' in which extra information can be captured.
268
+ if pgm_data.dtype.names is None:
269
+ raise ValueError(f"pgm_data for '{component}s' has no attributes defined. (dtype.names is None)")
270
+
268
271
  if attr not in pgm_data.dtype.names and attr not in ["extra", "filters"]:
269
272
  attrs = ", ".join(pgm_data.dtype.names)
270
273
  raise KeyError(f"Could not find attribute '{attr}' for '{component}s'. (choose from: {attrs})")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-io
3
- Version: 1.3.2
3
+ Version: 1.3.5
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
@@ -47,10 +47,14 @@ def pgm_power_sensor_empty():
47
47
  @pytest.fixture
48
48
  def tabular_data():
49
49
  nodes = pd.DataFrame(
50
- data=[[1, 10.5], [2, 0.4]], columns=pd.MultiIndex.from_tuples([("id_number", ""), ("u_nom", "kV")])
50
+ data=[[1, 10.5], [2, 0.4]],
51
+ columns=pd.MultiIndex.from_tuples([("id_number", ""), ("u_nom", "kV")]),
51
52
  )
52
53
  lines = pd.DataFrame(data=[[1, 100], [2, 200]], columns=["id_number", "from_node_side"])
53
- loads = pd.DataFrame(data=[[1, 1, 1], [2, 2, 0]], columns=["id_number", "node_id", "switching_status"])
54
+ loads = pd.DataFrame(
55
+ data=[[1, 1, 1], [2, 2, 0]],
56
+ columns=["id_number", "node_id", "switching_status"],
57
+ )
54
58
  sources = pd.DataFrame(columns=["id_number", "node_side"])
55
59
  return TabularData(nodes=nodes, lines=lines, loads=loads, sources=sources)
56
60
 
@@ -154,12 +158,23 @@ def test_convert_table_to_component(converter: TabularConverter, tabular_data_no
154
158
  assert (pgm_node_data["u_rated"] == [10.5e3, 400]).all()
155
159
 
156
160
 
161
+ @patch(
162
+ "power_grid_model_io.converters.tabular_converter.TabularConverter._convert_col_def_to_attribute",
163
+ new=MagicMock(),
164
+ )
165
+ @patch(
166
+ "power_grid_model_io.converters.tabular_converter.TabularConverter._parse_table_filters",
167
+ )
157
168
  def test_convert_table_to_component__filters(
158
- converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
169
+ _parse_table_filters: MagicMock,
170
+ converter: TabularConverter,
171
+ tabular_data_no_units_no_substitutions: TabularData,
159
172
  ):
160
- converter._convert_col_def_to_attribute = MagicMock()
161
- converter._parse_table_filters = MagicMock()
162
- node_attributes_with_filter = {"id": "id_number", "u_rated": "u_nom", "filters": [{"test_fn": {}}]}
173
+ node_attributes_with_filter: dict[str, int | float | str | dict | list] = {
174
+ "id": "id_number",
175
+ "u_rated": "u_nom",
176
+ "filters": [{"test_fn": {}}],
177
+ }
163
178
  converter._convert_table_to_component(
164
179
  data=tabular_data_no_units_no_substitutions,
165
180
  data_type="input",
@@ -168,20 +183,31 @@ def test_convert_table_to_component__filters(
168
183
  attributes=node_attributes_with_filter,
169
184
  extra_info=None,
170
185
  )
171
- converter._parse_table_filters.assert_called_once_with(
186
+ _parse_table_filters.assert_called_once_with(
172
187
  data=tabular_data_no_units_no_substitutions,
173
188
  table="nodes",
174
189
  filtering_functions=node_attributes_with_filter["filters"],
175
190
  )
176
191
 
177
192
 
193
+ @patch(
194
+ "power_grid_model_io.converters.tabular_converter.TabularConverter._convert_col_def_to_attribute",
195
+ )
196
+ @patch(
197
+ "power_grid_model_io.converters.tabular_converter.TabularConverter._parse_table_filters",
198
+ side_effect=np.array([False, False]),
199
+ )
178
200
  def test_convert_table_to_component__filters_all_false(
179
- converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
201
+ _parse_table_filters: MagicMock,
202
+ _convert_col_def_to_attribute: MagicMock,
203
+ converter: TabularConverter,
204
+ tabular_data_no_units_no_substitutions: TabularData,
180
205
  ):
181
- converter._convert_col_def_to_attribute = MagicMock()
182
- converter._parse_table_filters = MagicMock()
183
- converter._parse_table_filters.side_effect = np.array([False, False])
184
- node_attributes_with_filter = {"id": "id_number", "u_rated": "u_nom", "filters": [{"test_fn": {}}]}
206
+ node_attributes_with_filter: dict[str, int | float | str | dict | list] = {
207
+ "id": "id_number",
208
+ "u_rated": "u_nom",
209
+ "filters": [{"test_fn": {}}],
210
+ }
185
211
  actual = converter._convert_table_to_component(
186
212
  data=tabular_data_no_units_no_substitutions,
187
213
  data_type="input",
@@ -192,12 +218,12 @@ def test_convert_table_to_component__filters_all_false(
192
218
  )
193
219
 
194
220
  assert actual is None
195
- converter._parse_table_filters.assert_called_once_with(
221
+ _parse_table_filters.assert_called_once_with(
196
222
  data=tabular_data_no_units_no_substitutions,
197
223
  table="nodes",
198
224
  filtering_functions=node_attributes_with_filter["filters"],
199
225
  )
200
- converter._convert_col_def_to_attribute.assert_not_called()
226
+ _convert_col_def_to_attribute.assert_not_called()
201
227
 
202
228
 
203
229
  def test_convert_col_def_to_attribute(
@@ -206,7 +232,8 @@ def test_convert_col_def_to_attribute(
206
232
  pgm_node_empty: SingleDataset,
207
233
  ):
208
234
  with pytest.raises(
209
- KeyError, match=r"Could not find attribute 'incorrect_attribute' for 'nodes'. " r"\(choose from: id, u_rated\)"
235
+ KeyError,
236
+ match=r"Could not find attribute 'incorrect_attribute' for 'nodes'. " r"\(choose from: id, u_rated\)",
210
237
  ):
211
238
  converter._convert_col_def_to_attribute(
212
239
  data=tabular_data_no_units_no_substitutions,
@@ -323,9 +350,15 @@ def test_merge_pgm_data(converter: TabularConverter):
323
350
 
324
351
 
325
352
  def test_serialize_data(converter: TabularConverter, pgm_node_empty: SingleDataset):
326
- with pytest.raises(NotImplementedError, match=r"Extra info can not \(yet\) be stored for tabular data"):
353
+ with pytest.raises(
354
+ NotImplementedError,
355
+ match=r"Extra info can not \(yet\) be stored for tabular data",
356
+ ):
327
357
  converter._serialize_data(data=pgm_node_empty, extra_info={})
328
- with pytest.raises(NotImplementedError, match=r"Batch data can not \(yet\) be stored for tabular data"):
358
+ with pytest.raises(
359
+ NotImplementedError,
360
+ match=r"Batch data can not \(yet\) be stored for tabular data",
361
+ ):
329
362
  converter._serialize_data(data=[], extra_info=None) # type: ignore
330
363
 
331
364
  pgm_node_empty["node"]["id"] = [1, 2]
@@ -358,7 +391,10 @@ def test_parse_col_def(converter: TabularConverter, tabular_data_no_units_no_sub
358
391
  extra_info=None,
359
392
  )
360
393
  mock_parse_col_def_const.assert_called_once_with(
361
- data=tabular_data_no_units_no_substitutions, table="nodes", table_mask=None, col_def=50
394
+ data=tabular_data_no_units_no_substitutions,
395
+ table="nodes",
396
+ table_mask=None,
397
+ col_def=50,
362
398
  )
363
399
 
364
400
  # type(col_def) == float
@@ -373,7 +409,10 @@ def test_parse_col_def(converter: TabularConverter, tabular_data_no_units_no_sub
373
409
  extra_info=None,
374
410
  )
375
411
  mock_parse_col_def_const.assert_called_once_with(
376
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def=4.0, table_mask=None
412
+ data=tabular_data_no_units_no_substitutions,
413
+ table="nodes",
414
+ col_def=4.0,
415
+ table_mask=None,
377
416
  )
378
417
 
379
418
  # type(col_def) == str (regular expression)
@@ -416,7 +455,10 @@ def test_parse_col_def(converter: TabularConverter, tabular_data_no_units_no_sub
416
455
  extra_info=None,
417
456
  )
418
457
  mock_parse_col_def_column_name.assert_called_once_with(
419
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def="col_name", table_mask=None
458
+ data=tabular_data_no_units_no_substitutions,
459
+ table="nodes",
460
+ col_def="col_name",
461
+ table_mask=None,
420
462
  )
421
463
 
422
464
  # type(col_def) == dict
@@ -450,25 +492,37 @@ def test_parse_col_def(converter: TabularConverter, tabular_data_no_units_no_sub
450
492
  extra_info=None,
451
493
  )
452
494
  mock_parse_col_def_composite.assert_called_once_with(
453
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def=[], table_mask=None
495
+ data=tabular_data_no_units_no_substitutions,
496
+ table="nodes",
497
+ col_def=[],
498
+ table_mask=None,
454
499
  )
455
500
 
456
501
 
457
502
  def test_parse_col_def_const(converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData):
458
503
  with pytest.raises(AssertionError):
459
504
  converter._parse_col_def_const(
460
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def="str", table_mask=None # type: ignore
505
+ data=tabular_data_no_units_no_substitutions,
506
+ table="nodes",
507
+ col_def="str", # type: ignore
508
+ table_mask=None, # type: ignore
461
509
  )
462
510
 
463
511
  # type(col_def) == int
464
512
  col_int = converter._parse_col_def_const(
465
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def=50, table_mask=None
513
+ data=tabular_data_no_units_no_substitutions,
514
+ table="nodes",
515
+ col_def=50,
516
+ table_mask=None,
466
517
  )
467
518
  assert_frame_equal(col_int, pd.DataFrame([50, 50]))
468
519
 
469
520
  # type(col_def) == float
470
521
  col_int = converter._parse_col_def_const(
471
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def=3.0, table_mask=None
522
+ data=tabular_data_no_units_no_substitutions,
523
+ table="nodes",
524
+ col_def=3.0,
525
+ table_mask=None,
472
526
  )
473
527
  assert_frame_equal(col_int, pd.DataFrame([3.0, 3.0]))
474
528
 
@@ -477,7 +531,10 @@ def test_parse_col_def_const__no_filter(
477
531
  converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
478
532
  ):
479
533
  col_int = converter._parse_col_def_const(
480
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def=3.0, table_mask=None
534
+ data=tabular_data_no_units_no_substitutions,
535
+ table="nodes",
536
+ col_def=3.0,
537
+ table_mask=None,
481
538
  )
482
539
  assert_frame_equal(col_int, pd.DataFrame([3.0, 3.0]))
483
540
 
@@ -485,7 +542,10 @@ def test_parse_col_def_const__no_filter(
485
542
  def test_parse_col_def_column_name(converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData):
486
543
  with pytest.raises(AssertionError):
487
544
  converter._parse_col_def_column_name(
488
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def=1, table_mask=None # type: ignore
545
+ data=tabular_data_no_units_no_substitutions,
546
+ table="nodes",
547
+ col_def=1, # type: ignore
548
+ table_mask=None, # type: ignore
489
549
  )
490
550
 
491
551
  df_multiple_columns = converter._parse_col_def_column_name(
@@ -497,7 +557,10 @@ def test_parse_col_def_column_name(converter: TabularConverter, tabular_data_no_
497
557
  assert_frame_equal(df_multiple_columns, pd.DataFrame([1, 2], columns=["id_number"]))
498
558
 
499
559
  df_inf = converter._parse_col_def_column_name(
500
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def="inf", table_mask=None
560
+ data=tabular_data_no_units_no_substitutions,
561
+ table="nodes",
562
+ col_def="inf",
563
+ table_mask=None,
501
564
  )
502
565
  assert_frame_equal(df_inf, pd.DataFrame([np.inf, np.inf]))
503
566
 
@@ -528,12 +591,20 @@ def test_parse_col_def_filter(converter: TabularConverter):
528
591
  # Act/Assert:
529
592
  with pytest.raises(AssertionError):
530
593
  converter._parse_col_def_filter(
531
- data=tabular_data_no_units_no_substitutions, table="", col_def=[], table_mask=None, extra_info=None # type: ignore
594
+ data=tabular_data_no_units_no_substitutions,
595
+ table="",
596
+ col_def=[], # type: ignore
597
+ table_mask=None,
598
+ extra_info=None, # type: ignore
532
599
  )
533
600
 
534
601
  with pytest.raises(TypeError, match="Invalid foo definition: 123"):
535
602
  converter._parse_col_def_filter(
536
- data=MagicMock(), table="", col_def={"foo": 123}, table_mask=None, extra_info=None
603
+ data=MagicMock(),
604
+ table="",
605
+ col_def={"foo": 123},
606
+ table_mask=None,
607
+ extra_info=None,
537
608
  )
538
609
 
539
610
 
@@ -573,7 +644,11 @@ def test_parse_col_def_filter__pandas_function(mock_parse_function: MagicMock, c
573
644
 
574
645
  # Act
575
646
  result = converter._parse_col_def_filter(
576
- data=data, table="nodes", col_def={"multiply": ["id_number", "u_nom"]}, table_mask=None, extra_info=None
647
+ data=data,
648
+ table="nodes",
649
+ col_def={"multiply": ["id_number", "u_nom"]},
650
+ table_mask=None,
651
+ extra_info=None,
577
652
  )
578
653
 
579
654
  # Assert
@@ -619,7 +694,11 @@ def test_parse_col_def_filter__auto_id(mock_parse_auto_id: MagicMock, converter:
619
694
  # Act/Assert:
620
695
  with pytest.raises(ValueError, match="Invalid auto_id definition: {'a': 1, 'b': 2}"):
621
696
  converter._parse_col_def_filter(
622
- data=data, table="", col_def={"auto_id": {"a": 1, "b": 2}}, table_mask=None, extra_info=None
697
+ data=data,
698
+ table="",
699
+ col_def={"auto_id": {"a": 1, "b": 2}},
700
+ table_mask=None,
701
+ extra_info=None,
623
702
  )
624
703
 
625
704
 
@@ -661,13 +740,19 @@ def test_parse_col_def_filter__reference(mock_parse_reference: MagicMock, conver
661
740
  # Act/Assert:
662
741
  with pytest.raises(ValueError, match="Invalid reference definition: {'a': 1, 'b': 2}"):
663
742
  converter._parse_col_def_filter(
664
- data=data, table="", col_def={"reference": {"a": 1, "b": 2}}, table_mask=None, extra_info=None
743
+ data=data,
744
+ table="",
745
+ col_def={"reference": {"a": 1, "b": 2}},
746
+ table_mask=None,
747
+ extra_info=None,
665
748
  )
666
749
 
667
750
 
668
751
  @patch("power_grid_model_io.converters.tabular_converter.TabularConverter._get_id")
669
752
  def test_parse_auto_id(
670
- mock_get_id: MagicMock, converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
753
+ mock_get_id: MagicMock,
754
+ converter: TabularConverter,
755
+ tabular_data_no_units_no_substitutions: TabularData,
671
756
  ):
672
757
  # ref_table: None, ref_name: None, key_col_def: str, extra_info: None
673
758
  mock_get_id.side_effect = [101, 102]
@@ -681,13 +766,18 @@ def test_parse_auto_id(
681
766
  extra_info=None,
682
767
  )
683
768
  mock_get_id.assert_has_calls(
684
- [call(table="nodes", key={"id_number": 1}, name=None), call(table="nodes", key={"id_number": 2}, name=None)]
769
+ [
770
+ call(table="nodes", key={"id_number": 1}, name=None),
771
+ call(table="nodes", key={"id_number": 2}, name=None),
772
+ ]
685
773
  )
686
774
 
687
775
 
688
776
  @patch("power_grid_model_io.converters.tabular_converter.TabularConverter._get_id")
689
777
  def test_parse_auto_id__extra_info(
690
- mock_get_id: MagicMock, converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
778
+ mock_get_id: MagicMock,
779
+ converter: TabularConverter,
780
+ tabular_data_no_units_no_substitutions: TabularData,
691
781
  ):
692
782
  # ref_table: None, ref_name: None, key_col_def: str, extra_info: dict
693
783
  mock_get_id.side_effect = [101, 102]
@@ -702,7 +792,10 @@ def test_parse_auto_id__extra_info(
702
792
  extra_info=extra_info,
703
793
  )
704
794
  mock_get_id.assert_has_calls(
705
- [call(table="nodes", key={"id_number": 1}, name=None), call(table="nodes", key={"id_number": 2}, name=None)]
795
+ [
796
+ call(table="nodes", key={"id_number": 1}, name=None),
797
+ call(table="nodes", key={"id_number": 2}, name=None),
798
+ ]
706
799
  )
707
800
  assert extra_info[101] == {"id_reference": {"table": "nodes", "key": {"id_number": 1}}}
708
801
  assert extra_info[102] == {"id_reference": {"table": "nodes", "key": {"id_number": 2}}}
@@ -710,7 +803,9 @@ def test_parse_auto_id__extra_info(
710
803
 
711
804
  @patch("power_grid_model_io.converters.tabular_converter.TabularConverter._get_id")
712
805
  def test_parse_auto_id__reference_column(
713
- mock_get_id: MagicMock, converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
806
+ mock_get_id: MagicMock,
807
+ converter: TabularConverter,
808
+ tabular_data_no_units_no_substitutions: TabularData,
714
809
  ):
715
810
  # ref_table: str, ref_name: None, key_col_def: dict, extra_info: dict
716
811
  mock_get_id.side_effect = [101, 102]
@@ -725,14 +820,19 @@ def test_parse_auto_id__reference_column(
725
820
  extra_info=extra_info,
726
821
  )
727
822
  mock_get_id.assert_has_calls(
728
- [call(table="nodes", key={"id_number": 2}, name=None), call(table="nodes", key={"id_number": 1}, name=None)]
823
+ [
824
+ call(table="nodes", key={"id_number": 2}, name=None),
825
+ call(table="nodes", key={"id_number": 1}, name=None),
826
+ ]
729
827
  )
730
828
  assert len(extra_info) == 0
731
829
 
732
830
 
733
831
  @patch("power_grid_model_io.converters.tabular_converter.TabularConverter._get_id")
734
832
  def test_parse_auto_id__composite_key(
735
- mock_get_id: MagicMock, converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
833
+ mock_get_id: MagicMock,
834
+ converter: TabularConverter,
835
+ tabular_data_no_units_no_substitutions: TabularData,
736
836
  ):
737
837
  # ref_table: None, ref_name: None, key_col_def: list, extra_info: dict
738
838
  mock_get_id.side_effect = [101, 102]
@@ -758,7 +858,9 @@ def test_parse_auto_id__composite_key(
758
858
 
759
859
  @patch("power_grid_model_io.converters.tabular_converter.TabularConverter._get_id")
760
860
  def test_parse_auto_id__named_objects(
761
- mock_get_id: MagicMock, converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
861
+ mock_get_id: MagicMock,
862
+ converter: TabularConverter,
863
+ tabular_data_no_units_no_substitutions: TabularData,
762
864
  ):
763
865
  # ref_table: None, ref_name: str, key_col_def: str, extra_info: dict
764
866
  mock_get_id.side_effect = [101, 102]
@@ -778,13 +880,27 @@ def test_parse_auto_id__named_objects(
778
880
  call(table="nodes", key={"id_number": 2}, name="internal_node"),
779
881
  ]
780
882
  )
781
- assert extra_info[101] == {"id_reference": {"table": "nodes", "name": "internal_node", "key": {"id_number": 1}}}
782
- assert extra_info[102] == {"id_reference": {"table": "nodes", "name": "internal_node", "key": {"id_number": 2}}}
883
+ assert extra_info[101] == {
884
+ "id_reference": {
885
+ "table": "nodes",
886
+ "name": "internal_node",
887
+ "key": {"id_number": 1},
888
+ }
889
+ }
890
+ assert extra_info[102] == {
891
+ "id_reference": {
892
+ "table": "nodes",
893
+ "name": "internal_node",
894
+ "key": {"id_number": 2},
895
+ }
896
+ }
783
897
 
784
898
 
785
899
  @patch("power_grid_model_io.converters.tabular_converter.TabularConverter._get_id")
786
900
  def test_parse_auto_id__named_keys(
787
- mock_get_id: MagicMock, converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
901
+ mock_get_id: MagicMock,
902
+ converter: TabularConverter,
903
+ tabular_data_no_units_no_substitutions: TabularData,
788
904
  ):
789
905
  # name: str, key_col_def: Dict[str, str], extra_info: dict
790
906
  mock_get_id.side_effect = [101, 102]
@@ -825,7 +941,9 @@ def test_parse_auto_id__invalid_key_definition(
825
941
 
826
942
  @patch("power_grid_model_io.converters.tabular_converter.TabularConverter._get_id")
827
943
  def test_parse_auto_id__empty_col_data(
828
- mock_get_id: MagicMock, converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData
944
+ mock_get_id: MagicMock,
945
+ converter: TabularConverter,
946
+ tabular_data_no_units_no_substitutions: TabularData,
829
947
  ):
830
948
  converter._parse_auto_id(
831
949
  data=tabular_data_no_units_no_substitutions,
@@ -902,7 +1020,13 @@ def test_parse_pandas_function__invalid(mock_parse_col_def: MagicMock, converter
902
1020
 
903
1021
  # Act / Assert
904
1022
  with pytest.raises(AssertionError):
905
- converter._parse_pandas_function(data=MagicMock(), table="foo", fn_name="multiply", col_def=123, table_mask=None) # type: ignore
1023
+ converter._parse_pandas_function(
1024
+ data=MagicMock(),
1025
+ table="foo",
1026
+ fn_name="multiply",
1027
+ col_def=123, # type: ignore
1028
+ table_mask=None,
1029
+ ) # type: ignore
906
1030
 
907
1031
  # Act / Assert
908
1032
  with pytest.raises(ValueError, match="Pandas DataFrame has no function 'bar'"):
@@ -963,7 +1087,10 @@ def test_parse_function__no_data(
963
1087
  def test_parse_col_def_composite(converter: TabularConverter, tabular_data_no_units_no_substitutions: TabularData):
964
1088
  with pytest.raises(AssertionError):
965
1089
  converter._parse_col_def_composite(
966
- data=tabular_data_no_units_no_substitutions, table="nodes", col_def="wrong", table_mask=None # type: ignore
1090
+ data=tabular_data_no_units_no_substitutions,
1091
+ table="nodes",
1092
+ col_def="wrong", # type: ignore
1093
+ table_mask=None, # type: ignore
967
1094
  )
968
1095
 
969
1096
  df = converter._parse_col_def_composite(
@@ -1130,7 +1257,11 @@ def test_lookup_id(converter: TabularConverter):
1130
1257
  assert converter.lookup_id(pgm_id=1) == {"table": "node", "key": {"a": 1, "b": 3}}
1131
1258
  assert converter.lookup_id(pgm_id=2) == {"table": "node", "key": {"a": 1, "c": 2}}
1132
1259
  assert converter.lookup_id(pgm_id=3) == {"table": "foo", "key": {"a": 1, "b": 2}}
1133
- assert converter.lookup_id(pgm_id=4) == {"table": "node", "name": "bar", "key": {"a": 1, "b": 2}}
1260
+ assert converter.lookup_id(pgm_id=4) == {
1261
+ "table": "node",
1262
+ "name": "bar",
1263
+ "key": {"a": 1, "b": 2},
1264
+ }
1134
1265
 
1135
1266
 
1136
1267
  def test_lookup_ids(converter: TabularConverter):
@@ -1221,4 +1352,4 @@ def test_parse_table_filters(
1221
1352
 
1222
1353
  def test_parse_table_filters__ndarray_data(converter: TabularConverter):
1223
1354
  numpy_tabular_data = TabularData(numpy_table=np.ones((4, 3)))
1224
- assert converter._parse_table_filters(data=numpy_tabular_data, table="numpy_table", filtering_functions=[]) == None
1355
+ assert converter._parse_table_filters(data=numpy_tabular_data, table="numpy_table", filtering_functions=[]) is None
@@ -127,7 +127,7 @@ def test_extract__return_subdir_path(mock_tqdm: MagicMock, temp_dir: Path):
127
127
 
128
128
  def test_get_only_item_in_dir__no_items(temp_dir):
129
129
  # Act / Assert
130
- assert _get_only_item_in_dir(temp_dir) == None
130
+ assert _get_only_item_in_dir(temp_dir) is None
131
131
 
132
132
 
133
133
  def test_get_only_item_in_dir__one_file(temp_dir):
@@ -155,4 +155,4 @@ def test_get_only_item_in_dir__two_files(temp_dir):
155
155
  pass
156
156
 
157
157
  # Act / Assert
158
- assert _get_only_item_in_dir(temp_dir) == None
158
+ assert _get_only_item_in_dir(temp_dir) is None
@@ -1 +0,0 @@
1
- 1.3.2