power-grid-model-io 1.3.5__tar.gz → 1.3.6__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.5 → power_grid_model_io-1.3.6}/PKG-INFO +2 -1
  2. power_grid_model_io-1.3.6/PYPI_VERSION +1 -0
  3. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/pyproject.toml +34 -23
  4. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/converters/__init__.py +2 -0
  5. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/converters/base_converter.py +1 -0
  6. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/converters/pandapower_converter.py +3 -3
  7. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/converters/pgm_json_converter.py +1 -1
  8. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_stores/vision_excel_file_store.py +1 -0
  9. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_types/__init__.py +2 -0
  10. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/functions/__init__.py +12 -0
  11. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/mappings/tabular_mapping.py +1 -0
  12. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/mappings/value_mapping.py +1 -0
  13. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/auto_id.py +1 -0
  14. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/dict.py +1 -0
  15. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/excel_ambiguity_checker.py +3 -3
  16. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/modules.py +1 -0
  17. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io.egg-info/PKG-INFO +2 -1
  18. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io.egg-info/requires.txt +1 -0
  19. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/conftest.py +3 -3
  20. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/conftest.py +3 -3
  21. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/converters/test_tabular_converter.py +1 -1
  22. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/converters/test_vision_excel_converter.py +1 -1
  23. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_stores/test_excel_file_store.py +1 -1
  24. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/mappings/test_field_mapping.py +0 -1
  25. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_json.py +4 -5
  26. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/utils.py +15 -16
  27. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/conftest.py +4 -6
  28. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/converters/test_vision_excel_converter.py +2 -1
  29. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/utils.py +2 -2
  30. power_grid_model_io-1.3.5/PYPI_VERSION +0 -1
  31. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/LICENSE +0 -0
  32. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/MANIFEST.in +0 -0
  33. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/README.md +0 -0
  34. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/VERSION +0 -0
  35. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/setup.cfg +0 -0
  36. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/setup.py +0 -0
  37. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/__init__.py +0 -0
  38. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/__init__.py +0 -0
  39. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/examples/__init__.py +0 -0
  40. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/examples/multipliers.yaml +0 -0
  41. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/excel/__init__.py +0 -0
  42. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/excel/vision_en.yaml +0 -0
  43. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/excel/vision_en_9_7.yaml +0 -0
  44. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/excel/vision_en_9_8.yaml +0 -0
  45. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/config/excel/vision_nl.yaml +0 -0
  46. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/converters/tabular_converter.py +0 -0
  47. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/converters/vision_excel_converter.py +0 -0
  48. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_stores/__init__.py +0 -0
  49. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_stores/base_data_store.py +0 -0
  50. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_stores/csv_dir_store.py +0 -0
  51. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_stores/excel_file_store.py +0 -0
  52. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_stores/json_file_store.py +0 -0
  53. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_types/_data_types.py +0 -0
  54. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/data_types/tabular_data.py +0 -0
  55. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/functions/_functions.py +0 -0
  56. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/functions/filters.py +0 -0
  57. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/functions/phase_to_phase.py +0 -0
  58. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/mappings/__init__.py +0 -0
  59. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/mappings/field_mapping.py +0 -0
  60. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/mappings/multiplier_mapping.py +0 -0
  61. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/mappings/unit_mapping.py +0 -0
  62. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/py.typed +0 -0
  63. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/__init__.py +0 -0
  64. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/download.py +0 -0
  65. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/json.py +0 -0
  66. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/parsing.py +0 -0
  67. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/uuid_excel_cvtr.py +0 -0
  68. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io/utils/zip.py +0 -0
  69. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io.egg-info/SOURCES.txt +0 -0
  70. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io.egg-info/dependency_links.txt +0 -0
  71. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/src/power_grid_model_io.egg-info/top_level.txt +0 -0
  72. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/__init__.py +0 -0
  73. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/config/dummy_mapping.yaml +0 -0
  74. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/config/mapping.yaml +0 -0
  75. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pgm_asym_output_data.json +0 -0
  76. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pgm_asym_output_data.json.license +0 -0
  77. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pgm_input_data.json +0 -0
  78. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pgm_input_data.json.license +0 -0
  79. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pgm_output_data.json +0 -0
  80. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pgm_output_data.json.license +0 -0
  81. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pp_v2_net_3ph_output.json +0 -0
  82. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pp_v2_net_3ph_output.json.license +0 -0
  83. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pp_v2_net_output.json +0 -0
  84. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pp_v2_net_output.json.license +0 -0
  85. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/pandapower/pp_validation.py +0 -0
  86. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/excel_ambiguity_check_data.xlsx +0 -0
  87. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/excel_ambiguity_check_data.xlsx.license +0 -0
  88. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/pgm_input_data_en.json +0 -0
  89. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/pgm_input_data_en.json.license +0 -0
  90. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/pgm_input_data_nl.json +0 -0
  91. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/pgm_input_data_nl.json.license +0 -0
  92. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_9_5_en.yaml +0 -0
  93. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_9_5_nl.yaml +0 -0
  94. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_en.xlsx +0 -0
  95. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_en.xlsx.license +0 -0
  96. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_en_9_7.xlsx +0 -0
  97. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_en_9_7.xlsx.license +0 -0
  98. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_nl.xlsx +0 -0
  99. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_nl.xlsx.license +0 -0
  100. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_validation.vnf +0 -0
  101. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/vision/vision_validation.vnf.license +0 -0
  102. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/zip/foo-bar.zip +0 -0
  103. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/zip/foo-bar.zip.license +0 -0
  104. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/zip/foo.zip +0 -0
  105. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/data/zip/foo.zip.license +0 -0
  106. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/test_utils.py +0 -0
  107. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/__init__.py +0 -0
  108. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/converters/__init__.py +0 -0
  109. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/converters/test_base_converter.py +0 -0
  110. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/converters/test_pandapower_converter_input.py +0 -0
  111. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/converters/test_pandapower_converter_output.py +0 -0
  112. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/converters/test_pgm_json_converter.py +0 -0
  113. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_stores/__init__.py +0 -0
  114. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_stores/test_base_data_store.py +0 -0
  115. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_stores/test_csv_dir_store.py +0 -0
  116. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_stores/test_json_file_store.py +0 -0
  117. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_stores/test_vision_excel_file_store.py +0 -0
  118. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_types/__init__.py +0 -0
  119. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_types/test_data_types.py +0 -0
  120. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/data_types/test_tabular_data.py +0 -0
  121. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/functions/__init__.py +0 -0
  122. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/functions/test_filters.py +0 -0
  123. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/functions/test_functions.py +0 -0
  124. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/functions/test_phase_to_phase.py +0 -0
  125. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/mappings/__init__.py +0 -0
  126. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/mappings/test_multiplier_mapping.py +0 -0
  127. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/mappings/test_tabular_mapping.py +0 -0
  128. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/mappings/test_unit_mapping.py +0 -0
  129. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/mappings/test_value_mapping.py +0 -0
  130. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/__init__.py +0 -0
  131. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_auto_id.py +0 -0
  132. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_dict.py +0 -0
  133. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_download.py +0 -0
  134. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_modules.py +0 -0
  135. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_parsing.py +0 -0
  136. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_uuid_excel_cvtr.py +0 -0
  137. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/unit/utils/test_zip.py +0 -0
  138. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/__init__.py +0 -0
  139. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/converters/__init__.py +0 -0
  140. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/converters/test_pandapower_converter_input.py +0 -0
  141. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/converters/test_pandapower_converter_output.py +3 -3
  142. {power_grid_model_io-1.3.5 → power_grid_model_io-1.3.6}/tests/validation/test_test_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.5
3
+ Version: 1.3.6
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
@@ -33,6 +33,7 @@ Requires-Dist: pre-commit; extra == "dev"
33
33
  Requires-Dist: pylint; extra == "dev"
34
34
  Requires-Dist: pytest; extra == "dev"
35
35
  Requires-Dist: pytest-cov; extra == "dev"
36
+ Requires-Dist: ruff; extra == "dev"
36
37
  Requires-Dist: pydantic>2; extra == "dev"
37
38
  Requires-Dist: pandapower>2.11.1; extra == "dev"
38
39
  Provides-Extra: examples
@@ -0,0 +1 @@
1
+ 1.3.6
@@ -44,6 +44,7 @@ dev = [
44
44
  "pylint",
45
45
  "pytest",
46
46
  "pytest-cov",
47
+ "ruff",
47
48
  "pydantic>2", # Used in unit tests
48
49
  "pandapower>2.11.1",
49
50
  ]
@@ -89,33 +90,43 @@ addopts = [
89
90
  ]
90
91
  xfail_strict = true
91
92
 
92
- [tool.black]
93
+ [tool.ruff]
94
+ # Same as Black.
93
95
  line-length = 120
94
- target-version = ["py311", "py312", "py313"]
96
+ indent-width = 4
97
+ show-fixes = true
95
98
 
96
- [tool.isort]
97
- profile = "black"
98
- line_length = 120
99
+ # Assume Python 3.11
100
+ target-version = "py311"
99
101
 
100
- [tool.pylint]
101
- max-line-length = 120
102
- ignore-paths = [
103
- "docs/",
104
- "examples/",
105
- "tests/",
106
- "setup.py",
107
- ]
108
- disable = [
109
- "fixme", # allow todos
110
- ]
111
- good-names=[
112
- "ex", # exception
113
- "i", # iterator or current
114
- "p", # active power
115
- "q", # reactive power
116
- "s", # power (p + q)
117
- "v", # voltage
102
+ [tool.ruff.lint]
103
+ select = [
104
+ # pycodestyle
105
+ "E",
106
+ # Pyflakes
107
+ "F",
108
+ # isort
109
+ "I",
110
+ "SIM",
111
+ "YTT",
112
+ "BLE",
113
+ "PERF",
114
+ "Q",
115
+ "ICN",
116
+ "ISC",
117
+ "G",
118
+ "LOG",
119
+ "EXE",
120
+ "FA",
121
+ "FURB",
122
+ "FLY",
123
+ "SLOT",
118
124
  ]
125
+ ignore = ["SIM108", "SIM118", "SIM110", "SIM211"]
126
+
127
+ [tool.ruff.lint.isort]
128
+ # Imports that are imported using keyword "as" and are from the same source - are combined.
129
+ combine-as-imports = true
119
130
 
120
131
  [tool.mypy]
121
132
  follow_imports = "silent"
@@ -8,3 +8,5 @@ Converters
8
8
  from power_grid_model_io.converters.pandapower_converter import PandaPowerConverter
9
9
  from power_grid_model_io.converters.pgm_json_converter import PgmJsonConverter
10
10
  from power_grid_model_io.converters.vision_excel_converter import VisionExcelConverter
11
+
12
+ __all__ = ["PandaPowerConverter", "PgmJsonConverter", "VisionExcelConverter"]
@@ -4,6 +4,7 @@
4
4
  """
5
5
  Abstract converter class
6
6
  """
7
+
7
8
  import logging
8
9
  from abc import ABC, abstractmethod
9
10
  from typing import Generic, Optional, Tuple, TypeVar
@@ -461,7 +461,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
461
461
  }
462
462
  if not all(checks.values()):
463
463
  failed_checks = ", ".join([key for key, value in checks.items() if not value])
464
- logger.warning(f"Zero sequence parameters given in external grid shall be ignored:{failed_checks}")
464
+ logger.warning("Zero sequence parameters given in external grid shall be ignored: %s", failed_checks)
465
465
 
466
466
  pgm_sources = initialize_array(data_type="input", component_type="source", shape=len(pp_ext_grid))
467
467
  pgm_sources["id"] = self._generate_ids("ext_grid", pp_ext_grid.index)
@@ -753,7 +753,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
753
753
  }
754
754
  if not all(checks.values()):
755
755
  failed_checks = ", ".join([key for key, value in checks.items() if not value])
756
- logger.warning(f"Zero sequence parameters given in trafo shall be ignored:{failed_checks}")
756
+ logger.warning("Zero sequence parameters given in trafo shall be ignored: %s", failed_checks)
757
757
 
758
758
  # Do not use taps when mandatory tap data is not available
759
759
  no_taps = np.equal(tap_side, None) | np.isnan(tap_pos) | np.isnan(tap_nom) | np.isnan(tap_size)
@@ -862,7 +862,7 @@ class PandaPowerConverter(BaseConverter[PandaPowerData]):
862
862
  }
863
863
  if not all(checks.values()):
864
864
  failed_checks = ", ".join([key for key, value in checks.items() if not value])
865
- logger.warning(f"Zero sequence parameters given in trafo3w are ignored: {failed_checks}")
865
+ logger.warning("Zero sequence parameters given in trafo3w are ignored: %s", failed_checks)
866
866
 
867
867
  # Do not use taps when mandatory tap data is not available
868
868
  no_taps = np.equal(tap_side, None) | np.isnan(tap_pos) | np.isnan(tap_nom) | np.isnan(tap_size)
@@ -238,7 +238,7 @@ class PgmJsonConverter(BaseConverter[StructuredData]):
238
238
  """
239
239
 
240
240
  # This should be a single data set
241
- for component, array in data.items():
241
+ for array in data.values():
242
242
  if not isinstance(array, np.ndarray) or array.ndim != 1:
243
243
  raise ValueError("Invalid data format")
244
244
 
@@ -4,6 +4,7 @@
4
4
  """
5
5
  Vision Excel file store
6
6
  """
7
+
7
8
  from pathlib import Path
8
9
  from typing import Optional
9
10
 
@@ -7,3 +7,5 @@ Common data types used in the Power Grid Model project
7
7
 
8
8
  from power_grid_model_io.data_types._data_types import ExtraInfo, ExtraInfoLookup, StructuredData
9
9
  from power_grid_model_io.data_types.tabular_data import LazyDataFrame, TabularData
10
+
11
+ __all__ = ["ExtraInfo", "ExtraInfoLookup", "StructuredData", "LazyDataFrame", "TabularData"]
@@ -17,3 +17,15 @@ from power_grid_model_io.functions._functions import (
17
17
  value_or_default,
18
18
  value_or_zero,
19
19
  )
20
+
21
+ __all__ = [
22
+ "both_zeros_to_nan",
23
+ "complex_inverse_imaginary_part",
24
+ "complex_inverse_real_part",
25
+ "degrees_to_clock",
26
+ "get_winding",
27
+ "has_value",
28
+ "is_greater_than",
29
+ "value_or_default",
30
+ "value_or_zero",
31
+ ]
@@ -4,6 +4,7 @@
4
4
  """
5
5
  Tabular data mapping helper class
6
6
  """
7
+
7
8
  from typing import Dict, Generator, List, Tuple, Union
8
9
 
9
10
  import structlog
@@ -4,6 +4,7 @@
4
4
  """
5
5
  Value substitution helper class
6
6
  """
7
+
7
8
  from typing import Dict, Optional, Union
8
9
 
9
10
  import structlog
@@ -4,6 +4,7 @@
4
4
  """
5
5
  Automatic ID generator class
6
6
  """
7
+
7
8
  import collections
8
9
  from collections.abc import Hashable
9
10
  from typing import Any, Dict, List, Optional, Union
@@ -4,6 +4,7 @@
4
4
  """
5
5
  General dictionary utilities
6
6
  """
7
+
7
8
  from copy import deepcopy
8
9
  from typing import Dict
9
10
 
@@ -19,6 +19,7 @@ Requirements:
19
19
  - xml.etree.ElementTree for parsing XML structures within the Excel file.
20
20
  - zipfile to handle the Excel file as a ZIP archive for parsing.
21
21
  """
22
+
22
23
  import os
23
24
  import xml.etree.ElementTree as ET
24
25
  import zipfile
@@ -80,11 +81,10 @@ class ExcelAmbiguityChecker:
80
81
  list: A list of shared strings used in the Excel file.
81
82
  """
82
83
  shared_strings_path = SHARED_STR_PATH
83
- shared_strings = []
84
+ shared_strings: List[Optional[str]] = []
84
85
  with zip_file.open(shared_strings_path) as f:
85
86
  tree = ET.parse(f)
86
- for si in tree.findall(FIND_T, namespaces=XML_NAME_SPACE):
87
- shared_strings.append(si.text)
87
+ shared_strings.extend(si.text for si in tree.findall(FIND_T, namespaces=XML_NAME_SPACE))
88
88
  return shared_strings
89
89
 
90
90
  def _get_column_names_from_row(self, row, shared_strings) -> List[Optional[str]]:
@@ -4,6 +4,7 @@
4
4
  """
5
5
  Module utilities, expecially useful for loading optional dependencies
6
6
  """
7
+
7
8
  from importlib import import_module
8
9
  from typing import Callable
9
10
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: power-grid-model-io
3
- Version: 1.3.5
3
+ Version: 1.3.6
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
@@ -33,6 +33,7 @@ Requires-Dist: pre-commit; extra == "dev"
33
33
  Requires-Dist: pylint; extra == "dev"
34
34
  Requires-Dist: pytest; extra == "dev"
35
35
  Requires-Dist: pytest-cov; extra == "dev"
36
+ Requires-Dist: ruff; extra == "dev"
36
37
  Requires-Dist: pydantic>2; extra == "dev"
37
38
  Requires-Dist: pandapower>2.11.1; extra == "dev"
38
39
  Provides-Extra: examples
@@ -11,6 +11,7 @@ pre-commit
11
11
  pylint
12
12
  pytest
13
13
  pytest-cov
14
+ ruff
14
15
  pydantic>2
15
16
  pandapower>2.11.1
16
17
 
@@ -2,9 +2,9 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
 
5
+ from contextlib import suppress
6
+
5
7
  import pandas as pd
6
8
 
7
- try:
9
+ with suppress(pd.errors.OptionError):
8
10
  pd.set_option("future.no_silent_downcasting", True)
9
- except pd.errors.OptionError:
10
- pass
@@ -2,10 +2,10 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
 
5
+ from contextlib import suppress
6
+
5
7
  import pandas as pd
6
8
 
7
- try:
9
+ with suppress(pd.errors.OptionError):
8
10
  # TODO(mgovers) We're ready for Pandas 3.x, but pandapower is not. Move to parent conftest when it is.
9
11
  pd.set_option("mode.copy_on_write", True)
10
- except pd.errors.OptionError:
11
- pass
@@ -233,7 +233,7 @@ def test_convert_col_def_to_attribute(
233
233
  ):
234
234
  with pytest.raises(
235
235
  KeyError,
236
- match=r"Could not find attribute 'incorrect_attribute' for 'nodes'. " r"\(choose from: id, u_rated\)",
236
+ match=r"Could not find attribute 'incorrect_attribute' for 'nodes'. \(choose from: id, u_rated\)",
237
237
  ):
238
238
  converter._convert_col_def_to_attribute(
239
239
  data=tabular_data_no_units_no_substitutions,
@@ -146,4 +146,4 @@ def test_ambiguity_in_vision_excel():
146
146
  ambiguious_test_file = Path(__file__).parents[2] / "data" / "vision" / "excel_ambiguity_check_data.xlsx"
147
147
  excel_file_checker = ExcelAmbiguityChecker(file_path=ambiguious_test_file.as_posix())
148
148
  res, _ = excel_file_checker.check_ambiguity()
149
- assert res == True
149
+ assert res
@@ -4,7 +4,7 @@
4
4
 
5
5
  from pathlib import Path
6
6
  from typing import Dict
7
- from unittest.mock import MagicMock, call, mock_open, patch
7
+ from unittest.mock import MagicMock, call, patch
8
8
 
9
9
  import numpy as np
10
10
  import pandas as pd
@@ -3,7 +3,6 @@
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
  import logging
5
5
 
6
- import pytest
7
6
  import structlog
8
7
 
9
8
  from power_grid_model_io.mappings.field_mapping import FieldMapping
@@ -20,9 +20,8 @@ def test_compact_json_dump():
20
20
  string_stream = io.StringIO()
21
21
  compact_json_dump(data, string_stream, indent=2, max_level=0)
22
22
  assert (
23
- string_stream.getvalue()
24
- == """{"node": [{"id": 1, "x": 2}, {"id": 3, "x": 4}],"""
25
- + """ "line": [{"id": 5, "x": 6}, {"id": 7, "x": {"y": 8.1, "z": 8.2}}]}"""
23
+ string_stream.getvalue() == """{"node": [{"id": 1, "x": 2}, {"id": 3, "x": 4}],"""
24
+ """ "line": [{"id": 5, "x": 6}, {"id": 7, "x": {"y": 8.1, "z": 8.2}}]}"""
26
25
  )
27
26
 
28
27
  string_stream = io.StringIO()
@@ -165,7 +164,7 @@ def test_json_encoder(numpy_type: type, native_type: type):
165
164
  value = encoder.default(value)
166
165
 
167
166
  # Assert
168
- assert type(value) == native_type
167
+ assert type(value) is native_type
169
168
  assert value == 123
170
169
 
171
170
 
@@ -178,7 +177,7 @@ def test_json_encoder__np_array():
178
177
  value = encoder.default(value)
179
178
 
180
179
  # Assert
181
- assert type(value) == list
180
+ assert type(value) is list
182
181
  assert value == [1, 2, 3]
183
182
 
184
183
 
@@ -93,21 +93,20 @@ class MockFn:
93
93
  obj = copy(left)
94
94
  else:
95
95
  obj = MockFn(fn, left)
96
- if MockFn._is_operator(right):
97
- if (
98
- obj.fn == "+"
99
- and right.fn == "+"
100
- or obj.fn == "-"
101
- and right.fn == "+"
102
- or obj.fn == "*"
103
- and right.fn == "*"
104
- or obj.fn == "/"
105
- and right.fn == "*"
106
- or obj.fn == "&"
107
- and right.fn == "&"
108
- ):
109
- obj.args += right.args
110
- return obj
96
+ if MockFn._is_operator(right) and (
97
+ obj.fn == "+"
98
+ and right.fn == "+"
99
+ or obj.fn == "-"
100
+ and right.fn == "+"
101
+ or obj.fn == "*"
102
+ and right.fn == "*"
103
+ or obj.fn == "/"
104
+ and right.fn == "*"
105
+ or obj.fn == "&"
106
+ and right.fn == "&"
107
+ ):
108
+ obj.args += right.args
109
+ return obj
111
110
  obj.args += [right]
112
111
  return obj
113
112
 
@@ -176,7 +175,7 @@ class MockFn:
176
175
  return False
177
176
 
178
177
  def eq(left, right) -> bool:
179
- if type(left) != type(right):
178
+ if type(left) is not type(right):
180
179
  return False
181
180
  if isinstance(left, pd.DataFrame) and left.columns != right.columns:
182
181
  return False
@@ -2,15 +2,13 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MPL-2.0
4
4
 
5
+ from contextlib import suppress
6
+
5
7
  import pandas as pd
6
8
 
7
- try:
9
+ with suppress(pd.errors.OptionError):
8
10
  pd.set_option("future.no_silent_downcasting", True)
9
- except pd.errors.OptionError:
10
- pass
11
11
 
12
- try:
12
+ with suppress(pd.errors.OptionError):
13
13
  # TODO(mgovers) We're ready for Pandas 3.x, but pandapower is not. Move to parent conftest when it is.
14
14
  pd.set_option("mode.copy_on_write", False)
15
- except pd.errors.OptionError:
16
- pass
@@ -95,7 +95,8 @@ def test_input_data(input_data: Tuple[SingleDataset, SingleDataset]):
95
95
 
96
96
  def test_input_data_custom_yaml():
97
97
  """
98
- Unit test to preload the expected and actual data, using a different mapping file other than the one in the default location
98
+ Unit test to preload the expected and actual data, using a different
99
+ mapping file other than the one in the default location
99
100
  """
100
101
  for language in LANGUAGES:
101
102
  # Arrange
@@ -176,7 +176,7 @@ def load_json_single_dataset(file_path: Path, data_type: str) -> Tuple[SingleDat
176
176
  """
177
177
  try:
178
178
  dataset = json_deserialize_from_file(file_path=file_path)
179
- except PowerGridSerializationError as error:
179
+ except PowerGridSerializationError:
180
180
  try:
181
181
  with warnings.catch_warnings():
182
182
  warnings.simplefilter("ignore")
@@ -223,7 +223,7 @@ def compare_extra_info(actual: ExtraInfo, expected: ExtraInfo, component: str, o
223
223
  # If the values don't match, that's an error
224
224
  elif act[key] != value:
225
225
  errors.append(
226
- f"Expected extra info '{key}' for {component} #{obj_id} to be {value}, " f"but it is {act[key]}."
226
+ f"Expected extra info '{key}' for {component} #{obj_id} to be {value}, but it is {act[key]}."
227
227
  )
228
228
 
229
229
  return errors
@@ -1 +0,0 @@
1
- 1.3.5
@@ -15,12 +15,12 @@ from power_grid_model.validation import assert_valid_input_data
15
15
  from power_grid_model_io.converters import PandaPowerConverter
16
16
  from power_grid_model_io.converters.pandapower_converter import PandaPowerData
17
17
 
18
- pp = pytest.importorskip("pandapower", reason="pandapower is not installed")
19
- # we add this to enable python 3.13 testing even though pandapower 3.0 is not yet compatible with it
20
-
21
18
  from ...data.pandapower.pp_validation import pp_net, pp_net_3ph
22
19
  from ..utils import component_attributes_df, load_json_single_dataset
23
20
 
21
+ pp = pytest.importorskip("pandapower", reason="pandapower is not installed")
22
+ # we add this to enable python 3.13 testing even though pandapower 3.0 is not yet compatible with it
23
+
24
24
  PGM_PP_TEST_DATA = Path(__file__).parents[2] / "data" / "pandapower"
25
25
  PGM_OUTPUT_FILE = PGM_PP_TEST_DATA / "pgm_output_data.json"
26
26
  PGM_ASYM_OUTPUT_FILE = PGM_PP_TEST_DATA / "pgm_asym_output_data.json"